2014-10-14 2 views
1

Я бег следующего фильтра в файле logstash конфигурации:Грохот, а затем мутация?

filter { 
    if [type] == "logstash" { 
     grok { 
      match => { 
       "message" => [ 
        "\[%{DATA:timestamp}\]\[%{DATA:severity}\]\[%{DATA:instance}\]%{DATA:mymessage}, reason:%{GREEDYDATA:reason}", 
        "\[%{DATA:timestamp}\]\[%{DATA:severity}\]\[%{DATA:instance}\]%{GREEDYDATA:mymessage}" 
       ] 
      } 
     } 
    } 
} 

Это вид работы:

  • это определить и вырезать из переменных «метки времени», «тяжесть», «экземпляр» «MyMessage», и «причина»

Действительно, что я хотел, чтобы текст, который в настоящее время %{mymessage} быть ${message} но когда я добавить какие-либо мутировать команды к этому обращала внимания он останавливает работает g (btw, должен ли быть журнал, который говорит мне, что ломается? Я не видел этого ... иронично, что для каротажного решения не было подробного ведения журнала).

Вот что я пробовал:

filter { 
    if [type] == "logstash" { 
     grok { 
      match => { 
       "message" => [ 
        "\[%{DATA:timestamp}\]\[%{DATA:severity}\]\[%{DATA:instance}\]%{DATA:mymessage}, reason:%{GREEDYDATA:reason}", 
        "\[%{DATA:timestamp}\]\[%{DATA:severity}\]\[%{DATA:instance}\]%{GREEDYDATA:mymessage}" 
       ] 
      } 
      mutate => { 
       replace => [ "message", "%{mymessage}"] 
       remove => [ "mymessage" ] 
      } 
     } 
    } 
} 

Таким образом, в заключение я хотел бы понять:

  1. Есть ли лог-файлы я могу смотреть на то, чтобы понять, почему/когда сбой происходит?
  2. Почему мои команды мутанта, созданные сверху, не работают?
  3. Я также подумал что, если я никогда не использовал MyMessage переменный, но вместо этого просто называют сообщений в качестве переменной, может быть, он будет автоматически укоротить сообщение для только подходящего шаблона, но это, как представляется, добавить результаты вместо этого. .. Какое правильное поведение?

ответ

1

Я бы сделал это по-другому. Для того, что вы пытаетесь сделать, опция overwrite может быть более подходящей.

Что-то вроде этого:

grok { 
    overwrite => "message" 
    match => [ 
     "message" => [ 
       "\[%{DATA:timestamp}\]\[%{DATA:severity}\]\[%{DATA:instance}\]%{DATA:message}, reason:%{GREEDYDATA:reason}", 
       "\[%{DATA:timestamp}\]\[%{DATA:severity}\]\[%{DATA:instance}\]%{GREEDYDATA:message}" 
        ] 
      ] 
} 

Это будет заменить 'сообщение' с '' grokked бит.

Я знаю, что прямо не отвечает на ваш вопрос - обо всем, что я могу сказать, когда вы начинаете logstash, он записывает STDOUT - по крайней мере, на версию, которую я использую, - которую я захватываю и пишу файл. Здесь он сообщает об ошибках.

Есть опция -l logstash, которая позволяет указать файл журнала для использования - это, как правило, показывает вам, что происходит в синтаксическом анализаторе, но имейте в виду, что если что-то не соответствует правилу, оно не будет обязательно скажите, почему это не так.

+0

Я думаю, что ваш код отсутствует 'матч => {...}' блок, но в противном случае идеальное решение. Можете ли вы обновить, и я приму ответ. – ken

+0

Кстати, все еще хотелось бы понять, есть ли файл журнала где-нибудь, где я могу найти для устранения этих проблем ... знаете ли вы об одном? – ken

+1

Mea culpa - служит мне для переименования :). Если вы запустите logstash с помощью '-l ', он напишет файл журнала, который вы укажете. В противном случае я думаю, что он просто напишет в «STDOUT». – Sobrique

2

Использование опции overwrite - лучшее решение, но я думал, что в любом случае я бы затронул пару ваших вопросов.

  1. Это зависит от того, как запущен Logstash. Обычно вы запускаете его с помощью сценария инициализации, который передает параметр -l или --log./var/log/logstash будет типичным.
  2. mutate - собственный фильтр, а не часть grok.Вы могли бы сделать, как это (или использовать rename вместо replace + remove):
 
grok { 
    ... 
} 
mutate { 
    replace => [ "message", "%{mymessage}" ] 
    remove => [ "mymessage" ] 
} 
Смежные вопросы