这些日志的 grok 模式应该是什么? (摄取 filebeat 的管道)

2023-12-22

我是 elasticsearch 社区的新人,我希望您能帮助我解决一些我遇到的困难。 我的目标是使用 Filebeat 将大量日志文件发送到 Elasticsearch。 为了做到这一点,我需要使用带有 Grok 模式处理器的摄取节点来解析数据。如果不这样做,我的所有日​​志都无法被利用,因为每个日志都落在同一个“消息”字段中。不幸的是,我在 grok 正则表达式方面遇到了一些问题,而且我找不到问题,因为这是我第一次使用它。 我的日志看起来像这样:

2016-09-01T10:58:41+02:00 INFO (6):     165.225.76.76   entreprise1 [email protected] /cdn-cgi/l/email-protection    POST    /application/controller/action  Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko   {"getid":"1"}   86rkt2dqsdze5if1bqldfl1
2016-09-01T10:58:41+02:00 INFO (6):     165.225.76.76   entreprise2 [email protected] /cdn-cgi/l/email-protection    POST    /application/controller/action  Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko   {"getid":"2"}   86rkt2rgdgdfgdfgeqldfl1
2016-09-01T10:58:41+02:00 INFO (6):     165.225.76.76   entreprise3 [email protected] /cdn-cgi/l/email-protection    POST    /application/controller/action  Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko   {"getid":"2"}

所以我们有制表符作为分隔符,以及这些字段: 日期、ip、公司名称、电子邮件、方法(post、get)、url、浏览器、json_request、可选代码

我的摄取管道 json 如下所示:

PUT _ingest/pipeline/elastic_log_index

    {
      "description" : "Convert logs txt files",
      "processors" : [
        {
          "grok": {
            "field": "message",
            "patterns": ["%{TIMESTAMP_ISO8601:timestamp} %{IP:ip} %{WORD:company}% {EMAILADDRESS:email} %{URIPROTO:method} %{URIPATH:page} %{WORD:browser} %{WORD:code}"]

          }
        },
        {
          "date" : {
            "field" : "timestamp",
            "formats" : ["yyyy-MM-ddTHH:mm:ss INFO(6):"]
          }
        }
      ],
      "on_failure" : [
        {
          "set" : {
            "field" : "error",
            "value" : " - Error processing message - "
          }
        }
      ]
    }

这是行不通的。

1)如何转义字符?例如时间戳末尾的“INFO (6):”

2)我可以在我的 gork 模式中只使用字段之间的空格吗?文件日志中的分隔符是制表符。

3)行尾的代码并不总是出现在日志中,这可能是一个问题吗?

4)你知道为什么这个配置无论如何都不能解析我在elasticsearch下的日志文档吗?

非常感谢您的帮助,请原谅我的英语水平,我是法国人。


您的 grok 模式与日志中的所有内容都不匹配,这就是它不起作用的原因。例如,%{WORD}只会匹配Mozilla, not /5.0。您可以创建自定义模式来匹配整个browser/version像这样(?<browser>%{WORD}(/%{NUMBER})?).

你可以逃脱INFO (6):只需将其与.*并且它将在输出中被忽略。

就空格而言,请使用预定义的 grok 模式进行匹配%{SPACE}.

最后的代码可以通过创建自定义模式变得可选,即(?<optional_code>%{WORD}?)

然后你的整个 grok 模式将变成,

%{TIMESTAMP_ISO8601:timestamp}.*%{IP:ip}%{SPACE}%{WORD:company_name}%{SPACE}%{EMAILADDRESS:email}%{SPACE}%{URIPROTO:method}%{SPACE}%{URIPATH:page}%{SPACE}(?<browser>%{WORD}(/%{NUMBER})?)%{SPACE}\(%{GREEDYDATA:content}\).*\{%{GREEDYDATA:json}\}%{SPACE}(?<optional_code>%{WORD}?)

它将输出,

{
  "timestamp": [
    [
      "2016-09-01T10:58:41+02:00"
    ]
  ],
  "YEAR": [
    [
      "2016"
    ]
  ],
  "MONTHNUM": [
    [
      "09"
    ]
  ],
  "MONTHDAY": [
    [
      "01"
    ]
  ],
  "HOUR": [
    [
      "10",
      "02"
    ]
  ],
  "MINUTE": [
    [
      "58",
      "00"
    ]
  ],
  "SECOND": [
    [
      "41"
    ]
  ],
  "ISO8601_TIMEZONE": [
    [
      "+02:00"
    ]
  ],
  "ip": [
    [
      "165.225.76.76"
    ]
  ],
  "IPV6": [
    [
      null
    ]
  ],
  "IPV4": [
    [
      "165.225.76.76"
    ]
  ],
  "SPACE": [
    [
      "   ",
      " ",
      "    ",
      "    ",
      "  ",
      " ",
      "   "
    ]
  ],
  "company_name": [
    [
      "entreprise1"
    ]
  ],
  "email": [
    [
      "[email protected] /cdn-cgi/l/email-protection"
    ]
  ],
  "EMAILLOCALPART": [
    [
      "email1"
    ]
  ],
  "HOSTNAME": [
    [
      "gmail.com"
    ]
  ],
  "method": [
    [
      "POST"
    ]
  ],
  "page": [
    [
      "/application/controller/action"
    ]
  ],
  "browser": [
    [
      "Mozilla/5.0"
    ]
  ],
  "WORD": [
    [
      "Mozilla",
      "86rkt2dqsdze5if1bqldfl1"
    ]
  ],
  "NUMBER": [
    [
      "5.0"
    ]
  ],
  "BASE10NUM": [
    [
      "5.0"
    ]
  ],
  "content": [
    [
      "Windows NT 6.1; Trident/7.0; rv:11.0"
    ]
  ],
  "json": [
    [
      ""getid":"1""
    ]
  ],
  "optional_code": [
    [
      "86rkt2dqsdze5if1bqldfl1"
    ]
  ]
}

When 在线测试 https://grokdebug.herokuapp.com/请添加电子邮件的自定义模式,因为目前不支持它们,

EMAILLOCALPART [a-zA-Z][a-zA-Z0-9_.+-=:]+
EMAILADDRESS %{EMAILLOCALPART}@%{HOSTNAME}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这些日志的 grok 模式应该是什么? (摄取 filebeat 的管道) 的相关文章

随机推荐