You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

请求协助配置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

火山引擎 最新活动