监控值班室:

@隔壁老王头 SQL执行耗时时间过长,达到了报警阈值【5000ms】

隔壁老王头:

@监控值班室 少量报警请忽略,批量关注即可。

监控值班室:

@隔壁老王头 订单号【88886666】状态为处理中,是否需要关注?

隔壁老王头:

@监控值班室 请忽略,稍后运营会处理。

如果上面的对话,每天都会高频出现在 QQ、微信之中,你是否会炸毛,尤其是深夜梦正香甜时。

如果上面的报警,你是否会怒火,尤其是当报警邮件撑爆了你的邮箱时。

其实,这就是宁可错杀一千,不可放过一个的监控系统设计理念,千万别怒火。

今天,结合《SRE Google运维解密》,尝试提炼出所有关于监控系统设计的精髓,希望能捕捉到对现有系统有建设性的改进意见。

脑图整理的很详细,若图看不清,想办法放大,下面开始重点讲解。

为什么要做监控?

在远程办公的当下,你所负责的系统,能正常提供服务显得尤其重要。倘若没有一套监控机制,犹如系统在线上裸奔,时不时需要靠人肉去判断系统是不是崩掉了,你肯定忍不了,你肯定会想要是打造一款监控系统。

监控为什么重要?Google SRE 解密,离开了监控系统,我们就没法辨别一个服务是不是在正常提供服务;没有一套设计周全的监控体系,就如同蒙着眼睛狂奔;监控系统是服务运维中不可或缺的一部分。

无论是研发、运维,估计几乎每天都会发问几句:什么东西出故障了?为什么出故障?

其实,什么东西出故障了,是问题的现象;为什么出故障,是问题的原因。例如,网站正在返回 HTTP 500 或者 404,究其原因是数据库服务器拒绝链接;接口响应速度很慢,分析原因是 CPU 被某个排序操作占满啦。

监控解决啥问题?Google SRE 解密,监控系统应该解决现象与原因两个主要问题。

为什么要监控呢?Google SRE 解密,监控一个系统有多个原因,主要包括如下几项。

1、分析长期趋势。例如数据库目前的数据量,以及增长速度;每日活跃用户的数量增长的速度等。

2、跨时间范围的比较。增加节点后,memcache 的缓存命中率是否增加;网站速度是否比上周速度要慢等。

3、报警。当某项东西出现故障了,需要立刻有人修复,或者需要有人尽快查看。

4、监控台页面 dashboard。用来回答有关服务的一些基本问题。

5、临时性的回溯分析。

做监控要搞懂哪些术语?

2020 年计划在 AIOps 上有所建树,相关概念性的东西还是要普及,底盘还是要打扎实一些。

有关监控的部分相关术语,脑图中整理的很详细了(一定要好好看图呦),不再赘述。

在这里,要重点说一下服务质量术语,尤其是当我们想在指标监控上有所尝试时,这些术语显得尤其重要。

什么是服务质量指标呢?服务的某项服务质量的一个具体量化指标,例如系统吞吐量,每秒请求数量;请求延迟,处理请求所消耗的时间。

如图中整理所示,不同类型的系统,指标也略有不同。例如,用户可见的服务系统的指标,通常关心可用性、延迟,以及吞吐量;存储系统的指标则强调延迟、可用性和数据持久性;大数据系统的指标,通常关心吞吐量和端到端的延迟。

Google SRE 建议我们,在设计时,要考虑指标的标准化,构建一套可以重用的指标模板。设计监控系统时一定要追求简化,指标简化,直到不能再简化。

什么是服务质量目标呢?服务质量目标说的是服务某个指标的目标值或者范围。

Google SRE 建议我们,在实践时,应该从思考用户最关心的方面入手,而非从现在能度量什么入手;另外,与其选择指标,再想出对应的目标,不如从想要的目标反向推导出具体的指标。

监控的四个黄金指标

监控系统的四个黄金指标分别是延迟、流量、错误和饱和度。

如果我们度量所有这四个黄金指标,同时在某个指标出现故障时,或者对于饱和度来说,快要发生故障时,能发出警报,若能做到这些,服务的监控就基本差不多了。

监控的三类重要输出

如开篇对话场景对应的系统,设计时采取的便是针对某个特定的情况或者监控值,一旦出现情况或者监控值超过阈值就触发 E-mail 警报,也就是所谓的最普遍和传统的报警策略。

SRE 解密:这样的报警策略并不是非常有效:一个需要人工阅读邮件和分析警报,来决定目前是否需要采取某种行动的系统,从本质上就是错误的。监控系统,不应该依赖人来分析警报信息,而是应该由系统自动分析,仅当需要用户执行某种操作时,才需要通知用户。

这或许就是现有很多监控系统可以优化改进之处。

另外,一个好的监控系统应该只有下列三种输出。

Google SRE 建议我们:每当收到紧急警报时,应该立即需要我执行某种操作;每天只能进入紧急状态几次,太多就会导致「狼来了」效应;每个紧急警报都应该是关于某个新问题的,不应该彼此重叠。

实践才是硬道理

十年磨一剑,Google 的监控系统 Borgmon 仍在不断的改进和完善。

虽然 Borgmon 仍是 Google 内部工具,但是近年来,监控系统也经历了爆发式增长:Prometheus、Riemann、Heka、Bosun 都是开源软件中与 Borgmon 理念类似的系统,尤其是 Prometheus。

所以,我们可以利用开源软件,尝试落地监控和报警的理念。

好了,本次的分享就到这里,码字不易,整理脑图更不易,建议收藏

如何做监控?Google SRE 解密的更多相关文章

  1. 《Google SRE》读后感

    注:这是去年国庆时的一篇读书笔记,最近线上故障频繁,重新读了下这篇读书笔记,觉得<Google SRE>非常棒,遂从简书再搬家到博客园,希望大家受益.我的简书地址:daoqidelv 国庆 ...

  2. soft deletion Google SRE 保障数据完整性的手段

    w http://www.infoq.com/cn/articles/GoogleSRE-BookChapter26 Google SRE 保障数据完整性的手段 就像我们假设Google 的底层系统经 ...

  3. 开源框架是如何通过JMX来做监控的(一) - JMX简介和Standard MBean

    相关文章目录: 开源框架是如何通过JMX来做监控的(一) - JMX简介和Standard MBean 开源框架是如何通过JMX来做监控的(二) - Druid连接池的监控 相信很多做Java开发的同 ...

  4. Google SRE

    SRE_百度百科 https://baike.baidu.com/item/SRE/1141123 我们离Google SRE还有多远? - 简书https://www.jianshu.com/p/6 ...

  5. 实时监控Cat之旅~对请求是否正常结束做监控(分布式的消息树)

    对基于请求的分布式消息树的分析 在MVC时有过滤器System.Web.Mvc.ActionFilterAttribute,它可以对action执行的整个过程进行拦截,执行前与执行后我们可以注入自己的 ...

  6. 【转】开源框架是如何通过JMX来做监控的(一) - JMX简介和Standard MBean

    原文链接:https://www.cnblogs.com/trust-freedom/p/6842332.html#autoid-0-0-0 相信很多做Java开发的同学都使用过JDK自带的 jcon ...

  7. ss命令结合zabbix对socket做监控

    本文为博客园作者所写: 一寸HUI,个人博客地址:https://www.cnblogs.com/zsql/ 最近天冷了,socket也出问题了,一直没有做监控,现在就把监控加起来,目前我们使用的有z ...

  8. Google SRE 读书笔记 扒一扒SRE用的那些工具

    写在前面 最近花了一点时间阅读了<SRE Goolge运维解密>这本书,对于书的内容大家可以看看豆瓣上的介绍.总体而言,这本书是首次比较系统的披露Google内部SRE运作的一些指导思想. ...

  9. 【iOS】利用Runtime特性做监控

    最近在看Object-C运行时特性,其中有一个特别好用的特性叫 Method Swizzling ,可以动态交换函数地址,在应用程序加载的时候,通过运行时特性互换两个函数的地址,不改变原有代码而改变原 ...

随机推荐

  1. SuperBenchmarker一个用.NET编写的压测工具

    0x01 前言 在这之前想必大家对ab(http)与abs(https)也有一些了解,我们今天不去看ab和abs,SuperBenchmarker(sb.exe)是一个压测工具,他是一个受Apache ...

  2. IDEA Messages Build总是自动弹出提示错误

    IDEA,总是在代码未完成时,在进行切换页面回来后会跳出Messages Build,我相信大家在写java web项目的时候,经常会遇到这个问题,接下来我就和大家说一下问题所在. 主要原因是因为我们 ...

  3. Python一键转Jar包,Java调用Python新姿势!

    粉丝朋友们,不知道大家看故事看腻了没(要是没腻可一定留言告诉我^_^),今天这篇文章换换口味,正经的来写写技术文.言归正传,咱们开始吧! 本文结构: 需求背景 进击的Python Java和Pytho ...

  4. VOIP RTP RTSP 实现 Baresip 源码分析

    RTP 使用 udp 进行数据传输,udp 是不能保证,数据包一定可以到达的,也不提供时序.同时还有 MTU 限制. RTCP 用来配合 RTP 提供,传输报告,会话建立和退出. 一大批参考规范 * ...

  5. update join和delete join

    UPDATE ASET A.A2 = B.B2FROM BINNER JOIN AON A.A1 = B.B1WHERE B.B2 = "XXX" 上面的语句在SQL SERVER ...

  6. SQL之开窗函数详解--可代替聚合函数使用

    在没学习开窗函数之前,我们都知道,用了分组之后,查询字段就只能是分组字段和聚合的字段,这带来了极大的不方便,有时我们查询时需要分组,又需要查询不分组的字段,每次都要又到子查询,这样显得sql语句复杂难 ...

  7. Elasticsearch批量插入时,存在就不插入

    当我们使用 Elasticsearch-py 批量插入数据到 ES 的时候,我们常常使用它的 helpers模块里面的bulk函数.其使用方法如下: from elasticsearch import ...

  8. (转)协议森林09 爱的传声筒 (TCP连接)

    协议森林09 爱的传声筒 (TCP连接) 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在TCP协议与"流" ...

  9. yarn报错error An unexpected error occurred:****ETIMEDOUT

    起因 在一个美好的下午,我敲击键盘输入quasar create Tangerine_Reception 我自豪的使用yarn作为包管理器,本以为万事无忧,不用担心出现npm的种种异常了...... ...

  10. C++ 【静态成员】static修饰的成员

    首先,我们先通过字面意思来理解... 成员:成员变量.成员函数. static  修饰成员变量,还有修饰成员函数. static  声明为静态的,称为静态成员.不管这个类创建了多少个对象,静态成员只有 ...