如何在 grok 中匹配 spark 日志模式

How do I match spark log pattern in grok

我实际上正在解析一些日志数据并尝试为 spark 日志实现一个 grok 解析器。

实际上,这是 spark 日志的一个输出:

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}"

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

非常感谢!

你快到了。您遇到的唯一问题是 grok 模式末尾的双引号,如果删除它,您会没事的。此外,除非您想捕获这些空格,否则您不需要 %{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"
    ]
  ]
}