我实际上正在解析一些日志数据,并试图为spark日志实现一个grok解析器。
实际上,这是火花日志的一个输出:
14/04/14 18:51:52 INFO Client: Command for the ApplicationMaster: $JAVA_HOME/bin/java -server -Xmx640m -Djava.io.tmpdir=$PWD/tmp org.apache.spark.deploy.yarn.ApplicationMaster --class SimpleApp --jar ./spark-example-1.0.0.jar --args 'yarn-standalone' --worker-memory 1024 --worker-cores 1 --num-workers 3 1> <LOG_DIR>/stdout 2> <LOG_DIR>/stderr
这是我之前尝试过的grok过滤器:
(?<logtime>\d{2}/\d{2}/\d{2} \d{2}:\d{2}:\d{2})%{SPACE}%{LOGLEVEL:level}%{SPACE}%{WORD:srcclass}:%{SPACE}%{GREEDYDATA:data}"
这对我不起作用。有人能帮助我吗?
非常感谢!
答案 0 :(得分:1)
你快到了。你唯一的问题是你的格鲁克模式结束时的双引号,如果你删除它你会没事的。除非您想捕获这些空格,否则您不需要%{SPACE}
模式。
这对我有用:
(?<logtime>\d{2}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}) %{LOGLEVEL:level} %{WORD:srcclass}: %{GREEDYDATA:data}
它会产生这个
{
"logtime": [
[
"14/04/14 18:51:52"
]
],
"level": [
[
"INFO"
]
],
"srcclass": [
[
"Client"
]
],
"data": [
[
"Command for the ApplicationMaster: $JAVA_HOME/bin/java -server -Xmx640m -Djava.io.tmpdir=$PWD/tmp org.apache.spark.deploy.yarn.ApplicationMaster --class SimpleApp --jar ./spark-example-1.0.0.jar --args 'yarn-standalone' --worker-memory 1024 --worker-cores 1 --num-workers 3 1> <LOG_DIR>/stdout 2> <LOG_DIR>/stderr"
]
]
}