Logstash kv filter
У меня есть файл в следующем формате:
10302\t<document>.....</document>
12303\t<document>.....</document>
10054\t<document>.....</document>
10034\t<document>.....</document>
как вы можете видеть, есть два значения, разделенных символом табуляции. Мне необходимо
- индексировать первый токен (например, 10302, 12303...) как идентификатор
- извлечь (и затем проиндексировать) некоторую информацию из второго токена (XML-документ). Другими словами, второй токен будет использоваться с фильтром xml для извлечения некоторой информации.
Можно ли сделать это, разделяя два значения с помощью фильтра kv? В идеале я должен закончить для каждой строки такой документ:
id:10302
msg:<document>....</document>
Я мог бы использовать фильтр Грока, но я бы хотел избежать каких-либо регулярных выражений, поскольку обнаружение поля очень легко и может быть выполнено с помощью простой логики ключ-значение. Однако, используя простое обнаружение kv, я заканчиваю следующим:
"10302": <document>.....</document>
"12303": <document>.....</document>
"10054": <document>.....</document>
"10034": <document>.....</document>
и это не хочу, мне нужно.
1 ответ
Насколько я знаю, невозможно использовать kv для той работы, которую вы хотите выполнять, поскольку нет возможных ключей для идентификатора (10302, 10303, 10304...). Возможного ключа нет, так как перед идентификатором ничего нет.
Эта конфигурация grok будет работать при условии, что каждый документ id + находится в одной строке:
grok {
match => { "message" => "^%{INT:ID}\t%{GREEDYDATA:msg}"}
}