请求协助配置Filebeat ConfigMap以采集Kubernetes Pod事件至Elasticsearch
请求协助配置Filebeat ConfigMap以采集Kubernetes Pod事件至Elasticsearch
我完全懂你的痛点!Kubernetes默认的事件日志留存时间太短,Pod一删相关记录就没了,要排查随机重启的问题确实头疼,而且你只需要Pod状态变更的核心事件,不想把大量Pod日志塞进Elasticsearch占用资源对吧?
我帮你整理了一个专门针对Pod事件采集的Filebeat ConfigMap配置,你可以直接参考使用:
apiVersion: v1 kind: ConfigMap metadata: name: filebeat-config namespace: kube-system labels: k8s-app: filebeat data: filebeat.yml: |- # 关闭默认的日志采集输入,只保留事件采集 filebeat.inputs: - type: kubernetes enabled: true # 集群内自动获取API Server地址 hosts: ["${KUBERNETES_SERVICE_HOST}:${KUBERNETES_SERVICE_PORT}"] # 留空表示采集所有命名空间的Pod事件,可指定具体命名空间缩小范围 namespace: "" # 只过滤Pod类型的事件,排除其他资源的冗余数据 event_types: - "Pod" include_annotations: true include_labels: true processors: # 自动添加Kubernetes元数据,方便后续筛选 - add_kubernetes_metadata: in_cluster: true # 只保留和Pod重启、状态变更相关的关键事件,避免ES被无关数据填满 - drop_event: when: not: or: - equals: kubernetes.event.reason: "Killing" - equals: kubernetes.event.reason: "Started" - equals: kubernetes.event.reason: "Created" - equals: kubernetes.event.reason: "Failed" - equals: kubernetes.event.reason: "BackOff" # 可根据需求添加其他你关心的事件类型,比如CrashLoopBackOff等 # 配置Elasticsearch输出 output.elasticsearch: hosts: ["<你的Elasticsearch地址>:<端口>"] # 如果ES需要认证,取消下面两行注释并填入对应信息 # username: "${ELASTIC_USER}" # password: "${ELASTIC_PASSWORD}" # 可选:配置Kibana用于可视化事件(如果需要的话) setup.kibana: host: "<你的Kibana地址>:<端口>" logging.level: info logging.to_stderr: true
几个关键配置说明:
type: kubernetes输入:这是Filebeat专门用于采集Kubernetes API事件的类型,和采集Pod日志的输入完全不同,刚好匹配你的需求。event_types: ["Pod"]:精准过滤只保留Pod相关事件,避免采集Deployment、Service等其他资源的事件,减少数据量。drop_event处理器:帮你过滤掉无关事件,只保留和Pod重启、启动、失败、回退相关的核心记录,你可以根据实际排查需求调整这个事件列表。
另外,一定要给Filebeat的ServiceAccount配置足够的权限,否则它无法从Kubernetes API Server拉取事件数据,你可以应用下面的RBAC配置:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: filebeat-event-reader rules: - apiGroups: [""] resources: ["events"] verbs: ["get", "list", "watch"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: filebeat-event-reader-binding subjects: - kind: ServiceAccount name: filebeat namespace: kube-system roleRef: kind: ClusterRole name: filebeat-event-reader apiGroup: rbac.authorization.k8s.io
把上述ConfigMap和RBAC配置应用到集群后,重启Filebeat的DaemonSet/Deployment,就能把Pod的状态事件同步到Elasticsearch了,之后你就可以随时查看Pod重启相关的完整事件记录,不用再担心日志丢失的问题啦!
备注:内容来源于stack exchange,提问作者Sahan




