我的任务是查找 Kubernetes 事件何时重复很长时间,以向我们发出警报。 例如由于部署重新启动,活动探针的失败次数超出了合理范围(但这只是一个示例,此任务的触发器是监视任何重复错误事件的请求)
我们使用 kubernetes-event-exporter 将事件导出到 Splunk,以便我们可以在那里查询它们。
我在导出的事件中找到了
count
字段,例如:
$ kubectl get events -A -o json
{
"apiVersion": "v1",
"items": [
{
"apiVersion": "v1",
"count": 1852,
"eventTime": null,
"firstTimestamp": "2023-11-06T23:56:55Z",
"involvedObject": {
"apiVersion": "v1",
"fieldPath": "spec.containers{xxx}",
"kind": "Pod",
"name": "xxx-97cf7f9dc-922rb",
"namespace": "some-namespace",
"resourceVersion": "764541919",
"uid": "6aded215-e148-4b54-94c7-ad5fd394f1aa"
},
"kind": "Event",
"lastTimestamp": "2023-11-13T00:56:15Z",
"message": "Liveness probe failed: HTTP probe failed with statuscode: 500",
"metadata": {
"creationTimestamp": "2023-11-09T18:28:15Z",
"name": "xxxx-97cf7f9dc-922rb.17952e00cd9cfc38",
"namespace": "some-namespace",
"resourceVersion": "781477570",
"uid": "9ca6c31e-8de9-4a48-a93d-8a74eeaa928b"
},
"reason": "Unhealthy",
"reportingComponent": "",
"reportingInstance": "",
"source": {
"component": "kubelet",
"host": "ip-some-ip.some-region.compute.internal"
},
"type": "Warning"
},
事件中的“计数”字段在非官方参考文献中描述为“计数(第一个和最后一个时间戳):显示事件重复的次数。”。
在官方文档中,它被标记为已弃用(?)。
我们目前在 EKS 上使用 Kubernetes 1.27。
所以问题是:
count
字段相关吗?它是如何计算的(我的意思是 - “从什么时候开始重复?”我应该依赖它,因为它可能会被弃用?谢谢。
要对重复时间过长的 Kubernetes 事件发出警报,您可以查询特定时间段内计数高于特定阈值的事件。事件中的计数字段显示该事件自首次生成以来已发生的次数
但是count字段在官方文档中被标记为deprecated,所以使用起来可能不太可靠
Kubernetes 事件是短暂的,生成后仅可用一小时
要从这些事件中获得可操作的见解,您可以使用 Grafana 将它们绘制成图表
要查询计数高于某个阈值的事件,可以使用 kubectl 获取事件并根据计数字段进行过滤。例如,您可以使用以下命令来获取计数大于 10 的事件:
kubectl get events --all-namespaces --field-selector count>10
您还可以使用 --since 和 --until 标志来指定事件的时间范围
获得事件后,您可以在 Grafana 中将它们绘制成图表,并根据图表设置警报。例如,您可以设置当特定事件的计数在一定时间内高于特定阈值时触发警报
需要注意的是,并非所有 Kubernetes 事件都与监控和警报相关。有些事件纯粹用于诊断目的,Kubernetes 控制器不会使用它来触发任何行为
因此,重点关注直接影响系统性能或用户体验的关键性能指标