监控可以分成 4 个类别,具体如下:
业务监控指标是管理层所关注的,一般与企业营收挂钩,或者跟客户主流程相关。这类指标类似 BI(Business Intelligence System,即数据分析系统) 数据。不过相比 BI 数据,业务监控指标有两点不同:
对精确度要求没有那么高:因为监控只要发现趋势异常就可以,至于是从 5000 变成了 1000 还是变成了 1001,没有什么区别。
对实时性要求很高:很多 BI 数据可能是小时级别或天级别的,这个时效性无法满足监控的需求,监控是希望越早发现问题越好,要是一个小时才发现问题,黄花菜都凉了
技术人员应该针对这类指标做高优保障,如果所有的指标都同等对待,重要的告警就容易被普通告警淹没,所以告警一定要分级对待
。
应用监控就是指对应用程序(Application)的监控,Google 的四个黄金指标
、RED
方法主要就是针对应用监控的。
每个公司都应该有统一的 APM(Application Performance Management),即应用性能管理方案。
从指标着手的话一般使用埋点机制来做,比如 StatsD、Prometheus SDK 等,或者直接分析接入层日志,从日志提取指标;从链路追踪着手的话可以使用 Zipkin、SkyWalking 等。
像 Java 这种字节码技术的语言,采用 JavaAgent 技术可以做到代码无侵入埋点。但是像 Go、C++ 这类语言,一般都是采用埋点机制来做,由统一的工具团队提供一些框架,在框架里内置埋点逻辑,这样普通研发人员也就基本不会有代码侵入的感觉了。
我们这里把各类数据库、中间件、云平台,统称为组件,而组件的监控是最考验知识广度的。
最好还是让专业的人来做专业的事,只需要定义统一的接入数据规范就行。
基础资源的监控,主要是针对设备和网络,设备又分为服务器、网络设备,网络监控又分为连通性监控、质量监控、流量监控。
服务器上CPU、内存使用率等需要监控,除了这些之外,如果我们想获取硬件模块的健康状况,比如电源电压、风扇转速、主板环境温度等,就需要走 IPMI 协议,通过带外网络采集。
网络设备,典型的就是交换机、防火墙,一般是通过 SNMP 协议获取指标,比如交换机各个网口的流量、包量。也可以通过 syslog 的方式,把交换机的日志转存出来,到服务器上分析。
网络连通性监控最为常见,通过 ICMP 协议,部署探针机器,对目标设备做 PING 探测,能探通就表示能连通,探测失败就是连不通。当然,有些机器可能是禁 PING 的,此时就需要用 TCP 或 HTTP 之类的协议去探测了。
PING 探测可以拿到丢包率和延迟数据,我们可以用这些数据分析网络质量。比如两个机房之间的专线,我们用 A 机房的探针去探测 B 机房的目的设备,就能轻易知道机房之间的网络质量情况。
最后是流量监控,也会用在多个地方,比如机器的网卡流量、交换机的网口流量、机房出口流量,也是整个监控体系的重要一环。
上边提到的都是服务器端的监控,还有一个大类是端监控,比如 iOS 应用,我们会关注是否卡顿、有没有崩溃、白屏之类的,这算是另一个领域,这里就不展开介绍了。
此文章为9月Day 20学习笔记,内容来源于极客时间《运维监控系统实战笔记》。