Logstash日志解析

时间:2019-07-23 13:00:44

标签: elasticsearch logstash grok

我收到以下日志消息:

Jul 23 09:24:16 mmr mmr-core[5147]:  Aweg3AOMTs_1563866656876839.mt GetProvider_v4

我将其运送到elasticsearch。

我想在logstash过滤器中对其进行解析,并从Aweg3AOMTs_1563866656876839.mt中创建id字段,除了我不想包含字母或其他字符,并且在id中仅包含数字!

到目前为止,我已经完成了:

%{SYSLOGTIMESTAMP:logtimestamp} %{HOSTNAME:hostname} %{DATA:type} %{USERNAME:id} %{GREEDYDATA:rest}

  "logtimestamp": "Jul 23 09:24:16",
  "hostname": "mmr",
  "id": "Aweg3AOMTs_1563866656876839.mt",
  "type": "mmr-core[5147]:"

如何跳过id字段中的字母和字符?

谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

据我了解,您只需要1563866656876839字段中的id吗?您可以将Aweg3AOMTs_1563866656876839.mt字符串分成三个字段:id_prefixidid_suffix,然后remove不需要的部分。

尝试Grok Debugger的方式:

%{SYSLOGTIMESTAMP:logtimestamp}\s%{HOSTNAME:hostname}\s%{DATA:type}\s%{USERNAME:id_prefix}_%{NUMBER:id}\.%{GREEDYDATA:id_suffix}\s%{GREEDYDATA:rest}

Logstash配置:

# logstash.conf
…
filter {
    grok {
        match => {
            "message" => "%{SYSLOGTIMESTAMP:logtimestamp}\s%{HOSTNAME:hostname}\s%{DATA:type}\s%{USERNAME:id_prefix}_%{NUMBER:id}\.%{GREEDYDATA:id_suffix}\s%{GREEDYDATA:rest}"
        }
    }
    mutate {
        remove_field => ["id_prefix", "id_suffix"]
    }
}
…