事件监控
事件监控是Kubernetes中的另一种监控方式,可以弥补资源监控在实时性、准确性和场景上的欠缺。您可以通过使用NPD结合SLS的Kubernetes事件中心、配置NPD集群检查项以及异常事件离线功能、使用钉钉、使用SLS离线Kubernetes事件及使用EventBridge离线Kubernetes事件,实时监控集群的异常与问题。
背景信息
Kubernetes的架构设计基于状态机,不同的状态之间进行转换则会生成相应的事件,正常的状态之间转换会生成Normal等级的事件,正常状态与异常状态之间的转换会生成Warning等级的事件。

- NPD(node-problem-detector)是Kubernetes节点诊断的工具,可以将节点的异常,例如Docker Engine Hang、Linux Kernel Hang、网络出网异常、文件描述符异常转换为Node的事件,结合kube-eventer可以实现节点事件告警的闭环。更多信息,请参见NPD。
- kube-eventer是ACK维护的开源Kubernetes事件离线工具,可以将集群的事件离线到钉钉、SLS、EventBridge等系统,并提供不同等级的过滤条件,实现事件的实时采集、定向告警、异步归档。更多信息,请参见kube-eventer。
本文通过以下五种场景为您介绍事件监控。
场景一:使用NPD结合SLS的Kubernetes事件中心监控集群事件
NPD根据配置与第三方插件检测节点的问题或故障,生成相应的集群事件。而Kubernetes集群自身也会因为集群状态的切换产生各种事件。例如Pod驱逐,镜像拉取失败等异常情况。日志服务SLS(Log Service)的Kubernetes事件中心实时汇聚Kubernetes中的所有事件并提供存储、查询、分析、可视化、告警等能力。将集群事件接入日志服务的Kubernetes事件中心操作步骤如下。
方法一:如果您在创建集群时,已选中安装node-problem-detector并创建事件中心,请按照以下步骤查看Kubernetes事件中心。关于通过创建集群,安装node-problem-detector并创建事件中心的详细信息,请参见创建Kubernetes托管版集群。
- 登录容器服务管理控制台。
- 在控制台左侧导航栏,单击集群。
- 在集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情。
- 选择 。
- 单击右上角的事件中心管理,在K8s事件中心页面左侧导航栏,单击目标集群名称左边的展开图标
,查看Kubernetes事件中心相关信息。
您可以查看Kubernetes事件的总览及详情、Pod生命周期,还可以进行自定义查询及告警配置。
方法二:如果您在创建集群时,未配置事件中心功能,请按照以下步骤使用Kubernetes事件中心。
- 对被监控集群安装NPD并激活SLS功能。具体安装步骤,请参见场景三:使用钉钉实现Kubernetes监控告警。说明 如果您已安装NPD但未激活SLS,请先卸载旧版本。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 选择 。
- 在Helm页面,删除原有的ack-node-problem-detector组件以卸载旧版本NPD。
您在配置NPD参数时,需将成功部署NPD后,NPD会自动在SLS控制台内创建与集群对应的项目。eventer.sinks.sls.enabled
设置为true,以创建SLS日志项目。 - 在日志服务管理控制台为集群配置Kubernetes事件中心。
- 在接入数据区域,单击Kubernetes-标准输出。
- 设置项目Project为配置NPD时默认的SLS Project,选择日志库Logstore为自动创建的k8s-event。
- 单击下一步,然后单击确认安装完毕。
- 在日志服务管理控制台Project列表区域,单击目标Project名称。
- 在左侧导航栏中,单击仪表盘,然后单击Kubernetes事件中心V1.5。在Kubernetes事件中心大盘中即可看到从集群中汇总的事件。
场景二:配置NPD集群检查项以及异常事件离线功能
NPD(node-problem-detector)是Kubernetes节点诊断的工具,可以将节点的异常,例如Docker Engine Hang、Linux Kernel Hang、网络出网异常、文件描述符异常转换为Node的事件,结合kube-eventer可以实现节点事件告警的闭环。具体的操作步骤如下。
- 登录容器服务管理控制台。
- 在Kubernetes菜单下,在左侧导航栏选择 ,在应用目录页签,查找并选中ack-node-problem-detector。说明 若已经开启事件中心,请先删除原有的ack-node-problem-detector组件。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 选择 。
- 在Helm页面,删除原有的ack-node-problem-detector组件。
- 在ack-node-problem-detector页面,单击一键部署,选择集群,然后在参数配置向导页面,设置参数。命名空间已设定为kube-system,发布名称已设定为ack-node-problem-detector。您可以参考以下参数说明,配置kube-eventer的离线通道。
表 1. 参数说明 参数 说明 默认值 npd.image.repository
NPD的镜像地址。 registry.aliyuncs.com/acs/node-problem-detector
npd.image.tag
NPD的镜像版本。 v0.6.3-28-160499f
alibaba_cloud_plugins
检测节点问题的插件列表,请参见下文的问题检查插件。 包括 fd_check
、ntp_check
、network_problem_check
、inode_usage_check
plugin_settings.check_fd_warning_percentage
fd_check
监控插件的百分比报警阈值。80 plugin_settings.inode_warning_percentage
inode
监控插件的百分比报警阈值。80 controller.regionId
监控插件所在集群的地域。目前仅支持 cn-hangzhou
,cn-beijing
,cn-shenzhen
及cn-shanghai
。集群所在区域 controller.clusterType
监控插件所在集群的类型。 ManagedKubernetes controller.clusterId
监控插件所在集群的ID。 所在集群的ID controller.clusterName
监控插件所在集群的名称。 所在集群的名称 controller.ramRoleType
访问控制角色类型。若值为 restricted
,表示使用默认的Token权限。集群默认的访问控制角色类型 eventer.image.repository
eventer
的镜像地址。registry.cn-hangzhou.aliyuncs.com/acs/eventer
eventer.image.tag
eventer
的镜像版本。v1.6.0-4c4c66c-aliyun
eventer.image.pullPolicy
eventer
的镜像下载方式。IfNotPresent eventer.sinks.sls.enabled
是否开启 eventer
日志服务的离线链路。false
eventer.sinks.sls.project
日志服务的Project名称。 无 eventer.sinks.sls.logstore
日志服务的Project下Logstore的名称。 无 eventer.sinks.dingtalk.enabled
是否开启 eventer
钉钉的离线链路。false
eventer.sinks.dingtalk.level
事件离线的等级。 warning
eventer.sinks.dingtalk.label
打印事件的额外标签。 无 eventer.sinks.dingtalk.token
钉钉机器人的Token。 无 eventer.sinks.dingtalk.monitorkinds
过滤的资源类型。 无 eventer.sinks.dingtalk.monitornamespaces
过滤的资源命名空间。 无 eventer.sinks.eventbridge.enable
是否开启 eventer
离线eventBridge
数据链路。false
NPD支持的问题检查插件如下表。
插件名 功能 说明 fd_check 检查集群节点系统的已打开的文件描述符是否超过最大上限的80%。 80%为默认值,可通过参数修改。该检查项消耗资源较多,不建议打开。 ram_role_check 检查集群节点是否具有RAM Role以及相应的鉴权密钥。 无 ntp_check 检查集群节点上的NTP时间同步服务是否正常运行。 默认开启项。 nvidia_gpu_check 检查集群节点上的NVIDIA GPU计算卡是否具有有效的 xid
。无 network_problem_check 检查集群节点上的 conntrack
表用量是否超过了总量的90%。默认开启项。 inodes_usage_check 检查集群节点系统盘的 inode
是否超过了总量的80%。80%为默认值,可通过参数修改。默认开启项。 csi_hang_check 检查集群节点上的CSI存储插件状态是否正常。 无 ps_hang_check 检查集群节点系统中是否有状态为D(挂起且无法唤醒)的进程。 无 public_network_check 检查集群节点是否可以访问公网。 无 irqbalance_check 检查集群节点系统中的 irqbalance
服务是否正常。无 pid_pressure_check 检查集群节点系统中的进程 pid
数与系统内核中允许的pid
最大数占比是否超过了85%。默认开启项。 docker_offline_check 检测集群节点上的 docker daemon
服务是否正常。默认开启项。 说明 默认开启项:创建集群时日志服务选中安装node-problem-detector并创建事件中心或在集群组件管理中一键安装ack-node-problem-detector组件时的默认开启检查项。从应用目录中安装ack-node-problem-detector组件时还需要手动开启检查项。 - 在参数配置向导页面,单击确定。
在集群列表页,单击目标集群名称或者目标集群右侧操作列下的应用管理,然后单击守护进程集页签,看到守护进程集中的ack-node-problem-detector-daemonset运行正常。
此时node-problem-detector与
eventer
都正常运行后,可以通过配置的eventer
的离线通道进行数据的离线或者报警。
场景三:使用钉钉实现Kubernetes监控告警
使用钉钉机器人监控并告警Kubernetes的事件是一个非常典型的ChatOps实现。具体的操作步骤如下。
- 单击钉钉群右上角
图标,进入群设置页面。
- 单击智能群助手,单击添加机器人,单击+,选择需要添加的机器人。此处选择自定义机器人。
- 在机器人详情页面,单击添加,进入添加机器人页面。
- 根据以下信息配置群机器人后,阅读并同意服务及免责条款,然后单击完成。
参数 描述 编辑头像 (可选)为群机器人设置头像。 机器人名字 添加的机器人名称。 添加到群组 添加机器人的群组。 安全设置 安全设置目前支持3种方式:自定义关键词、加签和IP地址(段)。目前集群的事件监控仅支持第一种方式,即自定义关键词。
选中自定义关键词,填入Warning可接收所有监控报警。如果发现机器人消息发送过于频繁,可增加关键词进行过滤,最多支持设置10个关键词。ACK发送消息时也会同步此关键词。
- 单击复制,复制webhook地址。说明 在群机器人页面,选择目标群机器人,单击右侧
图标可以进行以下操作:
- 修改群机器人的头像及机器人名字。
- 开启或关闭消息推送。
- 重置webhook地址。
- 删除群机器人。
- 登录容器服务管理控制台。
- 在左侧导航栏选择 ,然后单击应用目录页签,搜索并选中ack-node-problem-detector。说明 若已经开启事件中心,请先删除原有的ack-node-problem-detector组件。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 选择 。
- 在Helm页面,删除原有的ack-node-problem-detector组件。
- 在ack-node-problem-detector页面,单击一键部署,选择集群和命名空间,单击下一步。然后在参数配置向导页面,修改以下内容,然后单击确定。
- 将
npd
下方的enabled
设置为false。 - 将
eventer.sinks.dingtalk.enabled
设置为true。 - 通过步骤5创建webhook地址查看Token,填入Token字段。
- 将
预期结果:

场景四:使用SLS离线Kubernetes事件
阿里云日志服务SLS(Log Service)可以将Kubernetes的事件以更持久的方式进行存储,从而提供更多的事件归档、审计的能力。详情请参见创建并使用K8s事件中心。
- 创建Project与Logstore。
- 登录日志服务管理控制台。
- 在Project列表区域,单击创建Project,填写Project的基本信息并单击确认进行创建。本示例创建一个名为k8s-log4j,与Kubernetes集群位于同一地域(华东1)的Project。说明 在配置时,一般会使用与Kubernetes集群位于同一地域的日志服务Project。因为当Kubernetes集群和日志服务Project位于同一地域时,日志数据会通过内网进行传输,从而避免了因地域不一致而导致的数据传输外网带宽费用和耗时,从而实现实时采集、快速检索的最佳实践。
- 创建完成后,k8s-log4j出现在Project列表下,单击该Project名称,进入Project详情页面。
- 默认进入日志库页面,在页面左侧,单击加号+,弹出创建Logstore对话框。
- 填写日志库配置信息并单击确定。本示例创建名为k8s-logstore的日志库。
- 创建完毕后,页面会提示您使用数据接入向导。单击数据接入向导,弹出接入数据对话框。
- 选择log4jAppender,根据页面引导进行配置。本示例使用了默认配置,您可根据日志数据的具体使用场景,进行相应的配置。
- 在Kubernetes集群中配置log4j。
- 登录容器服务管理控制台。
- 在左侧导航栏选择 ,在应用目录页签,搜索并选中ack-node-problem-detector。说明 若已经开启事件中心,请先删除原有的ack-node-problem-detector组件。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 选择 。
- 在Helm页面,删除原有的ack-node-problem-detector组件。
- 在ack-node-problem-detector页面,单击一键部署,选择集群和命名空间,单击下一步。然后在参数配置向导页面,修改以下内容,然后单击确定。将eventer部署到目标集群中。
- 将
npd
下方的enabled
设置为false。 - 将
eventer.sinks.sls.enabled
设置为true。 - 将步骤1创建好的
Project
和Logstore
分别填入各字段。若未在创建集群时自定义
Project
,默认Project
为k8s-log-{YOUR_CLUSTER_ID}。
- 将
- 操作集群(例如,删除Pod或者创建应用等)产生事件后,登录日志服务控制台查看数据采集。请参见普通消费。
- 设置索引与归档。请参见创建索引。
- 在日志服务控制台Project列表区域,单击Project名称。
- 单击日志库名称后的
图标,选择查询分析。
- 单击右上角的开启索引。
- 在查询分析对话框中配置索引。
- 单击确定。此时会出现日志查询与分析页面。说明
- 索引配置在1分钟之内生效。
- 开启或修改索引后,新的索引配置只对新写入的数据生效。
- 如果您需要设置离线归档与计算的场景,可以在Logstore上面将数据投递给MaxCompute或者OSS。请参见投递日志到MaxCompute(旧版)和投递日志到OSS。
场景五:使用EventBridge离线Kubernetes事件
事件总线EventBridge是阿里云提供的一款无服务器事件总线服务,支持阿里云服务、自定义应用及SaaS应用以标准化、中心化的方式接入,并能够以标准化的CloudEvents 1.0协议在这些应用之间路由事件。容器服务事件可支持通过离线到EventBridge实现构建松耦合、分布式的事件驱动架构。关于EventBridge的详情,请参见什么是事件总线EventBridge。
- 开通事件总线EventBridge。具体操作,请参见开通事件总线EventBridge并授权。
- 登录容器服务管理控制台。
- 在控制台左侧导航栏选择 ,在应用目录页签,搜索并选中ack-node-problem-detector。说明 若已经开启事件中心,请先删除原有的ack-node-problem-detector组件。
- 在控制台左侧导航栏中,单击集群。
- 在集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情。
- 选择 。
- 在Helm页面,删除原有的ack-node-problem-detector组件。
- 在ack-node-problem-detector页面,单击一键部署,选择集群和命名空间,单击下一步。然后在参数配置向导页面,修改以下内容,然后单击确定,完成ack-node-problem-detector事件中心组件的安装。配置事件中心并开启EventBridge事件离线数据链路。
- 将
npd
下方的enabled
设置为true。 - 将
eventer.sinks.eventbridge.enable
设置为true。
- 将
- 数据链路开启成功后,可在事件总线EventBridge控制台查看容器事件。
- 登录事件总线EventBridge控制台。
- 在控制台左侧导航栏中,单击事件总线。
- 在事件总线页面单击目标事件操作列下的事件追踪。
- 选择事件查询方式,设置查询条件,单击查询。
- 在事件列表操作列单击事件详情。
在事件详情对话框查看事件详细内容。