作者:xizhibei 编辑:moon 原文:https://github.com/xizhibei/blog/issues/54

一直以来,我们会在项目中,使用 APM 去监控应用的状况,分析性能等,这些工具很有效,而且不侵入业务,不需要埋点。

然而,有些需求,是 APM 的监控满足不了的,比如 *应用业务指标 *。

监控模式

目前,采集指标有两种方式,一种是『推』,另一种就是『拉』:

推的代表有 ElasticSearch,InfluxDB,OpenTSDB 等,需要你从程序中将指标使用 TCP,UDP 等方式推送至相关监控应用,只是使用 TCP 的话,一旦监控应用挂掉或存在瓶颈,容易对应用本身产生影响,而使用 UDP 的话,虽然不用担心监控应用,但是容易丢数据。

拉的代表,主要代表就是 Prometheus,让我们不用担心监控应用本身的状态。而且,可以利用 DNS-SRV 或者 Consul 等服务发现功能就可以自动添加监控。

当然,InfluxDB 加上 collector,或者 ES 加上 metricbeat 也可以变为 『拉』,而 Prometheus 加上 Push Gateway 也可以变为 『推』。

接下来,我们主要介绍下 Prometheus。

Prometheus

『普罗米修斯』,也是希腊之神,取义『先见之明』,应该就是监控的意义所在吧。

它跟 k8s 一样,也是依据 Google 内部的应用原理设计来的,可以看作是 Google 内部监控系统 Borgmon 的一个实现。

架构图如下(来自 Prometheus 官方文档):

Prometheus 可以从配置或者用服务发现,去调用各个应用的 metrics 接口,来采集数据,然后存储在硬盘中,而如果是基础应用比如数据库,负载均衡器等,可以在相关的服务中安装 Exporters 来提供 metrics 接口供 Prometheus 拉取。

采集到的数据有两个去向,一个是报警,另一个是可视化。

下面将一一介绍。

Metrics 格式

  1. <metric name>{<label name>=<label value>, ...}

各个部分需符合相关的正则表达式

  • metric name: [a-zA-Z:][a-zA-Z0-9:]*

  • label name: [a-zA-Z0-9_]*

  • label value: .* (即不限制)

需要注意的是,label value 最好使用枚举值,而不要使用无限制的值,比如用户 ID,Email 等,不然会消耗大量内存,也不符合指标采集的意义。

Metrics 接口的实现

大部分语言都有提供客户端,比如 Node.js 的客户端 prom-client:

  1. npm install prom-client --save

目前,这个客户端提供了完整功能,可以在应用中埋点采集数据,比如

  • 今天注册了多少用户,收入了多少钱,可以使用 Counter;

  • Node 内存以及 CPU 的变化,可以使用 Gause

  • API 接口响应时间的统计,可以使用 Histogram 或者 Summary,前者可以按照具体数值,而后者可以按照百分比去统计响应时长;

对了,这个包内部提供了采集默认数据的功能,比如 Node 相关的指标:

  1. const promClient = require('prom-client');

  2. promClient.collectDefaultMetrics({

  3.  timeout: 5000,

  4. });

报警

你可以根据业务需求,来定制相关的规则去报警,然后关键就来了,你是否在传统的短信或者邮件报警中感到厌烦呢?

一方面,当线上问题出现的时候,我们会收到大量的报警消息,而其中很大一部分是重复的;另一方面,收到没用的报警,或者报警级别不高,导致这时候如果有重要的报警,会被我们忽略。

Prometheus 的 AlertManager 提供了解决这些问题的各种高级报警功能。

  1. const promClient = require('prom-client');

  2. promClient.collectDefaultMetrics({

  3.  timeout: 5000,

  4. });

  • 报警分组 :将报警分组,当报警大量出现的时候,只会发一条消息告诉你数据库挂了的情况出现了 100 次,而不是用 100 条推送轰炸你;

  • 报警抑制:显然,当数据库出问题的时候,其它的应用可肯定会出问题,这时候你可能不会需要其它的不相干的报警短信,这个功能将真正有用的信息及时通知你;

  • 报警静默:一些不重要的报警,可以完全忽略,因此也就没有必要通知;

报警通知的方式,目前可以通过 webhook, email 等方式,估计微信或者钉钉也可以,我目前使用的是 slack。

可视化

首选当然是 Grafana,Prometheus 自己放弃了 PromDash 的可视化工具,而专注于监控数据采集与分析。在 Grafana 中配置 Prometheus 也很简单,在配置好数据源之后,可以直接创建图表。

需要注意的是,你会需要用到 Prometheus 专用的 查询语言 去配置数据,其中如果涉及到的图表内容太多,你可能会需要用到 Grafana 的模板:

  • label_values(label):全局中 label 值的集合;

  • label_values(metric, label):某个 metric 的 label 值的集合;

  • metrics(metric):metric 的正则表达集合,返回全部匹配的 metric;

  • query_result(query):返回查询集合;

Ref

  • https://prometheus.io/docs/operating/configuration/

  • https://prometheus.io/blog/2015/06/01/advanced-service-discovery/

  • http://docs.grafana.org/features/datasources/prometheus/

点击阅读原文关注作者的知乎专栏

https://zhuanlan.zhihu.com/c_120823325

推荐阅读

  • Spring Boot & Spring Cloud 应用内存管理

  • Why Spring Boot

  • IoC与AOP的那点事儿

  • 数据异构的武器:BINLOG+MQ

  • 秒杀系统解决方案

  • 程序员你为什么这么累?

  • 我的编码习惯 - 接口定义

  • 我的编码习惯 - Controller规范

  • 我的编码习惯 - 日志建议

  • 我的编码习惯 - 异常处理

  • 我的编码习惯 - 参数校验和国际化规范

Spring Session & Spring Security

  • 从零开始的Spring Session(一)

  • 从零开始的Spring Session(二)

  • 从零开始的Spring Session(三)

  • 从零开始的Spring Security Oauth2(一)

  • 从零开始的Spring Security Oauth2(二)

  • 从零开始的Spring Security Oauth2(三)

Spring中的设计模式

  • Spring框架中的设计模式(一)

  • Spring框架中的设计模式(二)

  • Spring框架中的设计模式(三)

  • Spring框架中的设计模式(四)

  • Spring框架中的设计模式(五)

长按指纹

一键关注



监控利器之 Prometheus相关推荐

  1. MySQL-MongoDB开源监控利器之PMM

    最近要对数据库的监控体系进行改进,发现Percona 公司的一款开源的监控工具Percona Monitoring and Management(PMM) 对于MySQL的监控指标各项值比较全面准确, ...

  2. pt5 mysql预处理_技术分享 | MySQL 监控利器之 Pt-Stalk

    一.概述 之前在社区发了一篇[有效解决 MySQL 行锁等待超时问题]文档,主要介绍了下行锁超时的监控方法,下方评论中有人提到了 pt-stalk 工具也可以监控行锁超时,因为个人没怎么用过这个工具, ...

  3. mysql pt监控_技术分享 | MySQL 监控利器之 Pt-Stalk

    作者:xuty 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源. 一.概述 之前在社区发了一篇[有效解决 MySQL 行锁等待超时问题]文档,主要介绍 ...

  4. python利器的使用-图文详解python开发利器之ulipad的使用实践

    Ulipad是一个国人limodou编写的专业Python编辑器,它基于wxpython开发的GUI(图形化界面).下面这篇文章主要介绍了python开发利器之ulipad的使用实践,文中介绍的非常详 ...

  5. python利器怎么编程-Python任务调度利器之APScheduler详解

    任务调度应用场景 所谓的任务调度是指安排任务的执行计划,即何时执行,怎么执行等.在现实项目中经常出现它们的身影:特别是数据类项目,比如实时统计每5分钟网站的访问量,就需要每5分钟定时从日志数据分析访问 ...

  6. ML之FE:pandas库中数据分析利器之groupby分组函数、agg聚合函数、同时使用groupby与agg函数组合案例之详细攻略

    ML之FE:pandas库中数据分析利器之groupby分组函数.agg聚合函数.同时使用groupby与agg函数组合案例之详细攻略 目录 pandas库中数据分析利器之groupby分组函数.ag ...

  7. promehteus 监控超时_05 . Prometheus监控Nginx

    List CentOS7.3 prometheus-2.2.1.linux-amd64.tar.gz nginx-module-vts 节点名 IP 软件版本 硬件 网络 说明 Prometheus ...

  8. 安卓APP破解利器之FRIDA

    本文讲的是安卓APP破解利器之FRIDA,在我去年参加RadareCon大会的时候,我了解到了一个动态的二进制插桩框架--Frida.起初我觉得它似乎只有一丁点趣味,后来经过实践才发现它原来是如此的有 ...

  9. 新型监控告警工具prometheus(普罗米修斯)入门使用(附视频讲解)

    作者: 李佶澳   转载请保留:原文地址   发布时间:2018/08/03 10:26:00 说明 Prometheus 命名规则 metric类型 Job和Instance 部署.启动 prome ...

最新文章

  1. 内存分配器memblock【转】
  2. 管理软件预警通知(Notification)功能的实现案例分析
  3. 安卓4.0 html5,原道N80测安卓4.0下HTML5和FLASH
  4. JavaScript-操作DOM对象-获得dom节点
  5. 【Java】Java 反射 object is not an instance of declaring class
  6. 物流系统开发中,Dev倥件的使用
  7. mysql心得笔记_mysql总结笔记
  8. 训练史上最佳GAN用了512块TPU,一作自述:这不是算法进步,是算力进步
  9. [PeterDLax著泛函分析习题参考解答]第4章 Hahn-Bananch 定理的应用
  10. c语言关于函数的程序源代码,c语言库函数源代码
  11. kotori和糖果(OEIS)
  12. 工程图字体宋体仿宋_宋体和仿宋体的区别
  13. 如何快速去除PDF的密码和限制:遇到PDF被加密,不能复制、编辑,怎么办?教大家一个又快又好用的方法、实用。
  14. 【模型选择】从0到1的数据价值实现需要数据分析师做些什么?
  15. 私域流量运营和微商有什么区别?
  16. Redhat Linux 8.3 安装方法
  17. TeamViewer:“未就绪,请检查您的网络连接“
  18. WPS编号后面有很大的空白
  19. Flink教程(17)- Flink Table与SQL(案例与SQL算子)
  20. 基于快速质量图导向法的相位解包裹

热门文章

  1. linux c 获取时间戳
  2. ndpi 流量协议分析
  3. Buildroot用户指南
  4. Android--表格布局
  5. 32读取ltc的温度值_Arduino基础入门篇29—模拟温度传感器LM35
  6. android 设置单边框,详解Android用Shape制作单边框图的两种思路和坑
  7. 随机数计算html,随机数的产生方法 电脑随机数产生的计算具体方法
  8. java模拟银行存取_JAVA基础案例 模拟银行存取款业务
  9. Linux网络设备子系统
  10. php 点击删除数据,使用php脚本删除数据