1. Prometheus简介
Prometheus is an open-source systems monitoring and alerting toolkit originally built at SoundCloud. Since its inception in 2012, many companies and organizations have adopted Prometheus, and the project has a very active developer and user community. It is now a standalone open source project and maintained independently of any company. To emphasize this, and to clarify the project’s governance structure, Prometheus joined the Cloud Native Computing Foundation in 2016 as the second hosted project, after Kubernetes.
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,处理报警
- 各种支持工具
本文中,会使用Docker安装配置Prometheus生态系统的组件(已知主机IP为192.168.56.102)。
参考文档:
- 《Docker入门篇》
- Prometheus官方文档
- Prometheus - GETTING STARTED
- Prometheus下载
- Prometheus - CONFIGURATION
- Prometheus实战 - Prometheus配置
- Prometheus监控系统之入门篇
2. 安装prometheus server
1、下载prometheus镜像(以v2.18.0为例)
1 | docker pull prom/prometheus:v2.18.0 |
更多版本镜像,访问dockerhub - prometheus获取。
2、准备配置文件
1 | docker run --rm \ |
prometheus.yml文件内容为:
1 | global: |
3、启动prometheus
1 | docker run --name=prometheus -d \ |
如果使用 file_sd_configs ,那么修改启动命令为:
1 | docker run --name=prometheus -d \ |
4、访问Prometheus
浏览器访问 http://192.168.56.102:9090/
5、查看targets
浏览器访问 http://192.168.56.102:9090/targets/
6、查看指标
浏览器访问 http://192.168.56.102:9090/metrics/
3. 安装node exporter
3.1. Docker安装node exporter
1、下载node-exporter镜像(以v1.0.0为例)
1 | docker pull prom/node-exporter:v1.0.0 |
更多版本镜像,访问dockerhub - node exporter获取。
2、启动node exporter
1 | docker run --name=node-exporter -d \ |
3、访问node exporter
1 | curl http://localhost:9100/metrics |
3.2. bin安装node exporter
bin安装node exporter的优势是适用于所有主机,不管主机上有没有安装docker。
1、安装node exporter
1 | wget https://github.com/prometheus/node_exporter/releases/download/v1.0.0/node_exporter-1.0.0.linux-amd64.tar.gz |
2、测试启动node exporter
1 | node_exporter |
3、配置systemd管理
1 | cat <<EOF > /etc/systemd/system/node_exporter.service |
4、启动node exporter
1 | systemctl start node_exporter |
5、访问node exporter
1 | curl http://localhost:9100/metrics |
4. promserver收集exporter数据
1、修改prometheus.yml
1 | global: |
2、重新加载配置文件
1 | curl -X POST http://localhost:9090/-/reload |
然而重新加载配置文件并不生效,最后重启了prometheus才生效。
3、查看targets
浏览器访问 http://192.168.56.102:9090/targets/
5. 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 |
6. promserver收集pushgateway数据
1、修改prometheus.yml文件
1 | global: |
2、重新加载配置或者重启promserver
3、在promserver查看数据
7. 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/
8. 告警配置
1、设置报警规则
1 | mkdir -p /opt/prometheus/rules/ |
exam.rules内容为
1 | groups: |
2、编辑prometheus.yml配置文件,添加alertmanager配置和报警规则配置
1 | global: |
3、重新加载配置或者重启promserver
4、在prometheus alerts页面查看告警
或者在alertmanager alerts页面查看告警
9. 告警通知处理
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 |
如上图,服务接收到了告警信息。
10. grafana
grafana常被用来展示prometheus的数据,详情参考《使用Docker安装配置Grafana》。
11. 后记
以上,配置完成了promserver、exporter、pushgateway、alertmanager,跑通了数据的收集和显示,测试了告警信息的收集。
但是,Prometheus也有不少问题,比如数据量大的时候需要拆分集群,聚合数据很难数据去重,可用性较低等。因此出现了Thanos,能够解决Prometheus的很多问题,详情参考 Thanos官网 和 分布式 Promethues 之 Thanos。