首页 > 解决方案 > 从filebeat和logstash中的消息中获取多个字段

问题描述

我正在从我的 Django 应用程序将日志写入日志文件,然后将这些日志发送到 elasticsearch。因为我也想拆分字段,所以我在filebeat和elasticsearch之间使用logstash。

这是示例日志字段:

2019-03-19 13:39:06 logfile INFO save_data {'field1': None, 'time': '13:39:06', 'mobile': '9876543210', 'list_item': "[{'item1' : 10, 'item2': 'path/to/file'}]", 'response': '{some_complicated_json}}', 'field2': '一些数据', 'date': '19-03-2019', 'field3': '其他一些数据'}

我试图编写一个 GROK 匹配模式,但所有字段都进入message字段:

%{TIMESTAMP_ISO8601:temp_date}%{SPACE} %{WORD:logfile} %{LOGLEVEL:level} %{WORD:save_data} %{GREEDYDATA:message}  

如何编写可以分解以上日志条目的 GROK 匹配模式。

标签: elasticsearchlogstashlogstash-grokfilebeat

解决方案


我不知道您如何使用 Grok 做到这一点,但我们这样做的方式是使用弹性摄取节点管道中的json 处理器。像这样的东西:

{
    "my-log-pipeline": {
        "description": "My log pipeline",
        "processors": [{
            "json": {
                "field": "message",
                "target_field": "messageFields"
            }
        }]
    }
}

然后你只需要告诉你的源(filebeat/logstash)在摄取时使用这个管道。


推荐阅读