提示:本文原创作品,良心制作,干货为主,简洁清晰,一看就会
文章目录
- 前言
- 一、安装Docker
- 二、安装Docker-compose
- 三、Docker-compose安装Prometheus
-
- [3.1 创建alertmanager的配置文件](#3.1 创建alertmanager的配置文件)
- [3.2 创建grafana的配置文件](#3.2 创建grafana的配置文件)
- [3.3 创建prometheus的配置文件](#3.3 创建prometheus的配置文件)
- [3.4 创建alert报警文件](#3.4 创建alert报警文件)
- [3.5 创建docker-compose.yaml](#3.5 创建docker-compose.yaml)
- [3.6 网页登录](#3.6 网页登录)
- 四、使用Grafana展示Prometheus
-
- [4.1 导入prometheus数据源](#4.1 导入prometheus数据源)
- [4.2 创建dashboard](#4.2 创建dashboard)
前言
随着容器化技术普及,Docker部署服务愈发便捷高效。相较于传统二进制安装,使用Docker容器部署Prometheus监控组件,无需繁琐配置环境,一键拉起服务,部署速度快、隔离性强且迁移维护简单。本文将详细讲解通过Docker方式,一站式完成Prometheus、Alertmanager、Grafana与node-exporter的搭建部署,搭配完整配置实操,轻松搭建稳定好用的容器化监控平台
一、安装Docker
本文不再赘述 Docker 安装步骤,有需要的同学可参考下方教程的1.1小节,内含 Ubuntu 与 CentOS 系统完整的 Docker 部署流程https://blog.csdn.net/m0_63756214/article/details/158650241?spm=1001.2014.3001.5501
yaml
# 安装好的docker
root@prometheus:~# docker --version
Docker version 24.0.2, build cb74dfc
二、安装Docker-compose
本文不再赘述 Docker-compose安装步骤,有需要的同学可参考下方教程的2.1小节
https://blog.csdn.net/m0_63756214/article/details/159487599?spm=1001.2014.3001.5501
yaml
# 安装好的docker-compose
root@prometheus:~# docker-compose version
Docker Compose version v2.38.0
root@prometheus:~#
三、Docker-compose安装Prometheus
yaml
# 先创建一个grafana,prometheus,alertmanager的yaml文件存放目录
root@prometheus:~# mkdir -p /opt/prometheus
root@prometheus:~# mkdir -p /opt/prometheus/{grafana,prometheus,alertmanager}
root@prometheus:~# ls /opt/prometheus/
alertmanager grafana prometheus
3.1 创建alertmanager的配置文件
yaml
root@prometheus:~# vim /opt/prometheus/alertmanager/config.yml
global:
#163服务器
smtp_smarthost: 'smtp.163.com:465'
#发邮件的邮箱
smtp_from: '*****@163.com'
#发邮件的邮箱用户名,也就是你的邮箱
smtp_auth_username: '*****@163.com'
#发邮件的邮箱授权码
smtp_auth_password: '*****'
#进行tls验证
smtp_require_tls: true
route:
group_by: ['alertname']
# 当收到告警的时候,等待group_wait配置的时间,看是否还有告警,如果有就一起发出去
group_wait: 10s
# 如果上次告警信息发送成功,此时又来了一个新的告警数据,则需要等待group_interval配置的时间才可以发送出去
group_interval: 10s
# 如果上次告警信息发送成功,且问题没有解决,则等待 repeat_interval配置的时间再次发送告警数据
repeat_interval: 10m
# 全局报警组,这个参数是必选的
receiver: email
receivers:
- name: 'email'
#收邮件的邮箱
email_configs:
- to: '*****@163.com'
#当告警恢复后,是否发送邮件
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
3.2 创建grafana的配置文件
yaml
root@prometheus:~# vim /opt/prometheus/grafana/config.monitoring
GF_SECURITY_ADMIN_PASSWORD=Qing@123 # 待会登录grafana就用这个密码
GF_USERS_ALLOW_SIGN_UP=false
3.3 创建prometheus的配置文件
yaml
root@prometheus:~# vim /opt/prometheus/prometheus/prometheus.yml
# 全局配置
global:
scrape_interval: 15s # 将搜刮间隔设置为每15秒一次。默认是每1分钟一次。
evaluation_interval: 15s # 每15秒评估一次规则。默认是每1分钟一次。
# Alertmanager 配置
alerting:
alertmanagers:
- static_configs:
- targets: ['alertmanager:9093']
# 报警(触发器)配置
rule_files:
- "alert.yml"
# 搜刮配置
scrape_configs:
- job_name: 'prometheus'
# 覆盖全局默认值,每15秒从该作业中刮取一次目标
scrape_interval: 15s
static_configs:
- targets: ['localhost:9090']
- job_name: 'alertmanager'
scrape_interval: 15s
static_configs:
- targets: ['alertmanager:9093']
- job_name: 'cadvisor'
scrape_interval: 15s
static_configs:
- targets: ['cadvisor:8080']
labels:
instance: Prometheus服务器
- job_name: 'node-exporter'
scrape_interval: 15s
static_configs:
- targets: ['node_exporter:9100']
labels:
instance: Prometheus服务器
3.4 创建alert报警文件
yaml
root@prometheus:~# vim /opt/prometheus/prometheus/alert.yml
groups:
- name: Prometheus alert
rules:
# 对任何实例超过30秒无法联系的情况发出警报
- alert: 服务告警
expr: up == 0
for: 30s
labels:
severity: critical
annotations:
summary: "服务异常,实例:{{ $labels.instance }}"
description: "{{ $labels.job }} 服务已关闭"
3.5 创建docker-compose.yaml
yaml
root@prometheus:~# vim /opt/prometheus/docker-compose.yaml
version: '3.8' # 更新版本
volumes:
prometheus_data: {}
grafana_data: {}
alertmanager_data: {}
networks:
monitoring:
driver: bridge
services:
prometheus:
image: prom/prometheus:v3.5.3
container_name: prometheus
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
- ./prometheus/:/etc/prometheus/
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/usr/share/prometheus/console_libraries'
- '--web.console.templates=/usr/share/prometheus/consoles'
- '--web.enable-lifecycle'
- '--storage.tsdb.retention.time=30d'
networks:
- monitoring
ports:
- 9090:9090
alertmanager:
image: prom/alertmanager:v0.32.1
container_name: alertmanager
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
- ./alertmanager/:/etc/alertmanager/
- alertmanager_data:/alertmanager # 持久化
command:
- '--config.file=/etc/alertmanager/config.yml'
- '--storage.path=/alertmanager'
networks:
- monitoring
ports:
- 9093:9093
# 采集容器指标:收集每个容器的资源占用、哪个容器异常、容器内部的文件系统使用情况等
cadvisor:
image: google/cadvisor:latest
container_name: cadvisor
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
networks:
- monitoring
# expose 可选,若需宿主机访问可加 ports: - 8080:8080
expose:
- '8080'
# 只能看到整台机器的 CPU、内存总量,无法区分是哪个容器消耗的
node_exporter:
image: prom/node-exporter:v1.11.1
container_name: node-exporter
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc|rootfs/var/lib/docker)($$|/)'
networks:
- monitoring
ports:
- '9100:9100'
grafana:
image: grafana/grafana:13.0.1
container_name: grafana
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
- grafana_data:/var/lib/grafana
- ./grafana/provisioning/:/etc/grafana/provisioning/
env_file:
- ./grafana/config.monitoring # 确保此文件存在
networks:
- monitoring
ports:
- 3000:3000
depends_on:
- prometheus
yaml
# 启动docker-compose
root@prometheus:~# cd /opt/prometheus/
root@prometheus:/opt/prometheus# docker-compose up -d
root@prometheus:/opt/prometheus# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f3898cd233fc grafana/grafana:13.0.1 "/run.sh" 14 seconds ago Up 11 seconds 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp grafana
2cd41dcfc974 prom/alertmanager:v0.32.1 "/bin/alertmanager -..." 15 seconds ago Up 10 seconds 0.0.0.0:9093->9093/tcp, :::9093->9093/tcp alertmanager
2cdc676f5778 prom/node-exporter:v1.11.1 "/bin/node_exporter ..." 15 seconds ago Up 12 seconds 0.0.0.0:9100->9100/tcp, :::9100->9100/tcp node-exporter
4464bb40da83 google/cadvisor:latest "/usr/bin/cadvisor -..." 15 seconds ago Up 13 seconds 8080/tcp cadvisor
74d11263e24c prom/prometheus:v3.5.3 "/bin/prometheus --c..." 15 seconds ago Up 11 seconds 0.0.0.0:9090->9090/tcp, :::9090->9090/tcp prometheus
3.6 网页登录
web访问地址
| 应用 | 访问地址 | 我的地址 |
|---|---|---|
| Prometheus | Prometheus ip:9090 |
192.168.13.141:9090 |
| Grafana | Grafana ip:3000 |
192.168.13.141:3000 |
| Alertmanager | Alertmanager ip:9093 |
192.168.13.141:9093 |
| node-exporter | node-exporter ip:9100/metrics |
192.168.13.141:9100/metrics |
Prometheus页面

Alertmanager 页面

node-exporter页面

Grafana页面

四、使用Grafana展示Prometheus
4.1 导入prometheus数据源
登录grafana,导入prometheus数据源



下拉点击"Save"保存
4.2 创建dashboard
grafana官网:https://grafana.com/grafana/dashboards/
登录grafana官网,找到node exporter,点击

拷贝ID




下面就是创建好的dashboard

至此,Prometheus 容器安装方式到此结束!
注:
文中若有疏漏,欢迎大家指正赐教。
本文为100%原创,转载请务必标注原创作者,尊重劳动成果。
求赞、求关注、求评论!你的支持是我更新的最大动力,评论区等你~