Ошибка в фильтре Grok, который запускает logstash - PullRequest
0 голосов
/ 04 марта 2019

У меня есть следующий файл conf logstash

input {
  tcp {
    port => 12345
    codec => json
  }
}

filter {
  grok {
    break_on_match => true
    match => [
        "message", "%{TIMESTAMP_ISO8601:timestamp} (verbose|info|debug) (hostd|vpxa)",
    ]
    mutate {
      add_tag => "esxi_verbose"
    }
  }
}

if "esxi_verbose" in [tags] {
  drop{}
}

output {
      stdout { codec => rubydebug }
      elasticsearch { 
        hosts => ["localhost:9200"] 
        index => "logstash-%{+YYYY.MM.dd}"
      }
}

Я пытаюсь отбросить любые подробные, отладочные, информационные сообщения.Когда я запускаю logstash, я получаю сообщение об ошибке

[2019-03-03T16:53:11,731][ERROR][logstash.agent] Failed to execute action {:action=>LogStash::PipelineAction::Create/pipeline_id:main, :exception=>"LogStash::ConfigurationError", :message=>"Expected one of #, \", ', -, [, { at line 13, column 5 (byte 211) after filter {\n  grok {\n    break_on_match => true\n    match => [\n        \"message\", \"%{TIMESTAMP_ISO8601:timestamp} (verbose|info|debug) (hostd|vpxa)\",\n    "

Может ли кто-нибудь помочь мне в том, что я делаю неправильно.

1 Ответ

0 голосов
/ 04 марта 2019

у вас есть 3 проблемы в конфигурации:

  1. в конце строки сообщения Grok есть запятая, которая является избыточной
  2. mutate находится внутри фильтра grok, но этодолжен следовать за ним
  3. оператор 'if' должен находиться внутри секции 'filter'.

Это обновленная и рабочая конфигурация:

input {
  tcp {
    port => 12345
    codec => json
  }
}

filter {
  grok {
    break_on_match => true
    match => [
        "message", "%{TIMESTAMP_ISO8601:timestamp} (verbose|info|debug) (hostd|vpxa)"
    ]
  }

  mutate {
    add_tag => "esxi_verbose"
  }

  if "esxi_verbose" in [tags] {
    drop{}
  }

}

output {
      stdout { codec => rubydebug }
      elasticsearch {
        hosts => ["localhost:9200"]
        index => "logstash-%{+YYYY.MM.dd}"
      }
}
...