个服务的监控从整体考虑,要达到哪些才能算是完善的?我想,如果没有一个全局性的监控思考,一个服务的监控即使加的再多也是会有监控盲区的。
监控的层次
从基础机器到上层业务,分为三个不同层次:系统,应用,业务。不同的层次都应该有其不同的监控目的。
系统监控
这个层次监控服务所在服务器的可用性。服务器的各项基本指标是否正常。包括服务器的CPU,服务器的磁盘,服务器的内存等。
有的服务器会进行服务混布,这种监控更为重要。因为其他服务导致的服务器问题只能通过系统监控层面得到反馈。
操作系统层面的监控也是最为基础的了。如果我们购买云服务器,阿里云或者腾讯云上都会有对应的监控设置,但如果是自有的虚拟化集群,集群管理也有对应的开源实现,比如 prometheus + node_exporter 的形式。
这类监控报警通常关注的就是机器CPU负载,空闲内存,网络带宽,磁盘空间等。
应用监控
这个层次监控当前服务进程的可用性。分析当前服务进程与业务无关的各项指标。把一个应用(进程)当作是黑盒,不管其中的业务逻辑正确与否,只观察这个应用的健康状态。大致应用状态包含:
- 进程数
- CPU占用
- 内存占用
- Coredump情况
- fd打开数
对于这个级别的监控,prometheus 也有一个 process_exporter 是专门做这个事情的。
在应用监控的时候,对于 Golang 项目,需要监控进程的runtime信息。
这个runtime信息包括:<