Как добавить / удалить дополнительные поля в Graylog

#logstash #logstash-grok #graylog3

#logstash #logstash-grok #graylog3

Вопрос:

Спасибо за ваше руководство, я хотел бы включить дополнительные поля на вкладке «поля» в результатах поиска. Я взглянул на экстракторы и настроил соответствующим образом. Например, это сообщение для анализа:

 2019-03-12 10:15:51 [https-jsse-nio-8020-exec-10] INFO : ASCPA7C500611418  ab.bc.cde.efg.common.rest.endpoints.component.filter End
  

Я добавил шаблон JAVACLASS:

 (?:[a-zA-Z$_][a-zA-Z$_0-9]*.)*[a-zA-Z$_][a-zA-Z$_0-9]*
  

После этого я настроил экстрактор и включил следующий шаблон:

 %{TIMESTAMP_ISO8601}(?:%{SPACE})%{SYSLOG5424SD}(?:%{SPACE})%{LOGLEVEL}*(?:%{SPACE}):*(?:%{SPACE})%{WORD}*(?:%{SPACE})%{JAVACLASS:class}%{GREEDYDATA}
  

Это обеспечило следующий предварительный просмотр экстрактора:

 WORD
ASCPA7C500611418
TIMESTAMP_ISO8601
2019-03-12 10:15:51
MONTHNUM
03
HOUR
[10, null]
message
End
SPACE
[ , , , , ]
YEAR
2019
DATA
https-jsse-nio-8020-exec-10
MINUTE
[15, null]
SECOND
51
LOGLEVEL
INFO
JAVACLASS
ab.bc.cde.efg.common.rest.endpoints.component.filter
MONTHDAY
12
SYSLOG5424SD
[https-jsse-nio-8020-exec-10]
  

Класс Java анализируется правильно, но в результате поиска ВСЕ поля отображаются на вкладке Поля:

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

Однако я хочу просто добавить поле «класс» в список. Как я могу избавиться от других полей? Я уже пытался сохранить только JAVACLASS, но я не получаю соответствующего значения для класса.

Я также удалил экстрактор и добавил следующее в фильтр в logstash.conf :

  filter {
        grok {
            match => {
                "message" => "%{TIMESTAMP_ISO8601}(?:%{SPACE})%{SYSLOG5424SD}(?:%{SPACE})%{LOGLEVEL}*(?:%{SPACE}):*(?:%{SPACE})%{WORD}*(?:%{SPACE})%{JAVACLASS:class}%{GREEDYDATA:message}"            
            }
            add_field => [ "class","%{JAVACLASS}"]

        }        
}
  

но я не получил поле с именем class в Graylog:
введите описание изображения здесь

Как я могу добавить поля, такие как class field, в этом случае использования?

Обновите при добавлении этого исправления:

 add_field => { "class" => "%{JAVACLASS}" }
  

Получаем следующий вывод logstash:

 [2019-03-14T09:52:58,025][DEBUG][logstash.outputs.gelf    ] Sending GELF event {:event=>{"short_message"=>["2019-03-07 06:06:46 [localhost-startStop-1] DEBUG:   org.springframework.beans.factory.support.DefaultListableBeanFactory Autowiring by type from bean name 'serviceClientMapper' via property 'sqlSessionFactory' to bean named 'sqlSessionFactory'", " Autowiring by type from bean name 'serviceClientMapper' via property 'sqlSessionFactory' to bean named 'sqlSessionFactory'"], "full_message"=>"2019-03-07 06:06:46 [localhost-startStop-1] DEBUG:   org.springframework.beans.factory.support.DefaultListableBeanFactory Autowiring by type from bean name 'serviceClientMapper' via property 'sqlSessionFactory' to bean named 'sqlSessionFactory', Autowiring by type from bean name 'serviceClientMapper' via property 'sqlSessionFactory' to bean named 'sqlSessionFactory'", "host"=>"{"os":{"name":"CentOS Linux","version":"7 (Core)","codename":"Core"},"name":"d1tomcat"}", "_log_file"=>{"path"=>"/apps/logs/ABC/abc-rest-api/abc-rest-api.log"}, "_source"=>"/apps/logs/ABC/abc-rest-api/abc-rest-api.log", "_meta_cloud"=>{}, "_tags"=>"beats_input_codec_plain_applied", **"_class"=>"org.springframework.beans.factory.support.DefaultListableBeanFactory, %{JAVACLASS}"**, "_beat_name"=>"d1tomcat", "_beat_hostname"=>"d1tomcat", "_component"=>"component", "level"=>6}}
  

Спасибо за вашу помощь

Ответ №1:

Синтаксис вашей add_field конфигурации неверен.

Это должно быть:

 add_field => { "class" => "%{JAVACLASS}" }
  

Комментарии:

1. Спасибо, Леандро, я добавил это изменение, но я продолжаю, не получая поле ни в Graylog, ни в Kibana. Я добавляю обновление в сообщение, показывающее выходные данные в logstash.