Вопрос или проблема
Я тестирую 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
для достижения этой цели:
- Откройте ваш
ConfigMap
, содержащий конфигурацию Fluent Bit. - Добавьте фильтр
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", и будет выглядеть, как и ожидалось.
Если у вас возникнут дополнительные вопросы или понадобится помощь, не стесняйтесь задавать их!