Ведение журнала MDC с изменением позиций значений

Я получил сообщение журнала, как это:

<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 для этой ситуации....


person KiKo    schedule 22.03.2018    source источник
comment
Используйте фильтр kv на %mdc часть.   -  person baudsp    schedule 23.03.2018
comment
Рассматривали ли вы github.com/logstash/logstash-logback-encoder?   -  person ThomasRS    schedule 29.03.2018