如何收集Kubernetes集群API Server、调度器、Autoscaler日志?能否用FluentD?
Kubernetes核心组件日志采集方案
一、节点上核心组件日志的存储位置
不同部署方式下,日志存储位置略有差异,常见场景如下:
- API Server、调度器(kube-scheduler)、控制器管理器(kube-controller-manager):
- 容器化部署(如kubeadm搭建的集群):日志文件存放在
/var/log/pods/kube-system_*目录下,每个组件对应的Pod会有独立子目录,里面的.log文件即为容器日志。 - 二进制/systemd部署:日志默认输出到systemd日志系统,可通过
journalctl -u kube-apiserver、journalctl -u kube-scheduler命令查看;部分旧版本会直接写入/var/log/kube-apiserver.log、/var/log/kube-scheduler.log这类本地文件。
- 容器化部署(如kubeadm搭建的集群):日志文件存放在
- Cluster Autoscaler:
- 作为Pod部署在kube-system命名空间时,日志路径为
/var/log/pods/kube-system_cluster-autoscaler-*/*.log。 - 二进制部署时,日志通常存储在
/var/log/cluster-autoscaler.log(具体路径取决于部署时的自定义配置)。
- 作为Pod部署在kube-system命名空间时,日志路径为
二、复用FluentD采集集群日志
完全可以复用现有FluentD采集集群核心组件日志,分两种场景配置:
1. 采集容器化部署的核心组件日志
这类组件以Pod形式运行在kube-system命名空间,直接用FluentD的tail插件监听对应日志文件即可:
- 配置片段示例:
<source> @type tail path /var/log/pods/kube-system_kube-apiserver-*/*.log,/var/log/pods/kube-system_kube-scheduler-*/*.log,/var/log/pods/kube-system_cluster-autoscaler-*/*.log tag kube.core.* <parse> @type json </parse> </source>
- 配合Kubernetes Metadata插件,给日志打上
namespace、component等标签,方便后续分类存储和查询:
<filter kube.core.*> @type kubernetes_metadata </filter>
2. 采集systemd管理的组件日志
如果组件是通过systemd启动的(二进制部署场景),用FluentD的systemd插件直接读取journal日志:
- 配置示例(以API Server为例):
<source> @type systemd path /run/log/journal filters [{ "_SYSTEMD_UNIT": "kube-apiserver.service" }] tag kube.apiserver read_from_head true </source>
- 复制该配置块,修改
_SYSTEMD_UNIT为kube-scheduler.service、kube-controller-manager.service,即可实现多组件日志采集。
三、采集注意事项
- 权限配置:确保FluentD Pod(或节点上的FluentD进程)有权限访问
/var/log/pods目录和/run/log/journal目录,容器化部署时可通过挂载主机目录实现。 - 日志过滤:添加正则过滤规则,只采集有用的日志条目,减少不必要的数据传输。
- 滚动日志处理:针对文件形式的日志,配置FluentD的
tail插件跟踪日志滚动,避免遗漏日志。
内容的提问来源于stack exchange,提问作者Jerald Baker
相关产品推荐
相关产品推荐

