Фильтр logstash nginx не применяется к половине строк - PullRequest
0 голосов
/ 22 сентября 2018

Использование filebeat для отправки журналов nginx в logstash, а затем в эластичный поиск.

Фильтр logstash:

    filter {
      if [fileset][module] == "nginx" {
        if [fileset][name] == "access" {
          grok {
            match => { "message" => ["%{IPORHOST:[nginx][access][remote_ip]} - %{DATA:[nginx][access][user_name]} \[%{HTTPDATE:[nginx][access][time]}\] \"%{WORD:[nginx][access][method]} %{DATA:[nginx][access][url]} HTTP/%{NUMBER:[nginx][access][http_version]}\" %{NUMBER:[nginx][access][response_code]} %{NUMBER:[nginx][access][body_sent][bytes]} \"%{DATA:[nginx][access][referrer]}\" \"%{DATA:[nginx][access][agent]}\""] }
            remove_field => "message"
          }
          mutate {
            add_field => { "read_timestamp" => "%{@timestamp}" }
          }
          date {
            match => [ "[nginx][access][time]", "dd/MMM/YYYY:H:m:s Z" ]
            remove_field => "[nginx][access][time]"
          }
          useragent {
            source => "[nginx][access][agent]"
            target => "[nginx][access][user_agent]"
            remove_field => "[nginx][access][agent]"
          }
          geoip {
            source => "[nginx][access][remote_ip]"
            target => "[nginx][access][geoip]"
          }
        }
        else if [fileset][name] == "error" {
          grok {
            match => { "message" => ["%{DATA:[nginx][error][time]} \[%{DATA:[nginx][error][level]}\] %{NUMBER:[nginx][error][pid]}#%{NUMBER:[nginx][error][tid]}: (\*%{NUMBER:[nginx][error][connection_id]} )?%{GREEDYDATA:[nginx][error][message]}"] }
            remove_field => "message"
          }
          mutate {
            rename => { "@timestamp" => "read_timestamp" }
          }
          date {
            match => [ "[nginx][error][time]", "YYYY/MM/dd H:m:s" ]
            remove_field => "[nginx][error][time]"
          }
        }
      }
    }

Существует только один файл /var/log/nginx/access.log.В кибане я вижу ± половину строк с проанализированным сообщением, а другую половину - нет.

Все строки в кибане имеют тег "beats_input_codec_plain_applied".

Примеры из filebeat -e

Строка, которая работает нормально:

    "source": "/var/log/nginx/access.log",
    "offset": 5405195,
    "message": "...",
    "fileset": {
        "module": "nginx",
        "name": "access"
    }

Строка, которая работает неправильно (без «набора файлов»):

    "offset": 5405397,
    "message": "...",
    "source": "/var/log/nginx/access.log"

Есть идеи, что может быть причиной?

...