Logstash Grok Filter - парсинг пользовательского файла

Я обнаружил, что logstash не поклонник моего фильтра. Было бы неплохо увидеть это вторым взглядом.

Первый - мой файл журнала - содержит следующие записи с новыми строками для каждого тома.

/vol/vol0/ 298844160 6916836 291927324 2%  /vol/vol0/

Мой конфигурационный файл выглядит следующим образом:

ВХОД

file {
   type => "testing"
   path => "/opt/log_repo/ssh/netapp/*"
   tags => "netapp"
   start_position => "beginning"
   sincedb_path => "/dev/null"
}

ФИЛЬТР

if [type] == "testing" {
   grok{
        match => [ "@message", "{UNIXPATH:volume}%{SPACE}%{INT:total}%{SPACE}%{INT:used}%{SPACE}%{INT:avail}%{SPACE}%{PROG:cap}%{SPACE}%{UNIXPATH:vols}"]
   }
}

ВЫХОД

if [type] == "testing" {
     elasticsearch {
         action => "index"
         hosts => ["http://localhost:9200"]
         index => ["testing4-%{+YYYY.MM.dd}"]
     }
}

Когда я запускаю его, он сообщает мне, что у него плохой файл конфигурации. Если я изменю фильтр на:

match => [ "@message", "{UNIXPATH:volume}" ]

Он создает новое поле с именем тома. Я использую пространственный компонент, потому что журнал просто не согласован. В некоторых томах между используемым пространством будет 4 пробела, а в некоторых - больше или меньше, в зависимости от имени и размера тома.

Чтобы получить эту конфигурацию, я использовал следующие сайты: https://grokdebug.herokuapp.com/discover?# http://grokconstructor.appspot.com/do/constructionstep

Все еще борюсь с тем, что мне не хватает .... Любая помощь будет принята с благодарностью.

ОБНОВЛЕНИЕ: после добавления рекомендации ниже новое поле все еще не создается.

_index      string              
message     string              
type    string              
tags    string              
path    string              
@timestamp      date                
@version    string              
host    string              
_source     _source             
_id     string              
_type   string              
_score  

person Jared    schedule 03.06.2016    source источник


Ответы (1)


Ваш шаблон не соответствует образцу журнала по очень простой и глупой причине - вам не хватает % в начале вашего шаблона. Если вы добавите его, он работает как шарм:

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

Итак, полный фильтр:

if [type] == "testing" {
   grok{
        match => [ "@message", "%{UNIXPATH:volume}%{SPACE}%{INT:total}%{SPACE}%{INT:used}%{SPACE}%{INT:avail}%{SPACE}%{PROG:cap}%{SPACE}%{UNIXPATH:vols}"]
   }
}
person Tymoteusz Paul    schedule 04.06.2016
comment
@message - символ @ тоже создавал проблемы. Удаление символа @ не помогло. - person Jared; 06.06.2016
comment
@ Джаред о, вы обновили вопрос? Подсказка на будущее - оставьте тогда комментарий к ответу, которого я не знал раньше 13 минут назад. - person Tymoteusz Paul; 06.06.2016
comment
моя вина. Это также было связано с тем, что я забыл и символ%. Таким образом, комбинация символа @ и% была двумя ключевыми факторами, которые подняли фильтр Grok. Их исправление сработало. Спасибо. - person Jared; 06.06.2016