Как добавить новое динамическое значение (которого нет на входе) в вывод logstash?

Мой ввод имеет отметку времени в формате Apr20 14:59:41248 Dataxyz. Теперь в моем выводе мне нужна временная метка в следующем формате: ** День Месяц Месяц Час: Минута: Второй год Данные XYZ **. Мне удалось удалить временную метку из ввода. Но я не совсем уверен, как добавить новую метку времени.

Я сопоставил сообщение с помощью grok при получении ввода: match => ["message","%{WORD:word} %{TIME:time} %{GREEDYDATA:content}"]

Я попытался использовать mutate add_field. но мне не удалось добавить значение DAY. add_field => [ "timestamp","%{DAY}"]. Я получил вывод как слово «ДЕНЬ», а не значение ДЕНЬ. Может кто-нибудь, пожалуйста, пролить свет на то, что упускается.

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


person Newbien    schedule 13.07.2015    source источник


Ответы (3)


Вам нужно вникнуть в отдельные именованные поля, а затем вы можете ссылаться на эти поля в add_field.

Итак, ваш грок начнется так:

%{MONTH:month}%{MONTHDAY:mday}

И затем вы можете собрать их вместе следующим образом:

mutate {
    add_field => {
        "newField" => "%{mday} %{month}"
    }
}
person Alain Collins    schedule 14.07.2015
comment
Спасибо за ответ Ален. Но у меня на входе только 20 апреля 14:59:41248. В моем выводе мне нужно добавить Day Month Monthday Hour:Minute:Second Year . ДЕНЬ не введен. Также я не знаю, как разделить 20 апреля на месяц и день месяца, так как они собираются вместе. Между апр и 20 нет пробела. Вот почему мне пришлось врубить его в СЛОВО. Пожалуйста, помогите. - person Newbien; 14.07.2015
comment
Поскольку %{MONTH} требует пробелов, создайте свою собственную версию (например, %{MONTHNOSPACES}), которая их не требует. - person Alain Collins; 14.07.2015

Вы можете проверить мой ответ, я думаю, что это очень полезно для вас.

grok { 
  match => { "message" => "%{TIMESTAMP_ISO8601:time} \[%{NUMBER:thread}\] %{LOGLEVEL:loglevel} %{JAVACLASS:class} - %{GREEDYDATA:msg}" } 
}

if "Exception" in [msg] {
 mutate {
  add_field => { "msg_error" => "%{msg}" }
}
}
person Anilkumar Bathula    schedule 14.07.2015
comment
Я не уверен, как этот ответ помогает моему вопросу. Мне нужно знать, как найти Apr20 ** (без пробела) и изменить его на формат **Day Month Monthday - person Newbien; 14.07.2015

Вы можете использовать пользовательские шаблоны grok для извлечения/переименования полей.

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

Аналогичным образом вы можете извлечь другие поля и переставить/поиграть с ними в мутирующем фильтре. Дополнительные сведения см. в разделе Пользовательские шаблоны. Информация.

person Anagha Desai    schedule 14.07.2015