乔克视界 乔克视界
首页
  • 运维
  • 开发
  • 监控
  • 安全
  • 随笔
  • Docker
  • Golang
  • Python
  • AIOps
  • DevOps
  • Kubernetes
  • Prometheus
  • ELK
  • 心情杂货
  • 读书笔记
  • 面试
  • 实用技巧
  • 博客搭建
友链
关于
收藏
  • 分类
  • 标签
  • 归档

乔克

云原生爱好者
首页
  • 运维
  • 开发
  • 监控
  • 安全
  • 随笔
  • Docker
  • Golang
  • Python
  • AIOps
  • DevOps
  • Kubernetes
  • Prometheus
  • ELK
  • 心情杂货
  • 读书笔记
  • 面试
  • 实用技巧
  • 博客搭建
友链
关于
收藏
  • 分类
  • 标签
  • 归档
  • Docker

  • Golang

  • AIOps

  • Python

  • DevOps

  • Kubernetes

  • Prometheus

    • Prometheus 介绍
    • 手动搭建 Prometheus
    • 配置监控
    • 安装 Grafana
    • AlertManager
    • Operator 部署 Prometheus
    • 常用函数
    • 黑盒监控
    • 集群事件监控之 kube-eventer
      • 一、背景
      • 二、安装部署
        • 2.1、创建钉钉机器人
        • 2.2、部署资源
        • 2.3、报警测试
    • 配置企业微信告警
    • PromQL 常用操作
    • 配置短信告警
    • 监控指标
    • PushGateway
    • Google 四大黄金指标
    • Kubernetes 性能指标
  • ELK

  • 专栏
  • Prometheus
乔克
2025-07-20
目录

集群事件监控之 kube-eventer

# 一、背景

在 Kubernetes 中,事件分为两种,一种是 Warning 事件,表示产生这个事件的状态转换是在非预期的状态之间产生的;另外一种是 Normal 事件,表示期望到达的状态,和目前达到的状态是一致的。我们用一个 Pod 的生命周期进行举例,当创建一个 Pod 的时候,首先 Pod 会进入 Pending 的状态,等待镜像的拉取,当镜像录取完毕并通过健康检查的时候,Pod 的状态就变为 Running。此时会生成 Normal 的事件。而如果在运行中,由于 OOM 或者其他原因造成 Pod 宕掉,进入 Failed 的状态,而这种状态是非预期的,那么此时会在 Kubernetes 中产生 Warning 的事件。那么针对这种场景而言,如果我们能够通过监控事件的产生就可以非常及时的查看到一些容易被资源监控忽略的问题。

一个标准的 Kubernetes 事件有如下几个重要的属性,通过这些属性可以更好地诊断和告警问题。

  • Namespace:产生事件的对象所在的命名空间。
  • Kind:绑定事件的对象的类型,例如:Node、Pod、Namespace、Componenet 等等。
  • Timestamp:事件产生的时间等等。
  • Reason:产生这个事件的原因。
  • Message: 事件的具体描述。
  • 其他信息

阿里有开源的 K8s 事件监控项目 kube-eventer, 其将事件分为两种,一种是 Warning 事件,表示产生这个事件的状态转换是在非预期的状态之间产生的;另外一种是 Normal 事件,表示期望到达的状态,和目前达到的状态是一致的。

可以收集 pod/node/kubelet 等资源对象的 event,还可以收集自定义资源对象的 event,汇聚处理发送到配置好好的接受端,架构图如下所示。

1586845456261 8c75223e 9fea 46b9 a15f 3056142e2870

目前支持的 sinks 如下:

Sink Name Description
dingtalk (opens new window) sink to dingtalk bot
sls (opens new window) sink to alibaba cloud sls service
elasticsearch (opens new window) sink to elasticsearch
honeycomb (opens new window) sink to honeycomb
influxdb (opens new window) sink to influxdb
kafka (opens new window) sink to kafka
mysql (opens new window) sink to mysql database
wechat (opens new window) sink to wechat

# 二、安装部署

这里以钉钉为例

# 2.1、创建钉钉机器人

只要是管理员,在钉钉群聊中就可以创建。具体过程略。

# 2.2、部署资源

YAML 文件是官方文档中文件,如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    name: kube-eventer
  name: kube-eventer
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kube-eventer
  template:
    metadata:
      labels:
        app: kube-eventer
      annotations:
        scheduler.alpha.kubernetes.io/critical-pod: ""
    spec:
      dnsPolicy: ClusterFirstWithHostNet
      serviceAccount: kube-eventer
      containers:
        - image: registry.aliyuncs.com/acs/kube-eventer-amd64:v1.1.0-c93a835-aliyun
          name: kube-eventer
          command:
            - "/kube-eventer"
            - "--source=kubernetes:https://kubernetes.default"
            ## .e.g,dingtalk sink demo
            - --sink=dingtalk:[your_webhook_url]&label=[your_cluster_id]&level=[Normal or Warning(default)]
          env:
            # If TZ is assigned, set the TZ value as the time zone
            - name: TZ
              value: "Asia/Shanghai"
          volumeMounts:
            - name: localtime
              mountPath: /etc/localtime
              readOnly: true
            - name: zoneinfo
              mountPath: /usr/share/zoneinfo
              readOnly: true
          resources:
            requests:
              cpu: 100m
              memory: 100Mi
            limits:
              cpu: 500m
              memory: 250Mi
      volumes:
        - name: localtime
          hostPath:
            path: /etc/localtime
        - name: zoneinfo
          hostPath:
            path: /usr/share/zoneinfo
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: kube-eventer
rules:
  - apiGroups:
      - ""
    resources:
      - events
    verbs:
      - get
      - list
      - watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kube-eventer
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: kube-eventer
subjects:
  - kind: ServiceAccount
    name: kube-eventer
    namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: kube-eventer
  namespace: kube-system
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87

需要修改的地方就是上面备注的地方。前提需要先得到顶顶机器人的参数。

- --sink=dingtalk:[your_webhook_url]&label=[your_cluster_id]&level=[Normal or Warning(default)]
1

dingtalk:机器人 webhook 地址

label:标签,自定义

level:报警级别,默认是 warning

msg_type:发送消息的格式

# 2.3、报警测试

1586846828394 d63db4c9 52f5 4eb3 8fcc accf8183099d

如果是企业微信的话,配置文件按下面的修改:

--sink=wechat:?corp_id=wwxxxxxxxxxx1a&corp_secret=gxxxxxxxxxxxxxxxxxxxxxxxxxxx4U&agent_id=10xxxxxx7&to_user=&level=Warning&label=K8S-Alert-Prod&msg_type=markdown
1

项目地址:https://github.com/AliyunContainerService/kube-eventer (opens new window)

上次更新: 2025/07/20, 10:40:32
黑盒监控
配置企业微信告警

← 黑盒监控 配置企业微信告警→

最近更新
01
elastic 账户认证 401 问题
07-20
02
使用 helm 安装 es 和 kibana
07-20
03
elastic stack 搭建
07-20
更多文章>
Theme by Vdoing | Copyright © 2019-2025 乔克 | MIT License | 渝ICP备20002153号 |
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式