【问题标题】:Filter for my Custom Logs in Logstash在 Logstash 中过滤我的自定义日志
【发布时间】:2017-08-29 09:44:46
【问题描述】:

我是 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 会将这些数据推送到弹性中。

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

我该怎么做?

【问题讨论】:

    标签: elasticsearch logstash kibana filebeat


    【解决方案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:

    【讨论】:

    • 过滤器有这个问题,响应时间不是数字类型,而是文本类型的数组。如何将其放入数字类型?
    • @AdityaSharma 使用date filter 来实现。
    【解决方案2】:

    您需要使用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 等的字段添加到已解析的文档中。您可以根据需要重命名此变量。

    【讨论】:

    • 谢谢你的回答,你能分享我如何编辑变量名吗?或者只是通过那个查询我可以替换 var0 和所有
    • 你可以改变 var0 和其他任何你想要的名字
    • 过滤器有这个问题,响应时间不是数字类型,而是文本类型的数组。如何将其放入数字类型?
    • 文本数组??显示在 kibana 上显示的已解析文档的示例
    • 我已经提出了一个不同的问题。我已经切换到 apache 日志,因为这似乎很乏味。 the referance link
    猜你喜欢
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 2014-10-30
    相关资源
    最近更新 更多