如何提醒 kubernetes 事件重复时间过长?

How to alert about kubernetes events repeating for too long?

提问人:Capt. Crunch 提问时间:11/13/2023 更新时间:11/13/2023 访问量:30

问:

我的任务是找出 Kubernetes 事件何时长时间重复,以提醒我们注意它。 例如,由于部署重新启动,Liveness 探测的失败次数超出了合理的范围(但这只是一个示例,此任务的触发器是监视任何重复错误事件的请求)

我们使用 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。

所以问题是:

  1. 有谁知道如何查询重复时间超过特定阈值的 K8s 事件,以便我可以绘制图表并最好对它们发出警报?
  2. 该领域是否相关?它是如何计算的(我的意思是 - “从什么时候开始重复?”,我应该依赖它,因为它可能会被弃用?count

谢谢。

Kubernetes 事件 监控 Splunk

评论


答:

-1赞 Dettaya 11/13/2023 #1

若要对 Kubernetes 事件重复时间过长发出警报,可以查询特定时间段内计数高于特定阈值的事件。事件中的计数字段显示自首次生成事件以来发生的次数

但是,count 字段在官方文档中被标记为已弃用,因此使用起来可能不可靠

Kubernetes 事件的生存期很短,仅在生成后一小时内可用

若要从这些事件中获取可操作的见解,可以使用 Grafana 绘制图表

要查询计数高于特定阈值的事件,您可以使用 kubectl 获取事件并根据 count 字段对其进行筛选。例如,可以使用以下命令获取计数大于 10 的事件:

kubectl get events --all-namespaces --field-selector count>10

您还可以使用 --since 和 --until 标志来指定事件的时间范围

获得事件后,您可以在 Grafana 中绘制它们并根据图表设置警报。例如,您可以设置警报,以便在特定事件的计数在特定时间内高于特定阈值时触发

需要注意的是,并非所有 Kubernetes 事件都与监视和警报相关。某些事件纯粹用于诊断目的,Kubernetes 控制器不会使用这些事件来触发任何行为

因此,必须关注直接影响系统性能或用户体验的关键性能指标