一个计算机技术爱好者与学习者

0%

好好学Docker:使用Docker安装配置Prometheus

1. 前言

本文中,我们会使用Docker安装配置Prometheus核心组件,实现一个完整的监控告警系统。
具体的组件包括:Prometheus Server、Exporters、PushGateway、Alertmanager、Grafana

参考文档:

2. 安装配置Prometheus Server

1、下载prometheus镜像(以v2.45.6为例)

1
docker pull prom/prometheus:v2.45.6

更多版本镜像,访问dockerhub - prometheus获取。

2、拷贝配置文件

1
2
3
4
mkdir -p /opt/prometheus/{conf,data}
docker run --name tmp -d prom/prometheus:v2.45.6
docker cp tmp:/etc/prometheus/prometheus.yml /opt/prometheus/conf/
docker rm tmp -f

3、编辑配置文件

1
2
3
4
mkdir -p /opt/prometheus/conf/targets
touch /opt/prometheus/conf/targets/targets.yml
vim /opt/prometheus/conf/prometheus.yml
vim /opt/prometheus/conf/targets/targets.yml

配置方法参考文档《Prometheus服务发现》中的【文件服务发现】一节。

4、启动prometheus

1
2
3
4
5
6
7
8
9
10
11
12
13
14
docker run --name=prometheus -d \
-u root \
-p 9090:9090 \
-v /opt/prometheus/conf/prometheus.yml:/etc/prometheus/prometheus.yml \
-v /opt/prometheus/conf/targets:/etc/prometheus/targets \
-v /opt/prometheus/conf/rules:/etc/prometheus/rules \
-v /opt/prometheus/data:/data/prometheus \
-v /etc/localtime:/etc/localtime \
prom/prometheus:v2.45.6 \
--config.file=/etc/prometheus/prometheus.yml \
--web.enable-lifecycle \
--storage.tsdb.path=/data/prometheus \
--storage.tsdb.retention.time=30d \
--web.enable-remote-write-receiver

5、查看prometheus状态

1
docker logs prometheus

3. 访问Prometheus Server

1、访问Prometheus
浏览器访问 http://192.168.56.102:9090/

2、查看targets
浏览器访问 http://192.168.56.102:9090/targets/

3、查看指标
浏览器访问 http://192.168.56.102:9090/metrics/

4. 安装Node Exporter

4.1. Docker安装Node Exporter

参考文档:github - prometheus/node_exporter

1、下载node-exporter镜像(以v1.6.0为例)

1
docker pull prom/node-exporter:v1.6.0

更多版本镜像,访问dockerhub - node exporter获取。

2、启动node exporter

1
2
3
4
5
6
7
docker run --name=node-exporter -d \
-p 9100:9100 \
--net="host" \
--pid="host" \
-v "/:/host:ro,rslave" \
prom/node-exporter:v1.6.0 \
--path.rootfs=/host

3、访问node exporter

1
curl http://localhost:9100/metrics

4.2. Bin安装Node Exporter

bin安装node exporter的优势是适用于所有主机,不管主机上有没有安装docker。

1、安装node exporter

1
2
3
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.0/node_exporter-1.6.0.linux-amd64.tar.gz
tar -xzvf node_exporter-1.6.0.linux-amd64.tar.gz
mv node_exporter-1.6.0.linux-amd64/node_exporter /usr/local/bin

2、测试启动node exporter

1
node_exporter

3、配置systemd管理

1
2
3
4
5
6
7
8
9
10
11
12
13
cat <<EOF > /etc/systemd/system/node_exporter.service 
[Unit]
Description=Node Exporter

[Service]
User=root
ExecStart=/usr/local/bin/node_exporter
Restart=always

[Install]
WantedBy=multi-user.target

EOF

4、启动node exporter

1
2
3
systemctl start node_exporter
systemctl status node_exporter
systemctl enable node_exporter

5、访问node exporter

1
curl http://localhost:9100/metrics

5. Promserver采集Node Exporter数据

1、修改targets.yml (假设主机IP为 192.168.56.102)

1
2
3
- targets: ['192.168.56.102:9100']
labels:
group: 'node-exporter'

2、查看targets
浏览器访问 http://192.168.56.102:9090/targets/

6. 安装PushGateway

1、登录dockerhub查看需要的pushgateway

2、下载pushgateway镜像(以v1.1.0为例)

1
docker pull prom/pushgateway:v1.1.0

3、启动pushgateway

1
2
3
docker run --name=pushgateway -d \
-p 9091:9091 \
prom/pushgateway:v1.1.0

4、测试服务
浏览器访问 http://192.168.56.102:9091/#

5、推送数据给pushgateway

1
2
3
4
5
6
7
echo "exam_metric 100" | curl --data-binary @- http://127.0.0.1:9091/metrics/job/exam

cat <<EOF | curl --data-binary @- http://127.0.0.1:9091/metrics/job/exam/instance/test
chinese 120
math 150
english 140
EOF

7. Promserver采集PushGateway数据

1、修改targets.yml文件

1
2
3
- targets: ['192.168.56.102:9091']
labels:
group: 'pushgateway'

2、在promserver查看数据

8. 安装Alertmanager

1、登录dockerhub查看需要的alertmanager

2、下载alertmanager镜像(以v0.23.0为例)

1
docker pull prom/alertmanager:v0.23.0

v0.15.0以下版本只支持/api/v1,不支持/api/v2

3、创建配置文件(建议和prometheus.yml放在一起)

1
2
3
docker run --name tmp -d prom/alertmanager:v0.23.0
docker cp tmp:/etc/alertmanager/alertmanager.yml /opt/prometheus/conf/alertmanager.yml
docker rm tmp -f

alertmanager.yml 默认配置为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
global:
resolve_timeout: 5m

route:
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 1h
receiver: 'web.hook'
receivers:
- name: 'web.hook'
webhook_configs:
- url: 'http://127.0.0.1:5001/'
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']

修改 alertmanager.yml 为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
global:
resolve_timeout: 5m
route:
group_by: ['exam'] #与prometheus告警规则配置的groupname对应
group_wait: 10s #报警等待时间
group_interval: 10s #报警间隔时间
repeat_interval: 1m #重复报警间隔时间
receiver: 'web.hook' #告警处理方式,我们这里通过web.hook方式,也可以配置成邮件等方式
receivers:
- name: 'web.hook'
webhook_configs:
- url: 'http://192.168.56.102:8080/exam/test' #告警webhook地址,告警信息会post到该地址,需要编写服务接收该告警数据
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning' #目标告警状态
equal: ['alertname', 'dev', 'instance']

4、启动alertmanager

1
2
3
4
5
6
docker run --name=alertmanager -d \
-p 9093:9093 \
-v /opt/prometheus/conf/alertmanager.yml:/etc/alertmanager/alertmanager.yml \
prom/alertmanager:v0.23.0 \
--config.file=/etc/alertmanager/alertmanager.yml \
--storage.path=/alertmanager

5、测试服务
浏览器访问 http://192.168.56.102:9093/

9. 配置告警

1、编辑prometheus.yml配置文件,添加alertmanager配置和报警规则配置

1
2
3
4
5
6
7
8
9
10
11
12
13
global:
scrape_interval: 15s #默认采集监控数据时间间隔
scrape_configs:
- job_name: 'file_sd_targets'
file_sd_configs:
- files:
- '/etc/prometheus/targets/*.yml'
alerting: #告警管理器设置
alertmanagers:
- static_configs:
- targets: ['192.168.56.102:9093'] #告警信息会发送给alertmanager进一步处理
rule_files:
- /etc/prometheus/rules/*.rules #告警规则文件路径,对应宿主机 /opt/prometheus/conf/rules/*.rules

2、设置报警规则

1
vim /opt/prometheus/conf/rules/exam.rules

exam.rules内容为:

1
2
3
4
5
6
7
8
9
10
11
groups:
- name: exam
rules:
- alert: exam告警测试
expr: chinese > 100 #语文成绩大于100告警,注:我们在pushgateway推送数据的时候,设置的是120,因此会触发告警
for: 1m
labels:
status: warning
annotations:
summary: "{{$labels.instance}}:语文成绩优秀! nb了!!!"
description: "{{$labels.instance}}: 语文成绩优秀! nbnbnb!!!"

exam.rules 也可以先配置为空。

3、重新加载配置或者重启promserver

4、查看告警
prometheus alerts页面查看告警

或者在alertmanager alerts页面查看告警

10. 告警通知处理

alertmanager.yml文件中配置的告警方式是webhook,告警发送到 http://192.168.56.102:8080/exam/test ,因此,我们需要一个服务来接收处理这个告警。

1、安装golang环境,参考《CentOS7部署beego项目》golang安装一节

2、创建main.go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package main

import (
"fmt"
"io/ioutil"
"github.com/gin-gonic/gin"
)

func main() {
r := gin.Default()
r.POST("/exam/test", func(c *gin.Context) {
res, _ := ioutil.ReadAll(c.Request.Body)
fmt.Println(string(res)) //这里我们只简单打印告警信息
c.JSON(200, gin.H{
"message": "alert message",
})
})
r.Run(":8080")
}

3、运行代码

1
2
go get github.com/gin-gonic/gin
go run main.go


如上图,服务接收到了告警信息,并且打印了告警信息。

11. Grafana

Grafana常被用来展示Prometheus的数据,详情参考《使用Docker安装配置Grafana》

12. 后记

以上,配置完成了Prometheus Server、Exporters、PushGateway、Alertmanager、Grafana,跑通了数据的收集和显示,测试了告警信息的收集,nice。

  • 本文作者: 好好学习的郝
  • 原文链接: https://www.voidking.com/dev-docker-prometheus/
  • 版权声明: 本文采用 BY-NC-SA 许可协议,转载请注明出处!源站会即时更新知识点并修正错误,欢迎访问~
  • 微信公众号同步更新,欢迎关注~