【作者】JasonXu
前言
当前全球企业云化、数字化进程持续加速,容器、微服务等云原生技术在软件架构中快速渗透,IT 架构云化、复杂化持续驱动性能监控市场。企业云化、数字化持续转型,以及为了考虑系统的弹性、效率,企业软件开发中大量云原生技术的应用推动全球 IT 监控市场快速变化,如何全面、有效的对容器、K8s、微服务进行监控是当下云原生技术面临的重要课题。
背景和挑战
云化产品通常采用服务化框架,由一系列微服务组成,且微服务是可以独立运行的进程,不同服务可使用不同开发语言,可能分布部署在几千台服务器上,甚至可能横跨多个不同的数据中心,服务间使用轻量的通信机制;服务之间存在复杂的调用关系,对运维人员理解系统的行为或分析系统性能带来巨大挑战 如:
(1)容器是否正常运行
(2)K8S是否正常运行。
(3)微服务是正常
(5)业务调用出现问题,如何快速找出哪个服务发生失败?
(6)某个业务调用耗时较长,如何快速找到性能瓶颈点?
(7)如何快速获取某次调用的业务日志进行分析定位?
解决方案
概述
云原生监控体系包括:Healthchecks、Metrics、Logging、Tracing。Healthchecks:健康检查可以定期检查某个应用的存活状态;Metrics:度量指标监控,在离散的时间点上产生数值点;Logging:日志监控;Tracing:调用链监控。
各种监控工具适用场景如下图所示:
健康检查
微服务架构,为了保证所有服务可用,当服务发生问题时能及时摘除有问题的服务需要定期检测服务可用性,即健康检查。通常健康健康检查包括TCP与HTTP两种。即定时发送TCP或HTTP请求,根据响应来确定服务是否可用。一般通过TCP定期请求来判定网络层是否正常,而通过Http请求判断应用层是否正常。服务要配置好请求接口,检测服务定期向指定的接口发送http请求,并根据接口响应码和响应时间判断。Spring boot的end port /health可以检查应用的健康状态,举例说,当我们访问 http://localhost:8088/health 时,可以看到 HealthEndPoint 给我们提供默认的监控结果,包含磁盘检测和数据库检测。
{
"status": "UP",
"diskSpace": {
"status": "UP",
"total": 398458875904,
"free": 315106918400,
"threshold": 10485760
},
"db": {
"status": "UP",
"database": "MySQL",
"hello": 1
}
}
容器监控
容器监控使用Prometheus-cAdvisor,cAdvisor是谷歌专为监控容器性能状态设计的一个开源工具,cAdvisor提供有Push和Pull两种获取性能数据的接口。Push接口指的是由cAdvisor主动将数据周期性的推送到远端的存储服务中,Influxdb与cAdvisor的对接就是通过这个接口完成的。而Pull接口则允许外部访问服务随时主动从cAdvisor获取到当时时刻的性能数据,然后自行处理,Prometheus与cAdvisor的对接用的是这种方法。
基于容器的微服务监控和原始的监控是有很大区别的,因为服务的实例生存周期很短,分分钟可能就会有容器的生灭。微服务的容器与宿主机的监控离不开CPU、内存、磁盘、网卡这些基础的性能指标,对于宿主机的监控来说ÿ