一、背景介绍
上回分享的《五分钟打造高逼格的监控系统》,我们成功搭建并初步介绍了Prometheus+NodeExporter+Grafana框架体系,本回开始给大家分享Prometheus服务监控2个核心的功能:
1、监控结果查询语言(PromQL)基础; 2、Prometheus服务告警系统;
对应下图右侧的:PromQL和Alertmanager模块。
PromQL语言是我们使用Prometheus的基础,Alertmanager告警系统是我们最常用的功能。
二、监控结果查询语言:PromQL
PromQL (Prometheus Query Language) 是 Prometheus 自己开发的数据查询 DSL 语言,语言表现力非常丰富,内置函数很多,在日常数据可视化以及告警配置中都会使用到它。 1、介绍2个常用PromQL的地方:
Prometheus可视化查询页:
访问:http://你的Prometheus服务IP:9090/graph
我们可以看到如下页面,在第一个红框输入PromQL查询语句,点击"Execute"运行即可查看结果。我们也可以从"- insert metric at cursor -"直接选择常用的查询语句:
Grafana数据查询面板
如进入上次部署的看板结果页面,点击右上角按钮再添加一项可视化面板,选择"Add Query"进入查询页面:
2、介绍一些常用的PromQL语句:
# 1.查询http请求总数:
http_requests_total
# 2.条件查询:查询请求状态码为200的总数:
http_requests_total{code="200"}
# 3.区间查询:查询5分钟内的请求总量:
http_request_total{}[5m]
# 4. 系统函数使用:
# 查询系统所有http请求的总量
sum(http_request_total)
# 按照mode计算主机CPU的平均使用时间
avg(node_cpu) by (mode)
3、关于PromQL语言
PromQL语言具体语法与其他常用语言类似,这里不展开介绍,这里推荐2个学习的文档,可以一边学习一边实践:
英文版本:
https://prometheus.io/docs/prometheus/latest/querying/basics/
当然也给大家奉上中文版本:
https://love2.io/@1046102779/doc/prometheus/prometheus/querying/basics.md
三、Prometheus服务告警系统
作为一个监控系统,最重要的功能,还是应该能及时发现系统问题,并及时通知给系统负责人,这就是 Alerting(告警)。Prometheus 的告警功能被分成两部分:
一个是告警规则的配置和检测(Prometheus),并将告警发送给 Alertmanager;
另一个是Alertmanager,它负责管理这些告警,去除重复数据,分组,并路由到对应的接收方式,发出报警。
常见的接收方式有:邮件、企业微信、钉钉、Slack、WebHook等。
本文以邮件接收方式讲解告警系统的使用,其他告警接收方式配置可以依此举一反三,使用告警服务主要的步骤如下:
1、下载并配置 Alertmanager:
下载
# 下载
# 最新版下载地址:https://prometheus.io/download/,请找到alertmanager模块
wget https://github.com/prometheus/alertmanager/releases/download/v0.18.0/alertmanager-0.18.0.linux-amd64.tar.gz
# 解压
tar -xvzf alertmanager-0.18.0.linux-amd64.tar.gz
# 解压后可以看到alertmanager系统默认的配置文件:alertmanager.yml
修改alertmanager.yml配置文件:
global:
# 发送邮箱相关配置
smtp_smarthost: 'smtp.qq.com:587'
smtp_from: 'xxx@qq.com'
smtp_auth_username: 'xxx@qq.com'
smtp_auth_password: 'your_email_password'
route:
# 重复告警间隔时间
repeat_interval: 10s
# 处理告警的名字,见下面
receiver: 'test-alert'
receivers:
- name: 'test-alert'
email_configs:
# 邮件接收方
- to: 'xxx(receiver)qq.com'
2、在 Prometheus 服务中配置告警规则并监听Alertmanager:
在Prometheus目录下新建告警配置规则文件:alert.rules.yml,在文件中编写告警规则:
ALERT memory_high
IF prometheus_local_storage_memory_series >= 0
FOR 15s
ANNOTATIONS {
summary = "Prometheus using more memory than it should {{ $labels.instance }}",
description = "{{ $labels.instance }} has lots of memory man (current value: {{ $value }}s)",
}
在Prometheus规则里添加该告警规则:
# 在prometheus.yml文件rule_files节点添加加载刚才编写的规则:
rule_files:
- 'prometheus.rules.yml'
- 'alert.rules.yml'
在Prometheus规则里添加与Alertmanager系统关联(监控):
alerting:
alertmanagers:
- static_configs:
targets: ['localhost:9093']
3、启动(或重新加载)Alertmanager和Prometheus服务:
# 启动Alertmanager
./alertmanager --config.file=alertmanager.yml &
# 启动Prometheus
./prometheus --config.file=prometheus.yml &
4、当系统触发了告警配置的规则时,我们会收到邮件通知。
四、写在最后
1、告警系统部署部分小编已经编写了自动化部署脚本,有需要的话可以关注【搜狗测试】公众号留言或添加下面官方微信号获取;
2、后续我们会在【搜狗测试】公众号持续分享Prometheus另外2大核心功能:Exporter实战和Pushgateway组件,敬请关注。