当前位置: 首页 > article >正文

k8s部署ELK补充篇:kubernetes-event-exporter收集Kubernetes集群中的事件

k8s部署ELK补充篇:kubernetes-event-exporter收集Kubernetes集群中的事件

文章目录

  • k8s部署ELK补充篇:kubernetes-event-exporter收集Kubernetes集群中的事件
  • 一、kubernetes-event-exporter简介
  • 二、kubernetes-event-exporter实战部署
    • 1. 创建Namespace(elk-namespace.yaml)
    • 2. 部署Logstash(event-logstash.yaml)
    • 3. 部署kubernetes-event-exporter(event-exporter.yaml)
    • 4. 部署所有资源
    • 5. 验证Logstash Pod状态
  • 三、Kibana页面展示
  • 总结


在 Kubernetes 集群中,事件(Event) 是用于记录资源状态变化和异常信息的重要机制,常用于排查部署问题、资源调度异常或系统错误等。然而,Kubernetes 默认只保留最近一小时内的事件,且仅能通过 kubectl get events 命令临时查看,无法满足集中管理、持久化存储和告警通知等生产需求。

为了解决这一问题,我们可以引入 kubernetes-event-exporter,它能够实时捕捉集群中的事件,并将其导出到日志系统、告警平台或其他后端存储系统中。配合 ELK(Elasticsearch + Logstash + Kibana)这一成熟的日志分析平台,我们可以实现对集群事件的统一采集、分析和可视化展示。

本篇文章将介绍如何在 Kubernetes 环境中部署 kubernetes-event-exporter,实现事件的收集与输出,为集群可观测性和故障排查提供更全面的数据支撑。在这里插入图片描述

一、kubernetes-event-exporter简介

kubernetes-event-exporter 是一款专为 Kubernetes 设计的轻量级事件收集与导出工具,能够实时捕捉 Kubernetes 集群中的事件(Events),并将其导出到指定的后端系统,如 Elasticsearch、Loki、Kafka、Webhook 或文件等。
相比于通过 kubectl get events 命令手动查看事件,这款工具支持 自动化持久化结构化 地处理事件数据,特别适用于与日志系统、监控平台或告警系统集成,实现对集群状态的可观测性增强和异常快速响应。
kubernetes-event-exporter 提供了灵活的过滤规则和接收器配置,用户可以根据事件的类型、命名空间、资源或原因等条件,自定义输出策略,是构建 Kubernetes 运维监控体系的有力补充组件。

二、kubernetes-event-exporter实战部署

1. 创建Namespace(elk-namespace.yaml)

首先,创建一个新的命名空间,用于部署 ELK 相关的资源

apiVersion: v1
kind: Namespace
metadata:name: elk

2. 部署Logstash(event-logstash.yaml)

以下配置将部署 Logstash,并从 Kafka 中拉取事件数据,再输出到 Elasticsearch

kind: Deployment
apiVersion: apps/v1
metadata:name: kube-event-logstashnamespace: elklabels:app: kube-event-logstash
spec:replicas: 1selector:matchLabels:app: kube-event-logstashtemplate:metadata:creationTimestamp: nulllabels:app: kube-event-logstashannotations:kubesphere.io/restartedAt: '2024-02-22T09:03:36.215Z'spec:volumes:- name: kube-event-logstash-pipeline-configconfigMap:name: kube-event-logstash-pipeline-configdefaultMode: 420- name: kube-event-logstash-configconfigMap:name: kube-event-logstash-config- name: logstash-configemptyDir: {}initContainers:- name: copy-logstash-configimage: harbor.local/k8s/busybox:1.37.0command: ['sh', '-c', 'cp /tmp/logstash.yml /usr/share/logstash/config/logstash.yml && chmod 777 /usr/share/logstash/config/logstash.yml']volumeMounts:- name: kube-event-logstash-configmountPath: /tmp/logstash.ymlsubPath: logstash.yml- name: logstash-configmountPath: /usr/share/logstash/configcontainers:- name: kube-event-logstashimage: harbor.local/k8s/logstash:7.17.0env:- name: NODE_NAMEvalueFrom:fieldRef:apiVersion: v1fieldPath: metadata.name- name: PIPELINE_BATCH_SIZEvalue: '4000'- name: PIPELINE_BATCH_DELAYvalue: '100'- name: PIPELINE_WORKERSvalue: '4'- name: LS_JAVA_OPTSvalue: '-Xms2g -Xmx3500m'  #JVM内存设置resources:limits:cpu: '2'memory: 4Girequests:cpu: '1'memory: 1GivolumeMounts:- name: kube-event-logstash-pipeline-configmountPath: /usr/share/logstash/pipeline- name: logstash-configmountPath: /usr/share/logstash/config/logstash.ymlsubPath: logstash.ymllivenessProbe:tcpSocket:port: 9600initialDelaySeconds: 39timeoutSeconds: 5periodSeconds: 30successThreshold: 1failureThreshold: 2readinessProbe:tcpSocket:port: 9600initialDelaySeconds: 39timeoutSeconds: 5periodSeconds: 30successThreshold: 1failureThreshold: 2terminationMessagePath: /dev/termination-logterminationMessagePolicy: FileimagePullPolicy: IfNotPresentrestartPolicy: AlwaysterminationGracePeriodSeconds: 30dnsPolicy: ClusterFirstsecurityContext: {}schedulerName: default-schedulerstrategy:type: RollingUpdaterollingUpdate:maxUnavailable: 25%maxSurge: 25%revisionHistoryLimit: 10progressDeadlineSeconds: 600
---
kind: ConfigMap
apiVersion: v1
metadata:name: kube-event-logstash-pipeline-confignamespace: elk
data:logstash.conf: |-input {kafka {bootstrap_servers => "kafka-0.kafka-headless.elk.svc.cluster.local:9092"group_id => "logstash-consumer-group-event"topics => ["k8s-event"]codec => "json"consumer_threads => 1decorate_events => truesecurity_protocol => "PLAINTEXT"  }}output {elasticsearch {hosts => ["http://elasticsearch-0.elasticsearch-cluster.elk.svc.cluster.local:9200"]index => "k8s-event-%{+YYYY.MM.dd}"}}
---
kind: ConfigMap
apiVersion: v1
metadata:name: kube-event-logstash-confignamespace: elk
data:logstash.yml: |-http.host: "0.0.0.0"xpack.monitoring.elasticsearch.hosts: ["http://elasticsearch-0.elasticsearch-cluster.elk.svc.cluster.local:9200"]

3. 部署kubernetes-event-exporter(event-exporter.yaml)

包含 ServiceAccount、ClusterRoleBinding、配置文件 ConfigMap 及 Deployment

apiVersion: v1
kind: ServiceAccount
metadata:namespace: elkname: event-exporter
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: event-exporter
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: view
subjects:- kind: ServiceAccountnamespace: elkname: event-exporter
---
apiVersion: v1
kind: ConfigMap
metadata:name: event-exporter-cfgnamespace: elk
data:config.yaml: |logLevel: errorlogFormat: jsonroute:routes:- match:- receiver: "kafka"drop:- kind: "Service"  #可选,忽略 Service 类型事件receivers:- name: "kafka"kafka:clientId: "kubernetes"topic: "k8s-event"brokers:- "kafka-0.kafka-headless.elk.svc.cluster.local:9092"compressionCodec: "snappy"layout:  #自定义字段格式kind: "{{ .InvolvedObject.Kind }}"namespace: "{{ .InvolvedObject.Namespace }}"name: "{{ .InvolvedObject.Name }}"reason: "{{ .Reason }}"message: "{{ .Message }}"type: "{{ .Type }}"timestamp: "{{ .GetTimestampISO8601 }}"cluster: "sda-pre-center"
---
apiVersion: apps/v1
kind: Deployment
metadata:name: event-exporternamespace: elk
spec:replicas: 1template:metadata:labels:app: event-exporterversion: v1spec:serviceAccountName: event-exportercontainers:- name: event-exporterimage: harbor.local/k8s/kubernetes-event-exporter:v1imagePullPolicy: IfNotPresentargs:- -conf=/data/config.yamlvolumeMounts:- mountPath: /dataname: cfgvolumes:- name: cfgconfigMap:name: event-exporter-cfgselector:matchLabels:app: event-exporterversion: v1

4. 部署所有资源

将上述 YAML 文件保存后,使用以下命令统一部署

kubectl apply -f elk-namespace.yaml
kubectl apply -f event-logstash.yaml
kubectl apply -f event-exporter.yaml

5. 验证Logstash Pod状态

kubectl get pod -n elk

在这里插入图片描述

三、Kibana页面展示

访问地址:http://ip:30601
在 Kibana 中创建索引模式 k8s-event-*,可视化展示集群事件数据(不知道怎么创建的可以看我前面的文章)

在这里插入图片描述


总结

📌 本文作为对 ELK 在 Kubernetes 中部署使用的补充,介绍了如何通过部署 kubernetes-event-exporter 实时采集集群事件,并结合 Kafka 与 Logstash 将事件数据统一输出至 Elasticsearch,从而实现对集群事件的集中管理与可视化展示。
通过这一方案,Kubernetes 原生事件不再局限于短时查看和手动排查,而是纳入到完整的日志与监控体系中,极大提升了运维的效率与可观测性,是生产环境中不可或缺的重要组成部分。

http://www.lryc.cn/news/2386037.html

相关文章:

  • 【Excel VBA 】窗体控件分类
  • C++性能相关的部分内容
  • Spring Boot 项目中常用的 ORM 框架 (JPA/Hibernate) 在性能方面有哪些需要注意的点?
  • 基于大模型的大肠癌全流程预测与诊疗方案研究报告
  • 解决DeepSeek部署难题:提升效率与稳定性的关键策略
  • AI进行提问、改写、生图、联网搜索资料,嘎嘎方便!
  • GStreamer开发笔记(四):ubuntu搭建GStreamer基础开发环境以及基础Demo
  • 2021年认证杯SPSSPRO杯数学建模A题(第二阶段)医学图像的配准全过程文档及程序
  • CV中常用Backbone-3:Clip/SAM原理以及代码操作
  • RPC 协议详解、案例分析与应用场景
  • dify-plugin-daemon的.env配置文件
  • 【Python】开发工具uv
  • 《技术择时,价值择股》速读笔记
  • Python可视化设计原则
  • SAP重塑云ERP应用套件
  • 2025.5.25总结
  • (九)PMSM驱动控制学习---无感控制之高阶滑膜观测器
  • 6个跨境电商独立站平台
  • 电子电路:电学都有哪些核心概念?
  • SQL进阶之旅 Day 2:基础查询优化技巧
  • 时序数据库 TDengine × Superset:一键构建你的可视化分析系统
  • 一键化部署
  • Win 系统 conda 如何配置镜像源
  • Devicenet主转Profinet网关助力改造焊接机器人系统智能升级
  • 《STL--list的使用及其底层实现》
  • whisper相关的开源项目 (asr)
  • python的pip怎么配置的国内镜像
  • PCB 通孔是电容性的,但不一定是电容器
  • 领域驱动设计与COLA框架:从理论到实践的落地之路
  • 公有云AWS基础架构与核心服务:从概念到实践