Prometheus运维监控
[文章分享链接](https://www.yuque.com/xinglujianzhi/ops/xefgl5nb66gp911o?singleDoc)\
梳理总结一下生产中使用到的prometheus相关知识。包括但不限于传统服务(主机、Nginx、Tomcat、Haproxy等)、云原生(Kubernetes)周边生态的监控等等。\
部署使用中最直观的感受就是,prometheus只是一个时序数据库,像规则匹配、告警都是在后端机器上配置或借助于其他插件完成。没有Zabbix监控功能齐全,各种成熟的模板、告警媒介插件、规则配置、dashboard定义等。转折来了,随着云原生肉眼可见发展的速度及周边生态不断完善,prometheus监控使用非常广泛,趋势不可违。\
**一、监控的理论**\
简单概述,主要以使用使用为主\
**1、监控的重要性**\
通过业务监控系统,全⾯掌握业务环境的运⾏状态,通过⽩盒监控能够提前预知业务瓶颈,通过⿊盒监 控能够第⼀时间发现业务故障并通过告警通告运维⼈员进⾏紧急恢复,从⽽将业务影响降到最低。\
⿊盒监控,关注的是时时的状态,⼀般都是正在发⽣的事件,⽐如nginx web界⾯打开的是界⾯报错503、 磁盘⽆法报错数据等,即⿊盒监控重点在于能对正在发⽣的故障进⾏通知告警。 ⽩盒监控,关注的是原因,也就是系统内部暴露的⼀些指标数据,⽐如nginx 后端服务器的响应时⻓、磁盘 的I/O负载值等。\
监控系统需要能够有效的⽀持⽩盒监控和⿊盒监控,通过⽩盒能够了解其内部的实际运⾏状态,以及对 监控指标的观察能够预判可能出现的潜在问题,从⽽对潜在的不确定因素进⾏提前优化并避免问题的发 ⽣,⽽通过⿊盒监控,⽐如常⻅的如HTTP探针、TCP探针等,可以在系统或者服务在发⽣故障时能够快 速通知相关的⼈员进⾏处理,通过建⽴完善的监控体系,从⽽达到以下⽬的:\
**1.1、 ⻓期趋势分析**\
通过对监控样本数据的持续收集和统计,对监控指标进⾏⻓期趋势分析。例如,通过对磁盘 空间增⻓率的判断,我们可以提前预测在未来什么时间节点上需要对资源进⾏扩容。\
**1.2、 对照分析**\
两个版本的系统运⾏资源使⽤情况的差异如何?在不同容量情况下系统的并发和负载变化如何? 通过监控能够⽅便的对系统进⾏跟踪和⽐较。\
**1.3、 告警通知**\
当系统出现或者即将出现故障时,监控系统需要迅速反应并通知管理员,从⽽能够对问题进⾏快速的 处理或者提前预防问题的发⽣,避免出现对业务的影响。\
**.1.4、 故障分析与定位**\
当问题发⽣后,需要对问题进⾏调查和处理。通过对不同监控监控以及历史数据的分析, 能够找到并解决根源问题。\
**.1.5、 故障分析与定位**\
通过可视化仪表盘能够直接获取系统的运⾏状态、资源使⽤情况、以及服务运⾏状态等直观的 信息。\
**2、 了解常⻅的监控⽅案**\
开源监控软件:zabbix、smokeping、open-falcon。等\
很少能用到,不用了解cacti、nagios (14年前)\
**2.1、Zabbix**\
[www.zabbix.com](https://www.zabbix.com/cn/)

⽬前使⽤较多的开源监控软件,可横向扩展、⾃定义监控项、⽀持多种监控⽅式、可监控⽹络与服务等。\
**2.2、 SmokePing**\
[oss.oetiker.ch](https://oss.oetiker.ch/smokeping/)\
Smokeping是⼀款⽤于⽹络性能监测的开源监控软件,主要⽤于对IDC的⽹络状况,⽹络质量,稳定性等做 检测,通过rrdtool制图⽅式,图形化地展示⽹络的时延情况,进⽽能够清楚的判断出⽹络的即时通信情 况。\
**2.3、 Open-falcon**\
[www.open-falcon.org](https://www.open-falcon.org/)\
**二、Prometheus Server使用**
| 主机列表 | 本次分享中角色 | 备注 |
| ------------------- | ---------------------------- | ----------------------- |
| 192.168.101.100 | 二进制Prometheus Server+Grafana | 收集exporter的数据和K8s数据 |
| 192.168.101.101 | 二进制部署各种exporter | 完成指标采集 |
| 192.168.101.200-206 | Kubernetes cluster | 部署Prometheus Pod,收集集群信息 |
二进制所有服务均存放在目录中\
/data/server/\
例子\
1、prometheus\
/data/server/prometheus\
2、alermanger\
/data/server/alertmanger\
3、counsul\
/data/server/consul\
**2、 prometheus 简介**\
[prometheus官网](https://prometheus.io/docs/introduction/overview/)\
Prometheus是基于go语⾔开发的⼀套开源的监控、报警和时间序列数据库的组合,是由SoundCloud 公司开发的开源监控系统,Prometheus于2016年加⼊CNCF(Cloud Native Computing Foundation, 云原⽣计算基⾦会),2018年8⽉9⽇prometheus成为CNCF继kubernetes 之后毕业的第⼆个项⽬, prometheus在容器和微服务领域中得到了⼴泛的应⽤,其特点主要如下:\
使⽤key-value的多维度(多个⻆度,多个层⾯,多个⽅⾯)格式保存数据 数据不使⽤MySQL这样的传统数据库,⽽是使⽤时序数据库,⽬前是使⽤的TSDB ⽀持第三⽅dashboard实现更绚丽的图形界⾯,如grafana(Grafana 2.5.0版本及以上) 组件模块化 不需要依赖存储,数据可以本地保存也可以远程保存 平均每个采样点仅占3.5 bytes,且⼀个Prometheus server可以处理数百万级别的的metrics指标数据。 ⽀持服务⾃动化发现(基于consul等⽅式动态发现被监控的⽬标服务) 强⼤的数据查询语句功(PromQL,Prometheus Query Language) 数据可以直接进⾏算术运算 易于横向伸缩 众多官⽅和第三⽅的exporter实现不同的指标数据收集
**3、官网架构图**\
prometheus server:主服务,接受外部http请求,收集、存储与查询数据等\
prometheus targets: 静态收集的⽬标服务数据\
service discovery:动态发现服务\
prometheus alerting:报警通知\
push gateway:数据收集代理服务器(类似于zabbix proxy)\
data visualization and export: 数据可视化与数据导出(访问客户端)

**3、prometheus使用完成效果**\
**3.1、集群联邦**\
二进制高配机器部署prometheus server 与K8S中的sprometheus监控混着用\
**3.2、使用二进制prometheus server**\
一阶段监控传统服务,第二阶段监控云原生。\
1、收集非K8s业务服务监控指标\
2、配置告警规则\
3、结合多种媒介进行告警通知\
**4、prometheus 部署使用**\
可以通过不同的⽅式安装部署prometheus监控环境,支持二进制、docker、docker-compose、prometheus等多种方式部署,实际⽣产环境要根据实际需求选择其中⼀种⽅式部署即可,不过⽆论是使⽤哪⼀种⽅式安 装部署的prometheus server,使⽤方法都是⼀样的。本次分享主要以**二进制**方式为主,因为后面集群联邦的时候二进制prometheus-server会接收所有K8s集群prometheus-server的数据和各种exporter数据。\
**4.1、二进制部署Prometheus server**\
官方提供的服务和插件,满足不了需求可以去github上找第三方插件。

**4.1.1、下载prometheus server**\
[Prometheus最新版本](https://prometheus.io/download/)\
[Github选择更多历史版本](https://github.com/prometheus/prometheus/tags)\
[prometheus-2.36.2.linux-amd64.tar.gz](https://github.com/prometheus/prometheus/releases/download/v2.36.2/prometheus-2.36.2.linux-amd64.tar.gz)

2022年6月20号版本\
不建议使用最新的prometheus,会出现grafana上模板没有数据,不兼容的新规则的问题\
**4.1.2、解压安装包**

**4.1.3、配置启动服务**\
添加守护进程启动文件\
cat /usr/lib/systemd/system/prometheus.service\
设置开机自启

**4.1.5、了解prometheus配置文件**

**4.1.6、访问prometheus前端页面**\
<http://192.168.101.200:9090/>

**4.2、了解Exporter相关知识**\
广义上讲所有可以向Prometheus提供监控样本数据的程序都可以被称为一个Exporter。而Exporter的一个实例称为target,如下所示,Prometheus通过轮询的方式定期从这些target中获取样本数据:

**4.2.1、** **使用Exporter原因**\
云原生组件支持prometheus接口监控。etcd、Kubernetes、CoreDNS等,可以直接被prometheus监控。\
大多数服务在Prometheus诞生前的很多年就已发布,考虑到安全性、稳定性及代码耦合等因素的影响,软件作者并不愿意将监控代码加入现有代码中。\
在此背景之下,Exporter 应运而生,Prometheus 在面对众多繁杂的监控对象时并没有采用逐一适配的方式,而是制定了一套独特的监控数据规范,符合这套规范的监控数据都可以被Prometheus统一采集、分析和展现。说白了你想用prometheus收集数据要么改造软件支持prometheus数据格式,要不然开发第三方插件Exporter。\
**4.2.2、Exporter获取监控数据的方式**\
HTTPS方式\
HTTP方式\
TCP方式\
本地文件方式\
**4.2.3、举例** **Node\_Exporter**\
Prometheus Server并不直接服务监控特定的目标,其主要任务负责数据的收集、存储、对外提供数据查询,的支持。\
收集操作系统和硬件信息的组件

**4.2.4、举例** **Nginx\_Exporter**\
exporter先通过nginx模块(nginx-module-vts)收集指标数据,进行加工转换成prometheus可以识别到的kv/metrics。\
所有的Exporter程序都需要按照Prometheus的规范,返回监控的样本数据。

**4.3、部署node\_exporter**
| Ip规划 | 部署角色 | 版本 |
| --------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| 192.168.101.100 | node\_exporter | [node\_exporter-1.4.0.linux-amd64.tar.gz](https://github.com/prometheus/node_exporter/releases/download/v1.4.0/node_exporter-1.4.0.linux-amd64.tar.gz) |
| 192.168.101.101 | node\_exporter | [node\_exporter-1.4.0.linux-amd64.tar.gz](https://github.com/prometheus/node_exporter/releases/download/v1.4.0/node_exporter-1.4.0.linux-amd64.tar.gz) |
**4.3.1、下载node\_exporter**\
这个稳定版本与prometheus版本发布时间最合适。

1、[官网最新版本](https://prometheus.io/download/#node_exporter)\
2、[node\_exporter其他版本下载](https://github.com/prometheus/node_exporter/releases/)\
3、[docker、docker-compose方式部署参考](https://github.com/prometheus/node_exporter/)\
[node\_exporter-1.4.0.linux-wamd64.tar.gz](https://github.com/prometheus/node_exporter/releases/download/v1.4.0/node_exporter-1.4.0.linux-amd64.tar.gz)\
**4.3.1、192.168.101.200 安装配置node\_exporter**\
1、解压安装包

2、配置Nodde\_Exporter系统启动
**4.3.2、192.168.100.101 安装配置node\_exporter**\
手动安装操作步骤同4.3.1\
**4.3.3、批量安装node\_exporter**\
如果公司内有几十台上百台机器需要安装node\_exporter,可以使用ansible批量安装\
使用ansible 批量安装node\_exporter
**4.3.4、prometheus server收集node节点信息**\
cat /data/prometheus/prometheus.yml

**4.3.5、调用prometheus接口热加载配置**\
如果报错也会检查到,类似nginx -s reload

**4.4、登录prometheus-server前端**\
<http://192.168.101.100:9090/>

**4.4.1、查看Target验证node\_exporter**\
有图更好理解Target\
Exporter的一个实例称为Target\
可以向Prometheus提供监控样本数据的程序都可以被称为一个Exporter。\
**4.4.2、查看node\_exporter metrics**\
[http://192.168.101.100:9100/metrics](http://192.168.101.101:9100/metrics)\
<http://192.168.101.101:9100/metrics>\
以k:v形式,收集所有指标数据

**4.4.1、简单使用PromQL**\
[prometheus官网学习案例](https://prometheus.io/docs/prometheus/latest/querying/examples/)\
Prometheus提供⼀个函数式的表达式语⾔PromQL (Prometheus Query Language),可以使⽤户实时 地查找和聚合时间序列数据,表达式计算结果可以在图表中展示,也可以在Prometheus表达式浏览器 中以表格形式展示,或者作为数据源, 以HTTP API的⽅式提供给外部系统使⽤。

1、查看node节点总内存

Node节点验证内存

2、统计server可用内存\
available = free + buffer + cache

linux查看内存剩余情况

2、查看server节点的cpu使用率


**4.4.2、node\_exporter 体验总结**\
prometheus前端使用PromQL语法,跟mysql 语句类似。后面使用Grafana模板呈现出来各种炫酷的图表底层还是通过语句各种查询拼凑,如果碰到定制化需求还是要自己会写查询语句。\
**三、PromQL了解**\
[prometheus PromQL帮助文档](https://prometheus.io/docs/prometheus/latest/querying/basics/)\
纯理论多些,枯燥,还是得继续难受一下\
prometheus核心功能已经体验,会用prometheus各种数据查询语法。\
**1、 PromQL数据基础**\
**1.1、数据分类**\
1、瞬时向量\
瞬时数据(instant vector):是⼀组时间序列,每个时间序列包含单个数据样本,⽐如 node\_memory\_MemFree\_bytes查询当前剩余内存就是⼀个瞬时向量,该表达式的返回值中只会包含该时 间序列中的最新的⼀个样本值,⽽相应的这样的表达式称之为瞬时向量表达式,例如:例如: prometheus\_http\_requests\_total\
2、范围向量\
范围数据(range vector):是指在任何⼀个时间范围内,抓取的所有度量指标数据.⽐如最近⼀ 天的⽹卡流量趋势图, 例如:prometheus\_http\_requests\_total\[5m]\
3、标量\
纯量数据(scalar):是⼀个浮点数类型的数据值,使⽤node\_load1获取到时⼀个瞬时向量,但是 可⽤使⽤内置函数scalar()将瞬时向量转换为标量,例如:scalar(sum(node\_load1)) 字符串(string):简单的字符串类型的数据,⽬前未使⽤,(a simple string value; currently unused)。\
**1.2、 数据类型**\
**1.2.1、 Counter(计数器)**\
使用频次非常高\
计数器,Counter类型代表⼀个累积的指标数据,在没有被重置的前提下只增不减,⽐如磁盘I/O 总数、nginx的请求总数、⽹卡流经的报⽂总数等\
prometheus\_http\_requests\_total\
统计/metric 正常访问次数,数据只增不减

**1.2.2、 Gauge(仪表盘)**\
使用频次非常高\
Gauge类型代表⼀个可以任意变化的指标数据,值可以随时增⾼或减少,如带宽速率、 CPU负载、内存利⽤率、nginx 活动连接数等。

**1.2.3、** **Histogram 直方数据**\
绘制热点图搭配Histogram使用\
指标生成的是直方数据,Prometheus抓取间隔的百分位数指标\
Histogram会在⼀段时间范围内对数据进⾏采样(通常是请求持续时间或响应⼤ ⼩等),假如每分钟产⽣⼀个当前的活跃连接数,那么⼀天就会产⽣1440个数据,查看数据的每间隔的绘图跨 度为2⼩时,那么2点的柱状图(bucket)会包含0点到2点即两个⼩时的数据,⽽4点的柱状图(bucket)则会 包含0点到4点的数据,⽽6点的柱状图(bucket)则会包含0点到6点的数据。

**1.2.4、 Summary 摘要**\
摘要,也是⼀组数据,统计的不是区间的个数⽽是统计分位数,从0到1,表示是0%\~100%,如下 统计的是 0、0.25、0.5、0.75、1的数据量分别是多少

Untyped 位置类型使用很少,不介绍。
**2、PromQL-指标数据**\
node\_memory\_MemTotal\_bytes #查询node节点总内存⼤⼩ node\_memory\_MemFree\_bytes #查询node节点剩余可⽤内存 node\_memory\_MemTotal\_bytes{instance="192.168.101.101:9100"} #基于标签查询指定节点的总 内存 node\_memory\_MemFree\_bytes{instance="192.168.101.101:9100"} #基于标签查询指定节点的可⽤ 内存 node\_disk\_io\_time\_seconds\_total{device="sda"} #查询指定磁盘的每秒磁盘io node\_filesystem\_free\_bytes{device="/dev/sda1",fstype="xfs",mountpoint="/"} #查看 指定磁盘的磁盘剩余空间
# HELP node\_load1 1m load average. #CPU负载
# TYPE node\_load1 gauge
node\_load1
# HELP node\_load15 15m load average.
# TYPE node\_load15 gauge
node\_load15
# HELP node\_load5 5m load average.
# TYPE node\_load5 gauge
node\_load5
**3、 PromQL-匹配器**\
\= :选择与提供的字符串完全相同的标签,精确匹配。\
!= :选择与提供的字符串不相同的标签,取反。\
\=\~ :选择正则表达式与提供的字符串(或⼦字符串)相匹配的标签。\
!\~ :选择正则表达式与提供的字符串(或⼦字符串)不匹配的标签。\
**3.1.1、 查询格式**\
查询格式<metric name>{<label name>=<label value>,...}\
node\_load1{instance="192.168.101.100:9100", job="node\_exporter"}

node\_load1{job="promethues-node",instance="192.168.101.101:9100"} #精确匹配 node\_load1{job="promethues-node",instance!="192.168.101.101:9100"} #取反

node\_load1{instance=\~"192.168.101.\*:9100\$"} #包含正则且匹配

\#包含正则且取反\
node\_load1{instance!\~"192.168.101.200:9100"}

**4、PromQL-时间范围**\
s - 秒 m - 分钟 h - ⼩时 d - 天 w - 周 y - 年\
\#瞬时向量表达式,选择当前最新的数据\
node\_memory\_MemTotal\_bytes{}\
\#区间向量表达式,选择以当前时间为基准,查询所有节点\
node\_memory\_MemTotal\_bytes指标5分钟内 的数据
100 \* sum\_over\_time(node\_memory\_Active\_bytes\[5m]) / sum\_over\_time(node\_memory\_MemTotal\_bytes\[5m])\
\#区间向量表达式,选择以当前时间为基准,查询指定节点\
node\_memory\_MemTotal\_bytes\
指标5分钟内 的数据\
node\_memory\_MemTotal\_bytes{instance="192.168.101.200:9100"} \[5m]\
**4.1、演示部分截**

**5、PromQL-运算符**
* 加法 - 减法 \* 乘法 / 除法 % 模 ^ 幂等\
node\_memory\_MemFree\_bytes/1024/1024 #将内存进⾏单位从字节转⾏为Mb\
node\_disk\_read\_bytes\_total{device="sda"} + node\_disk\_written\_bytes\_total{device="sda"} #计算磁盘读写数据量

**6、PromQL-聚合运算**\
**6.1、max、min、avg**\
max() #最⼤值\
min() #最⼩值\
avg() #平均值\
计算每个节点的最⼤的网卡接收流量值: max(node\_network\_receive\_bytes\_total) by (instance) 计算每个节点最近五分钟每个device的最⼤流量 max(rate(node\_network\_receive\_bytes\_total\[5m])) by (device)

**6.2、sum、count**\
sum() #求数据值相加的和(总数)\
sum(prometheus\_http\_requests\_total) #最近总共请求数为3318次,⽤于计算返回值的总数(如http请求次数)
count() #统计返回值的条数\
count(node\_os\_version) #⼀共两条返回的数据,可以⽤于统计节点数、Pod数量等 count\_values() #对value的个数(⾏数)进⾏计数 count\_values("node\_version",node\_os\_version) #统计不同的系统版本节点有多少

**6.3、abs、absent 补充图片**\
abs() #返回指标数据的值 abs(sum(prometheus\_http\_requests\_total{handler="/metrics"}))\
absent() #如果监指标有数据就返回空,如果监控项没有数据就返回1,可⽤于对监控项设置告警通知 absent(sum(prometheus\_http\_requests\_total{handler="/metrics"}))

**6.4、stddev、stdvar**\
stddev() #标准偏差差\
stddev(prometheus\_http\_requests\_total) #5+5=10,1+9=10,1+9这⼀组的数据差异较⼤, 在系统是数据波动较⼤,不稳定 。
stdvar() #求⽅差\
stdvar(prometheus\_http\_requests\_total)\
**6.5、topk、bottomk**\
topk() #样本值排名最⼤的N个数据 #取从⼤到⼩的前6个\
topk(6, prometheus\_http\_requests\_total)\
bottomk() #样本值排名最⼩的N个数据 #取从⼩到⼤的前6个\
bottomk(6, prometheus\_http\_requests\_total)

**6.6、rate、irate**\
irate函数专门搭配counter数据类型使用的函数,irate获取的是指定时间范围内最近的两个数据来计算数据的差异,irate抖动更明显。\
rate() #函数是专⻔搭配counter数据类型使⽤函数,功能是取counter数据类型在这个时间段中平均 每秒的增量平均数,适合⽤于计算相对平稳的数据。\
rate(prometheus\_http\_requests\_total\[5m])\
rate(node\_network\_receive\_bytes\_total\[5m])\
irate() #函数是专⻔搭配counter数据类型使⽤函数,irate获取的是指定时间范围内最近的两个数据 来计算数据的速率,适合计算数据变化⽐较⼤的数据,显示的数据相对⽐较准确。 irate(prometheus\_http\_requests\_total\[5m]) irate(node\_network\_receive\_bytes\_total\[5m])

**6.7、by、without**\
\#by,在计算结果中,只保留by指定的标签的值,并移除其它所有的sum(rate(node\_network\_receive\_packets\_total{instance=\~".\*"}\[10m])) by (instance)\
sum(rate(node\_memory\_MemFree\_bytes\[5m])) by (increase)\
\#without,从计算结果中移除列举的instance,job标签,保留其它标签 sum(prometheus\_http\_requests\_total) without (instance,job)\
**四、安装配置Grafana部署**\
在prometheus-server上部署Grafana\
安装节点: 192.168.101.100\
监听端口: 30000
计划第三部分写PromQL深入使用,prometheus各种数据查询语法必须要会的。又考虑到文章看了这么长还没见到好看的图表。\
**1、Grafana简介**\
Grafana是一款用Go语言开发的开源数据可视化工具,可以做数据监控和数据统计,带有告警功能。(告警功能会通过其他组件对接prometheus完成)

**2、二进制安装Grafana**\
**2.1、常用地址**\
1、[grafana官网](https://grafana.com/grafana/download)\
2、[更多部署方式](https://grafana.com/docs/grafana/latest/setup-grafana/installation/)\
3、[2023-01-03-当前最新版9.3.2](https://dl.grafana.com/enterprise/release/grafana-enterprise-9.3.2.linux-amd64.tar.gz)\
4、[更多版本选择](https://github.com/grafana/grafana/releases)\
5、[指定安装9.0.4版本](https://grafana.com/grafana/download/9.0.4)\
建议不要下载最新版本,否则会出现跟一些模板上的查询数据不兼容问题。\
**2.2、安装Grafana**\
**2.2.1、yum 安装rpm包**\
机器有网直接把rpm包下载到本地,

**2.2.2、修改启动端口**

**2.4、Grafana访问并配置数据源**\
**2.4.1、访问grafana前端**\
用户名admin\
初始密码admin
**2.4.2、配置prometheus数据源**


数据源选择prometheus


测试成功保存即可

**3、使用Grafana模板**\
[官网模板](https://grafana.com/grafana/dashboards/)\
**1、node\_exporter模板**\
**1.1、推荐模板ID**\
1860、15172(基于11074模板做的优化)

**1.2、导入模板两种方法**\
import 模板ID需要机器能够上网,如果机器不能上网通过导入json文件完成

**1.2.1、ID导入1860模板**



**1.2.2、Json文件上传11074模板**

导入下载好的json文件



**2、生产模版ID汇总-待补充**\
**2.1、xxx监控使用模版ID**\
**2.2、xxx监控使用模版ID**\
**4、插件管理**\
缺少饼图插件
**4.1、在线安装插件**\
饼图插件未安装,需要提前安装

**4.2、离线安装插件**\
[grafana官网插件](https://grafana.com/grafana/plugins/)\
**4.3、查看安装完插件效果**

**6、Grafana 页面调整演示**\
**1、处理图片显示格式问题**

**五、配置告警**
| 角色 | 机器 |
| ----------- | --------------- |
| Alermanager | 192.168.101.100 |
**1、Alertmanager 安装**\
[alertmanager官网](https://prometheus.io/docs/alerting/latest/alertmanager/)

Alertmanager是Prometheus监控系统的一个组件,它负责接收Prometheus发出的报警信息,并将报警信息转发给适当的接收人或系统\
prometheus 触发告警过程\
prometheus--->触发阈值--->超出持续时间--->alertmanager--->分组|抑制|静默--->媒体类型--->邮件|钉钉|飞书等。

**1.1、准备环境**\
[当前最新版](https://github.com/prometheus/alertmanager/releases/download/v0.25.0/alertmanager-0.25.0.linux-amd64.tar.gz)

使用次新稳定版本\
[alertmanager-0.24.0.linux-amd64.tar.gz](https://github.com/prometheus/alertmanager/releases/download/v0.24.0/alertmanager-0.24.0.linux-amd64.tar.gz)

**1.2、安装Alertmanager**\
解压创建软连接\
tar -xf alertmanager-0.24.0.linux-amd64.tar.gz -C /data/server\
cd /data/server\
ln -sv alertmanager-0.24.0.linux-amd64/ alertmanager\
**1.3、服务系统启动**\
vim /usr/lib/systemd/system/alertmanager.service\
systemctl daemon-reload\
systemctl enable alertmanager\
systemctl start alertmanager\
ps -ef |grep alertmanager\
netstat -ntlp|grep alert\
**2、prometheus告警配置**\
**2.1、添加告警规则**\
mkdir -p /data/server/prometheus/rulers\
**2.2、prometheus加载报警规则**\
**2.3、规则验证**\
/data/server/prometheus/promtool check rules /data/server/prometheus/rulers/node\_exporter.yml\
**2.4、prometheus热加载**\
curl -X POST 192.168.101.100:9090/-/reload\
**2.5、prometheus前端验证**

**3、AlerManager配置告警媒介**\
**3.1、邮件**





**3.2、钉钉告警-钉钉插件(感兴趣了解)**\
**3.2.1、创建钉钉机器人**\
**3.2.2、** [github](https://github.com/timonwong/prometheus-webhook-dingtalk/releases)\
**3.2.3、下载插件安装包**\
[prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz](https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v2.1.0/prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz)\
**3.2.4、参考钉钉官网使用**\
[钉钉开发者文档](https://open.dingtalk.com/integration?integration-visible)\
**3.2.5、安装Dingtalk组件**

**3.2.5、修改dingtalk 配置**\
**3.2.6、dingtalk配置系统启动**\
cat /usr/lib/systemd/system/prometheus-webhook-dingtalk.service

cp config.example.yml config.yml

vim config.yml\
url: <https://oapi.dingtalk.com/robot/send?access_token=97c9a4c1fc86dfac161c4eda0fbdf018c0b8a0e2a1bfe96ef5e6cbbf38ae6aab>

启动和停止服务命令
# 查看状态
systemctl status prometheus-webhook-dingtalk
# 启动
systemctl enable prometheus-webhook-dingtalk.service\
systemctl start prometheus-webhook-dingtalk.service

Alertmanager配置\
vim alertmanager.yml\
**3.4、PrometheusAlert(推荐使用)**\
[Github](https://github.com/feiyu563/PrometheusAlert)\
PrometheusAlert是开源的运维告警中心消息转发系统,支持主流的监控系统Prometheus、Zabbix,日志系统Graylog2,Graylog3、数据可视化系统Grafana、SonarQube。阿里云-云监控,以及所有支持WebHook接口的系统发出的预警消息,支持将收到的这些消息发送到钉钉,微信,email,飞书,腾讯短信,腾讯电话,阿里云短信,阿里云电话,华为短信,百度云短信,容联云电话,七陌短信,七陌语音,TeleGram,百度Hi(如流)等。

**3.4.1、安装PrometheusAlert**

curl 测试钉钉通知
curl -X POST "[https://oapi.dingtalk.com/robot/send?access\_token=f904300273b34c7bc27fe68367fdb9c69cd54516582760d2692843bdac4f20a1"](https://oapi.dingtalk.com/robot/send?access_token=f904300273b34c7bc27fe68367fdb9c69cd54516582760d2692843bdac4f20a1%22) -H "Content-Type: application/json" -d '{"msgtype": "text", "text": {"content": "This is a test message"}}'

**3.4.2、登录控制台**\
用户名:prometheusalert\
密码:prometheusalert

**3.4.2、Alertmanager配置告警媒介**


**3.4.3、调试告警格式**\
<https://github.com/feiyu563/PrometheusAlert/issues/30>\
链接调整

**六、Exporter类型丰富有的exporter都在node 192.168.101.101节点 上安装完成。**
| 机器信息 | 服务名称 | 端口 | 版本 |
| --------------- | --------------- | ------------ | ------- |
| 192.168.101.101 | redis-server | 6379 | 5.0.7 |
| 192.168.101.101 | redis\_exporter | 9121/metrics | v1.42.0 |
| 192.168.101.101 | mysql-server | 3306 | 5.7 |
| 192.168.101.101 | mysql\_exporter | | |
| 192.168.101.101 | 等 | | |
**1、Redis**\
监控 Redis: 通过 redis\_exporter 监控 redis 服务状态。\
[redis\_exporter github](https://github.com/oliver006/redis_exporter/releases)\
[redis\_exporter-v1.42.0.linux-amd64.tar.gz](https://github.com/oliver006/redis_exporter/releases/download/v1.42.0/redis_exporter-v1.42.0.linux-amd64.tar.gz)
没有安装redis可以参考下面连接安装\
[链接](https://www.yuque.com/xinglujianzhi/ops/prometheus)\
**1.1、redis\_exporter准备环境**\
vim /usr/lib/systemd/system/redis\_exporter.service\
cat /usr/lib/systemd/system/redis\_exporter.service\
systemctl daemon-reload\
systemctl start redis\_exporter.service\
ps -ef |grep redis\_exporter

**1.2、验证metrics**\
<http://192.168.101.101:9122/metrics>

**1.3、Prometheus采集数据**\
192.168.101.101
curl -X POST localhost:9090/-/reload
vim /data/prometheus/prometheus.yml\
cat /data/prometheus/prometheus.yml

**1.4、Prometheus查看Target**

1.5、配置Grafana 模版\
单机模版id:11692

集群模版ID:14615

**2、Mysql**\
通过 mysqld\_exporter 监控 MySQL 服务的运行状态\
**2.1、选择101节点操作**\
mysql\_exporter安装在 192.168.101.101 node节点上,收集数据库。\
没有安装mysql可以参考\
[MySQL5.7安装](https://blog.csdn.net/fanhonooo/article/details/128571161?spm=1001.2014.3001.5502)\
**2.2、授权监控账户权限**\
root密码 普通用mysql\_exporter户密码Mysql\_exporter2023+\
CREATE USER 'mysql\_exporter'@'localhost';\
ALTER USER 'mysql\_exporter'@'localhost' IDENTIFIED BY 'Mysql\_exporter2023+';\
ALTER USER 'mysql\_exporter'@'%' IDENTIFIED BY 'Mysql\_exporter2023+';\
FLUSH PRIVILEGES;\
**2.3、mysqld\_exporter准备环境**\
**2.3.1、注意版本信息**\
Mysql\_Exporter支持mysql版本\
●MySQL >= 5.6\
●MariaDB >= 10.3\
**2.3.2、免密码登录配置**\
所有配置文件约定放在 /etc/xinglujianzhi/mysqld\_exporter
# cat /root/.my.cnf
\[client]\
user=mysql\_exporter\
password=密码\
**2.3.3、安装配置mysql\_exporter**\
[github](https://github.com/prometheus/mysqld_exporter)\
[更多版本选择](https://github.com/prometheus/mysqld_exporter/releases/)\
[mysqld\_exporter-0.14.0.linux-amd64.tar.gz](https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz)

**2.3.4、解压缩安装,配置系统启动**\
tar -xf mysqld\_exporter-0.14.0.linux-amd64.tar.gz -C /data/server/\
cd /data/server/\
ln -sv mysqld\_exporter-0.14.0.linux-amd64/ mysqld\_exporter

vim /etc/systemd/system/mysqld\_exporter.service\
systemctl daemon-reload\
systemctl restart mysqld\_exporter\
systemctl enable mysqld\_exporter

**2.4、验证metrics**

[http://192.168.101.101:9104/metrics](http://192.168.101.201:9104/metrics)

**2.5、prometheus收集数据**\
**2.5.1、prometheus server新增配置**\
vim /data/server/prometheus/prometheus.yml

**2.5.2、prometheus server 热加载生效**\
tail -n4 /data/prometheus/prometheus.yml\
curl -X POST 192.168.101.200:9090/-/reload\
**2.5.3、Prometheus查看Target**\
<http://192.168.101.100:9090/targets?search=>

**2.6、Grafana配置模板**\
推荐模板ID:7362、 11323

配置主从复制推荐模板ID:11323

如果安装的是Mariadb推荐模板ID:13106\
**3、Haproxy**\
通过 haproxy\_exporter 监控 haproxy\
[github地址](https://github.com/prometheus/haproxy_exporter)\
[haproxy\_exporter-0.14.0.linux-amd64.tar.gz](https://github.com/prometheus/haproxy_exporter/releases/download/v0.14.0/haproxy_exporter-0.14.0.linux-amd64.tar.gz)\
**1、在202节点机器上操作**\
**1.1、haproxy代理配置**
| Haproxy端口 | 后端端口 | 备注 |
| --------- | ----- | ----------------- |
| 3264 | N/A | haproxy管理页面 |
| 3265 | 9090 | prometheus server |
| 3266 | 30000 | grafana dashboard |
**1.2、ubuntu20.04安装Haproxy**\
[ubuntu20.04配置Haproxy参考](https://blog.csdn.net/fanhonooo/article/details/128555801?spm=1001.2014.3001.5502)\
**2、haproxy\_exporter准备环境**\
**2.1、安装haproxy\_exporter**\
wget <https://github.com/prometheus/haproxy_exporter/releases/download/v0.14.0/haproxy_exporter-0.14.0.linux-amd64.tar.gz>

**2.2、配置系统启动**\
官方提供多种启动方法\
./haproxy\_exporter --haproxy.scrape-uri=unix:/run/haproxy/admin.sock # 了解即可\
配置 haproxy\_exporter.service\
vim /usr/lib/systemd/system/haproxy\_exporter.service\
cat /usr/lib/systemd/system/haproxy\_exporter.service
启动服务\
cat /usr/lib/systemd/system/haproxy\_exporter.service\
systemctl daemon-reload\
systemctl start haproxy\_exporter.service\
ps -ef |grep haproxy\_exporter\
netstat -ntlp|grep haproxy\
systemctl enable haproxy\_exporter.service

[Github支持多种](https://github.com/prometheus/haproxy_exporter/tree/v0.14.0)\
**2.3、验证metrics**


**2.4、prometheus收集数据**\
**2.4.1、配置jobname**\
vim /data/prometheus/prometheus.yml

**2.4.2、热加载配置生效**\
curl -X POST 192.168.101.200:9090/-/reload
**2.4.2、prometheus 查看Target**

**2.5、Grafana配置模板**

推荐模板ID: 367和2428

**25.1、访问代理产生数据**\
多访问几次产生数据,方便haproxy\_exporter收集\
[http://192.168.101.201:3265](http://192.168.101.201:3265/graph)\
[http://192.168.101.201:3266](http://192.168.101.201:3266/login)\
**2.5.2、验证数据**


**4、Nginx Exporter**\
exporter 默认端口9913
通过 prometheus 监控 nginx\
需要在编译安装 nginx 的时候添加 nginx-module-vts 模块\
github 地址:\
[nginx-module-vts](https://github.com/vozlt/nginx-module-vts)\
[nginx-1.20.2.tar.gz](http://nginx.org/download/nginx-1.20.2.tar.gz)\
[nginx-vts-exporter-0.10.0.linux-amd64.tar.gz](https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.10.0/nginx-vts-exporter-0.10.0.linux-amd64.tar.gz)\
**4.、编译安装Nginx和vts模块**\
[Nginx编译安装vts监控模块](https://blog.csdn.net/fanhonooo/article/details/128565040?spm=1001.2014.3001.5502)\
**4.2、** **nginx-vts-exporter环境准备**\
**4.2.1、安装** **nginx-vts-exporter**

**4.2.2、配置系统启动**\
**4.3、验证metrics**\
<http://192.168.101.201:9913/metrics>

**5、Prometheus验证Target**

**6、Grafana配置模版**\
推荐模版ID:14900

模版需要微调一下\
100 - (cpu\_usage\_idle{instance=\~ "\$instance\*",cpu="cpu-total"})

**七、 Cadvisor 监控容器**\
[Github地址](https://github.com/google/cadvisor)\
cAdvisor收集Host上运行的容器信息\
cAdvisor(容器顾问)让容器⽤户了解其运⾏容器的资源使⽤情况和性能状态,cAdvisor⽤于收集、聚 合、处理和导出有关正在运⾏的容器的信息,具体来说,对于每个容器都会保存资源隔离参数、历史资源使 ⽤情况、完整历史资源使⽤情况的直⽅图和⽹络统计信息,此数据按容器和机器范围导出。\
**1、环境准备**
| 角色 | 机器IP | 映射端口 |
| -------- | --------------- | ---- |
| cadvisor | 192.168.101.201 | 8080 |
[docker19.03.15一键安装参考](https://www.yuque.com/xinglujianzhi/ops/13)

**2、安装cadvisor**\
注意地方\
安装cadvisor一定要有root权限,可以用普通用户权限需要放行即可\
**2.1、导入镜像**\
docker load -i cadvisor.tar\
**2.2、启动cadvisor服务**\
docker 数据存储路径为/data/docker\
docker run --volume=/:/rootfs:ro --volume=/var/run:/var/run:ro --volume=/sys\:/sys:ro --volume=/data/docker/:/data/docker:ro --volume=/dev/disk/:/dev/disk:ro --publish=8080:8080 --detach=true --name=cadvisor --privileged --device=/dev/kmsg google/cadvisor:latest

**2.3、 验证cadvisor web界⾯**\
<http://192.168.101.201:8080/containers/>

验证metrics

**1、增加配置文件**\
vim /data/prometheus/prometheus.yml

**2、热加载prometheus**\
curl -X POST 192.168.101.200:9090/-/reload\
**3、prometheus验证Target**\
<http://192.168.101.200:9090/targets?search=>

**4、Grafana配置模板**\
[grafana模板](https://grafana.com/grafana/dashboards/)\
推荐模板ID:893



查看主机上的docker容器

公众号进入网站体验更佳

