ELK Stack - создание индекса Elasticsearch (logstash)

Я экспериментирую с ELK, чтобы проанализировать наши файлы журналов. Следуя доступной документации, удалось настроить стек на моем компьютере. Теперь у меня возникла проблема с созданием индекса эластичного поиска. Раньше я использовал комбинацию filebeat - ›logstash -› elasticsearch - ›kibana, и с помощью следующего файла logstash.conf можно было отправлять данные в elasticsearch

input {
  beats {
   port => 5044
   type => "log"
  }
}

output {
  elasticsearch {
   hosts => "localhost:9200"
   manage_template => false
   index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
   document_type => "%{[@metadata][type]}"
  }
}

И индекс в эластичном поиске был оценен как

 "filebeat-*" 

из выражения

  index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"

Теперь я изменил logstash.conf на на основе моего фактического файла журнала

input { 

file
{
    path => "C:\logs\application.log"
    start_position => "beginning"
    codec => 
    multiline {
      charset => "ISO-8859-1"
      pattern => "^%{TIMESTAMP_ISO8601}"
      max_lines => 1000
      negate => true
      what => "previous"
    } 
}

}

filter {
 mutate {
     gsub => [ "message", "\r", "" ]
   }

   grok {
    patterns_dir => "./patterns"
    match => {"message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL1:loglevel} %{THREAD:thread} %{IP5:remoteipaddress} %{JAVA:logclass} %{GREEDYDATA:details}"}
  add_field => [ "received_at", "%{@timestamp}" ]
  add_field => [ "received_from", "%{host}" ]

  }
   date {
            match => [ "timestamp", "yyyy-MM-dd HH:mm:ss,SSS" ]
            remove_field => [ "timestamp" ]
        }


}

output {

  elasticsearch { 
                hosts => "localhost:9200"
    manage_template => false
     index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
     document_type => "%{[@metadata][type]}"
                }
                file {
     path => "C:\logs\output.txt"
  }
}

В этом случае logstash доволен файлом conf, но индекс, который я предложил для эластичного поиска, не оценивается должным образом.

Если я проверю эластичный поиск с помощью плагина head,

http://localhost:9200/_plugin/head/

Индекс выглядит как

%{[@metadata][beat]}-

введите описание изображения здесь

Я не уверен, почему выражение индекса сейчас не оценивается. Любые указатели для решения этой проблемы были бы полезны.

Заранее спасибо, Сан


person kallada    schedule 01.03.2016    source источник


Ответы (2)


Некоторые плагины logstash используют метаданные для передачи полей, которые вы не хотите хранить в документе. В вашем первом примере ввод beats устанавливает определенные метаданные, которые позже используются в выводе elasticsearch для установки индекса и типа. Поскольку ввод файла не устанавливает эти поля метаданных, logstash будет выводить имя переменной вместо пустой строки, поэтому он устанавливает индекс «% {[@ metadata] [beat]} - 2016.04.05», дату известно, но частота поля метаданных - нет.

Если вы просто оставите вывод elasticsearch по умолчанию, он должен работать нормально:

elasticsearch { hosts => "localhost:9200" }

Если вы оставите для параметра manage_template значение false, он также не будет применять шаблон logstash-, и сопоставления полей могут быть немного неправильными, поэтому я бы рекомендовал снова оставить это значение по умолчанию (true).

person Steve Elliott    schedule 01.03.2016

Поскольку вы знаете, как следует называть индекс, просто поместите его в выходной поток elasticsearch:

Since you know what the index should be called, just put it in the `elasticsearch` output:

output {
  elasticsearch { 
    hosts => "localhost:9200"
    manage_template => false
    index => "filebeat-%{+YYYY.MM.dd}"
    document_type => "whatever_type_filebeat_put_in"
  }
}
person Alcanzar    schedule 01.03.2016