logstash Grok не работает для некоторых наборов данных

Это связано с сообщением, где я использую приведенный ниже фильтр grok для анализа данных для визуализации в кибану, ниже - то, что я использую в моем файле конфигурации logstash и работаю с данными по желанию, но сегодня я попал в ситуацию, когда он не фильтрует данные по желанию.

Правильный визуал в Кибане похож на:

receive_at: 1 февраля 2019 г., 21: 00: 04.105 float: 0,5, 0,0 type: rmlog Имя хоста: dba- foxon93 Дата: 19.02. / 01 User_1: dv_vxehw @version: 1 Hour_since: 06 Команда: rm -rf / data / rg / бревно

Grok-фильтр в файле конфигурации logstash:

 match => { "message" => "%{HOSTNAME:Hostname},%{DATE:Date},%{HOUR:Hour_since}:%{MINUTE:Mins_since},%{NUMBER}-%{WORD},%{USER:User_1},%{USER:User_2} %{NUMBER:Pid} %{NUMBER:float} %{NUMBER:float} %{NUMBER:Num_1} %{NUMBER:Num_2} %{DATA} %{HOUR:hour2}:%{MINUTE:minute2} %{HOUR:hour3}:%{MINUTE:minute3} %{GREEDYDATA:Command}" }

Мой файл logstash conf:

input {
  file {
    path => [ "/data/mylogs/*.txt" ]
    start_position => beginning
    sincedb_path => "/dev/null"
    type => "tac"
  }
}

filter {
  if [type] == "tac" {
    grok {
      match => { "message" => "%{HOSTNAME:Hostname},%{DATE:Date},%{HOUR:Hour_since}:%{MINUTE:Mins_since},%{NUMBER}-%{WORD},%{USER:User_1},%{USER:User_2} %{NUMBER:Pid} %{NUMBER:float} %{NUMBER:float} %{NUMBER:Num_1} %{NUMBER:Num_2} %{DATA} %{HOUR:hour2}:%{MINUTE:minute2} %{HOUR:hour3}:%{MINUTE:minute3} %{GREEDYDATA:Command}" }
      add_field => [ "received_at", "%{@timestamp}" ]
      remove_field => [ "@version", "host", "message", "_type", "_index", "_score" ]
   }
 }
}

output {
        if [type] == "rmlog" {
        elasticsearch {
                hosts => ["localhost:9200"]
                manage_template => false
                index => "tac-%{+YYYY.MM.dd}"
  }
 }
}

Ниже приведены новые данные, которые обрабатываются, но я не получаю поля Имя хоста, Команда и т. Д. Для этих данных.

dbproj01,19/02/01,00:04,23-hrs,cvial,cvial 120804 0.0 0.0 106096 1200 pts/90 S Jan30 0:00 /bin/sh -c /bin/rm -f ../../../../../../tools.lnx86/dfII/etc/context/64bit/hBrowser.cxt ../../../../../../
tools.lnx86/dfII/etc/context/64bit/hBrowser.toc ../../../../../../tools.lnx86/dfII/etc/context/64bit/hBrowser.aux ../../../../../../tools.lnx86/dfII/etc/context/64bit/hBrowser.ini ; (CUR_DIR=`pwd` ;
 cd ../../../../obj/linux-x86-64/optimize/bin/virtuoso ; ${CUR_DIR}/../../../../../../tools.lnx86/dfII/bin/virtuoso -ilLoadIL hBrowserBuildContext.il -log hBrowserBuildContext.log -nograph && [ `/bi
n/grep -c Error hBrowserBuildContext.log` = 0 ]) || (echo '*** Error: Failed to build hBrowser context.' ; /bin/rm -f ../../../../../../tools.lnx86/dfII/etc/context/64bit/hBrowser.cxt ../../../../..
/../tools.lnx86/dfII/etc/context/64bit/hBrowser.toc ../../../../../../tools.lnx86/dfII/etc/context/64bit/hBrowser.aux ../../../../../../tools.lnx86/dfII/etc/context/64bit/hBrowser.ini ; exit 1),/pro
j/cvial/WS/BUNGEE/REBASE_190120-138_2/tools.lnx86/dfII/group/bin/src

person krock1516    schedule 01.02.2019    source источник


Ответы (1)


Я вижу вашу проблему в значении %{HOUR:hour2}:%{MINUTE:minute2}, поскольку оно возвращается как дата Jan30, а не время, а также включено в раздел %{DATA}.

Нижеприведенный шаблон справится с этим

%{HOSTNAME:Hostname},%{DATE:Date},%{HOUR:Hour_since}:%{MINUTE:Mins_since},%{NUMBER}-%{WORD},%{USER:User_1},%{USER:User_2} %{NUMBER:Pid} %{NUMBER:float} %{NUMBER:float} %{NUMBER:Num_1} %{NUMBER:Num_2} %{DATA} (?:%{HOUR:hour2}:|)(?:%{MINUTE:minute2}|) (?:%{HOUR:hour3}:|)(?:%{MINUTE:minute3}|)%{GREEDYDATA:Command} 

Также вы можете использовать Grok Debug для проверки шаблонов.

person ElasticCode    schedule 01.02.2019
comment
@ Wael, спасибо за быстрый улов, есть ли способ иметь условие, если текущий Grok не совпадает, тогда используйте другой Grok. - person krock1516; 02.02.2019
comment
Йо может попробовать if "_grokparsefailure" in [tags] { // another grok } } - person ElasticCode; 02.02.2019
comment
@ krock1516 проверьте также мой ответ на нужный шаблон - person ElasticCode; 02.02.2019
comment
@ krock1516 Вы также можете использовать более одного шаблона Grok в одном фильтре Grok. Фильтр будет пытаться сопоставить поле с шаблонами, пока один из них не совпадет. См. Этот вопрос, чтобы узнать, как это сделать. - person baudsp; 04.02.2019