【问题标题】:logstash / grok custom filedslogstash / grok 自定义字段
【发布时间】:2017-07-18 10:37:32
【问题描述】:

我是 ELK 堆栈的全新用户。我在从日志中过滤掉特定部分时遇到了一点问题。

示例日志:

[2017-05-30 13:58:09,336] INFO  [com.qwerty.test.core.services.impl.order.OrderEntryService] (OrderEntryService.java:5426) [http-/0.0.0.0:1111-111] {{CT,1496145487308}{IP,111.11.111.11}{JTX,1511059/176275501}{OBJT,goodsMovement.reportsUtils.ConsignmentStocksList}{OPT,SQ}{PID,111111}{SS,SSCPLTMPRODPL}{TRT,SAP_LOGISTIC_REPORT}{UID,StudentSaSo-8}}: Saving order: K1010101

和我的 grok 过滤器:

grok {
    match => { "message" => "(?<timestamp>%{YEAR}-%{MONTHNUM2}-%{MONTHDAY} %{HOUR}:%{MINUTE}:%{SECOND},%{NONNEGINT})\] %{LOGLEVEL:loglevel} * \[(?<logger>[A-Za-z0-9$_.]+)\] \(%{JAVAFILE:class}:%{NONNEGINT:line}\) \[%{NOTSPACE:thread}\] %{GREEDYDATA:message_TEST}"}
    }

所以我需要过滤掉“ID”、“PID”、IP 和“UID”,我不知道如何配置这个特定的自定义模式。 我尝试使用 https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns 的模式,但它对我不起作用

【问题讨论】:

    标签: elasticsearch logging logstash logstash-grok


    【解决方案1】:

    你的 grok 的开头很好。而不是最后一部分%{GREEDYDATA:message_TEST},它只会将您的消息的其余部分保存到message_TEST,您应该实际执行对象的解析。这样的事情会将对象中的PIDIPUID 字段保存到各自的变量中(请记住,此模式依赖于字段顺序):

    {{.*}{IP,%{IPV4:IP}}({.*}){3}{PID,%{POSINT:PID}}({.*}){2}{UID,%{DATA:UID}}}
    

    现在稍微解释一下它的作用。外面的一对大括号是你的对象的限制。然后我们将处理对象内部由一对大括号限制的每个字段。

    • 首先:打开大括号{
    • 那么,第一个内部字段是 {CT,1496145487308},我们对保存它不感兴趣 - 所以告诉 grok 有一些字符串被大括号限制:{.*};
    • 下一个字段是 IP,我们需要保存:{IP,111.11.111.11}。它以大括号和IP, 开头,后跟我们必须保存的 IP 地址(匹配中的最后一个 IP 是存储 IP 地址的变量的名称):{IP,%{IPV4:IP}
    • 现在我们有三组不需要保存的大括号括起来的字符串:{JTX,1511059/176275501}{OBJT,goodsMovement.reportsUtils.ConsignmentStocksList}{OPT,SQ}。对于 grok,它看起来像:({.*}){3};
    • 然后进入 PID 字段:{PID,111111}。因为 grok PID 只是一个正整数,类似于用大括号括起来的 IP,前面有 PID,{PID,%{POSINT:PID}};
    • 还有两个我们不想保存的组。与之前的类似跳过它们:({.*}){2};
    • 最后一个字段是:{UID,StudentSaSo-8},这只是 grok 的一串数据。类似于 IP 和 PID 将其保存在各自的变量中:{UID,%{DATA:UID}};
    • 最后我们得到了右大括号:}

    最后,你最终的 grok 将如下所示:

    (?<timestamp>%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{HOUR}:%{MINUTE}:%{SECOND},%{NONNEGINT})\] %{LOGLEVEL:loglevel} * \[(?<logger>[A-Za-z0-9$_.]+)\] \(%{JAVAFILE:class}:%{NONNEGINT:line}\) \[%{NOTSPACE:thread}\] {%{DATA}{IP,%{IPV4:IP}}({.*}){3}{PID,%{POSINT:PID}}({.*}){2}{UID,%{DATA:UID}}}
    

    【讨论】:

    • 感谢 alexK 的回复,但在您的发言之后,我的日志又出现了问题。他们不规律。有些行只有 IP 和 PID 或 JTX、PID 和 UID,而且它们混合在一起,我的意思是 IP、UID 等字段并不总是在同一个位置...:/ 我映射了整个日志,就像你写 {{CT, %{DATA:ct}}{IP,%{IPV4:IP}}{JTX,%{NONNEGINT:jtx}}{OBJT,%{GREEDYDATA:objt}}{OPT%{GREEDYDATA:OPT}}{PID,% {POSINT:PID}}{SS,%{GREEDYDATA:SS}}{TRT,%{GREEDYDATA:TRT}}{UID,%{DATA:UID}}}%{GREEDYDATA:log_message} 有什么办法吗通过自动搜索给定字段或类似的东西?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多