【问题标题】:How can I parse info with Logstash?如何使用 Logstash 解析信息?
【发布时间】:2021-05-17 22:06:10
【问题描述】:

我有一个意见:

May 16 12:45:47 host-dev1 kernel: [  162.648366] wireguard: wg0: Sending keepalive packet to peer 2 (171.12.198.123:51079)

我想将信息解析为:TIMESTAMP "Sending keepalive packet to peer 2" IP:PORT

对于中间的句子,我想解析 wg0: 之后的任何内容,直到端口的第一个括号。例如,这句话可以更改为“向对等方 10 发送握手启动”。

我已经完成了

filter {
    grok {
        match => { "message" => "%{SYSLOGBASE:timestap} %{GREEDYDATA:action} %{IP:peerip}:%{NUMBER:port}" }
    }
}

我需要将 GREEDYDATA 更​​改为专门解析上述边界的内容

【问题讨论】:

    标签: parsing logstash logstash-grok


    【解决方案1】:

    试试这个:

    %{SYSLOGBASE:timestamp} \[ ?%{NUMBER:TIMESTAMP} ?\]( %{WORD}:)* %{GREEDYDATA:action} \(%{IP:peerip}:%{NUMBER:port}
    

    这是一个细分:

    %{SYSLOGBASE:timestamp}       - the syslog prefix
    \[ ?%{NUMBER:TIMESTAMP} ?\]   - the application timestamp
    ( %{WORD}:)*                  - any words followed by a colon, like
                                    'wg0:', zero or more times
    %{GREEDYDATA:action}          - any characters ('DATA' would also work)
    \(%{IP:peerip}:%{NUMBER:port} - a literal '(' followed by IP and port
    

    使GREEDYDATA / DATA 在这里工作的重要一点是正确定义边界(%{WORD}: \()。

    您可能需要根据其他日志消息的外观来改变边界定义(具体来说,您是否可以在边界处使用冒号和括号)。

    使用命名的捕获组可能会有所帮助,具体取决于现有的 grok 模式是否涵盖您的其他消息格式,例如 : (?<notColons>[^:]*) \( 指定“冒号,然后是空格,然后是任意数量的非冒号字符,然后一个空格,然后是一个左括号”。

    【讨论】:

      猜你喜欢
      • 2021-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-29
      • 1970-01-01
      相关资源
      最近更新 更多