深⼊入了了解

Metrics 监控系统
@3D #2018-01-12 北北研
About me - 狄敬超
๏沪江技术中⼼心平台架构
部架构师
๏去 Windows MySQL 数
据库迁移/ Metrics 监控
报警 / CICD 系统优化 /
服务器器资源利利⽤用率 等
๏曾任堆糖⽹网平台研发负
责⼈人,5 年年时间经历了了
PV 从万到亿的变化
Agenda
๏ 线上出现问题怎么办
๏ Metrics 监控原理理
๏ 监控的⽬目标
๏ Metrics 监控的类型
๏ 监控的⼀一些原则
๏ Metrics 监控在沪江
๏ 沪江 Metrics 监控的实现原理理
๏ 沪江 Metrics 监控的⼯工程实践
๏ 线上出现问题怎么办
๏ Metrics 监控是什什么
๏ 监控的范围
๏ 监控的类型
๏ 监控的⼀一些原则
๏ Metrics 监控在沪江
๏ 沪江 Metrics 监控的实现原理理
๏ 沪江 Metrics 监控的⼯工程实践
๏ 线上出现问题怎么办
๏ Metrics 监控是什什么
๏ 监控的范围
๏ 监控的类型
๏ 监控的⼀一些原则
๏ Metrics 监控在沪江
๏ 沪江 Metrics 监控的实现原理理
๏ 沪江 Metrics 监控的⼯工程实践
线上服务挂掉怎么办?
⼤大家有没有经历过线上服务挂掉呀?

⼀一般是怎么收到服务挂掉的通知呢?

Zabbix 报警,运维会来通知?⾼高级⼀一些的有⾃自⼰己开发的监控系统,微信收到推送?

最惨的可能是产品经理理或者⽤用户直接找过来吧?我以前创业团队时候,经常就是产品经理理第⼀一个发现问题。以⾄至于产品经理理喊我名字,我都紧张了了。
应⽤用⽇日志 grep / 系统命令 ⼀一顿操作
有没有同学使⽤用 Linux ⽐比较溜溜呀?

如果⾮非常熟悉命令⾏行行操作,操起键盘就是⼀一顿命令猛如⻁虎。

什什么 grep / awk / sed,去挖掘⽇日志中⼀一些可能提示问题的地⽅方。

再加上 top / vmstat / iostat / dstat 命令操作。

但是呢,使⽤用⼀一堆 stat 命令只能看到瞬时的数据,不不能看到历史数据。

查看⽇日志,运⽓气好,很快就能发现问题所在;如果在做了了多服务器器负载均衡的时候,⼤大家可能还要通过其他的⼀一些服务,⽐比如 ES 进⾏行行聚合操作。

运⽓气不不好,就没有在关键位置
ELK
那你最好得提前熟悉⼀一下 ES 的查询语法,避免突发状况下⽆无法快速处理理问题

运⽓气不不好情况下⾯面,⽇日志被吞掉,⼲干脆没打出来,或者打出来的信息粒度太粗,⽆无法满⾜足你的需求。⼜又或者⽇日志刷刷刷打出来,从 Controller / Service / Redis / MySQL / 外
部服务都爆出异常,你压根⽆无法分辨出,产⽣生问题的根源是哪⾥里里?
有没有更更快速的办法?
Metrics 监控
๏ 线上出现问题怎么办
๏ Metrics 监控是什什么
๏ 监控的范围
๏ 监控的类型
๏ 监控的⼀一些原则
๏ Metrics 监控在沪江
๏ 沪江 Metrics 监控的实现原理理
๏ 沪江 Metrics 监控的⼯工程实践
先介绍三个概念
SLI
(Service Level
Indicator)
SLO
(Service Level
Objective)
SLA
(Service Level
Agreement)
SLI / SLO
๏ Service Level Indicator 服务⽔水平指标
๏ ⽤用术语精确的定义指标是如何计算
的,⽐比如 CPU usage / CPU load /
HTTP QPS
๏ Service Level Objective 服务⽔水平⽬目标
๏ ⽤用数值定义 SLI 的期望范围
以 CPU 举例例
๏ 应⽤用服务器器的 CPU usage SLO
๏ 0%~40% 是合理理的
๏ 40%~60% 是 warning,持续 5min 则认为
有问题
๏ 80%~100% 是 alert,持续 30s 认为有问题
๏ 100% 是 critical
以 HTTP 服务举例例
๏ 500 < QPS < 2000 条件下需要满
⾜足
๏ Latency < 500ms
๏ Queue Waiting count < 50
SLA(Service Level Agreement)
⼤大家平时说的宕机了了,服务不不可⽤用。从理理性和量量化的⻆角度分析,其实就是⼤大家提供的服务,不不能达到当初给出的承诺。

上图是七⽜牛提供的 CDN 可⽤用性保证,可以看到他保证是 3 个 9,⼤大家知道 4 个 9 是多少么?52min,如果计算周期⼀一个⽉月,那么每个⽉月分配到 4.3 分钟。

有没有同学压根就没有给出 外部 SLA 承诺呢?我猜是有的,赶紧去想⼀一想。
Metrics 监控系统
๏ 将 SLO(Service Level Objectives )以数值化的⽅方
式聚合展示,存储⻓长期的数据,⽤用于监控和报警
๏ 常⻅见 Metrics SLI
๏ 图⽚片压缩服务的 TPS
๏ Web 服务的响应时间
๏ CPU 的 Load
๏ Memcache 的 hit success ratio
好了了,现在有了了三个定义,其实就已经能够组成 Metrics 监控的定义了了。
Metrics vs Log
格式单⼀一标准
化,关⼼心数值,
适合追踪状态变
更更
格式复杂,场景
⾃自定义,适合
Info / Error
中间层植⼊入 / ⽤用户
埋点,适合统计
的周期数据
需要埋点,动作
触发模式
来⼀一个直观的 Demo
๏ 线上出现问题怎么办
๏ Metrics 监控是什什么
๏ 监控的范围
๏ 监控的类型
๏ 监控的⼀一些原则
๏ Metrics 监控在沪江
๏ 沪江 Metrics 监控的实现原理理
๏ 沪江 Metrics 监控的⼯工程实践
意味着从应⽤用、中间件、数据库、操作系统、容器器、⽹网络整个环节都要建⽴立起有效的 Metrics 监控。

任何环节的缺乏都会带来盲区。

这也是为什什么 Google SRE 中提到我们要 Monitoring Everywhere.
哪些指标重要?
USE Method
๏ Utilization 利利⽤用率
๏ ⽐比如 CPU running percent,硬盘的 IO,HTTP
吞吐
๏ Saturation 饱和度
๏ ⽐比如内存使⽤用,硬盘使⽤用
๏ Queue Buffer
๏ Error 错误数
๏ User-facing Service ⽤用户服务类系统
๏ (U)Availability 可⽤用 / (S)Latency 延
迟 / (U)Throughput 吞吐 / Error 错误
๏ Storage System 存储类系统
๏ (S)Latency 延迟 / (U)Throughput 吞
吐 / (U)Durability 持久化 / Error 错误
Brend Gregg
System Perfomance / dtrace / Netflix / SRE / flame graph
๏ 线上出现问题怎么办
๏ Metrics 监控是什什么
๏ 监控的范围
๏ 监控的类型
๏ 监控的⼀一些原则
๏ Metrics 监控在沪江
๏ 沪江 Metrics 监控的实现原理理
๏ 沪江 Metrics 监控的⼯工程实践
๏ Meter / Gauge
๏ 主动 / 通过 Callback 进⾏行行⼀一次计算
๏ Counter
๏ 计数器器,计算 QPS/Count
๏ Histogram / Timer
๏ 直⽅方图 / 计时器器,会计算 P50/P90/P99/
QPS/MEAN 的耗时和吞吐
有⼈人知道 Pxx 是代表什什么含义么?

在统计学⾥里里⾯面,⼤大数据量量的统计使⽤用平均数是不不合理理的,由于 8/2 法则,会导致平均值⽆无法表征⼀一个集体的状态,⽽而需要使⽤用百分位数。

百分位数的成本是是在于你要存储整个序列列的数据,⽽而平均值只需要存储总量量和数量量。
这是 Spring Boot Actuator ⽣生成。

⾥里里⾯面有⼀一个 sayHello 请求的直⽅方图数据。包括 PXX / Rate / 总量量 / max / mean / min
๏ 线上出现问题怎么办
๏ Metrics 监控是什什么
๏ 监控的范围
๏ 监控的类型
๏ 监控的⼀一些原则
๏ Metrics 监控在沪江
๏ 沪江 Metrics 监控的实现原理理
๏ 沪江 Metrics 监控的⼯工程实践
我曾经负责运维,⻓长期担任 SRE,经常救⽕火,在⻓长期的艰苦奋⽃斗中,总结出⼀一些经验。

⽅方便便⼤大家快速解决问题,避免再次发⽣生问题,也避免在排查问题中出现甩锅现象。
๏ Reasonable => 讲道理理
๏ Quantifier => 可量量化
๏ 使⽤用术语,⽽而⾮非使⽤用⼝口语来描述现象
๏ 拒绝通过猜想判断某个系统出现问题
๏ 讲究因果链,五个为什什么
๏ 不不但要有定性分析,还要有定量量分析
๏ 科学是可以重现的
⽕火爆了了,宕机;

不不要脑补故障原因,猜测⼀一定要经过分析;

要有量量化数据,有时候看到图标忽上忽下很唬⼈人,但那很可能是在正常范围内波动的,⽐比如 SQL Server 的定期刷磁盘会导致⼀一定 checkpoint-pages/s 上升。

科学地分析⼀一定是可以重现的;
๏ 线上出现问题怎么办
๏ Metrics 监控是什什么
๏ 监控的范围
๏ 监控的类型
๏ 监控的⼀一些原则
๏ Metrics 监控在沪江
๏ 沪江 Metrics 监控的实现原理理
๏ 沪江 Metrics 监控的⼯工程实践
⽤用到的技术
๏ Metrics Core - https://github.com/dropwizard/metrics
๏ LatencyUtils - https://github.com/LatencyUtils/LatencyUtils
๏ JDK management beans - https://docs.oracle.com/javase/9/
management/overview-java-se-monitoring-and-
management.htm#JSMGM-GUID-F7B9AB8A-F5A8-472A-
AEC6-93B5B7FBE7CE
๏ Kafka
๏ Influxdb
๏ Grafana
๏ kafka-influxdb
JVM Management Beans ⾥里里提供的数据
⽬目前接⼊入的中间件
๏ MySQL
๏ show status
๏ SQL Server
๏ SELECT object_name, counter_name, cntr_value FROM
sys.dm_os_performance_counters
๏ Redis
๏ info
๏ RabbitMQ
๏ API
๏ 线上出现问题怎么办
๏ Metrics 监控是什什么
๏ 监控的范围
๏ 监控的类型
๏ 监控的⼀一些原则
๏ Metrics 监控在沪江
๏ 沪江 Metrics 监控的实现原理理
๏ 沪江 Metrics 监控的⼯工程实践
⽬目前拥有的 Dashboard
๏ JVM-application
๏ Druid-application
๏ RESTful-service-application
๏ SQLServer
๏ Node.js
๏ MySQL
๏ Redis
第⼆二排左边突增的 QPS 访问,从 10 飙到 200,但是响应时间(左⼀一)没有明显变化。

右三看着吓⼈人,其实基数很⼩小。
Node.js 的监控
MySQL 监控
Redis 监控
报警系统
https://gitlab.yeshj.com/hjbase/
hujiang-framework/tree/develop
Recommend Reading List
๏Site Reliability
Engineering -
2016
๏Effective
Monitoring and
Alerting - 2012
๏Practical
Monitoring - 2017
Reference
๏ https://gitlab.yeshj.com/hjbase/hujiang-
framework/tree/develop/hujiang-
framework-plugin/hujiang-framework-
plugin-metrics
๏ http://www.brendangregg.com/
usemethod.html
๏ http://www.brendangregg.com/
USEmethod/use-rosetta.html
Q & A

2018 01 metrics-monitoring-system-v2