Ошибка Logstash Grok

My logstash configuration is giving me this error:

всякий раз, когда я запускаю эту команду: /opt/logstash/bin/logstash -f /etc/logstash/conf.d/logstash.conf --auto-reload --debug

reason=>"Expected one of #, {, ,, ] at line 27, column 95 (byte 677) after filter {\n\n\tif [type] == \"s3\" {\n\t\tgrok {\n\t\n  \t\t\tmatch => [\"message\", \"%{IP:client} %{USERNAME} %{USERNAME} \\[%{HTTPDATE:timestamp}\\] (?:\"", :level=>:error, :file=>"logstash/agent.rb", :line=>"430", :method=>"create_pipeline"}

Это связано с моим шаблоном. Но когда я проверил то же самое в онлайн-отладчике Grok, он дал мне требуемый ответ. Пожалуйста, помогите.

Here is my logstash configuration: 

input {
    s3 {
      access_key_id => ""
      bucket => ""
      region => ""
      secret_access_key => ""
      prefix => "access"
      type => "s3"
      add_field => { source => gzfiles }
      sincedb_path => "/dev/null"
      #path => "/home/shubham/logstash.json"
      #temporary_directory => "/home/shubham/S3_temp/"

      backup_add_prefix => "logstash-backup"
      backup_to_bucket => "logstash-nginx-overcart"


}

}

 filter {

        if [type] == "s3" {
                grok {

                        match => ["message", "%{IP:client} %{USERNAME} %{USERNAME} \[%{HTTPDATE:timestamp}\] (?:"%{WORD:request} 
        %{URIPATHPARAM:path} HTTP/%{NUMBER:version}" %{NUMBER:reponse} %{NUMBER:bytes} "%{USERNAME}" %{GREEDYDATA:responseMessage})"]
        }
        }
        }

 output {
    elasticsearch {
    hosts => ''
    index => "accesslogs"
}
  }

person RedHead_121    schedule 13.03.2017    source источник


Ответы (1)


У вас есть пара неэкранированных символов " в назначении match (например, вокруг имени пользователя var), которые сбивают синтаксический анализатор. Если вы экранируете их с помощью \, это должно работать.

person Sönke Liebau    schedule 13.03.2017
comment
Я сделал отдельный файл шаблона. Теперь он работает. Единственная проблема сейчас в том, что время моего журнала отображается в виде строки на кибане. шаблон: NGINXACCESS %{IP:client} %{USERNAME} %{USERNAME} [%{HTTPDATE:log_timestamp}] (?:%{WORD:request} %{URIPATHPARAM:path} HTTP/%{NUMBER:version:int} %{NUMBER:response:int} %{NUMBER:bytes} %{USERNAME} %{GREEDYDATA:responseMessage}) logstashconf: filter{ date { match =› [log_timestamp ,dd/MMM/yyyy:HH:mm:ss Z] } - person RedHead_121; 14.03.2017