elasticsearch Those原木的grok模式应该是什么?(filebeat的摄取管道),elasticsearch,logstash,logstash-grok,filebeat,elasticsearch,Logstash,Logstash Grok,Filebeat" /> elasticsearch Those原木的grok模式应该是什么?(filebeat的摄取管道),elasticsearch,logstash,logstash-grok,filebeat,elasticsearch,Logstash,Logstash Grok,Filebeat" />

elasticsearch Those原木的grok模式应该是什么?(filebeat的摄取管道)

elasticsearch Those原木的grok模式应该是什么?(filebeat的摄取管道),elasticsearch,logstash,logstash-grok,filebeat,elasticsearch,Logstash,Logstash Grok,Filebeat,我是elasticsearch社区的新成员,我希望您能帮助我解决一些棘手的问题。 我的目标是使用Filebeat将大量日志文件发送到Elasticsearch。 为了做到这一点,我需要使用Grok模式处理器的摄取节点来解析数据。如果不这样做,我的所有日志都无法被利用,因为每个日志都位于同一个“消息”字段中。不幸的是,我对grok regex有一些问题,我找不到问题,因为这是我第一次使用它。 我的日志如下所示: 2016-09-01T10:58:41+02:00 INFO (6): 165

我是elasticsearch社区的新成员,我希望您能帮助我解决一些棘手的问题。 我的目标是使用Filebeat将大量日志文件发送到Elasticsearch。 为了做到这一点,我需要使用Grok模式处理器的摄取节点来解析数据。如果不这样做,我的所有日志都无法被利用,因为每个日志都位于同一个“消息”字段中。不幸的是,我对grok regex有一些问题,我找不到问题,因为这是我第一次使用它。 我的日志如下所示:

2016-09-01T10:58:41+02:00 INFO (6):     165.225.76.76   entreprise1 email1@gmail.com    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 email2@gmail.com    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 email3@gmail.com    POST    /application/controller/action  Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko   {"getid":"2"}
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 - "
          }
        }
      ]
    }
因此,我们使用选项卡作为分隔符,这些字段: 日期、ip、公司名称、电子邮件、方法(post、get)、url、浏览器、json请求、可选代码

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

2016-09-01T10:58:41+02:00 INFO (6):     165.225.76.76   entreprise1 email1@gmail.com    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 email2@gmail.com    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 email3@gmail.com    POST    /application/controller/action  Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko   {"getid":"2"}
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下的my logs文档中解析吗


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

您的grok模式与日志中的所有内容都不匹配,这就是它不起作用的原因。例如,
%{WORD}
将只匹配
Mozilla
,而不是
/5.0
。您可以创建自定义模式来匹配整个
浏览器/版本
,就像这样
(?%{WORD}(/%{NUMBER})?)

您可以通过简单地将其与
*
匹配来转义
INFO(6):
,并且它将在输出中被忽略

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

通过创建自定义模式,最终代码可以成为可选的,即
(?%{WORD}?

你的整个格罗克模式就会变成

%{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}?)
当请为电子邮件添加自定义模式时,因为它们当前不受支持

EMAILLOCALPART [a-zA-Z][a-zA-Z0-9_.+-=:]+
EMAILADDRESS %{EMAILLOCALPART}@%{HOSTNAME}

非常感谢你的帮助,苏菲扬,这对我帮助很大。但是,我想知道是否可以用gork创建自定义字段。例如,“页面”字段始终是:应用程序/控制器/操作/某物,我可以创建4个不同的字段来表示“页面”字段,用“/”分为4个部分吗?Alose,我想知道是否可以排除字段以避免将其插入索引?谢谢,这是可能的。请看一看变异过滤器,如果你有任何不同的问题,你可以问新的问题。如果答案解决了您原来的问题,请随时接受。