Prometheus简介
Prometheus是在SoundCloud的基础上构建的开源系统监视和警报工具。自从2012年以来,许多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发人员和用户社区。现在,它是一个独立的开源项目,并且独立于任何公司进行维护。为了强调这一点并阐明项目的治理结构,Prometheus在2016年加入了Cloud Native Computing Foundation,这是继Kubernetes之后的第二个托管项目。
Prometheus的主要特性包括:
- 一个包含时间序列的多维数据模型,由指标名称和键值对进行标记
- PromQL,一种灵活的查询语言
- 不依赖分布式存储;单服务器节点是自治的
- 时间序列收集是通过HTTP拉取模型实现的
- 支持通过中间网关推送时间序列
- 通过服务发现或静态配置发现目标
- 支持多种图形和仪表板
Prometheus生态系统包含多个组件,其中许多是可选的:
- prometheus server,负责收取并存储时间序列数据
- client libraries,用于检测应用程序代码
- push gateway,支持短期工作
- exporters,适用于特定服务的指标收集器,如HAProxy,StatsD,Graphite
- alertmanager,处理报警
- 各种支持工具
更多内容参考Prometheus文档。
本文中,我们会使用Docker来安装配置Prometheus,主要参考Prometheus监控系统之入门篇。
前置条件是安装配置好了docker环境,安装方法参考《Docker入门》。已知docker宿主机IP为192.168.56.102。
prometheus server
1、登录dockerhub查看需要的prometheus server。
2、下载prometheus server镜像(以v2.18.0为例)
1 | docker pull prom/prometheus:v2.18.0 |
3、准备配置文件
1 | mkdir -p /opt/prometheus/ |
prometheus.yml文件内容为:
1 | global: |
4、启动prometheus server
1 | docker run --name=prometheus -d \ |
5、测试服务
浏览器访问 http://192.168.56.102:9090/
6、查看targets
浏览器访问 http://192.168.56.102:9090/targets/
7、查看指标
浏览器访问 http://192.168.56.102:9090/metrics/
node exporter
1、登录dockerhub查看需要的node exporter。
2、下载node-exporter镜像(以v1.0.0为例)
1 | docker pull prom/node-exporter:v1.0.0 |
3、启动node exporter
1 | docker run --name=node-exporter -d \ |
promserver收集exporter数据
1、修改prometheus.yml
1 | global: |
2、重新加载配置文件
1 | curl -X POST http://localhost:9090/-/reload |
然而我重新加载配置文件并不生效,最后重启了prometheus server。
3、查看targets
浏览器访问 http://192.168.56.102:9090/targets/
push gateway
Prometheus采集数据是用的pull方式,prometheus配置文件设置的5秒就是采集数据的频率。但是有些数据并不适合采用这样的方式,对这样的数据可以使用Push Gateway服务。PushGateway比较适合临时作业和批处理作业,由于这些作业是short-lived的,如果采用pull的模式,可能在prometheus采集之前,作业已经执行结束。pushgateway相当于一个暂存器,这些临时作业将metrics数据缓存到pushgateway中,然后等待Prometheus来pull数据。
1、登录dockerhub查看需要的pushgateway。
2、下载pushgateway镜像(以v1.1.0为例)
1 | docker pull prom/pushgateway:v1.1.0 |
3、启动push gateway
1 | docker run --name=pushgateway -d \ |
4、测试服务
浏览器访问 http://192.168.56.102:9091/#
5、推送数据给push gateway
1 | echo "exam_metric 100" | curl --data-binary @- http://127.0.0.1:9091/metrics/job/exam |
promserver收集pushgateway数据
1、修改prometheus.yml文件
1 | global: |
2、重新加载配置或者重启promserver
3、在promserver查看数据
alertmanager
1、登录dockerhub查看需要的alertmanager。
2、下载alertmanager镜像(以v0.15.0为例)
1 | docker pull prom/alertmanager:v0.15.0 |
高版本比如v0.20.0打开页面后会报错,Uncaught TypeError: Cannot read property ‘elmFs’ of undefined
3、创建配置文件
1 | mkdir -p /opt/alertmanager/ |
alertmanager.yml内容为:
1 | global: |
4、启动alertmanager
1 | docker run --name=alertmanager -d \ |
5、测试服务
浏览器访问 http://192.168.56.102:9093/
告警配置
1、设置报警规则
1 | mkdir -p /opt/prometheus/rules/ |
exam.rules内容为
1 | groups: |
2、编辑prometheus.yml配置文件,添加alertmanager配置和报警规则配置
1 | global: |
3、重新加载配置或者重启promserver
4、在prometheus alerts页面查看告警
或者在alertmanager alerts页面查看告警
告警通知处理
alertmanager.yml文件中配置的告警方式是webhook,告警发送到 http://192.168.56.102:8080/exam/test ,因此,我们需要一个服务来接收处理这个告警。
1、安装golang环境,参考《CentOS7部署beego项目》golang安装一节
2、创建main.go
1 | package main |
3、运行代码
1 | go get github.com/gin-gonic/gin |
如上图,服务接收到了告警信息。
配置
更多prometheus配置,参考CONFIGURATION 和 Prometheus 配置
后记
以上,配置完成了promserver、exporter、pushgateway、alertmanager,跑通了数据的收集和显示,测试了告警信息的收集。本文就到这里,需要用到prometheus的其他内容时,再继续学习,比如thanos。