kubernetes事件监控工具--Kube-Event

news/2025/9/25 21:20:43/文章来源:https://www.cnblogs.com/nanxi-xz/p/19106292

  最近遇到一个很头疼的需求:Kubernetes 集群内部事件的监控与追踪。 在日常使用中,总会碰到容器“不经意间”重启的情况,但我完全不知道上次重启是什么时候。容器一旦重启,旧实例就会被销毁,如果旧容器日志没有被收集或转存,就彻底丢失了。这样一来,想通过历史日志排查问题原因就显得非常棘手。

  其实,K8s 本身是有事件存储机制的,但它们存在一个 TTL(默认 1 小时)。这意味着如果容器频繁重启,或者事件过了保留时间,你就无法通过事件追溯过去的重启时间。更糟糕的是,当容器多次崩溃重启时,后续的事件可能会覆盖掉前面的问题线索,大大增加了排查难度。


  我开始收集网络上的一些现有解决方案,还真找到一个:k8s-event-exporter。

  这是一个 GitHub 开源项目,作者的想法是写一个 exporter,监听集群事件并推送到 Loki 存储,然后在 Grafana 上展示,思路非常棒!不过这个项目最后一次提交还是两年前,时间有点久了,但我还是抱着尝试的心理去试用了一下。

  然而意外发生了:exporter 拿到的事件并不完整。 最初我以为是 K8s 本身的事件逻辑导致的,因为 K8s 对短时间内频繁发生的同一逻辑事件会自动合并(这点合理,可以避免 etcd 存储的重复事件)。但奇怪的是,我发现有些事件本不是同一个事件,exporter 却依然没有正确推送。

Pod 创建过程中的典型事件链路
  • 🗓️
    ScheduledPod 被调度到节点
  • 📦
    Pulled镜像拉取完成
  • 🛠️
    Created容器实例被创建
  • 🚀
    Started容器启动成功
  • ❤️
    Liveness Probe健康检查开始执行

  但实际结果却只有 一个 Pod 事件 成功推送到 Loki,剩下的事件全都丢弃了,提示是“事件过期被丢弃”。最关键的是,我并不知道 exporter 丢弃的到底是不是我想要的事件。所有能调的配置我几乎都试了,可惜还是没能解决,属实出乎我意料 /(ㄒoㄒ)/~~


  我的需求其实非常明确: 监听 K8s 集群内的事件,并推送到 Loki。

  网上方案里我研究过 k8s-event-exporterpromtail、开启 k8s-auditlogfalco,最后发现只有 exporter 最贴合需求,但它却没能满足我。那怎么办?

  👉 不行!那就自己写一个! 我只需要实现一个功能,应该用不了多少脑子……于是,kube-event 就这样横空出世了


一、传统部署方式

需在 K8s Master 节点 部署

# 下载并解压软件
tar xf kube-event.tar.gz && cd kube-event
# 修改conf配置文件,主要修改loki的地址,其他几个参数看个人需求吧
vim config.json
# 启动服务
./start.sh
# 停止服务
./stop.sh

二、容器化部署

# 下载镜像
docker pull registry.cn-beijing.aliyuncs.com/nanxi/kube-event:1.0.1

配置清单(kube-event.yaml)参考如下:

apiVersion: v1
kind: ServiceAccount
metadata:name: kube-event-sanamespace: default
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: kube-event-reader
rules:
- apiGroups: [""]resources: ["events"]verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: kube-event-reader-binding
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: kube-event-reader
subjects:
- kind: ServiceAccountname: kube-event-sanamespace: default
---
apiVersion: v1
kind: ConfigMap
metadata:name: kube-event-conf
data:config.json: |{"LOKI_URL": "http://172.21.0.237:32537/loki/api/v1/push","DATA_DIR": "../data/","DEDUPLICATE": 0,"PUSH_INTERVAL_SECONDS": 30,"ENABLE_DETAILED": false}logging.yaml: |version: 1disable_existing_loggers: Falseformatters:standard:format: "%(asctime)s [%(levelname)s] %(name)s:%(lineno)d - %(message)s"message_only:format: "%(message)s"handlers:console:class: logging.StreamHandlerlevel: INFOformatter: standardstream: ext://sys.stdoutfile:class: logging.handlers.TimedRotatingFileHandlerlevel: DEBUGformatter: standardfilename: ../logs/app.logwhen: midnightbackupCount: 7encoding: utf-8detailed_console:class: logging.StreamHandlerlevel: INFOformatter: message_onlystream: ext://sys.stdoutdetailed_file:class: logging.handlers.TimedRotatingFileHandlerlevel: DEBUGformatter: message_onlyfilename: ../logs/app.logwhen: midnightbackupCount: 7encoding: utf-8loggers:detailed:level: INFOhandlers: [detailed_console,detailed_file]propagate: falseroot:level: DEBUGhandlers: [console,file]
---
apiVersion: apps/v1
kind: Deployment
metadata:name: kube-eventnamespace: default
spec:replicas: 1selector:matchLabels:app: kube-eventtemplate:metadata:labels:app: kube-eventspec:serviceAccountName: kube-event-sa containers:- name: kube-eventimage: kube-event:1.0.1volumeMounts:- name: conf-volumemountPath: /app/conf- name: log-volumemountPath: /app/logs- name: catche-datamountPath: /app/datavolumes:- name: conf-volumeconfigMap:name: kube-event-conf- name: log-volumehostPath:path: /var/log/kube-event/logstype: DirectoryOrCreate - name: catche-datahostPath:path: /var/log/kube-event/datatype: DirectoryOrCreate

三、效果展示

  正常启动后输出如下:

image

  然后我们可以配合grafana进行展示:

  这个模板班编号是17882,原k8s-event-exporter的模板,我们可以直接借用,数据展示的时候修改下查询SQL即可,

image

  以下是kube-event运行成功后正常推送的数据展示:

image

image

image

image


部署前请认真阅读说明,推荐使用容器部署,欢迎试用并反馈问题!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/917546.shtml

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

相关文章

wordpress 中英文站点佛山的网站建设公司

引言 C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构。为什么有着三种结构呢,大家其实可以想象一下,生活中的绝大数事情都可以抽象着三种结构,而我们今天要给大家介绍的就是三大结构之一——选择结构…

做电子简历的网站悦西安

本文主要介绍Linux 字体颜色的调整,常用于shell脚本当中。我们举一个例子:echo-e"\033[44;37;5m ME \033[0m COOL" 以上命令设置背景成为蓝色,前景白色,闪烁光标,输出字符“ME”,然后重新设置屏幕…

企业档案管理系统:精准破局制造行业档案管理困境 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

实用指南:【 GUI自动化测试】GUI自动化测试(一) 环境安装与测试

实用指南:【 GUI自动化测试】GUI自动化测试(一) 环境安装与测试pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "C…

怎么建一个卖东西的网站网站怎样关键词排名优化

在日常编码环节,很大比例的错误处理工作和参数的输入有关。当程序里的某些数据直接来自用户输入时,必须先校验这些输入值,再进行之后的处理,否则就会出现难以预料的错误。 需求: 写一个命令行小程序,它要求…

喵喵大王の新日记

2025 9.25 突然心血来潮了,于是开了新日记,但是实际上我也不一定更的多么频繁,毕竟上了大学还是有点忙的。才不是一直打三角洲懒得更新 这里应当有一篇新文章。啥时候写完想起来放上。本文来自博客园,作者:北烛青…

【JavaEE】MyBatis - Plus - 教程

【JavaEE】MyBatis - Plus - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&q…

多GPU本地布署Wan2.2-T2V-A14B文本转视频模型 - yi

多GPU本地布署Wan2.2-T2V-A14B文本转视频模型一,#本机环境检查 执行nvidia-smi,查看右上角。验证显卡驱动已安装最高支持的版本。nvidia-smi#在调试时,为了实时观察GPU利用率,一般新开一个命令窗口,执行以下命令,…

NOI 模拟赛五

DPA. 纪念场切题。 记 \(f[i, j, x, 0/1, 0/1]\) 表示前 \(i\) 个车站都已经经过,\(i\rightarrow i+1\) 的边走过 \(j\) 次,总距离 \(\bmod m=x\) ,是否钦定起点,是否钦定终点(这 \(j\) 条边经过是有顺序)。 为了…

常州装修网站建设公司企业的建站方式

运行软件前提前安装好OPC运行组件: 为方便演示,提前准备好了一个DAServer服务器: 接下来开始配置: 该软件主要实现的功能如下: 配置过程也相对简单: 第一步: 编辑如下文件: 第二步…

企业微信手机片网站制作上海建筑工程招投标网

这是什么?这是有关警告,错误和注意事项的许多答案,这些警告,错误和注意事项在您对PHP进行编程时可能会遇到,并且不知道如何解决它们。这也是一个社区Wiki,因此邀请所有人参与添加并维护此列表。为什么是这样…

免费咨询律师24小时电话桂平seo快速优化软件

数学建模常用的算法分类 全国大学生数学建模竞赛中,常见的算法模型有以下30种: 最小二乘法数值分析方法图论算法线性规划整数规划动态规划贪心算法分支定界法蒙特卡洛方法随机游走算法遗传算法粒子群算法神经网络算法人工智能算法模糊数学时间序列分析马…

中小型网站建设与管理总结wordpress手机怎么用

性能对比:Memcached 与 Redis 的关键差异 在选择合适的缓存系统时,Memcached 和 Redis 是最常被提及的两种技术。它们都是内存存储系统,用于提高数据访问速度和应用性能。尽管它们在功能上有很多相似之处,但在性能、特性和应用场…

AI热点周报(09.14~09.20):Gemini集成到Chrome、Claude 强化记忆、Qwen3-Next快捷落地,AI走向集成化,工程化?

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

什么是Delphi4Python?

什么是Delphi4Python? Delphi for Python的主要重点是为Python开发者提供免费的Python模块或Delphi的GUI框架的绑定。基于Delphi的两个不同的框架两个不同的库。DelphiVCL,用于 Windows 的本地库;DelphiFMX,用于跨…

实用指南:Python的大杀器:Jupyter Notebook处理.ipynb文件

实用指南:Python的大杀器:Jupyter Notebook处理.ipynb文件pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Conso…

flask认证机制logging模块实战

flask认证机制logging模块实战 ​ 如何在项目中实现日志的记录呢?在 Flask 中我们可以使用 Python 的内置 logging 模块来实现记录日志。你可以对照表格看看具体的日志级别分类,从上往下级别依次升高,最高的是 CRIT…

1核1g服务器做网站网站建设模块有哪些

大家好,这里是深海网络,今天给大家讲解一下新版影视小程序搭建。  首先给大家看一下新版影视小程序是什么样子的,它有黑夜和白天两种观影模式,而且搜索精准,播放速度快。01第一步,开始正式搭建。新版区小…

25.9.25随笔联考总结

考试 开考后忘记通读题面了,主要是看到 T1 太简单直接写了,写完才去读的题。然后决定的开题顺序是 324,结果后面 4 个小时一道都不会,破防了。T2 我觉得直接 manacher 是很诡异的,然后就去思考套一个 ds 啥的,不…

软工9.25

今天学的内容,没有,学习什么。