在Logstash中过滤我的自定义日志

时间:2017-08-29 09:44:46

标签: elasticsearch logstash kibana filebeat

我是ELK堆栈的新手,我想使用ELK堆栈将我的日志推送到弹性,以便我可以使用Kibana。以下是我的自定义日志的格式:

Date Time INFO - searchinfo#username#searchQuery#latitude#longitude#client_ip#responseTime

以下是遵循格式的日志示例。

2017-07-04 11:16:10 INFO  - searchinfo#null#gate#0.0#0.0#180.179.209.54#598

现在我正在使用filebeat将我的.log文件推送到logstash,而logstash会将这些数据推送到弹性状态。

我需要帮助,为filter编写logstash配置文件,只需使用#进行拆分,然后将数据放入相应的字段中进入弹性索引。

我该怎么做?

2 个答案:

答案 0 :(得分:1)

您需要使用grok filter来解析日志。

你可以试试这个:

filter {
  grok {
    match => { "message" => "\A%{TIMESTAMP_ISO8601:timestamp}%{SPACE}%{WORD:var0}%{SPACE}%{NOTSPACE}%{SPACE}(?<var1>[^#]*)#(?<var2>[^#]*)#(?<var3>[^#]*)#(?<var4>[^#]*)#(?<var5>[^#]*)#(?<var6>[^#]*)#(?<var7>[^#]*)" }
  }
}

这将解析您的日志并将名为var0,var1等的字段添加到已解析的文档中。您可以根据需要重命名此变量。

答案 1 :(得分:1)

尝试使用grok plugin将日志解析为结构化数据:

filter {
  grok {
    match => { "message" => "\A%{TIMESTAMP_ISO8601:timestamp}%{SPACE}%{WORD:var0}%{SPACE}%{NOTSPACE}%{SPACE}(?<searchinfo>[^#]*)#(?<username>[^#]*)#(?<searchQuery>[^#]*)#(?<latitude>[^#]*)#(?<longitude>[^#]*)#(?<client_ip>[^#]*)#(?<responseTime>[^#]*)" }
  }
}

您可以调试它online

enter image description here