使用java grok模式从syslog消息中提取详细信息
我正在做一个Java项目来解析日志,我正在使用JavaGrok库进行模式识别。我给出的模式如下:使用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-
%{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"
)