Prometheus 配置(Docker)
目录
0. 配置思路
1. 开放端口
2. Docker 镜像下载
3. 新建配置文件
4. 启动 node-exporter
5. 启动 prometheus
6. 启动 alertmanager
7. 启动 pushgateway
8. EMQ 监控数据推送到 pushgateway
9. 配置 Grafana 显示
0. 配置思路
配置防火墙,开放用到的端口;
新建和编辑配置文件;
启动 Prometheus 及其它组件容器(挂载配置文件);
浏览器打开 Prometheus UI 主页,观察监控对象;
使用 Grafana 显示;
返回目录
1. 开放端口
Port 9090 : prometheus (Prometheus Server)
Port 9100 : node-exporter (物理服务器指标,如 CPU、内存、网络等)
Port 9091 : pushgateway (接收第三方应用推送的指标数据)
Port 9093 : alertmanager (接收来自 Prometheus Server 的告警,处理后通知管理员)
Port 3000 : grafana (使用 Grafana 显示监控对象指标数据)
返回目录
2. Docker 镜像下载
$ docker pull prom/prometheus
$ docker pull prom/node-exporter
$ docker pull prom/pushgateway
$ docker pull prom/alertmanager
$ docker pull grafana/grafana
返回目录
3. 新建配置文件
/home/prometheus/prometheus.yml ## 用于挂载,覆盖 prometheus 容器内部文件 /etc/prometheus/prometheus.yml
/home/prometheus/groups/nodegroups/node.json ## 使用 file_sd_configs 方式实现动态配置,对应容器内 /usr/local/prometheus/groups/
/home/prometheus/rules/node-up.rules ## AlertManager 服务地址以及告警规则文件,对应容器内 /usr/local/prometheus/rules/
/home/prometheus/alertmanager.yml ## 用于挂载,覆盖 alertmanager 容器内部文件 /etc/alertmanager/alertmanager.yml
prometheus.yml
## /home/prometheus/prometheus.yml
1 # my global config
2 global:
3 scrape_interval: 15s ## 默认抓取时间
4 evaluation_interval: 15s ## 每 15s 评估一次 rules
5 # scrape_timeout is set to the global default (10s).
6
7 # Alertmanager configuration ## Alertmanager 配置
8 alerting:
9 alertmanagers:
10 - static_configs:
11 - targets:
12 - <ip>:9093 ## Alertmanager 地址
13
15 rule_files: ## 添加 Alertmanager 告警 rules 规则文件
16 # - "first_rules.yml"
17 # - "second_rules.yml"
18 - "/usr/local/prometheus/rules/*.rules" ## 容器内部 rules 规则文件地址
19
21 scrape_configs: ## 数据拉取配置
22 - job_name: "prometheus" ## 在这个配置内的时间序列,每一条都会自动添加{job_name:"prometheus"}的标签
23 static_configs:
24 - targets: ["<ip>:9090"]
25 labels:
26 instance: prometheus
27 service: prometheus-service
28
29 - job_name: "node-exporter" ## 服务器物理机监控
scrape_interval: 15s ## 停止/恢复服务 15s 后 Alert 的状态才会发生变化
30 file_sd_configs: ## file_sd_configs 方式:以 Json 或 Yaml 方式修改配置,Prometheus 会自动加载无需重启服务
31 - files: ["/usr/local/prometheus/groups/nodegroups/*.json"]
40 - job_name: "pushgateway" ## 监控 EMQ
41 scrape_interval: 5s
42 honor_labels: true
43 static_configs:
44 - targets: ["<ip>:9091"]
46 - job_name: "grafana" ## 监控 Grafana
47 static_configs:
48 - targets: ["<ip>:3000"]
node.json
## /home/prometheus/groups/nodegroups/node.json
1 [
2 {
3 "targets": [
4 "<ip>:9100"
5 ],
6 "labels": {
7 "instance": "vm-<ip>",
8 "service": "node-service"
9 }
10 }
11 ]
node-up.rules
## Prometheus 配置 AlertManager 告警规则
## /home/prometheus/rules/node-up.rules
1 groups:
2 - name: node-up
3 rules:
4 - alert: node-up
5 expr: up{job="node-exporter"} == 0
6 for: 15s ## 等待15s Alert 状态改变
7 labels:
8 severity: 1
9 team: node
10 annotations:
11 summary: "{{ $labels.instance }} 已停止运行! "
## 该 rule 规则监测 job="node-exporter" Node 是否为活动,人为停止 node-exporter 服务来验证该规则;
## 可以观察 Prometheus -> Targets -> Rules 状态;
## 15s 后查看是否收到告警邮件;
## AlertManager 主页可以查看 alert 信息和静默设置;
alertmanager.yml
## /home/prometheus/alertmanager.yml
1 global: ## 全局配置,包括报警解决后的超时时间、SMTP 相关配置、各渠道通知的 API 地址等
2 resolve_timeout: 5m ## 报警触发后,每隔 5分钟会自动发送一次告警邮件
3 smtp_from: 'youraddr@163.com' ## 配置 SMTP 方式发送邮件
4 smtp_smarthost: 'smtp.163.com:465'
5 smtp_auth_username: 'youraddr@163.com'
6 smtp_auth_password: 'yourcode' ## 邮箱授权码
7 smtp_require_tls: false
8 smtp_hello: '163.com'
9 route: ## 设置报警分发策略
10 group_by: ['alertname']
11 group_wait: 5s
12 group_interval: 5s
13 repeat_interval: 5m ## 生产环境 20m ~ 30m
14 receiver: 'email'
15 receivers: ## 配置告警信息接收者信息
16 - name: 'email'
17 email_configs:
18 - to: 'youraddr@qq.com'
19 send_resolved: true
20 inhibit_rules: ## 抑制规则配置
21 - source_match:
22 severity: 'critical'
23 target_match:
24 severity: 'warning'
25 equal: ['alertname', 'dev', 'instance']
返回目录
4. 启动 node-exporter
## 映射目标服务器响应的状态文件,用于收集服务器 CPU、内存、网络等指标
$ docker run --name node-exporter -d -p 9100:9100 -v "/proc:/host/proc:ro" -v "/sys:/host/sys:ro" -v "/:/rootfs:ro" --net="host" prom/node-exporter
## 启动完成后,浏览器访问:http://<IP>:9100/metrics 打开 Graph 搜索栏输入 node 会出现提示选项,选中任意一项便可查看该项的数据(列表或图形)
返回目录
5. 启动 prometheus
$ docker run --name prometheus -d -p 9090:9090 \
-v /home/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \ ## 挂载 prometheus.yml 静态配置文件
-v /home/prometheus/groups/:/usr/local/prometheus/groups/ \ ## 挂载动态配置文件
-v /home/prometheus/rules/:/usr/local/prometheus/rules/ \ ## 挂载 Alertmanager 告警规则文件
prom/prometheus:latest
## 启动完成后,浏览器访问:http://<ip>:9090 即可打开默认的 UI 页面;
## 在 Status 下的 Targets 可以看到添加在 prometheus.yml 和 node.json 中的项目;
## 在 Status 下的 Rules 可以看到添加在 node-up.rules 中的规则;
返回目录
6. 启动 alertmanager
## 将本地配置文件 /home/prometheus/alertmanager.yml 挂载到容器内指定位置(/etc/alertmanager/alertmanager.yml)
$ docker run -d --name alertmanager -p 9093:9093 -v /home/prometheus/alertmanager.yml:/etc/alertmanager/alertmanager.yml prom/alertmanager
返回目录
7. 启动 pushgateway
$ docker run --name pushgateway -d -p 9091:9091 prom/pushgateway
返回目录
8. EMQ 监控数据推送到 pushgateway
## /home/prometheus/prometheus.yml 文件中添加“EMQ X Pushgateway 监控”
## EMQ X Dashboard 中启动 emqx_statsd 插件
## 在 Prometheus 主页中查看 EMQ 相关监控数据
返回目录
9. 配置 Grafana 显示
$ docker run -d --name grafana -p 3000:3000 grafana/grafana
## 启动成功后,浏览器访问 http://<ip>:3000 打开 Dashboard 控制台。
(1)添加源:
## Configuration -> DATA SOURCES -> Prometheus
## HTTP -> URL -> http://<ip>:9090
(2)导入自带模板:
## Data Sources/Prometheus -> Dashboards -> 导入: Prometheus Stats
Prometheus 2.0 Stats
Grafana metrics (需要在 prometheus.yml 中添加相应 job)
(3)导入 Grafana 监控系统指标模板:
## Grafana 官网下载:https://grafana.com/grafana/dashboards (搜索 1 Node Exporter)
## “+” -> import -> Upload JSON file 导入下载到的 JSON 文件即可