使用java grok模式从syslog消息中提取详细信息

使用java grok模式从syslog消息中提取详细信息,java,syslog,grok,Java,Syslog,Grok,我正在做一个Java项目来解析日志,我正在使用JavaGrok库进行模式识别。我给出的模式如下: %{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\\[%{POSINT:syslog_pid}\\])?: %{GREEDYDATA:syslog_message} 当我试着分析这行代码时 Dec 23 14:30:01 louis CRON[619]: (www-

我正在做一个Java项目来解析日志,我正在使用JavaGrok库进行模式识别。我给出的模式如下:

%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\\[%{POSINT:syslog_pid}\\])?: %{GREEDYDATA:syslog_message}
当我试着分析这行代码时

Dec 23 14:30:01 louis CRON[619]: (www-data) CMD (php /usr/share/cacti/site/poller.php >/dev/null 2>/var/log/cacti/poller-error.log)
它给出以下输出:

syslog_timestamp=Dec 23 14:30:01
syslog_hostname=louis
syslog_program=CRON
syslog_pid=619
syslog_message=(www-data) CMD (php /usr/share/cacti/site/poller.php >/dev/null 2>/var/log/cacti/poller-error.log)

我想进一步从syslog_消息中提取详细信息,以获得设施和严重性之类的信息。如何改进grok模式以获得这些细节?

我不是Java grok的专家。您可以使用www数据作为工具,使用错误作为严重性

更改模式以获取此信息

syslog_facility=www数据 系统日志严重性=错误

问候,,
依我看,你无法从那条信息中获得严重性和便利性,因为它不在那里。假设这是由syslog守护进程编写的,并且假设syslog守护进程是rsyslog,则可以通过更改并选择所需的来更改写入方式

例如,您可以在文件中每行写入一个JSON,模板如下所示,基本上是从以下位置粘贴的副本:

这样,在您的应用程序中,您可以解析这个JSON并获取所有这些字段,这比使用grok所做的正则表达式要便宜得多

您将使用此模板稍后在配置中写入文件,例如:

action(
  type="omfile"
  file="/var/log/json_messages"
  template="jsonPerLine"
)

如果您从上面的语法中得到错误,可能是您的发行版有一个非常旧的rsyslog版本。如果是这样,您可以从中获取软件包。

不清楚,但我尝试了我理解它的方式。但还是不行
action(
  type="omfile"
  file="/var/log/json_messages"
  template="jsonPerLine"
)