EKS DaemonSet中Fluent-Bit存活探针无日志输出问题排查
问题分析与解决方案
为什么看不到健康检查消息?
Kubernetes的exec类型存活探针是由kubelet直接在容器内启动独立进程执行的,这个进程的标准输出/错误并不会接入容器主进程的IO流。而Fluent-Bit默认采集的是容器主进程的stdout/stderr或指定日志文件内容,因此你无法在日志中看到探针的echo输出。
更优实现方式
方式一:利用Fluent-Bit内置HTTP健康端点(推荐)
Fluent-Bit默认在2020端口提供HTTP健康检查接口,直接用httpGet类型探针替代exec探针,同时可配置Fluent-Bit采集健康检查请求日志:
1. 更新DaemonSet的探针配置
livenessProbe: httpGet: path: / port: 2020 periodSeconds: 60 initialDelaySeconds: 600
2. 配置Fluent-Bit采集健康检查日志
在Fluent-Bit的配置文件中添加HTTP输入捕获健康检查请求:
[INPUT] name http listen 0.0.0.0 port 2020 tag health.check # 配置OUTPUT将该日志输出到目标存储(如CloudWatch、ES等) [OUTPUT] name cloudwatch match health.check region <你的集群区域> log_group_name /aws/eks/fluent-bit/health-check log_stream_prefix fluent-bit-
方式二:将探针输出写入日志文件并采集
如果坚持使用exec探针,可将输出写入容器内的日志文件,再让Fluent-Bit采集该文件:
1. 修改探针命令
livenessProbe: periodSeconds: 60 initialDelaySeconds: 600 exec: command: - "/bin/sh" - "-c" - "echo '{\"health\": \"check\"}' >> /var/log/fluent-bit-health.log || exit 1"
2. 配置Fluent-Bit采集日志文件
[INPUT] name tail path /var/log/fluent-bit-health.log tag health.check read_from_head true # 配置对应OUTPUT输出日志
注意:需确保容器对/var/log目录有写入权限,否则探针执行会失败。
方式三:通过Prometheus指标监控(适合运维告警)
Fluent-Bit支持暴露Prometheus指标,其中fluentbit_up指标可直接反映服务健康状态,无需依赖日志:
1. 配置Fluent-Bit暴露Prometheus指标
[OUTPUT] name prometheus match * host 0.0.0.0 port 2021 metrics_export prometheus_tcp
2. 配置Prometheus采集与告警
在Prometheus中添加该端点的采集配置,并创建告警规则:当fluentbit_up == 0时触发告警,这种方式比日志告警更及时可靠。
内容的提问来源于stack exchange,提问作者fledgling
相关产品推荐
相关产品推荐

