【问题标题】:Extract details from syslog message with java grok patterns使用 java grok 模式从 syslog 消息中提取详细信息
【发布时间】:2015-09-21 18:46:43
【问题描述】:

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

%{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_message 中提取详细信息,以获取设施和严重性等信息。如何改进 grok 模式以获取这些详细信息?

【问题讨论】:

    标签: java syslog grok


    【解决方案1】:

    我不是 Java Grok 专家。您可以使用 www-data 作为您的设施,并使用错误作为您的严重性。

    更改您的模式以获取此信息。

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

    问候, 伊沃

    【讨论】:

    • 不清楚,但我尝试了我理解的方式。还是不行
    【解决方案2】:

    据我所知,您无法从该消息中获得严重性和便利性,因为它不存在。假设这是由 syslog 守护进程编写的,并且假设 syslog 守护进程是 rsyslog,您可以通过更改 template 并选择您想要的 properties 来更改记录方式。

    例如,您可以使用这样的模板在文件中每行编写一个 JSON(基本上是从 this rsyslog->Elasticsearch blog post 复制粘贴):

    template(name="jsonPerLine"
      type="list") {
        constant(value="{")
          constant(value="\"@timestamp\":\"")     property(name="timereported" dateFormat="rfc3339")
          constant(value="\",\"host\":\"")        property(name="hostname")
          constant(value="\",\"severity\":\"")    property(name="syslogseverity-text")
          constant(value="\",\"facility\":\"")    property(name="syslogfacility-text")
          constant(value="\",\"tag\":\"")   property(name="syslogtag" format="json")
          constant(value="\",\"message\":\"")    property(name="msg" format="json")
        constant(value="\"}\n")
    }
    

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

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

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

    如果您从上述语法中得到错误,则可能是您的发行版具有非常非常旧的 rsyslog 版本。如果是这样,您可以从official repositories 获取包。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多