Kubernetes可观察性:全方位事件监控

本文涉及的产品
对象存储 OSS,20GB 3个月
文件存储 NAS,50GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: 为了让大家更便捷的使用Kubernetes事件功能,阿里云容器服务Kubernetes和日志服务SLS合作推出了Kubernetes事件中心,支持将Kubernetes中的事件实时采集到日志服务中,把阿里工程师在多年Kubernetes运维中积累的事件监控、告警指标提炼到事件中心,开箱即可获得这些积累的运维经验。

随着微服务、云原生的逐渐普及,越来越多的公司开始基于Kubernetes实现业务架构转型,Kubernetes也成为近两年IT领域最火热的关键词之一。

Kubernetes是一套非常完善、复杂的管理系统,作为所有业务的基础设施,每个工程师都会在平台上测试、部署、上线应用,所有这些过程都需要我们对业务、系统运行的状态进行实时的掌握和监控。因此可观察性是用好Kubernetes的关键一环。

Kubernetes Events

为了让用户对Kubernetes的内部状态有更好的了解,Kubernetes引入了事件(Events)系统,在Kubernetes的资源产生变化的时候,会以事件的形式记录在APIServer中,并可以通过API或者 kubectl 命令去查看,例如:

$ kubectl describe pod  productpage-v1-7658b8dcc6-jvswr
...........
...........
Events:
  Type    Reason     Age   From                              Message
  ----    ------     ----  ----                              -------
  Normal  Scheduled  44s   default-scheduler                 Successfully assigned default/productpage-v1-7658b8dcc6-jvswr to cn-beijing.10.1.138.111
  Normal  Pulling    42s   kubelet, cn-beijing.10.1.138.111  pulling image "docker.io/istio/examples-bookinfo-productpage-v1:1.15.0"
  Normal  Pulled     31s   kubelet, cn-beijing.10.1.138.111  Successfully pulled image "docker.io/istio/examples-bookinfo-productpage-v1:1.15.0"
  Normal  Created    31s   kubelet, cn-beijing.10.1.138.111  Created container
  Normal  Started    31s   kubelet, cn-beijing.10.1.138.111  Started container
$ kubectl get events
LAST SEEN   TYPE      REASON             KIND         MESSAGE
4m19s       Normal    Killing            Pod          Killing container with id docker://bluematador-agent:Need to kill Pod
4m19s       Normal    Killing            Pod          Killing container with id docker://bluematador-agent:Need to kill Pod
4m46s       Normal    Scheduled          Pod          Successfully assigned default/productpage-v1-7658b8dcc6-jvswr to cn-beijing.10.1.138.111
4m44s       Normal    Pulling            Pod          pulling image "docker.io/istio/examples-bookinfo-productpage-v1:1.15.0"
4m33s       Normal    Pulled             Pod          Successfully pulled image "docker.io/istio/examples-bookinfo-productpage-v1:1.15.0"
4m33s       Normal    Created            Pod          Created container
4m33s       Normal    Started            Pod          Started container
4m41s       Warning   Unhealthy          Pod          Readiness probe failed: Get http://172.25.0.24:15020/healthz/ready: dial tcp 172.25.0.24:15020: connect: connection refused
4m39s       Normal    Killing            Pod          Killing container with id docker://istio-proxy:Need to kill Pod
4m14s       Normal    Killing            Pod          Killing container with id docker://productpage:Need to kill Pod
4m46s       Normal    SuccessfulCreate   ReplicaSet   Created pod: productpage-v1-7658b8dcc6-jvswr

事件包含了发生的时间、组件、等级(Normal、Warning、Error)、类型、详细信息,通过事件我们能够知道应用的部署、调度、运行、停止等整个生命周期,也能通过事件去了解系统中正在发生的一些异常。在Kubernetes各个组件的源码中都会定义该组件可能会触发的事件类型,例如kubelet的事件源码

Kubernetes中的事件最终还是存储在etcd中,默认情况下只保存1个小时,由于etcd并不支持一些复杂的分析操作,默认Kubernetes只提供了非常简单的过滤方式,比如通过Reason、时间、类型等。同时这些事件只是被动的存在etcd中,并不支持主动推送到其他系统,通常只能手动的去查看。

而实际上我们对事件的使用需求非常高,例如:

  • 对系统中的异常事件做实时告警,例如Failed、Evicted、FailedMount、FailedScheduling等。
  • 通常问题排查可能要去查找历史数据,因此需要去查询更长时间范围的事件(几天甚至几个月)。
  • 事件支持归类统计,例如能够计算事件发生的趋势以及与上一时间段(昨天/上周/发布前)对比,以便基于统计指标进行判断和决策。
  • 支持不同的人员按照各种维度去做过滤、筛选。
  • 支持自定义的订阅这些事件去做自定义的监控,以便和公司内部的部署运维平台集成。

Kubernetes事件中心

为了让大家更便捷的使用Kubernetes事件功能,阿里云容器服务Kubernetes和日志服务SLS合作推出了Kubernetes事件中心,支持将Kubernetes中的事件实时采集到日志服务中,把阿里工程师在多年Kubernetes运维中积累的事件监控、告警指标提炼到事件中心,开箱即可获得这些积累的运维经验。
image.png

NPD加持

Kubernetes中的相关组件只关注容器管理相关的问题,对于硬件、操作系统、容器运行时、依赖系统(网络、存储等)并不会提供更多的检测能力,这时候就需要通过NPD(node-problem-detector)来增强Kubernetes整体的监控能力。

image.png

NPD是Kubernetes节点诊断的工具,可以将节点的异常转换为Node的事件,推送到APIServer中,由同一的APIServer进行事件管理。NPD支持多种异常检查,例如:

  • 基础服务问题:NTP服务未启动
  • 硬件问题:CPU、内存、磁盘、网卡损坏
  • Kernel问题:Kernel hang,文件系统损坏
  • 容器运行时问题:Docker hang,Docker无法启动

在阿里云Kubernetes中,我们对默认的NPD能力进行了增强,覆盖了更多运维中遇到的问题,例如:

  • 节点FD水位监控
  • 节点Pid水位监控
  • 磁盘水位监控
  • 阿里云RAM Role监控
  • 网络SNAT配置监控

image.png

NPD的检查输出完全遵循Kubernetes的事件规范,因此事件中心也支持检查、监控NPD中产生的事件,通过NPD能力的加持,事件中心能够支持Kubernetes全方位的监控。

可视化报表

基于日志服务SLS的通用查询、分析、可视化、告警能力,事件中心默认提供了3种类型的报表,把Kubernetes中的事件按照等级、类型分类统计并可视化展示,通过Dashboard一眼即可了解到系统中正在发生的一些异常以及分布情况。
image.png

实时告警

为了更好的管理和监控集群,事件中心内置了Kubernetes常见的错误类型统计以及实时告警,当有错误发生时,会通过SLS实时通知,通知方式支持短信、电话、邮件、钉钉群,也支持自定义的WebHook对接企业自己的告警中心。

image.png

自定义分析与处理

基于日志服务强大的数据中台能力,事件中心除了提供内置的报表以及告警模板外,还支持用户自定义的分析功能,大家可以通过日志服务提供的查询、分析引擎来进行实时的事件查询、统计,也可以将事件对接流计算做实时的订阅处理。

image.png

快速接入

您可通过日志服务SLS控制台快速开通Kubernetes事件中心,目前事件中心免费开通和使用。
image.png

参考

  1. https://github.com/kubernetes/kubernetes/blob/master/pkg/kubelet/events/event.go

  2. https://docs.datadoghq.com/agent/kubernetes/event_collection/

  3. https://www.appdynamics.com/blog/product/monitoring-kubernetes-events/

联系我们

大家在使用SLS中遇到的任何问题,请加钉钉群,我们有专门的日志小妹24小时在线答疑,还有火锅哥和烧烤哥专业支持!~

另外欢迎对大数据、分布式、机器学习等有兴趣的同学加入,转岗、内推,来者不拒,请用简历狠狠的砸我!~
image.png

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
10月前
|
Prometheus 监控 Kubernetes
Kubernetes 集群的监控与日志管理实践
【5月更文挑战第25天】在现代微服务架构中,容器编排工具如Kubernetes已成为部署、管理和扩展应用程序的关键。随着其广泛应用,对集群的监控和日志管理的需求也日益增长。本文将探讨如何利用Prometheus和Fluentd等开源工具实现对Kubernetes集群的有效监控和日志收集,旨在为运维工程师提供一套可行的解决方案,以保障集群的稳定性和提高故障排查效率。
|
10月前
|
Prometheus 运维 Kubernetes
Kubernetes 集群的监控与日志管理最佳实践
【5月更文挑战第23天】 在容器化和微服务架构日益普及的当下,Kubernetes 已成为众多企业的首选平台。随之而来的是对集群性能、资源利用和运行状况的持续监控需求,以及日志管理的重要性。本文将探讨在 Kubernetes 环境中实现有效监控和日志管理的策略,涵盖关键组件的选择、配置优化及故障排查流程,旨在为运维工程师提供一套综合解决方案,确保集群的稳定性和高可用性。
|
数据采集 Kubernetes 应用服务中间件
OpenKruise x iLogtail:管理可观测数据采集Sidecar容器最佳实践
在Kubernetes集群中使用Sidecar容器采集业务容器的可观测性数据是一种常见的数据采集部署方式,然而Sidecar容器对业务部署的侵入性和生命周期管理的复杂性使得这种部署模式的管理代价不仅高昂而且容易出错。本文对Sidecar采集容器管理的难点进行分析,使用OpenKruise提供的管理能力逐一解决,并以iLogtail为例给出基于OpenKruise管理可观测数据采集Sidecar容器的最佳实践。
506 0
OpenKruise x iLogtail:管理可观测数据采集Sidecar容器最佳实践
|
存储 缓存 Prometheus
【夜莺监控】管理Kubernetes组件指标(下)
【夜莺监控】管理Kubernetes组件指标(下)
|
Prometheus 资源调度 Kubernetes
【夜莺监控】管理Kubernetes组件指标(上)
【夜莺监控】管理Kubernetes组件指标(下)
|
Prometheus 监控 Kubernetes
云原生监控:Prometheus Operator,一文带你打通全流程:监控、规则、警报。
云原生监控:Prometheus Operator,一文带你打通全流程:监控、规则、警报。
329 0
|
存储 运维 Kubernetes
Kubernetes日志采集原理全方位剖析
本文将主要介绍SLS对于Kubernetes日志采集的基本原理,便于大家在实践中能够更好的规划使用方式。
2632 0
Kubernetes日志采集原理全方位剖析
|
存储 Prometheus Kubernetes
Kubernetes 集群和应用监控方案的设计与实践
Kubernetes 集群和应用监控方案的设计与实践
346 0
Kubernetes 集群和应用监控方案的设计与实践
|
存储 Prometheus Kubernetes
Kubernetes监控体系总结
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux/Windows/Mac 机器上。容器镜像正成为一个新的标准化软件交付方式。为了能够获取到 Docker 容器的运行状态,用户可以通过 Docker 的 stats 命令获取到当前主机上运行容器的统计信息,可以查看容器的 CPU 利用率、内存使用量、网络 IO 总量以及磁盘 IO 总量等信息。
Kubernetes监控体系总结
|
存储 运维 自然语言处理
深度解析|基于 eBPF 的 Kubernetes 一站式可观测性系统
阿里云 Kubernetes 可观测性是一套针对 Kubernetes 集群开发的一站式可观测性产品。基于 Kubernetes 集群下的指标、应用链路、日志和事件,阿里云 Kubernetes 可观测性旨在为 IT 开发运维人员提供整体的可观测性方案。
深度解析|基于 eBPF 的 Kubernetes 一站式可观测性系统