如何在grok中匹配spark log pattern

时间:2016-10-20 00:14:47

标签: logstash logstash-grok

我实际上正在解析一些日志数据,并试图为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}"

这对我不起作用。有人能帮助我吗?

非常感谢!

1 个答案:

答案 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"
    ]
  ]
}