手把手教你基于 Prometheus 搭建监控告警系统
IT 界有句话很有道理:“不稳定时系统的常态,稳定只是其中的一种表现形式”。作为一个程序员,如何可以在晚上可以安然入眠?如何在假期无虑的玩耍?如何实时掌控自己负责的系统运行状况?搭建一个监控告警系统可以让你睡的更安稳、玩的更开心一些!
坦白说没有监控告警的线上运行的系统就像是一个定时炸弹,不知道什么时候就会出一些意想不到的问题,让人头秃。那么本文会手把手教你基于 Prometheus 搭建监控告警系统,我们先从一些基本概念开始吧。
一、基础知识
1、什么是监控告警?
显然监控告警系统分为两个部分:监控和告警。
监控:
监控可以分为三个步骤:采集指标数据、存储指标数据、可视化展示。最终我们可以在一个可视化界面去观察系统的各个方面的状态,实时了解系统运行情况。
例如:
对于运维人员来说,他们需要监控机器的 CPU、内存、硬盘的使用情况。
对于研发人员来说,他们关注 JVM 的使用情况。
对于产品或运营来说,他们更关心产品层面的事情,例如:某个某个活动参与人数情况。
告警:
虽然有了可视化的监控系统,我们可以方便的观察系统当前运行状态,但是我们不可能 24 小时盯着监控看,所以就需要告警这个功能。当系统的某些指标出了问题,系统会自动按照我们事先配置的告警规则通知我们,通知的方式可以通过邮件、钉钉、短信、电话等。
例如:运维希望在 CPU 达到 80% 的时候给值班的运维人员发送邮件,产品希望活动积分发放数量超过 10 万的时候发送短信告警。
2、监控哪些方面?
目前一个比较完整的监控系统主要需要监控一下几个方面:
1、系统层监控:
系统:CPU、内存、硬盘...
网络:网络设备、网络延迟、丢包率...
2、中间件监控:
消息中间件:RocketMQ、Kafka...
web 容器:tomcat、jetty...
数据库:mysql、MogoDB、Redis...
3、应用监控:
JVM 监控:GC、堆使用情况...
4、业务指标监控:
订单量、注册数、DAU、转化率...
可以看到想真正监控一个系统是需要监控非常多的内容的,好在 Promethues 已经帮我们完成了监控中的绝大部分内容,我们只需要学习会用 Prometheus 就可以很快的搭建一个套完整的监控体系!
二、什么是 Prometheus
Prometheus(普罗米修斯)是古希腊的一个神明,名字的意思是「先见之明」。从它的名字可以看出,Prometheus 是做「先见之明」的监控告警用途。
Prometheus 是由 SoundCloud 开源监控告警解决方案,从 2012 年开始编写代码,再到 2015 年 github 上开源以来,已经吸引了 9k+ 关注,以及很多大公司的使用;2016 年 Prometheus 成为继 k8s 后,第二名 CNCF(Cloud Native Computing Foundation) 成员。
官方网站:https://prometheus.io/。官网的的介绍翻译过来就是:用指标洞察系统、借助领先的开源监视解决方案来增强指标并发出警报。
下面我们看下 Prometheus 的架构图:
简单地说,Prometheus 的实现架构也并不复杂。其实就是收集数据、处理数据、可视化展示,再进行数据分析进行报警处理。
三、安装
1、安装包安装
Prometheus 安装
https://prometheus.io/download/
访问:http://localhost:9090/graph
NodeExporter 安装
https://prometheus.io/download/
访问:http://localhost:8080/metrics
Prometheus 抓取 NodeExporter 数据
修改 prometheus.yml 文件然后重启:
Grafana 安装
https://grafana.com/grafana/download
访问:http://localhost:3000/
默认用户名密码admin/admin
模板中心:https://grafana.com/grafana/dashboards
四、Prometheus 数据模型及 PromQL
PromQL(Prometheus Query Language)是 Prometheus 内置的数据查询语言,它能实现对事件序列数据的查询、聚合、逻辑运算等。它并且被广泛应用在 Prometheus 的日常应用当中,包括对数据查询、可视化、告警处理当中。
1、时序数据数据模型
<metric name>{<label name>=<label value>, ...}
2、时序类型
Prometheus 时序数据分为 Counter, Gauge, Histogram, Summary 四种类型。
counter 计数器 表示收集的数据是按照某个趋势(增加/减少)一直变化的,我们往往用它记录服务请求总量、错误总数等。
gauges 量器 表示搜集的数据是一个瞬时的值,与时间没有关系,可以任意变高变低,往往可以用来记录内存使用率、磁盘使用率等。
histogram 柱状图 由 <basename>_bucket{le="<upper inclusive bound>"}
,<basename>_bucket{le="+Inf"}
, <basename>_sum
,<basename>_count
组成,主要用于表示一段时间范围内对数据进行采样(通常是请求持续时间或响应大小),并能够对其指定区间以及总数进行统计,通常它采集的数据展示为直方图。
summary 汇总 和 Histogram 类似,由 <basename>{quantile="<φ>"}
,<basename>_sum
,<basename>_count
组成,主要用于表示一段时间内数据采样结果(通常是请求持续时间或响应大小),它直接存储了 quantile 数据,而不是根据统计区间计算出来的。
3、查询结果类型
PromQL 查询结果主要有 3 种类型:
瞬时数据 (Instant vector): 包含一组时序,每个时序只有一个点,例如:
http_requests_total
区间数据 (Range vector): 包含一组时序,每个时序有多个点,例如:
http_requests_total[5m]
纯量数据 (Scalar): 纯量只有一个数字,没有时序,例如:
count(http_requests_total)
五、Spring Boot Actuator 实现应用监控
1、引入 pom 依赖
2、配置打开
3、prometheus 配置
localhost:8080/actuator/health
4、Granfna 配置
dashboard 的 ID 为:4701
六、Springboot 实现自定义指标监控
1、添加监控指标类
2、在业务中增加指标投递
访问localhost:8080/actuator/prometheus
可以看到指标
3、配置 Granfna 图表
至此,你已经学会了基于 Promethues 搭建监控告警系统的全部内容,还不赶紧把线上的系统加上监控来~
版权声明: 本文为 InfoQ 作者【Java全栈封神】的原创文章。
原文链接:【http://xie.infoq.cn/article/fa624b055c6f75481bd6b3c7b】。文章转载请联系作者。
评论