指标指用于描述一个物体或事物的某个性质的指数、规格、标准,使其可以和其他的物体或者事物比较;从软件的角度讲度量即把所有东西都量化、数据化、可采集。指标即表示对这些量化后的数据的目标值。
观测指标体系是指对监控指标进行体系化的规划、实现全生命周期管理、建设管理规范等的系统方法论。
在了解指标体系前,先了解下为什么需要进行指标体系的建设,结合过往的建设经验,主要有以下六个方面的原因:
衡量业务健康情况
指标体系可以反映业务客观事实,看清业务健康现状,有效衡量业务质量,优化应用运行。
完善指标体系闭环管理
规范指标定义、指标评估、指标上线、指标运营的过程,指导围绕指标全生命周期的管理体系的建设。
衡量企业监控落地效果
建立指标的规范和管理方法,更好衡量企业监控的能力完善程度和监测有效性。
支撑故障问题的快速定位
围绕指标的全生命周期管理内容,建设指标数据体系,在故障出现时能够快速定位问题所在。
明确指标管理规范
清晰定义指标管理流程、分级分层规范,命名规范等,实现指标的全生命周期管理。
为运维团队提供数据支持
企业内统一指标体系建设,提供指标查询、检测、健康分析等消费能力,实现指标数据的价值挖掘。
经过嘉为蓝鲸多年的项目积累,对于指标管理体系的总结如下图。
基于图中的内容,接下来将详细介绍如何进行指标体系建设和设计。
指标管理闭环
指标全生命周期管理,包含指标定义、指标评估、指标上线、指标运营四个阶段。
1、指标定义
- 监控对象:指标关联的对象,例如基础设施(动环)、硬件设备、操作系统、数据库、中间件、应用服务、业务数据等;
- 指标名称:指标规范命名,用于指标标识和理解传播;
- 指标分级:指标的重要等级--核心(生死指标)、关键(告警指标)、常规(分析指标);
- 指标维度:指标关联主体的标识信息,例如主机IP、磁盘分区、网卡名称等;
- 指标描述:如指标的含义、长度限制、映射规则、指标数据类型、单位、计算规则等。
2、指标评估
- 指标申请:申请添加指标,主要考虑问题驱动、行业实践、业界标准,例如谷歌SRE定义的黄金指标;
- 指标开发:开发指标的获取逻辑——插件、协议、上报等多种方式;
- 指标计算:基于现有指标的二次计算获得新的指标,一般也称衍生指标;
- 指标验证:获取并验证指标数据的正确性,确保指标可靠可用;
- 指标审核:审核指标是否符合设计原则、风险性,例如是否对目标有性能影响、是否暴露敏感数据等,最终审核确认是否要上线。
3、指标上线
- 指标上报:符合格式规范的指标数据主动上报至监控/观测系统;
- 指标采集:由监控/观测系统主动下发插件采集指标数据,或者通过协议/API远程获取目标的指标数据;
- 阈值设置:设置指标的检测规则阈值,用于指标的告警;
- 指标检索:查看指标的数据,观察指标运行趋势,探索不同指标的差异对比等;
- 指标告警:验证指标策略是否可以按照预期产生正确的告警。
4、指标运营
- 告警检验:检验告警的有效性,告警能否反映一个真实问题?告警是否具备可处理性?
- 场景实践:基于场景是否能够产生预期的告警效果,例如不同的业务系统:计算密集型、IO密集型、网络密集型;数据型、任务型等;
- 问题复盘:问题是否有告警?考虑监控对象是否覆盖?指标是否覆盖?指标是否冗余?阈值是否正确?并记录结论报告;
- 统计分析:指标运营数据的统计分析——覆盖率、关联策略数、指标告警频率和告警数、指标告警趋势等,持续运营反馈优化指标体系;
- 标准沉淀:通过复盘和统计分析,不断沉淀企业自有指标最佳实践,建设企业自有的指标标准库和规范。
指标管理规范
1、指标设计原则
- 指标设计要遵循可度量、可采集、可理解、可消费的原则。
- 比如用 timestamp 作为指标,这个就不是一个很好的指标。
- 指标设计要有明确监控目标和消费场景。
- 在进行指标选取时,需要明确监控目标和消费场景,避免指标冗余、混乱、隔离、不一致以及谬误等。
- 指标设计具有可以赋予数学运算的属性。
- 比如可排序(全序、偏序),可运算(加减乘除与或非),或者可进行数学统计运算(Percentile, Deviation, Correlation, Gaussian / Poisson / Unique Distribution等)。
- 指标最好是具有时序性的。
- 比如服务是否启动了,这个布尔值指标,就没有太大意义了;但是换一个角度,服务的运行状态,这个指标可以周期性采集探测,具备时序特征,可以反映不同时间的服务状态。
- 指标定义首选是代表服务可用性的关键指标的。
- 可以参考Google SRE定义的黄金指标。比如说请求量,耗时,缓存命中率,消息队列Ingress & Egress的数量,消费速率,积压请求数量等,这些都可以成为自定义指标的首选。
- 对于部分跟业务相关的指标,也可以作为该业务链路的指标。
- 用文件下载作为例子,请求的耗时跟请求的文件大小有正相关性,将每次下载文件的大小作为指标,在这个业务场景中也是很好的一个选择。
2、指标分级规范
指标本身一般分三级,按重要程度区分:核心指标(生死指标)、关键指标(告警指标)和常规指标(分析指标)。
- 核心指标一般不会定太多,主要反映这个监控对象是活着还是死了,1到2个即可。
- 关键指标是看核心性能是否正常,参考谷歌定义的SRE四大黄金指标。
- 常规指标可以根据实际的业务场景去考虑,主要用于告警分析时的数据参考。
核心指标一定要配置告警基线,关键指标建议配置,而常规指标可以按业务场景考虑是否配置。后续通过不同指标的分级、权重,便可以很容易地建设起企业内的应用健康评估模型,衡量整个应用的健康情况。
3、指标命名规范
核心是可视可读,定义统一的指标命名规则,如包含编号的长度限制、编码的构成、各组成部分的具体含义等。
命名示例:
(1) 组件名_指标获取方式_指标分类_指标描述:
nginx_exporter_cachezone_max_size
(2) 系统名_插件获取方式_指标描述:
blueking_script_host_num
4、指标数据规范
指标数据规范,支撑上层场景实现的基石,定义需要谨慎,下面提供两种常见的指标数据格式规范供参考。
JSON格式示例
- 数据示例
- 字段说明
- data说明
Prometheus Metrics 标准格式
- 数据格式需遵循:
- 字段说明:(一个指标一行)
指标分层体系
从企业业务应用的全面管理视角出发,通常将监控体系划分为六个核心层级,以全面覆盖并优化企业的IT架构。这些层级依次为:基础设施层、硬件设备层、操作系统层、组件服务层、应用性能层、业务运营层。当然,企业也可以根据自身的实际情况和特定需求,对上述监控层级进行灵活调整或定制。
1、基础设施层
基础设施层,指机房的基础设施配备,用于保证机房的正常运转,包含动力、环境、安防等设备。
动力主要包含供电系统、发电机、UPS电源等电力供应设备,核心关注电力的状态、容量、电压、电流、稳定性、频率等指标。
环境主要包含温湿度计、空调、通风等环境监测和调节设备,核心关注环境设备的运行状态、环境温度、湿度等指标。
安防主要包含视频摄像头、门禁、烟雾探测器、消防设备等安全防护设备,核心关注设备的运行状态、视频稳定性、门禁状态等指标。
该层设备的监控指标主要通过IOT传感器结合接口/SNMP协议以及HTTP接口的方式进行监控。
2、硬件设备层
硬件设备层,指服务器、存储、网络、安全四类常见硬件设备对象,用于提供应用运行所需的硬件资源。
服务器设备主要包含X86服务器、小机、大机等计算资源设备,随着分布式计算技术的普及,小机、大机这种性能超强的专用机器逐渐淘汰,X86服务器成为当下主流;核心关注服务器的电源、CPU、内存、磁盘、风扇等配件的工作状态和性能指标。服务器主要通过IPMI、Redfish、SNMP几种协议以及HTTP接口的方式进行监控。
存储设备主要包含磁盘阵列、磁带库、存储交换机等存储资源设备,随着虚拟存储的技术的出现,专用而昂贵的存储设备逐渐减少,取而代之的是廉价的服务器设备配合大量的硬盘通过虚拟化技术提供的存储资源;核心关注存储设备的容量、IOPS、运行状态、读写速率等指标。存储设备主要通过SNMP、SMI-S、SSH协议以及HTTP接口的方式进行监控。
网络设备主要包含交换机、路由器、负载均衡等网络资源设备;核心关注网络设备的运行状态、端口状态、端口流量、吞吐量、错误包、丢包率等指标。网络设备主要通过SNMP协议进行监控。
安全设备主要包含防火墙、入侵检测设备、防病毒设备、加密机等;核心关注安全设备的运行状态、接口状态、速率、丢包数、网络攻击数等指标。安全设备主要通过SNMP、SSH协议以及HTTP接口的方式进行监控。
3、操作系统层
操作系统层,除了包含传统意义上的各类操作系统之外,虚拟化、容器也纳入该层,虚拟化、容器本质上也是由操作系统驱动而提供的一种资源服务,如有需要,可单独划分虚拟化层。
操作系统主要包含Windows Server、Linux系的CentOS、RHEL、Suse、Ubuntu、AIX、HP-Unix等服务器操作系统;核心关注CPU使用率、内存使用率、磁盘使用率、磁盘IO速率、网卡流量等指标。操作系统主要通过Agent/插件的方式调用系统接口(例如WMI)或者内置命令行/文件进行监控。
虚拟化主要包含VMware、OpenStack、KVM、Citrix等虚拟化平台;核心关注平台主机、集群、存储的状态和资源容量、资源数、配额等指标。虚拟化主要通过HTTP接口的方式进行监控。
容器监控主要指K8s容器管理平台的监控;核心关注Cluster、Node、Container、Service、Workload等资源的状态、CPU负载、内存使用、磁盘使用、网络流量等指标。容器平台主要通过HTTP接口(ServiceMonitor)的方式进行监控。
4、组件服务层
组件服务层,一般指数据库、中间件及其运行进程等软件资源对象,部分监控系统经常将进程归属于操作系统监控,或者独立进行监控,反映的都是进程本身的状态,但是进程本质是各种数据库、中间件软件资源服务化的表现形式,应当隶属于资源实例监控的一部分。
数据库主要包含企业常用的各种关系型数据库MySQL、Oracle、MSSQL等,以及非关系型数据库MongoDB、Redis、InfluxDB等;核心关注的是数据库的连接数、读写速率、锁、索引命中率、连接数等指标。 数据库主要通过数据库的Client/命令行或者通用的JDBC/ODBC协议执行SQL的方式或者自带的监控接口进行监控。
中间件主要包含Web中间件、消息中间件两种,例如WebLogic、Was、Tomcat、kafka、RabbitMQ等,其他的还有配置中间件、分布式事务、任务调度中间件等;核心关注的是中间件的吞吐量、连接数、JVM性能等指标。中间件主要通过中间件的自带的命令行工具或者通用的JMX协议或者自带的接口进行监控。
一般只有数据库、中间件或者应用本身的进程才会进行监控,进程监控核心关注进程状态、端口状态、进程的性能使用率等指标。进程主要通过Agent/插件的方式调用系统接口(例如WMI)或者命令行进行监控。
5、应用性能层
应用性能层,包含应用系统服务端和客户端两个方面,其中服务端主要指调用链,客户端主要包含移动端APP、PC端Web页面。
对于服务端的调用链,核心关注可用率、错误率、响应时间、吞吐率等关键性能指标。主要通过Traces调用链的方式进行监控。
对于客户的移动端APP和PC端的Web页面,核心关注浏览量、请求数、首屏时间、渲染时间、可用率、响应时间等关键性能指标。主要通过安卓/苹果的SDK以及JS的SDK进行监控。
另外,对于应用和服务的基础探测,也可以采用协议拨测的方式来实现,此时主要关注网站或接口的拨测可用率、拨测响应时间。主要通过HTTP/TCP/UDP协议通过拨测进行监控。
6、业务运营层
业务运营层,主要指业务系统中的业务数据的监控,需要根据业务系统的特点来进行梳理,常见的业务系统主要关注交易量、交易耗时、库存量、用户数、活跃用户数、在线用户数等业务核心指标。主要通过HTTP接口、数据库SQL、脚本、日志提取等方式进行监控。
以上便是指标管理体系的全部内容,但是指标的管理不仅仅是指标体系内容建立,还包括指标的管理规范和治理。不仅仅需要观测工具的承载,还需要相应的配套工具,如CMDB的建设,提供数据治理,对象管理等能力;ITSM流程系统,保障指标管理过程中的流程规范,保障顺利完成整个落地过程。