我正在尝试使用 FluentBit、Loki 和 Grafana 收集 Kubernetes 环境中的容器日志。
我想附加 Kubernetes Pod 名称作为标签,这样当我在 Grafana 中查询日志时,就可以更容易地将日志与我的 Pod 匹配。
尽管我可以添加自定义标签,但我无法公开和附加 Kubernetes 元数据信息:
这是我的 FluentBit 配置图:
custom_parsers.conf: |
[PARSER]
Name docker_x
Format json
Time_Key time
Time_Format %Y-%m-%dT%H:%M:%S %z
Decode_Field_as escaped_utf8 log
fluent-bit.conf: |
[SERVICE]
Daemon Off
Flush 180
Log_Level info
Parsers_File parsers.conf
Parsers_File custom_parsers.conf
HTTP_Server On
HTTP_Listen 0.0.0.0
HTTP_Port 2020
Health_Check On
Retry_Limit 3
scheduler.base 3
scheduler.cap 30
[INPUT]
Name tail
Tag kube.*
Exclude_Path /var/log/containers/fluent*.log, /var/log/containers/traefik*.log
Path /var/log/containers/*.log
multiline.parser docker, cri
Parser docker
DB /var/log/flb_scs.db
Mem_Buf_Limit 64MB
Buffer_Chunk_Size 6MB
Buffer_Max_Size 6MB
Refresh_Interval 60
Skip_Long_Lines On
Skip_Empty_lines On
[FILTER]
Name kubernetes
Match kube.*
Buffer_Size 0
Kube_URL https://kubernetes.default.svc:443
Kube_Tag_Prefix kube.var.log.containers.
Merge_Log On
Merge_Log_Key log_processed
Merge_Log_Trim On
K8S-Logging.Parser On
K8S-Logging.Exclude Off
Labels On
[FILTER]
Name grep
Match kube.*
Exclude $kubernetes['namespace_name'] kube-system
[FILTER]
Name grep
Match *
Exclude $kubernetes['pod_name'] (flu|traefik).*
[FILTER]
Name throttle
Match *
Rate 2000
Window 3
Interval 30s
Print_Status true
[OUTPUT]
Name loki
Match *
Host loki.svc.foo.bar
Port 80
labels foo_bar=${FOO_BAR}, pod_name=$kubernetes['pod_name']
auto_kubernetes_labels on
添加了自定义的“foo_bar”标签,但没有添加与 Kubernetes 相关的标签,例如“pod_name”。
知道我做错了什么吗?
答案1
我的错,我应该增加日志详细程度以便进行调试。“apiextensions.k8s.io”API 组存在权限问题,因此我必须创建服务帐户、RBAC 角色并进行绑定以获取/读取/监视命名空间和 pod。