Извлечение полей в Logstash

Я использую Logstash (с Kibana в качестве пользовательского интерфейса). Я хотел бы извлечь некоторые поля из своих журналов, чтобы я мог фильтровать их в левой части пользовательского интерфейса.

Пример строки из моего журнала выглядит так:

2013-07-04 00:27:16.341 -0700 [Comp40_db40_3720_18_25] client_login=C-316fff97-5a19-44f1-9d87-003ae0e36ac9 ip_address=192.168.4.1

В моем файле конфигурации logstash я поместил это:

filter {
    grok {
        type => "mylog"
        pattern => "(?<CLIENT_NAME>Comp\d+_db\d+_\d+_\d+_\d+)"
    }
}

В идеале я хотел бы извлечь Comp40_db40_3720_18_25 (количество цифр может варьироваться, но всегда будет не менее 1 в каждом разделе, разделенном _) и client_login (также может быть client_logout). Затем я могу выполнить поиск CLIENT_NAME=Comp40... CLIENT_NAME=Comp55 и т. д.

Я что-то упустил в своей конфигурации, чтобы сделать это поле, которое я могу использовать в Kibana?

Спасибо!


person user2406467    schedule 15.07.2013    source источник
comment
Регулярное выражение выглядит хорошо, хотя я бы использовал что-то вроде (?‹CLIENT_NAME›Comp[_a-z\d]+). Не могли бы вы поделиться, что не работает. Кстати, я предполагаю, что у вас также есть выходные данные elasticsearch, определенные в вашем файле conf.   -  person Manish Sapariya    schedule 16.07.2013
comment
Да, я использую встроенный экземпляр ES в Logstash. Думаю, я ожидал, что если я нажму на @fields.client_name в LHS (под столбцами), он покажет мне количество всех извлеченных полей или даже их список, т.е. Comp40.. , Comp55 и т.д. Есть ли в этом смысл?   -  person user2406467    schedule 16.07.2013
comment
Думаю, лучшим примером того, что мне нужно, будет демо-версия Logstash/Kibana (demo.logstash.net). Если вы нажмете @message, вы увидите разбивку примерно на 5 основных категорий для этого типа.   -  person user2406467    schedule 16.07.2013


Ответы (1)


Если у вас возникли трудности с правильным сопоставлением шаблона, отличным решением будет использование отладчика Grok.

Для данной проблемы вы можете просто выделить данные поиска в другую переменную и сохранить дополнительные различные цифры в другой (мусорной) переменной.

Например:

(?<SEARCH_FIELD>Comp\d+)%{GREEDYDATA:trash_variable}]

(Используйте отладчик Grok в приведенном выше шаблоне)

person Adam    schedule 24.07.2013