Нашёл такой пример в документации
[FILTER]
Name Kubernetes
Match *
Kube_URL https://kubernetes.default.svc.cluster.local:443
Merge_Log On
Merge_Log_Key log_processed
K8S-Logging.Exclude Off
K8S-Logging.Parser On
[FILTER]
Name modify
Match *
Copy namespace_name namespace
Copy container_name container_name
Copy host hostname
Что именно не обогащается? Namespace не видно в метках? Чуть подробнее с примером, пожалуйста.
Финальный лог имеет формат @timestamp:May 25, 2022 @ 11:28:11.583 log:Incoming request GET /api/version 10.43.0.1:37470 with request ID '27dsf4367-fa26-4550-b41e-33bcf020180a' at 2022-05-25 11:28:11.583031656 +0300 MSK m=+2228315.922442752 logtag:F message:Incoming request GET /api/version 10.41.0.0:37370 with request ID '27ad9367-fa26-4490-b41e-33bcf020180a' at 2022-05-25 11:28:11.583031656 +0300 MSK m=+2228615.975642752 stream:stdout time:May 25, 2022 @ 11:28:11.583 _id:nfgU-oABSJDD5R2z8D _index:kube.c-dev _score: - _type:_doc Я рассчитывал увидеть там поля которые добавил в фильтре (namespace, container_name): [FILTER] Name modify Match * Copy namespace_name namespace Copy container_name container_name Copy host hostname
возможно нужно добавить ещё сдвиг: [FILTER] Name nest Match * Operation lift Nested_under kubernetes
встречал такое на стаковерфлоу, спасибо. Сейчас попробую
не сработало. непонятно почему конечно. Есть ещё какие-нибудь идеи?
можно пожалуйста версию fluent-bit, как запускается (демонсет/сайдкар/что-либо ещё) и полный конфиг
Версия fluent-bit 0.15.14 Запуск: daemonset custom_parsers.conf: | [PARSER] Name cri Format regex Regex ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>[^ ]*) (?<log>(?<message>.*))$ Time_Key time Time_Format %Y-%m-%dT%H:%M:%S.%L%z Time_Keep On fluent-bit.conf: | [SERVICE] Flush 1 Log_Level info Daemon off Parsers_File custom_parsers.conf HTTP_Server On HTTP_Listen 0.0.0.0 HTTP_Port 2020 [INPUT] Name tail Tag kube.<namespace_name>.<pod_name>.<container_name> Tag_Regex (?<pod_name>[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*)_(?<namespace_name>[^_]+)_(?<container_name>.+)-(?<docker_id>[a-z0-9]{64})\.log$ Path /var/log/containers/*.log Parser cri DB /var/log/flb_kube.db Mem_Buf_Limit 5MB Skip_Long_Lines On Refresh_Interval 10 [FILTER] Name kubernetes Match ^kube\.(?<namespace_name>[^_]+)\.(?<pod_name>[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*)\.(?<container_name>.+)$ Merge_Log On Merge_Log_Key log_processed K8S-Logging.Parser On K8S-Logging.Exclude Off [FILTER] Name grep Match * Exclude log kube-probe [FILTER] Name Kubernetes Match kube.* Kube_URL https://kubernetes.default.svc:443 Merge_Log On Merge_Log_Key log_processed K8S-Logging.Exclude Off K8S-Logging.Parser On [FILTER] Name nest Match * Operation lift Nested_under kubernetes [FILTER] Name modify Match * Copy namespace_name namespace Copy container_name container_name Copy host hostname [OUTPUT] Name es Match kube.dev.* Host 192.168.146.2 Port 9200 Index kube.dev HTTP_User fluentbit Http_passwd password Buffer_Size 50M Trace_Error On
Первое, два фильтра kubernetes, стоит попробовать оставить один. Лучше убрать тот, что с регекспом и оставить просто kube.* - в качестве попытки сузить проблему. Второе, посмотреть их troubleshooting guide и логи. https://docs.fluentbit.io/manual/pipeline/filters/kubernetes#troubleshooting Проверить, ходит ли fluent-bit в api server успешно, может что-то блокирует доступ.
Благодарю за помощь
странно в debug нет сообщений от filter, но если я ввожу команду из статьи kubectl auth can-i list pods --as=system:serviceaccount:logging:fluent-bit мне выводит "yes". В чём проблема я так и не понял. Есть какой-нибудь более простой путь, например как в fluentd ? <filter kube.**> @type record_transformer enable_ruby true auto_typecast true <record> namespace ${tag_parts[1]} pod ${tag_parts[2]} container ${tag_parts[3]} </record> </filter>
Обсуждают сегодня