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运维中积累的事件监控、告警指标提炼到事件中心,开箱即可获得这些积累的运维经验。
NPD加持
Kubernetes中的相关组件只关注容器管理相关的问题,对于硬件、操作系统、容器运行时、依赖系统(网络、存储等)并不会提供更多的检测能力,这时候就需要通过NPD(node-problem-detector)来增强Kubernetes整体的监控能力。
NPD是Kubernetes节点诊断的工具,可以将节点的异常转换为Node的事件,推送到APIServer中,由同一的APIServer进行事件管理。NPD支持多种异常检查,例如:
- 基础服务问题:NTP服务未启动
- 硬件问题:CPU、内存、磁盘、网卡损坏
- Kernel问题:Kernel hang,文件系统损坏
- 容器运行时问题:Docker hang,Docker无法启动
在阿里云Kubernetes中,我们对默认的NPD能力进行了增强,覆盖了更多运维中遇到的问题,例如:
- 节点FD水位监控
- 节点Pid水位监控
- 磁盘水位监控
- 阿里云RAM Role监控
- 网络SNAT配置监控
NPD的检查输出完全遵循Kubernetes的事件规范,因此事件中心也支持检查、监控NPD中产生的事件,通过NPD能力的加持,事件中心能够支持Kubernetes全方位的监控。
可视化报表
基于日志服务SLS的通用查询、分析、可视化、告警能力,事件中心默认提供了3种类型的报表,把Kubernetes中的事件按照等级、类型分类统计并可视化展示,通过Dashboard一眼即可了解到系统中正在发生的一些异常以及分布情况。
实时告警
为了更好的管理和监控集群,事件中心内置了Kubernetes常见的错误类型统计以及实时告警,当有错误发生时,会通过SLS实时通知,通知方式支持短信、电话、邮件、钉钉群,也支持自定义的WebHook对接企业自己的告警中心。
自定义分析与处理
基于日志服务强大的数据中台能力,事件中心除了提供内置的报表以及告警模板外,还支持用户自定义的分析功能,大家可以通过日志服务提供的查询、分析引擎来进行实时的事件查询、统计,也可以将事件对接流计算做实时的订阅处理。
快速接入
您可通过日志服务SLS控制台快速开通Kubernetes事件中心,目前事件中心免费开通和使用。
参考
- https://github.com/kubernetes/kubernetes/blob/master/pkg/kubelet/events/event.go
- https://kubernetes.io/docs/tasks/debug-application-cluster/events-stackdriver/
- https://docs.datadoghq.com/agent/kubernetes/event_collection/
- https://www.appdynamics.com/blog/product/monitoring-kubernetes-events/
联系我们
大家在使用SLS中遇到的任何问题,请加钉钉群,我们有专门的日志小妹24小时在线答疑,还有火锅哥和烧烤哥专业支持!~
另外欢迎对大数据、分布式、机器学习等有兴趣的同学加入,转岗、内推,来者不拒,请用简历狠狠的砸我!~
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
SpringBoot_自动配置
SpringBoot_自动配置 一、SpringBoot 的核心注解: @SpringBootApplication 使用main()方法启动的类,只有该注解。进入该注解如图: @SpringBootConfiguration:底层是@Configuration; 1、@Configuration 该注解用于JavaConfig中,被该注解标注的表示,该类是个配置类 2、@ComponentScan 自动扫描注解,扫描路径下的组件或者Bean;@Controller/@Service/@Component/@Repository 3、@EnableAutoConfiguration 复合注解:自动载入应用程序所需要的所有默认配置。 最关键的注解@Import({EnableAUtoConfigurationImportSelector.class}), 该注解的作用是帮助SpringBoot 应用将所有符合条件的@Configuration 配置都加载到当前SpringBoot 应用中 实际上是扫描所有jar路径下的META-INF/spring.factories,将其文件包装成Pr...
- 下一篇
内核调优 | 如何提升Elasticsearch master调度性能40倍
作者:兴丰__阿里云Elasticsearch团队 高级开发工程师 本文字数:1299阅读时间:2~5分钟 以下是正文 背景 我们在协助某Elasticsearch用户准备将自建集群迁往阿里云Elasticsearch的过程中发现,自建集群从ES6.3.2版本升级到7.4.0版本后,master变得特别卡,创建索引和删除耗时超过1分钟。该集群当时有3个专有主节点、10个热节点、2个冷节点,超过5万个shard,绝大部分索引/shard都是关闭的,当索引过期移动到冷节点就close掉,需要查询时再调用open命令打开。同时,在试过6.x到7.x的多个版本后,发现自7.2.0后的版本都有问题,而即使把专有主节点升级到32c64g的规格,还是不行。 思考 由于是自建的线上生产集群,登录机器和查看集群状态极为不便,也有一定的风险。因此计划先从Elas
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS8编译安装MySQL8.0.19
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题