Я получил сообщение журнала, как это:
<pattern>
%d{yyyy-MM-dd HH:mm:ss} %level %logger{0} %mdc - %msg %n
</pattern>
2018-03-22 13:17:47 INFO SomeController [X-Span-Export=false, method=someMethod(), X-B3-SpanId=deef3c47193ec4a6, X-B3-TraceId=0cecd4b78e1d8357] - Параметры: [id=40 ]
В %mdc я записываю некоторые данные, как вы можете видеть: диапазон и идентификатор трассировки, имя метода и экспорт.
Мне нужно разделить сообщение на отдельные поля и использовать logstash для отправки через эластичный поиск в кибану.
Итак, я создал фильтр grok:
grok {
match => { "message" => "%{DATESTAMP:date} %{WORD:level} %{WORD:class} \[X-Span-Export=%{GREEDYDATA:export}, method=%{GREEDYDATA:method}, X-B3-SpanId=%{GREEDYDATA:span_id}, X-B3-TraceId=%{GREEDYDATA:trace_id}\] - %{GREEDYDATA:log_message}" }
}
Результат:
{
"date": [
"18-03-22 13:17:47"
],
"level": [
"INFO"
],
"class": [
"SomeController"
],
"export": [
"false"
],
"method": [
"someMethod()"
],
"span_id": [
"deef3c47193ec4a6"
],
"trace_id": [
"0cecd4b78e1d8357"
],
"log_message": [
"Parameters: [id=40]"
]
}
Это работает, но проблема в том, что %mdc меняет позиции, поэтому журнал иногда выглядит так:
2018-03-22 13:17:47 INFO SomeController [X-B3-SpanId=deef3c47193ec4a6, метод=someMethod(), X-Span-Export=false X-B3-TraceId=0cecd4b78e1d8357] - Параметры: [id=40]
Как вы можете видеть здесь, первым является spanId... поэтому фильтр смешивает значения. Как я могу сделать правильную конфигурацию logstash для этой ситуации....