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.pswp.cn/pingmian/82854.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apache 高级配置实战:从连接保持到日志分析的完整指南

Apache 高级配置实战:从连接保持到日志分析的完整指南 前言 最近在深入学习 Apache 服务器配置时,发现很多朋友对 Apache 的高级功能还不够了解。作为一个在运维路上摸爬滚打的技术人,我想把这些实用的配置技巧分享给大家。今天这篇文章会带…

【Stable Diffusion 1.5 】在 Unet 中每个 Cross Attention 块中的张量变化过程

系列文章目录 文章目录 系列文章目录前言特征图和注意力图的尺寸差异原因在Break-a-Scene中的具体实现总结 前言 特征图 (Latent) 尺寸和注意力图(attention map)尺寸在扩散模型中有差异,是由于模型架构和注意力机制的特性决定的。 特征图和注意力图的尺寸差异原…

【监控】Prometheus+Grafana 构建可视化监控

在云原生和微服务架构盛行的今天,监控系统已成为保障业务稳定性的核心基础设施。作为监控领域的标杆工具,Prometheus和Grafana凭借其高效的数据采集、灵活的可视化能力,成为运维和开发团队的“标配”。 一、Prometheus Prometheus诞生于2012…

替代 WPS 的新思路?快速将 Word 转为图片 PDF

在这个数字化办公日益普及的时代,越来越多的人开始关注文档处理工具的功能与体验。当我们习惯了某些便捷操作时,却发现一些常用功能正逐渐变为付费项目——比如 WPS 中的一项实用功能也开始收费了。 这款工具最特别的地方在于,可以直接把 W…

CodeTop之数组中的第K个最大的元素

题目链接 215. 数组中的第K个最大元素 - 力扣(LeetCode) 题目解析 算法原理 解法一: 直接理由java内部的排序函数,Arrays.sort()进行排序, 然后我们直接返回第k个最大的元素 nums[nums.length-k] 解法二: 使用堆 我们先把所有元素丢到大根堆里面…

AI任务相关解决方案1-基于NLP的3种模型实现实体识别,以及对比分析(包括基于规则的方法、CRF模型和BERT微调模型)

大家好,我是微学AI,今天给大家介绍一下AI任务相关解决方案1-基于NLP的3种模型实现实体识别,以及对比分析。本文将深入探讨三种不同的命名实体识别(NER)方法,包括基于规则的方法、CRF模型和BERT微调模型,用于识别文本中的地名(LOC)、机构名称(ORG)和人名(PER)实体。通过系统…

IP动态伪装开关

IP动态伪装开关 在OpenWrt系统中,IP动态伪装(IP Masquerading)是一种网络地址转换(NAT)技术,用于在私有网络和公共网络之间转换IP地址。它通常用于允许多个设备共享单个公共IP地址访问互联网。以下是关于O…

【MySQL】第10节|MySQL全局优化与Mysql 8.0新增特性详解

全局优化 mysql server参数 1. max_connections(最大连接数) 含义:MySQL 服务允许的最大并发连接数(包括正在使用和空闲的连接)。超过此限制时,新连接会被拒绝(报错 Too many connections&am…

VS Code 插件 Git History Diff

插件名 进命令行,进Git自己那个分支 查看分支 提交到Git的后想再把另一个也提交到那个分支,用这个命令

Shell脚本中的常用命令

一.设置主机名称 文件设置 文件开机时已读取所以要重新进入 命令更改(即使生效) 二.网络管理命令 1.查看网卡命令 设置网卡 1)DHCP工作模式 2)静态IP 3)修改网卡信息 三.简单处理字符 1.打印连续数字 连续打印3个数字 指定打…

C++ 中 std::wstring::c_str() 的潜在风险与安全使用指南

一、问题背景 在开发过程中,我们经常会遇到不同接口之间的数据传递问题。例如,当调用某个接口时,需要传入一个字符串指针作为数据接收的缓冲区,但外围接口使用的是 std::wstring 类型。此时,如果直接将 std::wstring:…

‘js@https://registry.npmmirror.com/JS/-/JS-0.1.0.tgz‘ is not in this registry

解决方法: 1. npm cache clean --force 2.临时切换到官方源 npm config set registry https://registry.npmjs.org/ npm install js0.1.0 npm config set registry https://registry.npmmirror.com/ # 切换回镜像源

ubuntu24 安装MongoDB-6.0.24 数据库操作步骤和配置参数说明

目录 1 下载MongoDB软件 2 操作系统信息 3 MongoDB 软件安装步骤 4 编写mongodb的配置文件 5 生成keyfile 6 使用mongo用户启动mongodb服务 7 设置开机启动(mongo用户) 8 安装MongoDB shell,因为MongoDB-6.0.24 已经移除mongo命令 1 下载MongoDB软件 https:…

单片机——keil5

文章目录 安装教程使用介绍案例展示 接下来进行keil5软件的相关学习使用 安装教程 参考视频链接bilibili 51单片机 大约在8分钟位置处 使用介绍 首先新建project选择对应的芯片型号(例如:STC89C52 —— 由于STC系列是国产,keil5软件不支持…

计算机网络相关发展以及常见性能指标

目录 一、因特网概述 1.1 基本概念 1.2 因特网发展的三个阶段 1.3 英特网服务提供者ISP 1.4 英特网的标准化工作 1.5 因特网的组成 1.6 简单总结 二、3种交换方式 2.1 电路交换(Circuit Switching) 2.2 分组交换(Packet Switching&…

Java 面试实录:从Spring到微服务的技术探讨

在一个明亮的会议室里,严肃的面试官与搞笑的程序员谢飞机正进行一场关于Java技术栈的面试。场景设定在一家知名互联网大厂,他们的对话充满了技术性与娱乐性。 第一轮:Spring框架与数据库 面试官:“谢飞机,能解释一下…

OpenCV CUDA模块图像过滤------创建一个 Scharr 滤波器函数createScharrFilter()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 该函数用于创建一个 Scharr 滤波器(基于 CUDA 加速),用于图像的一阶导数计算。它常用于边缘检测任务中&#…

yolov8分割任务的推理和后处理解析

文章目录 一、前言二、分割模型的前向推理1. 检测结果:来自Detect类的输出2. 分割结果(最终)3. 与Detect的主要区别4. 工作流程 三、后处理1. 非极大值抑制(NMS)过滤检测框2. 分割原型(Mask Prototypes&…

4.1.1 Spark SQL概述

Spark SQL是Apache Spark的一个模块,专门用于处理结构化数据。它引入了DataFrame这一编程抽象,DataFrame是带有Schema信息的分布式数据集合,类似于关系型数据库中的表。用户可以通过SQL、DataFrames API和Datasets API三种方式操作结构化数据…

华为OD机试真题——书籍叠放(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 200分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…