零基础容器化部署 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 

浏览器访问

image


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
    
  • 浏览器访问

    image


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
  • 浏览器访问

image


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
  • 浏览器访问

image

默认用户名admin , 密码 admin

进入系统之后, 会要求修改密码 ; 我设置的是 Grafana123

image

界面

image
image

posted @ 2026-08-13 17:43  Docker-沫老师  阅读(19)  评论(0)    收藏  举报