Драйвер ведения журнала Fluentd отправляет неструктурированное сообщение журнала - PullRequest
0 голосов
/ 12 марта 2019

В моей среде есть настройка, в которой журналы докер-контейнеров перенаправляются в fluentd, а затем fluentd переходит в спанклинг.

У меня проблема с fluentd, некоторые из журналов док-контейнеров не имеют структурированного формата.Из документации я вижу, что: драйвер журнала fluentd отправляет следующие метаданные в структурированном сообщении журнала:

container_id, container_name, source, log

Моя проблема заключается в том, что некоторые журналы имеют неструктурированную информацию метаданных: например: Журнал 1:

{"log":"2019/03/12 13:59:49 [info] 6#6: *2425596 client closed connection while waiting for request, client: 10.17.84.12, server: 0.0.0.0:80","container_id":"789459f8f8a52c8b4b","container_name":"testingcontainer-1ed-fwij4-EcsTaskDefinition-1TF1DH,"source":"stderr"}

Журнал 2:

{"container_id":"26749a26500dd04e92fc","container_name":"/4C4DTHQR2V6C-EcsTaskDefinition-1908NOZPKPKY0-1","source":"stdout","log":"\u001B[0mGET \u001B[32m200 \u001B[0m0.634 ms - -\u001B[0m"}

Эти два журнала имеют разный порядок информации метаданных (log1- [log, conatiner-name, container_id, source]) (log2- [container_id, conatiner-name, source, log]).Из-за этого я получаю некоторые проблемы в спленке.Как я могу решить эту проблему, чтобы получить тот же порядок метаданных?

мой файл конфигурации fluend

<source>
  @type  forward
  @id    input1
  @label @mainstream
  @log_level trace
  port  24224
</source>

<label @mainstream>

<match *.**>
  type copy
  <store>
    @type file
    @id   output_docker1
    path         /fluentd/log/docker.*.log
    symlink_path /fluentd/log/docker.log
    append       true
    time_slice_format %Y%m%d
    time_slice_wait   1m
    time_format       %Y%m%dT%H%M%S%z
    utc
    buffer_chunk_limit 512m
  </store>
  <store>
   @type s3
   @id   output_docker2
   @log_level trace

   s3_bucket bucketwert-1
   s3_region us-east-1
   path logs/
   buffer_path /fluentd/log/docker.log
   s3_object_key_format %{path}%{time_slice}_sbx_docker_%{index}.%{file_extension}
   flush_interval 3600s
   time_slice_format %Y%m%d
   time_format       %Y%m%dT%H%M%S%z
   utc
   buffer_chunk_limit 512m
  </store>
</match>
</label>

1 Ответ

0 голосов
/ 13 марта 2019

Как насчет fluent-plugin-record-sort ?

Или вы можете использовать встроенный плагин record_trandformer , как показано ниже, если вы знаете все ключи в записи:

<source>
  @type dummy
  tag dummy
  dummy [
    {"log": "log1", "container_id": "123", "container_name": "name1", "source": "stderr"},
    {"container_id": "456", "container_name": "name2", "source": "stderr", "log": "log2"}
  ]
</source>

<filter dummy>
  @type record_transformer
  renew_record true
  keep_keys log,container_id,container_name,source
</filter>

<match dummy>
  @type stdout
</match>

ОБНОВЛЕНИЕ (не проверено):

<source>
  @type  forward
  @id    input1
  @label @mainstream
  @log_level trace
  port  24224
</source>

<label @mainstream>
<filter>
  @type record_transformer
  renew_record true
  keep_keys log,container_id,container_name,source
</filter>
<match *.**>
  @type copy
  <store>
    @type file
    @id   output_docker1
    path         /fluentd/log/docker.*.log
    symlink_path /fluentd/log/docker.log
    append       true
    time_slice_format %Y%m%d
    time_slice_wait   1m
    time_format       %Y%m%dT%H%M%S%z
    utc
    buffer_chunk_limit 512m
  </store>
  <store>
   @type s3
   @id   output_docker2
   @log_level trace

   s3_bucket bucketwert-1
   s3_region us-east-1
   path logs/
   buffer_path /fluentd/log/docker.log
   s3_object_key_format %{path}%{time_slice}_sbx_docker_%{index}.%{file_extension}
   flush_interval 3600s
   time_slice_format %Y%m%d
   time_format       %Y%m%dT%H%M%S%z
   utc
   buffer_chunk_limit 512m
  </store>
</match>
</label>
...