Как удалить дату “timestamp” из логов Fluent-Bit?

Вопрос или проблема

Я тестирую Fluent-bit для своего локального кластера с интерфейсом CRI и отправляю логи в канал Slack. Но проблема в том, что Fluent-Bit присваивает “timestamp” в логе, и я не могу его удалить. Может, кто-то знает, как это сделать?

Вот ConfigMap моего Fluent-Bit:

apiVersion: v1
kind: ConfigMap
metadata:
  name: fluent-bit-config
  namespace: logging1
  labels:
    k8s-app: fluent-bit
data:
  # Файлы конфигурации: сервер, ввод, фильтры и вывод
  # ======================================================
  fluent-bit.conf: |
    [SERVICE]
        Flush         2
        Log_Level     info
        Daemon        off
        Parsers_File  parsers.conf
        HTTP_Server   On
        HTTP_Listen   0.0.0.0
        HTTP_Port     2020

    @INCLUDE input-kubernetes.conf
    @INCLUDE filter-kubernetes.conf
    @INCLUDE output-syslog.conf

  input-kubernetes.conf: |
    [INPUT]
        Name              tail
        Tag               kube.*
        Path              /var/log/containers/*
        Parser            cri
        DB                /var/log/flb_kube.db
        Mem_Buf_Limit     5MB
        Skip_Long_Lines   On

  filter-kubernetes.conf: |

  output-syslog.conf: |
    [OUTPUT]
        Name               slack
        Match              *
        webhook            [ССЫЛКА]

  parsers.conf: |
    [PARSER]
        Name          cc
        Format        regex
        Format        cri
        Regex         ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>[^ ]*) (?<message>.*)$
        Time_Key      time
        Time_Format   %Y-%m-%dT%H:%M:%S.%L%z

Также вот сырые логи, получаемые от моего приложения:

2023-04-12T16:09:02.016483996Z stderr F 10.244.0.1 – – [12/Apr/2023 16:09:02] “GET / HTTP/1.1” 200 –

А вот лог, который отправляется в Slack:

[“timestamp”: 1681315742.016981904, {“log”=>”2023-04-12T16:09:02.016483996Z stderr F 10.244.0.1 – – [12/Apr/2023 16:09:02] “GET / HTTP/1.1” 200 -“}]

Вы можете использовать фильтр record_transformer для удаления ключа timestamp с помощью remove_keys

<filter foo.bar>
  @type record_transformer
  remove_keys timestamp
</filter>

Ответ или решение

Чтобы удалить "timestamp" из логов Fluent Bit, вам необходимо использовать фильтр record_transformer, который позволяет модифицировать сообщения логов непосредственно перед их отправкой на выход. В вашем случае вы можете настроить фильтр для удаления поля "timestamp".

Вот пример того, как вы можете внести изменения в ваш ConfigMap для достижения этой цели:

  1. Откройте ваш ConfigMap, содержащий конфигурацию Fluent Bit.
  2. Добавьте фильтр record_transformer в файл filter-kubernetes.conf.

Приведённый ниже код демонстрирует, как это можно сделать:

apiVersion: v1
kind: ConfigMap
metadata:
  name: fluent-bit-config
  namespace: logging1
  labels:
    k8s-app: fluent-bit
data:
  fluent-bit.conf: |
    [SERVICE]
        Flush         2
        Log_Level     info
        Daemon        off
        Parsers_File  parsers.conf
        HTTP_Server   On
        HTTP_Listen   0.0.0.0
        HTTP_Port     2020

    @INCLUDE input-kubernetes.conf
    @INCLUDE filter-kubernetes.conf
    @INCLUDE output-syslog.conf

  input-kubernetes.conf: |
    [INPUT]
        Name              tail
        Tag               kube.*
        Path              /var/log/containers/*
        Parser            cri
        DB                /var/log/flb_kube.db
        Mem_Buf_Limit     5MB
        Skip_Long_Lines   On

  filter-kubernetes.conf: |
    [FILTER]
        Name record_transformer
        Match kube.*
        Remove_keys timestamp

  output-syslog.conf: |
    [OUTPUT]
        Name               slack
        Match              *
        webhook            [LINK]

  parsers.conf: |
    [PARSER]
        Name          cc
        Format        regex
        Format        cri
        Regex         ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>[^ ]*) (?<message>.*)$
        Time_Key      time
        Time_Format   %Y-%m-%dT%H:%M:%S.%L%z

Пояснение конфигурации

  • Директива Remove_keys timestamp в секции [FILTER] удалит ключ "timestamp" из всех записей, которые обрабатываются данным фильтром, что, в свою очередь, предотвратит его отображение в выводимых логах в Slack.

Итоги

После внесения этих изменений перезапустите Fluent Bit, чтобы он применил новую конфигурацию. Теперь лог, который отправляется в Slack, не будет включать "timestamp", и будет выглядеть, как и ожидалось.

Если у вас возникнут дополнительные вопросы или понадобится помощь, не стесняйтесь задавать их!

Оцените материал
Добавить комментарий

Капча загружается...