Prometheus入门实践
Prometheus下载地址 Prometheus相关文档 Prometheus官方文档
一、基本原理
通过HTTP协议周期性抓取被监控组件的状态
,任意组件只要提供对应的HTTP接口就可以接入监控。
输出被监控组件信息的HTTP接口被叫做exporter
,也就是数据采集端,通常来说,最需要接入改造的就是expoter. 当前互联网上已经有很多成熟的exporter
组件,当然用户也可用根据官方提供的sdk自行编写exporter.
注意:prometheus的时间序列数据分为四种类型
- Counter: 收集的数据是按照某个趋势(增加/减少)一直变化的,我们往往用它记录服务请求总量,错误总数等
- Gauge: 搜集的数据是一个瞬时的,与时间没有关系,可以任意变高变低,往往可以用来记录内存使用率、磁盘使用率等
- Histogram: 用于表示一段时间范围内对数据进行采样,并能够对其指定区间以及总数进行统计,通常我们用它计算分位数的直方图。
- Summary: 和Histogram类似,用于表示一段时间内数据采样结果。它直接存储了 quantile 数据,而不是根据统计区间计算出来的
二、组件介绍
-
- Prometheus-server: 负责
数据采集和存储(TSDB)
,提供PromQL查询语言的支持
- Prometheus-server: 负责
-
- Alertmanager: 警告管理器,用来进行报警
-
- Push Gateway: 支持临时性Job主动推送指标的中间网关(通常对应于短声明周期的任务监控)
三、服务过程
-
Prometheus Daemon
定时去目标上抓取metrics(指标)数据
,每个抓取目标需要暴露一个http服务的接口给server进行定时获取。支持配置文件、文本文件、Zookeeper、Consul、DNS SRV Lookup方式抓取目标;对于长生命周期的服务,采用Pull模式定期拉取数据,对于段生命周期的任务,通过push-gateway来主动推送数据
-
Prometheus
本地存储抓取的所有数据,并通过一定规则进行清理和整理数据,并把得到的结果存储到新的时间序列中。
-
- Prometheus通过PromQL和其他API可视化地展示收集的数据. 可以作为
Grafana
的数据源进行图标输出,也可通过API对外提供数据展示
- Prometheus通过PromQL和其他API可视化地展示收集的数据. 可以作为
-
PushGateway
支持client主动推送metrics到push-gateway(相当于是一个常驻的exporter服务),prometheus定期去push-gateway中获取数据
-
Alertmanager
是独立于prometheus的一个组件,支持PromQL查询语句,提供灵活的报警功能
四、pronetheus服务构建使用
源码安装
|
|
docker方式安装
注意:prometheus默认使用yaml格式来定义配置文件
|
|
注意:
prometheus为golang编写的程序,因此只有一个二进制文件,使用–config.file来制定配置文件,使用–web.enable-lifecycle来启用远程热加载配置文件. 调用指令curl -X POST http://localhost:9090/-/reload
此时可以访问prometheus-web即可查看prometheus的状态页面。此时它会每30s对自己暴露的http metrics数据进行采集。可以访问prometheus本身的metrics数据
通过node exporter提供metrics
|
|
注意:如果需要同时查找多个项,其实需要熟悉prometheus的表达式编写
五、安装pushgateway
注意:push-gateway服务启动后也需要将endpoint加入prometheus中
|
|
六、安装Grafana进行图标展示
|
|
添加数据源,以及基本数据验证
|
|
七、安装AlterManager
Prometheus
中的告警由独立的两部分组成
-
- Prometheus服务中的警告规则发送警告到Alertmanager
-
- Alertmanager管理这些警告.包含:silencing, inhibition, aggregation 并通过一些方式发送通知
建立告警和通知的基本步骤:
-
- 创建和配置alertmanager
-
- 启动prometheus服务时,通过alertmanager.url 配置报警服务alertmanager服务,prometheus和alertmanager通信连接
启动altermanager服务
|
|
在prometheus中配置altermanager服务
|
|
重载prometheus服务
|
|
重新导入数据测试
|
|
八、后续优化
注意:
此时使用prometheus可以监控到基础服务的资源使用情况,并且也可用借用alertmanager
服务对相关报警规则进行检测和报警,那么需要如何把相关报警及时的通知到相关负责人呢。我们前面在alertmanager
服务中配置了一个web-hook,即http://10.13.118.71:8889/open/test
,可以在alertmanager服务的status
中找到。我们可以很好的借助这个web-hook来对相关的报警发送。
|
|
注意:我们这里的web-hook服务其实是将报警信息临时全部打印出来了,其实可以根据用户关心程度,将相关值取出来直接发送至用户终端,比如钉钉,微信,或者短信