跳转到内容

/events

/events 技能拉取最近的 Kubernetes 事件并将其折叠成简短的排名列表 — Warning 事件优先,其次是 Normal 中值得关注的事件。该技能只读,永远不会改变集群状态。

输出刻意控制在较小范围,使首次响应的阅读成本和模型处理成本都很低。完整事件列表写入本地 JSON 缓存,代理在后续问题中直接从缓存读取,无需重复调用 API。

/events # snapshot (uses cache if fresh)
/events --refresh # force a fresh fetch
/events --ttl 5m # only re-fetch if older than 5m

该技能不接受位置参数。后续问题(“只看 payments”、“pod/checkout-7c9 上的事件”、“显示被抑制的 Normal 事件”)从缓存中回答 — 参见下方后续问题


数据来源:仅 Kubernetes API — kubectl get events --all-namespaces(或 events.k8s.io/v1 的等价形式),服务端按 lastTimestamp 排序。


技能通过单次调用获取集群事件,并将完整列表以 events.json 写入每个上下文对应的缓存目录。聚合和严重性排序在客户端对 JSON 进行,因此在 TTL 时间窗口内重复运行可完全跳过 API。

摘要格式如下:

Events: prod-us-east · last 1h · 2 warning groups, 1 notable
WARN payments/Pod BackOff 14× 2m ago "Back-off restarting failed container server in pod checkout-7c9"
WARN ingress/Pod FailedScheduling 1× 38m ago "0/12 nodes are available: 3 node(s) had untolerated taint…"
NOTE kube-system/Node NodeNotReady 1× 52m ago "Node ip-10-0-3-14 status is now: NodeNotReady"
…and 412 Normal events (Pulled, Created, Started, Scheduled) suppressed.
Snapshot cached (TTL 5m). Ask to drill in — e.g. "only payments", "events on pod/checkout-7c9", "show suppressed".

查询窗口内无异常时,技能打印一行确认无内容可报并退出。


摘要刻意折叠了嘈杂的 Normal 原因并截断了逐对象详情,以保持首次响应的简洁。当你请求更多内容,或询问任何可从缓存事件列表回答的问题时,代理使用 jq 读取缓存,而非重新运行技能:

❯ /events
[ summary... ]
❯ only payments
[ events filtered to namespace payments, from events.json ]
❯ show the suppressed Normal events
[ full Normal-event list, from events.json ]
❯ events on pod/checkout-7c9
[ filtered by involvedObject, walking owners one level up, from events.json ]

对于缓存中没有的数据(日志、特定资源的 YAML、跨多个来源的根因分析),代理路由到对应技能 — /logs/investigate — 而非扩展 /events 的范围。

说”刷新”/“重新获取”/“重新检查”,代理将使用 --refresh 重新调用技能。


除获取事件列表外,技能还向代理说明如何处理后续问题:

  • 优先使用 jq 从缓存的 events.json 回答,而非重新调用技能。
  • 将嘈杂原因集(PulledCreatedStartedScheduledSuccessfulCreate)视为可折叠内容 — 仅在用户请求被抑制的事件时展示。
  • 当用户询问”pod/X 上的事件”时,向上追溯一级 Owner(PodReplicaSetDeploymentPodJobCronJob),避免遗漏针对控制器触发的事件。
  • BackOffCrashLoopBackOff 后面的容器输出转交给 /logs,当单个资源成为焦点时转交给 /investigate

--refresh
绕过缓存,从 API 获取最新数据。
--ttl <duration>
仅当缓存快照早于该值时才重新获取(kubectl 风格:1m5m1h)。默认值:5m。设置 —refresh 时忽略。

全局标志参见概述