零基础容器化部署 Prometheus+Grafana 监控(单节点离线生产版)
一、文档概述
本文档为企业生产级单节点监控 Docker 容器化****部署手册,摒弃传统二进制裸机部署方式,采用 Dockerfile 自定义构建纯净监控镜像,无第三方冗余依赖、适配私有化离线部署场景。
本次部署完全兼容 CentOS、Rocky Linux、RHEL 全系服务器,适配企业机房物理机、虚拟机、K8s 集群底层资源监控场景,是中小企业标准化、可复用、可迁移的容器化监控架构方案。
整体采用单节点架构:Prometheus、Alertmanager、Grafana、Node Exporter 四大核心组件以容器化方式部署,统一版本管控、统一容器生命周期管理,支持批量迁移、快速扩容、环境一致性复用,解决传统二进制部署环境杂乱、迁移繁琐、版本不统一的痛点。
二、本次部署固定生产稳定版本
沿用官方无 Bug 生产稳定版,社区成熟、适配性强、线上零故障,所有组件版本与原生二进制生产版本对齐,保证监控逻辑、指标采集、告警规则完全兼容:
-
prometheus-3.13.2.linux-amd64.tar.gz(监控核心+时序数据库)
-
node_exporter-1.12.1.linux-amd64.tar.gz(服务器资源指标采集客户端)
-
grafana-13.1.2.linux-amd64.tar.gz(运维可视化大屏)
-
alertmanager-0.33.1.linux-amd64.tar.gz(企业级告警统一管理组件)
三、容器化监控架构说明
3.1 数据流转架构(企业标准)
业务服务器 Node Exporter 容器/进程 → Prometheus 容器(定时抓取指标、存储时序数据、规则校验)→ Alertmanager 容器(告警分组、降噪、抑制、分发)→ Grafana 容器(可视化展示、大屏渲染、数据报表)
3.2 容器化架构核心优势(对比二进制部署)
-
环境隔离:所有监控组件容器化运行,不污染宿主机环境,无端口、依赖冲突风险
-
版本统一:Dockerfile 固化组件版本,任意服务器构建部署环境完全一致
-
离线复用:构建完成可导出镜像,支持离线批量部署、灾备快速恢复
-
运维极简:统一 Docker 命令管理启停、重启、日志查看,无需复杂 systemd 配置
-
安全合规:容器内最小权限运行,贴合企业等保安全规范
-
可迁移性强:镜像可跨服务器、跨集群迁移,适配云服务器、物理机、容器集群
四、部署环境前置准备
4.1 基础环境要求
-
操作系统:CentOS 7/8、Rocky Linux、RHEL 全系
-
运行环境:Docker 20.10+、Docker Compose(可选)
-
部署架构:单节点容器化部署(所有监控中心组件部署于同一监控服务器)
-
网络要求:服务器内网端口通畅,关闭防火墙/放行监控端口
4.2 环境初始化(生产必备)
4.2.1 关闭防火墙与SELinux
监控服务多端口通信,关闭拦截策略,避免容器端口映射失败、指标采集超时、接口访问异常
# 关闭并禁用防火墙
systemctl stop firewalld && systemctl disable firewalld
# 临时关闭SELinux
setenforce 0
# 永久关闭SELinux(重启生效)
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
4.2.2 安装Docker环境
若无Docker环境,执行以下命令安装官方稳定版Docker
# 安装依赖
yum install -y yum-utils
# 配置Docker官方源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装Docker核心组件
yum install -y docker-ce docker-ce-cli containerd.io
# 启动Docker并设置开机自启
systemctl start docker && systemctl enable docker
# 验证Docker版本
docker --version
4.2.3 创建统一部署目录
规范生产目录结构,统一存放Dockerfile、配置文件、离线安装包、容器数据挂载目录
mkdir -p /opt/monitor/docker/{prometheus,alertmanager,grafana,node_exporter}
cd /opt/monitor/docker
4.3 离线包准备(公网/离线通用)
将所有组件官方稳定包下载至 /opt/monitor/docker 对应的目录,支持公网wget下载或网盘离线获取
# Prometheus核心包
wget https://github.com/prometheus/prometheus/releases/download/v3.13.2/prometheus-3.13.2.linux-amd64.tar.gz
# Node Exporter采集包
wget https://github.com/prometheus/node_exporter/releases/download/v1.12.1/node_exporter-1.12.1.linux-amd64.tar.gz
# Alertmanager告警包
wget https://github.com/prometheus/alertmanager/releases/download/v0.33.1/alertmanager-0.33.1.linux-amd64.tar.gz
# Grafana可视化包
wget https://dl.grafana.com/oss/release/grafana-13.1.2.linux-amd64.tar.gz
离线备选网盘资源:我的百度网盘链接: https://pan.baidu.com/s/19h3Lx4fRbZX0mbdfdGuCqA?pwd=jup2 提取码: jup2
五、各组件 Dockerfile 镜像构建(企业生产级)
本次采用rockylinux:10.0基础镜像构建
5.1 Node Exporter 容器镜像构建
5.1.1 编写Dockerfile
全程用的 rockylinux:10.0 镜像, 请先 pull 到本地
cd /opt/monitor/docker/node_exporter
cat > Dockerfile << EOF
# 基础镜像
FROM rockylinux:10.0
# 维护者
LABEL maintainer="Prometheus Node Exporter"
# 工作目录
WORKDIR /opt
# 拷贝离线安装包
ADD node_exporter-1.12.1.linux-amd64.tar.gz .
# 修改目录名称
RUN mv node_exporter-1.12.1.linux-amd64 node_exporter \
&& useradd -M -s /sbin/nologin prometheus \
&& chown -R prometheus:prometheus /opt/node_exporter/
# 暴露端口
EXPOSE 9100
# 切换用户
USER prometheus
# 容器启动
CMD ["/opt/node_exporter/node_exporter"]
EOF
5.1.2 构建镜像
# 上传node_exporter离线包至当前目录后执行构建
docker build -t node-exporter:V1.12.1 .
# 验证镜像
docker images | grep node-exporter
5.1.3、运行镜像
[root@prometheus node_exporter]# docker run -d --name node_exporter --restart always -p 9100:9100 node-exporter:V1.12.1
浏览器访问

5.2 Alertmanager 容器镜像构建
5.2.1 编写配置文件
cd /opt/monitor/docker/alertmanager
cat > alertmanager.yml << EOF
global:
resolve_timeout: 5m
smtp_smarthost: 'smtp.163.com:465'
smtp_from: '158*****624@163.com'
smtp_auth_username: '158****24@163.com'
smtp_auth_password: '自己的校验码'
smtp_require_tls: true
smtp_hello: '163.com'
route:
group_by: ['alertname','instance','severity']
group_wait: 10s
group_interval: 10s
repeat_interval: 30m
receiver: 'email-receiver'
receivers:
- name: 'email-receiver'
email_configs:
- to: '158***5624@163.com'
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname','instance']
EOF
5.2.2 编写Dockerfile
cat > Dockerfile << EOF
FROM rockylinux:10.0
LABEL maintainer="Prometheus Alertmanager"
WORKDIR /opt
ADD alertmanager-0.33.1.linux-amd64.tar.gz .
RUN mv alertmanager-0.33.1.linux-amd64 alertmanager \
&& useradd -M -s /sbin/nologin prometheus \
&& chown -R prometheus:prometheus alertmanager \
&& mkdir -p alertmanager/data
COPY alertmanager.yml /opt/alertmanager/
EXPOSE 9093 9094
USER prometheus
CMD ["/opt/alertmanager/alertmanager","--config.file=/opt/alertmanager/alertmanager.yml","--storage.path=/opt/alertmanager/data","--cluster.advertise-address=0.0.0.0:9094"]
EOF
5.2.3 构建镜像
docker build -t alertmanager:v0.33.1 .
docker images | grep alertmanager
5.2.4、 启动容器
-
创建持久化目录
mkdir -p /opt/monitor/docker/alertmanager/data -
跑容器
docker run -d \ --name alertmanager \ --restart always \ -p 9093:9093 \ alertmanager:v0.33.1 -
查看端口
[root@prometheus alertmanager]# netstat -ntulp | grep 9093 -
浏览器访问

5.3 Prometheus 容器镜像构建
5.3.1 编写核心配置文件
cd /opt/monitor/docker/prometheus
cat > prometheus.yml << EOF
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets:
- 127.0.0.1:9093
rule_files:
- "rules/node-rule.yml"
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["127.0.0.1:9091"]
- job_name: "node-exporters"
static_configs:
- targets: [ "192.48.75.190:9100" ]
EOF
5.3.2、编写 Prometheus 告警规则文件
新建主机监控告警规则文件:/opt/monitor/prometheus/rules/node-rule.yml
# 创建目录
[root@prometheus prometheus]# mkdir -p /opt/monitor/docker/prometheus/rules/
[root@prometheus prometheus]# vim mkdir -p /opt/monitor/docker/prometheus/rules/node-rule.yml
groups:
- name: node-cpu-alert-rule
rules:
# 服务器CPU使用率超载告警(企业通用阈值)
- alert: ServerHighCpuUsage
# PromQL语句:统计1分钟平均CPU使用率,空闲CPU低于30%即使用率超70%,触发告警
expr: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[1m])) * 100) > 70
# 持续20秒超载才触发告警,过滤瞬时CPU波动,降低误告警率
for: 20s
labels:
severity: warning
annotations:
summary: "主机 {{ $labels.instance }} CPU使用率超载"
description: "主机当前CPU使用率为 {{ $value }}%,持续高于70%阈值,存在业务卡顿、性能过载风险!"
5.3.3 编写Dockerfile
cat > Dockerfile << EOF
FROM rockylinux:10.0
LABEL maintainer="prometheus"
WORKDIR /opt
ADD prometheus-3.13.2.linux-amd64.tar.gz .
RUN mv prometheus-3.13.2.linux-amd64 prometheus \
&& useradd -M -s /sbin/nologin prometheus \
&& chown prometheus:prometheus -R prometheus \
&& mkdir -p prometheus/rules \
&& chown prometheus:prometheus -R prometheus/rules \
&& mkdir -p prometheus/data \
&& chown prometheus:prometheus -R prometheus/data
COPY prometheus.yml /opt/prometheus/
COPY rules/node-rule.yml /opt/prometheus/rules/
EXPOSE 9090
USER prometheus
CMD ["/opt/prometheus/prometheus","--config.file=/opt/prometheus/prometheus.yml","--storage.tsdb.path=/opt/prometheus/data","--storage.tsdb.retention.time=15d","--web.enable-lifecycle","--web.listen-address=0.0.0.0:9091"]
EOF
5.3.4 构建镜像
docker build -t prometheus:v3.13.2 .
docker images | grep prometheus
5.3.5、启动容器
- 跑容器
docker run -d \
--name prometheus \
--restart always \
-p 9091:9091 \
prometheus:v3.13.2
- 检查容器
[root@prometheus prometheus]# netstat -ntulp | grep 9091
- 浏览器访问

5.4 Grafana 容器镜像构建
5.4.1 编写配置文件
cd /opt/monitor/docker/grafana
cat > grafana.ini << EOF
[server]
http_addr = 0.0.0.0
http_port = 3000
[paths]
data = /opt/grafana/data
logs = /opt/grafana/logs
plugins = /opt/grafana/plugins
EOF
5.4.2 编写Dockerfile
cat > Dockerfile << EOF
FROM rockylinux:10.0
LABEL maintainer="Prometheus Dockerfile"
WORKDIR /opt/grafana
ADD grafana-13.1.2.linux-amd64.tar.gz .
RUN mv grafana-13.1.2/* . \
&& rmdir grafana-13.1.2 \
&& useradd -M -s /sbin/nologin grafana \
&& mkdir -p /opt/grafana/{data,logs,plugins,config} \
&& chown grafana:grafana -R /opt/grafana
COPY grafana.ini /opt/grafana/config/
EXPOSE 3000
USER grafana
# 直接启动,不需要GF_PATHS_HOME、不需要--homepath
CMD ["/opt/grafana/bin/grafana","server","--config=/opt/grafana/config/grafana.ini"]
EOF
5.4.3 构建镜像
docker build -t grafana:v13.1.2 .
docker images | grep grafana
5.4.4、启动容器
- 把容器跑起来
docker run -d \
--name grafana \
--restart always \
-p 3000:3000 \
grafana:v13.1.2
- 检测是否启动成功
[root@prometheus grafana]# netstat -ntulp | grep 3000
- 浏览器访问

默认用户名admin , 密码 admin
进入系统之后, 会要求修改密码 ; 我设置的是 Grafana123

界面



浙公网安备 33010602011771号