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

时间:2018-06-12 11:55:26

标签: elasticsearch logstash logstash-grok filebeat

我是弹性搜索社区的新手,我希望得到你对我正在努力解决的问题的帮助。 我的目标是使用Filebeat将大量日志文件发送到Elasticsearch。 为了做到这一点,我需要使用Grok模式处理器的摄取节点来解析数据。如果不这样做,我的所有日​​志都不会被利用,因为每个日志都属于同一个“消息”字段。不幸的是我有一些问题与grok正则表达式,我找不到问题,因为这是我第一次使用它。 我的日志看起来像这样:

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"}

因此我们将标签作为分隔符,以及那些字段: date,ip,company_name,email,method(post,get),url,browser,json_request,optional_code

我的摄取管道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)你有没有想过为什么这个配置无论如何都不解析我的弹性搜索下的日志文件?

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

1 个答案:

答案 0 :(得分:1)

您的grok模式与日志中的所有内容都不匹配,这就是它无法正常工作的原因。例如,%{WORD}仅匹配Mozilla,而不是/5.0。您可以创建自定义模式以匹配整个browser/version,例如(?<browser>%{WORD}(/%{NUMBER})?)

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

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

最后的代码可以通过创建自定义模式(即(?<optional_code>%{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}?)

将输出,

{
  "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": [
    [
      "email1@gmail.com"
    ]
  ],
  "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"
    ]
  ]
}

testing online时,请为电子邮件添加自定义模式,因为它们目前不受支持,

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