惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
IT之家
IT之家
博客园_首页
人人都是产品经理
人人都是产品经理
博客园 - Franky
I
InfoQ
Recent Announcements
Recent Announcements
P
Proofpoint News Feed
H
Hackread – Cybersecurity News, Data Breaches, AI and More
GbyAI
GbyAI
大猫的无限游戏
大猫的无限游戏
aimingoo的专栏
aimingoo的专栏
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
月光博客
月光博客
Microsoft Security Blog
Microsoft Security Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
B
Blog RSS Feed
MongoDB | Blog
MongoDB | Blog
雷峰网
雷峰网
博客园 - 聂微东
N
Netflix TechBlog - Medium
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The GitHub Blog
The GitHub Blog
D
Docker

陈少文的网站

巨变与机遇的未来十年 Kubernetes 平台管理软件压力测试方案 使用镜像部署 Hexo 静态页面 终于等到你 - GitHub 镜像仓库服务(ghcr.io) 一起来学 Go --(6)Interface 一起来学 Go --(5)Goroutine 和 Channel 什么是函数式编程 如何在 Kubernetes 集群集成 Kata 柯里化与偏函数 使用 PyGithub 自动创建 Label 软件产品是团队能力的输出 Helm 2 、Helm 3 比较 IoT 变现 Kubernetes 中的 DNS 服务 国内的 Helm 镜像源 Harbor 使用自签证书支持 Https 访问 DevOps 工具链之 Prow 如何使用 kfctl 安装 Kubeflow VS Code 无法下载 Go 插件的工具包 工程师更应具有服务精神 你不知道的 Docker 使用技巧 使用 Docker 运行 Tensorflow 论中国 什么是左移 如何清空 Git 仓库全部历史记录 一禅小和尚 有风吹过厨房 时间的玫瑰 如何在 CentOS 安装 GPU 驱动 开发 Tips(19)
你也可以这样落地 AI Agent - 运维事件篇
微信公众号 · 2026-01-14 · via 陈少文的网站

1. 为什么是运维事件

  • 更小的入侵性

Metrics、Log 维度的观测数据,运维团队通常都有所沉淀。运维事件可以是一个新的切入点,在不影响现有系统稳定性的情况下,引入新的运维能力。

  • 更适合自动化

Metrics 表征的是系统状态,Log 表征的是具体代码行为,而 Event 表征的是组件的变化。

而变化是稳定性最大的敌人,运维事件能够更好地捕捉到变化,触发自动化能力。

  • 更快的响应速度

Metrics 和 Log 的异常检测机制是定时查询,同时配置一定的阈值、持续时间的检测,告警的发出具有一定延时。

运维事件的异常检测机制是实时监听,watch 到事件之后,立即就能触发自动化能力。

  • 我能提供一点经验

最近两年我一直在探索 AI Agent 在运维领域的应用,已经有一些案例可以参考。我们每天有 100w+ 的运维事件产生,经过各种告警和全自动化处理流程,保障着数十个 AI 集群以及上面 AI 应用的稳定运行。

2. 安装事件组件

  • 安装 Nats
1
2
3
helm repo add nats https://nats-io.github.io/k8s/helm/charts/
helm repo update
helm show values nats/nats
  • 生成 nats-values.yaml
1
2
export adminpassword=mypassword
export apppassword=mypassword
  • 生成 nats-values.yaml

注意修改一下 storageClassName

 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
cat <<EOF > nats-values.yaml
config:
  jetstream:
    enabled: true
    fileStore:
      enabled: false
      dir: /data
    memoryStore:
      enabled: true
      maxSize: 1Gi
    pvc:
      enabled: false
      storageClassName: my-sc
  cluster:
    enabled: true
  leafnodes:
    enabled: true
  merge:
    accounts:
      SYS:
        users:
          - user: admin
            password: ${adminpassword}
      APP:
        users:
          - user: app
            password: ${apppassword}
        jetstream: true
    system_account: SYS
container:
  image:
    repository: nats
    tag: 2.10.20-alpine
natsBox:
  container:
    image:
      repository: nats-box
      tag: 0.14.5
reloader:
  enabled: true
  image:
    repository: natsio/nats-server-config-reloader
    tag: 0.15.1
EOF

如果是多集群,可以参考 https://www.chenshaowen.com/ops/zh/nats.html 配置一个主 Nats 集群,其他集群通过 leafnodes 连接到主集群。

  • 安装 Ops
1
2
3
4
5
6
7
8
helm install myops ops/ops
            --version 1.2.0 \
            --namespace ops-system \
            --create-namespace \
            --set controller.env.activeNamespace="ops-system" \
            --set controller.env.defaultRuntimeImage="ubuntu:22.04" \
            --set event.cluster="mycluster" \
            --set event.endpoint="http://app:mypassword@nats-headless.ops-system.svc:4222"

https://github.com/shaowenchen/ops 项目通过 watch 的方式监听 Kubernetes 的全部事件,并将其转换为运维事件,存储到了外部的 Nats 集群。经过指标监控确认,Ops 项目不会对 kube-apiserver 或 etcd 产生性能影响。事件一旦被导出,存储到 Nats 之后,不会对 Kubernetes 产生额外的压力。

3. 事件的格式

3.1 命名空间级别事件格式

1
ops.clusters.{cluster}.namespaces.{namespace}.{resourceType}.{resourceName}.{observation}

其中:

  • {cluster}: 集群名称(从环境变量 EVENT_CLUSTER 获取)
  • {namespace}: Kubernetes 命名空间
  • {resourceType}: 资源类型(如 deployments, pods, configmaps 等)
  • {resourceName}: 资源名称
  • {observation}: 观测类型,可能的值及含义:
    • status: 资源状态信息(如运行状态、健康状态等)
    • events: 事件信息(如 Kubernetes 事件)
    • alerts: 告警信息
    • findings: 主动上报的信息和状态

3.2 节点事件格式

1
ops.clusters.{cluster}.nodes.{nodeName}.{observation}

其中:

  • {cluster}: 集群名称(从环境变量 EVENT_CLUSTER 获取)
  • {nodeName}: 节点名称
  • {observation}: 观测类型,可能的值及含义:
    • events: 事件信息(如 Kubernetes 事件)
    • alerts: 告警信息
    • findings: 主动上报的信息和状态

示例:

1
ops.clusters.mycluster.nodes.mynode.events

3.3 通知类的格式

这种事件数据并不是由 Ops 项目从 Kubernetes 中采集,而是用于收集其他系统的各种通知,转化为可被处理的运维事件。

通知事件主题格式:

1
ops.notifications.providers.{provider}.channels.{channel}.severities.{severity}
  • {provider}: 通知提供商或系统名称(如 ksyun, ai 等)
  • {channel}: 通知渠道类型(如 webhook, email, sms 等)
  • {severity}: 严重程度级别(如 info, warning, error, critical 等)

示例:

1
ops.notifications.providers.ksyun.channels.webhook.severities.critical

4. 事件的处理

4.1 直接触发通知

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
apiVersion: crd.chenshaowen.com/v1
kind: EventHooks
metadata:
  name: nodes-p0
  namespace: ops-system
spec:
  keywords:
    exclude:
    - cn-beijing
    include:
    - NodeNotReady
    - NodeReady
  subject: ops.clusters.*.nodes.*.events
  type: xiezuo
  url: https://x.x.x/api/v1/webhook/send?key=

当集群节点未就绪时,立即就会发出通知,这比 Metrics 告警快了分钟级别的时间。

4.2 触发自动化流程

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
apiVersion: crd.chenshaowen.com/v1
kind: EventHooks
metadata:
  name: custom-disable
  namespace: ops-system
spec:
  additional: 'action: cordon-node'
  keywords:
    include:
    - "10005"
  subject: ops.clusters.*.nodes.*.events
  type: webhook
  url: http://x.x.x.x:x/trigger/action?key=

当检测到节点事件中包含 “10005” 时,就会触发自动化流程,执行 “cordon-node” 操作。

4.3 事件的转换

为了方便消费指定特征的事件,我们会将事件先转换为告警事件。异常处理模块,只需要监听告警事件即可。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
apiVersion: crd.chenshaowen.com/v1
kind: EventHooks
metadata:
  name: convert-clusters-pods-events-to-alerts
  namespace: ops-system
spec:
  keywords:
    include:
      - .*(BackOff|OOMKilled|Evicted|NetworkNotReady|Unhealthy|Error|Failed|ImagePullBackOff).*
    matchMode: ALL
    matchType: REGEX
  subject: ops.clusters.*.namespaces.*.pods.*.events
  type: event
  url: ops.clusters.*.namespaces.*.pods.*.alerts

当检测到 ops.clusters.mycluster.namespaces.mynamespace.pods.myapp.events 中包含 BackOff 时,就会创建一个内容相同的 ops.clusters.mycluster.namespaces.mynamespace.pods.myapp.alerts 事件。

4.4 事件的分析

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
apiVersion: crd.chenshaowen.com/v1
kind: EventHooks
metadata:
  name: post-cluster-pod-ops-agent
  namespace: ops-system
spec:
  additional: clusterpodevents
  keywords:
    include:
    - .*(kube-apiserver-|kube-controller-manager-|kube-scheduler-|kube-proxy-|etcd-|calico-|csi-nfs-|fluid-system).*
    matchMode: ANY
    matchType: REGEX
  subject: ops.clusters.*.namespaces.*.pods.*.alerts
  type: webhook
  url: http://x.x.x.x:x/api/push

而你需要做的就是开发一个 /api/push 接口,接收运维事件,并进行分析和处理。

在我们的系统中,这接口已经汇聚了应用、节点、集群三个维度的运维事件,用于系统性的进行分析。

5. 怎么接入事件

5.1 告警事件的接入

https://github.com/shaowenchen/ops 项目中有一个 ops-server 服务,能够推送和消费运维事件。

1
http://myops-server.ops-system.svc:80/api/v1/namespaces/ops-system/events/ops.notifications.providers.aliyun.channels.webhook.severities.info
1
http://myops-server.ops-system.svc:80/api/v1/namespaces/ops-system/events/ops.notifications.providers.ksyun.channels.webhook.severities.info

这是两个云厂的事件存储 Topic,除此我还对接了内部的告警通知系统,逐步完善系统事件的观测能力。

5.2 taskrun 定时任务

https://github.com/shaowenchen/ops 项目支撑定时任务,可以配置 taskrun 来进行一些定制化的脚本检测,并上报为 findings 事件。

1
2
3
4
5
6
7
8
apiVersion: crd.chenshaowen.com/v1
kind: TaskRun
metadata:
  name: alert-hosts-card
  namespace: ops-system
spec:
  crontab: 30 * * * *
  taskRef: alert-hosts-card

ops.clusters.*.namespaces.*.hosts.*.findings 中,就会收到这些事件。

Ops 项目也提供了 web 页面,用于查看这些事件。

6. 总结

2025 年在 AI Agent 运维方向做了一系列的优化,停止迭代之前的 copilot 模式,引入 MCP 统一 Metrics、Log、Event、SOPS 的接入,告警数据的结构化,SOPS 直接触发,SLO 自动分析。

自动化层优化的基石就是运维事件,之前写过一篇 使用事件总线改造运维体系 阐述事件总线在运维体系的重要作用,本篇也算是对事件总线的一次真实落地。