写点什么

一份运维监控的终极秘籍!监控不到位,宕机两行泪

  • 2019-02-13
  • 本文字数:2770 字

    阅读完需:约 9 分钟

一份运维监控的终极秘籍!监控不到位,宕机两行泪

有很多文章都提到过白盒监控和黑盒监控,以及监控的四个黄金指标。关于白盒与黑盒监控的定义,这里不再赘述。一般来说,白盒与黑盒分别从内部和外部来监控系统的运行状况,例如机器存活、CPU 内存使用率、业务日志、JMX 等监控都属于白盒监控,而外部端口探活、HTTP 探测以及端到端功能监控等则属于黑盒监控的范畴。


本文将主要从白盒监控的采集入手,解答关于新系统如何添加监控的问题。



黑盒与白盒监控

监控指标的采集

配置监控时,我们首要面对的是监控数据如果采集的问题。一般我们可以把监控指标分为两类:基础监控和业务监控

基础监控

包括 CPU、内存、磁盘、端口和进程等机器、网络的操作系统级别的信息。通常情况下,成熟的监控系统(例如开源的 Prometheus、Zabbix 等)均会提供基础监控项的采集能力,这里不做过多介绍。但需要注意的一点,机器级别的基础监控指标一般并不能代表服务的真实运行状况,例如单台实例的故障对一个设计合理的分布式系统来说并不会带来严重后果。所以只有结合业务相关监控指标,基础监控指标才有意义

业务监控

业务监控指标由业务系统内部的服务产生,一般能够真实反应业务运行状态。设计合理的系统一般都会提供相关监控指标供监控系统采集。监控数据的采集方法一般可以分为以下几大类。


  • 日志:日志可以包含服务运行的方方面面,是重要的监控数据来源。例如,通过 Nginx access 日志可以统计出错误(5xx)、延迟(响应时间)和流量,结合已知的容量上限就可以计算出饱和度。一般除监控系统提供的日志采集插件外,如 Rsyslog、Logstash、Filebeat、Flume 等都是比较优秀的日志采集软件。

  • JMX:多数 Java 开发的服务均可由 JMX 接口输出监控指标。不少监控系统也有集成 JMX 采集插件,除此之外我们也可通过 jmxtrans、jmxcmd 工具进行采集。

  • REST:提供 REST API 来进行监控数据的采集,如 Hadoop、ElasticSearch。

  • OpenMetrics:得益于 Prometheus 的流行,作为 Prometheus 的监控数据采集方案,OpenMetrics 可能很快会成为未来监控的业界标准。目前绝大部分热门开源服务均有官方或非官方的 exporter 可供使用。

  • 命令行:一些服务提供本地的命令来输出监控指标。

  • 主动上报:对于采用 PUSH 模型的监控系统来说,服务可以采取主动上报的方式把监控指标 push 到监控系统,如 Java 服务可使用 Metrics 接口自定义 sink 输出。另外,运维也可以使用自定义的监控插件来完成监控的采集。

  • 埋点:埋点是侵入式的监控数据采集方式,其优点是其可以更灵活地为我们提供业务内部的监控指标,当然缺点也很明显:需要在代码层面动手脚(常常需要研发支持,成本较高)。

  • 其它方式:以上未涵盖的监控指标采集方式,例如 Zookeeper 的四字命令,MySQL 的 show status 命令。


以上列出了几种常见的监控指标采集方法,在实际工作,如果没有现成的监控采集插件,则需要我们自行开发采集脚本。

监控的四个黄金指标

无论业务系统如何复杂,监控指标如何眼花缭乱,但万变不离其宗,监控的目的无非是为了解服务运行状况、发现服务故障和帮助定位故障原因。为了达成这个目的,Google SRE 总结的监控四个黄金指标对我们添加监控具有非常重要的指导意义。下图给出四个黄金指标所包含的主要监控指标,下面我们就这四个黄金指标分别展开说明,并给出一些监控项的采集实例。



四个黄金指标

错误:错误是指当前系统发生的错误请求和错误率

错误是需要在添加监控时首要关注的指标。在添加错误相关监控时,我们应该关注以下几个方面:


  • 基础监控:宕机、磁盘(坏盘或文件系统错误)、进程或端口挂掉、网络丢包等故障。

  • 业务监控:

  • 核心功能处理错误,每种系统都有特定的核心功能,比如 HDFS 的文件块读写、Zookeeper 对 Key 的读写和修改操作。

  • 基础功能单元丢失或异常,这里的基础功能单元是指一个系统功能上的基本单位,例如 HDFS 的 Block、Kafka 的 Message,这种基础数据的丢失一般都会对业务功能造成直接的影响。

  • Master 故障,对于中心化的分布式系统来说,Master 的健康状况都是重中之重。例如 HDFS 的 NameNode、Zookeeper 的 Leader,ElasticSearch 的 MasterNode。

  • 可用节点数,对于分布式系统来说,可用节点数也是非常重要的,比如 Zookeeper、ETCD 等系统需要满足可用节点数大于不可用节点数才能保证功能的正常。


注意:除白盒监控外,主要功能或接口、以及内部存在明显边界的功能模块和上游依赖模块,都应该添加黑盒端到端监控

延迟:服务请求所需时间

服务延迟的上升不仅仅体现在用户体验的下降,也有可能会导致请求堆积并最终演变为整个业务系统的雪崩。


以下为延迟指标的主要关注点:


  • 基础监控:IO 等待、网络延迟;

  • 业务监控:业务相关指标主要需要关注核心功能的响应时长。比如 Zookeeper 的延迟指标 zk_avg_latency,ElasticSearch 的索引、搜索延迟和慢查询。


注意:与错误指标类似,白盒延迟指标通常仅能代表系统内部延迟,建议为主要功能或接口添加黑盒监控来采集端到端的延迟指标

流量:当前系统的流量

流量指标可以指系统层面的网络和磁盘 IO,服务层面的 QpS、PV 和 UV 等数据。流量和突增或突减都可能预示着系统可能出现问题(攻击事件、系统故障…)。一下为流量主要关注的方面:


  • 基础监控:磁盘和网卡 IO;

  • 业务监控:核心功能流量,例如通过 QpS/PV/UV 等通常能够代表 Web 服务的流量,而 ElasticSearch 的流量可用索引创建速率、搜索速率表示。

饱和度:用于衡量当前服务的利用率

更为通俗的讲,饱和度可以理解为服务的利用率,可以代表系统承受的压力。所以饱和度与流量息息相关,流量的上升一般也会导致饱和度的上升。通常情况下,每种业务系统都应该有各自的饱和度指标。


在很多业务系统中,消息队列长度是一个比较重要的饱和度指标,除此之外 CPU、内存、磁盘、网络等系统资源利用率也可以作为饱和度的一种体现方式。


  • 基础监控:CPU、内存、磁盘和网络利用率、内存堆栈利用率、文件句柄数、TCP 连接数等;

  • 业务监控:

  • 基础功能单元使用率,大多数系统对其基础的功能单元都有其处理能力的上限,接近或达到该上限时可能会导致服务的错误、延迟增大。例如 HDFS 的 Block 数量上升会导致 NameNode 堆内存使用率上升,Kafka 的 Topics 和 Partitions 的数量、Zookeeper 的 node 数的上升都会对系统产生压力。

  • 消息队列长度,不少系统采用消息队列存放待处理数据,所以消息队列长度在一定程度上可以代表系统的繁忙程度。如 ElasticSearch、HDFS 等都有队列长度相关指标可供采集。

总结

以上总结了常见的监控指标采集方法,以及四个黄金指标所包含的常见内容。在实际工作中,不同的监控系统的设计多种多样,没有统一标准,并且不同的业务系统通常也有着特定的监控采集方法和不同的黄金指标定义,具体如何采集监控指标和添加告警都需要我们针对不同系统特点灵活应对。


文章出自京东云应用研发部,首发于公众号“京东云”:https://mp.weixin.qq.com/s/HGVTM30j5I9T8Q6B8DEvnQ


2019-02-13 14:1913183

评论 1 条评论

发布
用户头像
“我们首要面对的是监控数据如果采集的问题”中“如果”应该是“如何”吧。
2019-02-13 18:52
回复
没有更多了
发现更多内容

云资源是什么意思?有什么特点?

行云管家

云计算 云服务 多云服务 云资源

“区块链+农业”推动产业“提档升级”

CECBC

100台机器上海量IP如何查找出现频率 Top 100?

秦怀杂货店

IP 海量数据 top

私有云部署系列之动态获取IP(程序执行)

稻草鸟人

Python

Golang语言HTTP客户端实践

FunTester

golang 性能测试 HTTP 接口测试 FunTester

架构实战课程 模块5作业

Frank

物理服务器是什么意思?怎么构成?与云服务器有啥区别?

行云管家

云计算 服务器 云服务器 物理服务器

企业运维监控管理系统我给推荐行云管家!

行云管家

云计算 运维 运维监控 云管平台

设计微博系统中"微博评论"的高性能高可用计算架构

Rabbit

【Flutter 专题】34 图解自定义 View 之 Canvas (二)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 10月月更

Pandas教程:数据类型操作

Peter

Python pandas

2021年10月4日Facebook史上最严重宕机复盘分析

郑州埃文科技

ip数据 网络波动 网动仪

linux之iftop命令

入门小站

Linux

在线2-36任意进制转换工具

入门小站

工具

这些行业用ERP系统会有很大帮助

低代码小观

企业管理 ERP

【优化技术专题】「线程间的高性能消息框架」再次细节领略Disruptor的底层原理和优势分析

洛神灬殇

Disruptor 异步高性能 高并发处理 性能提升 10月月更

爱奇艺数据质量监控的探索和实践

爱奇艺技术产品团队

监控 数据治理 pingback

[ Golang 中的 DDD 实践] 值对象

baiyutang

golang 设计模式 领域驱动设计 DDD 10月月更

Pandas教程:数据处理基石-数据探索

Peter

Python pandas

架构实战课程 模块6作业

Frank

以太坊的黄金时代:模块化的区块链范式的开端

CECBC

VNC服务安装配置与使用

耳东@Erdong

vnc 10月月更

BPM软件是什么?BPM软件跟BPA有关联吗?

低代码小观

企业管理 业务流程管理 信息管理

私有分布式账本技术还是公共区块链?

CECBC

【LeetCode】无重复字符的最长子串Java题解

Albert

算法 LeetCode 10月月更

强化学习RL AWS 自动驾驶DeepRacer ROS 架构 易筋 ARTS 打卡 Week 71

John(易筋)

ARTS 打卡计划

新一代容器平台ACK Anywhere,来了

阿里巴巴云原生

阿里云 云原生 ACK Anywhere

字节跳动是如何落地微前端的

字节跳动终端技术

字节跳动 大前端 Web应用开发

KubeVela 1.1 发布,开启混合环境应用交付新里程碑

阿里巴巴云原生

阿里云 云原生 KubeVela

最长回文子串 -- 三种解答

秦怀杂货店

数据结构 算法 最长回文子串

【Vuex 源码学习】第九篇 - Vuex 响应式数据和缓存的实现

Brave

源码 vuex 10月月更

一份运维监控的终极秘籍!监控不到位,宕机两行泪_软件工程_葫芦瓜_InfoQ精选文章