Конфигурация FluentD для индексации по всем полям в логе - PullRequest
0 голосов
/ 27 апреля 2020

Привет, у меня есть журнал, представленный ниже. Что создать индекс для всех полей ниже, таких как отметка времени, уровень, журнал и т. Д. c в elasti c. Как этого добиться в свободной конфигурации? Попробовал ниже, и это не сработало

Log

timestamp:2020-04-27 09:37:56.996 level:INFO level_value:20000 thread:http-nio-8080-exec-2 logger:com.scb.nexus.service.phoenix.components.ApplicationEventListener context:default message:org.springframework.web.context.support.ServletRequestHandledEvent traceId:a122e51aa3d24d4a spanId:a122e51aa3d24d4a spanExportable:false X-Span-Export:false X-B3-SpanId:a122e51aa3d24d4a X-B3-TraceId:a122e51aa3d24d4a

fluentd conf

 <match **>
      @type elasticsearch
      time_as_integer true
      include_timestamp true
      host host
      port 9200
      user userName
      password password
      scheme https
      ssl_verify false
      ssl_version TLSv1_2
      index_name testIndex
    </match>
    <filter **>
      @type parser
      key_name log
      reserve_data true
      <parse>
        @type json
      </parse>
    </filter>

1 Ответ

0 голосов
/ 28 апреля 2020

Журналы не в формате JSON, поэтому вы не можете использовать синтаксический анализатор Json. У вас есть следующие варианты решения этой проблемы

1 - используйте анализатор регулярных выражений, как описано здесь https://docs.fluentd.org/parser/regexp 2 - используйте плагин record_reformer и извлекайте элементы вручную

пример:

 <match **>
    @type record_reformer
    tag parsed.${tag_suffix[2]}
    renew_record false
    enable_ruby true
    <record>
       timestamp ${record['log'].scan(/timestamp:(?<param>[^ ]+ [^ ]+)/).flatten.compact.sort.first}
       log_level ${record['log'].scan(/level:(?<param>[^ ]+)/).flatten.compact.sort.first}
       level_value ${record['log'].scan(/level_value:(?<param>[^ ]+)/).flatten.compact.sort.first}
   </record>
  </match>

 <match parsed.**>
  @type elasticsearch
  time_as_integer true
  include_timestamp true
  host host
  port 9200
  user userName
  password password
  scheme https
  ssl_verify false
  ssl_version TLSv1_2
  index_name testIndex
</match>

...