Prometheus、Cadvisor和Grafana体系完整学习手册

一、部署基础信息(核心参数汇总)

1. 目录规划(数据与程序分离)

  • 根目录:/data(建议挂载独立磁盘,便于扩容)

  • 子目录创建命令:

    复制代码
    mkdir -p /data/{prometheus,grafana,alertmanager,node_exporter,blackbox_exporter,mysqld_exporter}
  • 目录用途:所有组件的安装文件、配置、数据均存储在对应子目录,权限统一归属prometheus用户。不再列举每个service都要创建用户,也可以不创建都用root用户执行

2. 核心组件版本与下载地址

组件名称 版本号 下载地址 默认端口 核心功能
Prometheus 2.53.4 https://github.com/prometheu​​​​​​s/prometheus/releases/downloa d/v2.53.4/prometheus-2.53.4.li nux-amd64.tar.gz 9090 核心监控引擎(拉取 / 存储 / 分析指标)
Grafana(企业版) 11.5.3 https://dl.grafana.com/enterpris e/release/grafana-enterprise-1 1.5.3.linux-amd64.tar.gz 3000 可视化面板
Alertmanager 0.28.1 ​​​​​​https://github.com/prometheus/ alertmanager/releases/download/v0.28.1/alertmanager-0.28.1.linux-amd64.tar.gz 9093 告警管理(分发 / 聚合 / 抑制)
node_exporter 1.9.0 https://github.com/prometheus/node_exporter/releases/download/v1.9.0/node_exporter-1.9.0.linux-amd64.tar.gz 9100 主机指标采集(CPU / 内存 / 磁盘)
cadvisor v0.47.0 无需手动下载(Docker 部署:google/cadvisor:v0.47.0 8080 容器指标采集
blackbox_exporter 0.25.0 https://github.com/prometheus/blackbox_exporter/releases/download/v0.25.0/blackbox_exporter-0.25.0.linux-amd64.tar.gz 9115 黑盒监控(HTTP/TCP/ICMP)
mysqld_exporter 0.15.1 https://github.com/prometheus/mysqld_exporter/releases/download/v0.15.1/mysqld_exporter-0.15.1.linux-amd64.tar.gz 9104 MySQL 指标采集

3. 前置准备(必做)

复制代码
# 1. 安装基础依赖
yum install -y wget tar vim docker  # 含Docker(用于cadvisor)

# 2. 创建专用用户(无登录权限)不再列举每个service都要创建,也可以不创建都用root执行
useradd -M -s /sbin/nologin prometheus

# 3. 放行核心端口(CentOS/RHEL)
firewall-cmd --add-port={9090,9093,9100,3000,8080,9115,9104}/tcp --permanent
firewall-cmd --reload

# 4. 启动Docker(用于cadvisor)
systemctl enable --now docker

# 5. 切换工作目录
cd /data

二、核心组件部署步骤(完整命令)

1. Prometheus(监控核心)

复制代码
# 1. 下载解压
wget https://github.com/prometheus/prometheus/releases/download/v2.53.4/prometheus-2.53.4.linux-amd64.tar.gz
tar -xvf prometheus-2.53.4.linux-amd64.tar.gz
mv prometheus-2.53.4.linux-amd64/* /data/prometheus

# 2. 权限配置
chown -R prometheus.prometheus /data/prometheus

# 3. 创建systemd服务
cat >> /etc/systemd/system/prometheus.service << EOF
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/docs
After=network.target

[Service]
User=prometheus
Group=prometheus
Restart=on-failure
ExecStart=/data/prometheus/prometheus \
  --config.file=/data/prometheus/prometheus.yml \
  --storage.tsdb.path=/data/prometheus/data \
  --storage.tsdb.retention.time=15d \
  --web.enable-lifecycle

[Install]
WantedBy=multi-user.target
EOF

# 4. 启动验证
systemctl daemon-reload
systemctl enable --now prometheus.service
systemctl status prometheus.service
curl http://10.0.0.104:9090  # 访问成功即正常

2. Alertmanager(告警管理)

复制代码
# 1. 下载解压
wget https://github.com/prometheus/alertmanager/releases/download/v0.28.1/alertmanager-0.28.1.linux-amd64.tar.gz
tar -xvf alertmanager-0.28.1.linux-amd64.tar.gz
mv alertmanager-0.28.1.linux-amd64/* /data/alertmanager

# 2. 权限配置
chown -R prometheus.prometheus /data/alertmanager

# 3. 创建systemd服务
cat >> /etc/systemd/system/alertmanager.service << EOF
[Unit]
Description=Alert Manager
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
ExecStart=/data/alertmanager/alertmanager \
  --config.file=/data/alertmanager/alertmanager.yml \
  --storage.path=/data/alertmanager/data
Restart=always

[Install]
WantedBy=multi-user.target
EOF

# 4. 启动验证
systemctl daemon-reload
systemctl enable --now alertmanager.service
systemctl status alertmanager.service
curl http://10.0.0.104:9093  # 访问成功即正常

3. node_exporter(主机监控)

复制代码
# 1. 下载解压
wget https://github.com/prometheus/node_exporter/releases/download/v1.9.0/node_exporter-1.9.0.linux-amd64.tar.gz
tar -xvf node_exporter-1.9.0.linux-amd64.tar.gz
mv node_exporter-1.9.0.linux-amd64/* /data/node_exporter

# 2. 权限配置
chown -R prometheus.prometheus /data/node_exporter

# 3. 创建systemd服务
cat >> /etc/systemd/system/node_exporter.service << EOF
[Unit]
Description=node_exporter
Documentation=https://prometheus.io/
After=network.target

[Service]
User=prometheus
Group=prometheus
ExecStart=/data/node_exporter/node_exporter
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

# 4. 启动验证
systemctl daemon-reload
systemctl enable --now node_exporter.service
curl http://10.0.0.104:9100/metrics  # 输出指标即正常

4. Grafana(可视化)

复制代码
# 1. 下载解压
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-11.5.3.linux-amd64.tar.gz
tar -xvf grafana-enterprise-11.5.3.linux-amd64.tar.gz
mv grafana-enterprise-11.5.3.linux-amd64/* /data/grafana

# 2. 权限配置
chown -R prometheus.prometheus /data/grafana

# 3. 创建systemd服务
cat >> /etc/systemd/system/grafana-server.service << EOF
[Unit]
Description=Grafana server
Documentation=http://docs.grafana.org

[Service]
User=prometheus
Group=prometheus
Restart=on-failure
ExecStart=/data/grafana/bin/grafana-server --config=/data/grafana/conf/defaults.ini --homepath=/data/grafana

[Install]
WantedBy=multi-user.target
EOF

# 4. 启动验证
systemctl daemon-reload
systemctl enable --now grafana-server.service
curl http://10.0.0.104:3000  # 访问成功即正常(默认账号admin/admin)

5. cadvisor(容器监控)

复制代码
docker run -d \
  --name=cadvisor \
  --net=host \
  --privileged=true \
  -v /:/rootfs:ro \
  -v /var/run:/var/run:rw \
  -v /sys:/sys:ro \
  -v /var/lib/docker/:/var/lib/docker:ro \
  --restart=always \
  google/cadvisor:v0.47.0

# 验证
curl http://10.0.0.104:8080/metrics  # 输出容器指标即正常

6. blackbox_exporter(黑盒监控)

复制代码
# 1. 下载解压
wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.25.0/blackbox_exporter-0.25.0.linux-amd64.tar.gz
tar -xvf blackbox_exporter-0.25.0.linux-amd64.tar.gz
mv blackbox_exporter-0.25.0.linux-amd64/* /data/blackbox_exporter

# 2. 配置监控模块
cat > /data/blackbox_exporter/blackbox.yml << EOF
modules:
  http_2xx:  # HTTP接口监控
    prober: http
    timeout: 5s
    http:
      valid_status_codes: [200,201,204]
  tcp_connect:  # TCP端口监控
    prober: tcp
    timeout: 5s
  icmp:  # ICMP ping监控
    prober: icmp
    timeout: 5s
EOF

# 3. 权限配置
chown -R prometheus.prometheus /data/blackbox_exporter

# 4. 创建systemd服务
cat >> /etc/systemd/system/blackbox_exporter.service << EOF
[Unit]
Description=Blackbox Exporter
After=network.target

[Service]
User=prometheus
Group=prometheus
ExecStart=/data/blackbox_exporter/blackbox_exporter --config.file=/data/blackbox_exporter/blackbox.yml
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

# 5. 启动验证
systemctl daemon-reload
systemctl enable --now blackbox_exporter.service
curl http://10.0.0.104:9115/metrics  # 输出指标即正常

7. mysqld_exporter(MySQL 监控)

复制代码
# 1. 下载解压
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.15.1/mysqld_exporter-0.15.1.linux-amd64.tar.gz
tar -xvf mysqld_exporter-0.15.1.linux-amd64.tar.gz
mv mysqld_exporter-0.15.1.linux-amd64/* /data/mysqld_exporter

# 2. 创建MySQL监控用户
mysql -uroot -p
CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'Exporter@123';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
FLUSH PRIVILEGES;
exit

# 3. 配置连接信息
cat > /data/mysqld_exporter/.my.cnf << EOF
[client]
user=exporter
password=Exporter@123
host=localhost
EOF

# 4. 权限配置
chown -R prometheus.prometheus /data/mysqld_exporter

# 5. 创建systemd服务
cat >> /etc/systemd/system/mysqld_exporter.service << EOF
[Unit]
Description=MySQL Exporter
After=network.target

[Service]
User=prometheus
Group=prometheus
Environment=DATA_SOURCE_NAME=exporter:Exporter@123@(localhost:3306)/
ExecStart=/data/mysqld_exporter/mysqld_exporter --config.my-cnf=/data/mysqld_exporter/.my.cnf
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

# 6. 启动验证
systemctl daemon-reload
systemctl enable --now mysqld_exporter.service
curl http://10.0.0.104:9104/metrics  # 输出MySQL指标即正常

三、监控核心配置(监控什么?怎么配?)

1. 核心监控对象与指标

监控维度 监控内容 对应组件 核心指标示例
主机层面 CPU、内存、磁盘 IO、网络、负载、磁盘使用率 node_exporter node_cpu_usagenode_memory_usage
容器层面 容器 CPU / 内存 / 磁盘、状态、镜像占用 cadvisor container_cpu_usage_seconds_total
服务层面 接口存活、端口监听、响应耗时 blackbox_exporter probe_successhttp_request_duration_seconds
数据库层面 连接数、QPS、慢查询、表空间 mysqld_exporter mysql_connected_clientsmysql_slow_queries
中间件层面 Nginx 连接数、Kafka 消费延迟、Redis 命中率 专属 Exporter(如 nginx_exporter) nginx_http_requests_totalredis_keyspace_hits
应用层面 JVM 内存、线程、接口调用量 jmx_exporter jvm_memory_used_bytes

2. Prometheus 核心配置(prometheus.yml)

完整配置示例
复制代码
global:
  scrape_interval: 1m          # 默认拉取频率
  evaluation_interval: 1m      # 告警规则评估频率
  external_labels:             # 全局标签(区分环境/集群)
    env: "production"
    cluster: "prod-cluster"

# 对接Alertmanager
alerting:
  alertmanagers:
    - static_configs:
        - targets: ["10.0.0.104:9093"]
      timeout: 10s

# 告警规则文件
rule_files:
  - "/data/alertmanager/rule/*.yml"

# 指标拉取配置(核心)
scrape_configs:
  # 1. 监控自身
  - job_name: "prometheus"
    static_configs:
      - targets: ["10.0.0.104:9090"]

  # 2. 主机监控
  - job_name: "node_exporter"
    scrape_interval: 15s        # 覆盖全局拉取频率
    static_configs:
      - targets: ["10.0.0.104:9100", "10.0.0.105:9100"]
        labels:
          group: "web-server"

  # 3. 容器监控
  - job_name: "cadvisor"
    scrape_interval: 15s
    static_configs:
      - targets: ["10.0.0.104:8080"]

  # 4. HTTP接口监控(blackbox)
  - job_name: "blackbox_http"
    scrape_interval: 10s
    metrics_path: /probe
    params:
      module: [http_2xx]
    static_configs:
      - targets: ["http://10.0.0.104:80", "http://10.0.0.104:8080/api/health"]
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 10.0.0.104:9115

  # 5. TCP端口监控(blackbox)
  - job_name: "blackbox_tcp"
    scrape_interval: 10s
    metrics_path: /probe
    params:
      module: [tcp_connect]
    static_configs:
      - targets: ["10.0.0.104:3306", "10.0.0.104:6379"]
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 10.0.0.104:9115

  # 6. MySQL监控
  - job_name: "mysql_exporter"
    scrape_interval: 15s
    static_configs:
      - targets: ["10.0.0.104:9104"]
配置语法核心说明
配置节点 核心参数 含义
global scrape_interval 所有 job 默认拉取频率(默认 1m,密集监控可设 15s)
alerting alertmanagers.targets Alertmanager 地址列表
rule_files - 告警规则文件路径(支持通配符)
scrape_configs job_name 监控任务名称(唯一)
static_configs.targets 监控目标(IP: 端口)
labels 自定义标签(用于分类筛选)
relabel_configs 标签重写(清洗 / 添加 / 删除标签)
file_sd_configs 动态发现(适合大量目标,通过文件更新)
配置验证与重载
复制代码
# 1. 语法验证(必做)
cd /data/prometheus
./promtool check config prometheus.yml

# 2. 热重载(推荐,无中断)
curl -X POST http://10.0.0.104:9090/-/reload

# 3. 重启(配置结构变更时用)
systemctl restart prometheus.service

3. 告警规则编写(实战示例)

规则文件目录创建
复制代码
mkdir -p /data/alertmanager/rule
chown -R prometheus.prometheus /data/alertmanager/rule
通用告警规则示例(/data/alertmanager/rule/common.yml)
复制代码
groups:
  - name: 通用监控规则
    rules:
      # 1. 主机宕机
      - alert: 主机宕机
        expr: up == 0
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "{{ $labels.instance }} 主机宕机"
          description: "{{ $labels.instance }} 持续1分钟未响应,请检查服务器状态。"

      # 2. 磁盘使用率过高
      - alert: 磁盘使用率过高
        expr: 100 - (node_filesystem_avail_bytes{fstype=~"ext4|xfs"} / node_filesystem_size_bytes{fstype=~"ext4|xfs"} * 100) > 90
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "{{ $labels.instance }} 磁盘使用率过高"
          description: "分区 {{ $labels.mountpoint }} 使用率达 {{ $value | printf \"%.2f\" }}%,超过90%阈值。"

      # 3. HTTP接口不可用
      - alert: HTTP接口不可用
        expr: probe_success{job="blackbox_http"} == 0
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "{{ $labels.instance }} 接口不可用"
          description: "接口 {{ $labels.instance }} 访问失败,请检查服务。"

      # 4. MySQL连接数过高
      - alert: MySQL连接数过高
        expr: mysql_global_status_threads_connected > 500
        for: 2m
        labels:
          severity: warning
        annotations:
          summary: "{{ $labels.instance }} MySQL连接数过高"
          description: "当前连接数 {{ $value }},超过500阈值。"
Alertmanager 告警渠道配置(邮件示例)
复制代码
# /data/alertmanager/alertmanager.yml
global:
  smtp_smarthost: 'smtp.163.com:25'
  smtp_from: 'your_email@163.com'
  smtp_auth_username: 'your_email@163.com'
  smtp_auth_password: '邮箱授权码'
  smtp_require_tls: false

route:
  group_by: ['alertname']
  group_wait: 10s
  group_interval: 10s
  repeat_interval: 1h
  receiver: 'email-receiver'

receivers:
- name: 'email-receiver'
  email_configs:
  - to: 'admin@example.com'
    subject: '【告警】{{ .CommonLabels.alertname }}'
    html: |
      <h3>告警详情</h3>
      <p>告警名称:{{ .CommonLabels.alertname }}</p>
      <p>级别:{{ .CommonLabels.severity }}</p>
      <p>描述:{{ .CommonAnnotations.description }}</p>
      <p>时间:{{ .StartsAt.Format "2006-01-02 15:04:05" }}</p>

# 抑制规则(避免重复告警)
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname', 'instance']

四、Grafana 可视化配置

1. 对接 Prometheus 数据源

  1. 登录 Grafana(http://10.0.0.104:3000),首次登录修改默认密码;
  2. 左侧菜单栏 → ConnectionsData sourcesAdd data source → 选择Prometheus
  3. 填写URLhttp://10.0.0.104:9090 → 点击Save & test,提示 "Data source is working" 即成功。

2. 导入预制仪表盘

监控场景 仪表盘 ID 导入步骤
Linux 主机详情 12633 左侧DashboardsNewImport → 输入 ID → 选择数据源 → Import
Linux 主机列表 12632 同上
容器监控 893 同上
MySQL 监控 7362 同上

3. 自定义仪表盘

  1. 新建 Dashboard → Add Panel → 选择Prometheus数据源;
  2. 输入 PromQL 查询语句(如node_cpu_usage{instance="10.0.0.104"});
  3. 配置图表类型(折线图 / 柱状图)、阈值标注(如 > 90% 标红);
  4. 保存面板,命名 Dashboard(如 "生产环境主机监控")。

五、PromQL 查询语言核心语法

1. 基础查询

  • 直接查询指标:node_memory_usage(返回所有标签的内存使用率);

  • 标签过滤:node_memory_usage{instance="10.0.0.104",env="production"}

  • 聚合运算:

    复制代码
    sum(node_cpu_usage) by (instance)  # 按实例汇总CPU使用率
    avg(node_disk_usage) by (env)      # 按环境计算平均磁盘使用率
    max(node_load15)                   # 最大15分钟负载

2. 时间范围查询

  • node_load15[5m]:过去 5 分钟的 15 分钟负载;
  • increase(node_http_requests_total[1m]):1 分钟内请求数增量;
  • rate(node_http_requests_total[1m]):1 分钟内请求速率(每秒);
  • irate(node_http_requests_total[10s]):10 秒内瞬时速率(适合高频指标)。

3. 阈值判断

  • node_disk_usage > 90:磁盘使用率超过 90%;
  • probe_success == 0:监控目标不可用;
  • increase(mysql_slow_queries[5m]) > 10:5 分钟慢查询超过 10 个。

六、进阶补充(生产环境必备)

1. 监控数据持久化与扩容

  • 数据保留 :通过--storage.tsdb.retention.time=30d(保留 30 天)或--storage.tsdb.retention.size=100GB(限制 100GB)控制数据量;
  • 扩容方案
    1. /data挂载独立磁盘,定期清理旧数据;
    2. 生产环境用 Thanos 实现数据集群化存储和查询;
    3. 指标分片:按业务 / 环境拆分 Prometheus 实例。

2. 常见问题排查

问题现象 排查步骤
Prometheus 启动失败 1. 检查权限:chown -R prometheus.prometheus /data/prometheus;2. 验证配置:./promtool check config;3. 查看日志:journalctl -u prometheus -f
监控目标显示 DOWN 1. 检查 Exporter 状态:systemctl status xxx_exporter;2. 测试端口连通:telnet IP 端口;3. 防火墙放行端口
告警误触发 1. 增加for持续时间(如 1m→5m);2. 用rate/irate平滑指标;3. 调整阈值适应业务场景
Grafana 无数据 1. 验证数据源连通性;2. 在 Prometheus Graph 中测试 PromQL;3. 检查 targets 状态

3. 性能调优建议

  • Prometheus 调优
    1. 降低非核心指标拉取频率(如从 15s 改为 1m);
    2. 删除无用标签(通过relabel_configslabeldrop);
    3. 限制标签维度(避免单指标标签数超过 10 个);
  • Grafana 调优
    1. 减少面板查询次数(合并重复查询);
    2. 增大查询时间范围步长(如 1m→5m);
    3. 避免使用irate查询长时间段数据。

4. 其他常用 Exporter 扩展

插件名称 监控对象 下载地址(示例版本) 默认端口 核心指标
redis_exporter Redis https://github.com/oliver006 /redis_exporter/releases/downl oad/v1.52.0/redis_exporter-v1.52.0.linux-amd64.tar.gz 9121 redis_connected_clientsredis_keyspace_hits
nginx_exporter Nginx https://github.com/nginxinc/ngi nx-prometheus-exporter/releases/download/v0.11.0/nginx-prometh eus-exporter_0.11.0_linux_amd64.tar.gz 9113 nginx_http_requests_totalnginx_active_connections
jmx_exporter Java 应用 https://repo1.maven.org/maven2/i o/prometheus/jmx/jmx_promethe us_javaagent/0.19.0/jmx_prome theus_javaagent-0.19.0.jar 自定义 jvm_memory_used_bytesjvm_threads_active

七、总结

  1. 核心逻辑:Exporter 采集指标 → Prometheus 拉取 / 存储 → PromQL 分析 → 告警 / 可视化,所有配置需先验证语法再重载;
  2. 部署重点:目录规划(数据与程序分离)、专用用户授权、systemd 服务配置,确保服务可启停、自启动;
  3. 监控配置:按 "主机→容器→服务→数据库" 逐步扩展,通用场景用 blackbox_exporter,专属场景用对应 Exporter;
  4. 进阶关键:掌握 PromQL 实现指标分析,配置告警抑制避免误触发,生产环境做好数据持久化和性能调优。
相关推荐
望云山1902 小时前
ESP32—S3学习--入门五个基础实验
嵌入式硬件·学习
renhongxia12 小时前
学习基于数字孪生的质量预测与控制
人工智能·深度学习·学习·语言模型·自然语言处理·制造
开开心心_Every2 小时前
重复图片智能清理工具:快速查重批量删除
java·服务器·开发语言·前端·学习·edge·powerpoint
开开心心_Every3 小时前
一键隐藏窗口到系统托盘:支持任意软件摸鱼
服务器·前端·python·学习·edge·django·powerpoint
·云扬·3 小时前
ClickHouse监控体系搭建:基于Prometheus+Grafana实现数据可视化
clickhouse·grafana·prometheus
烤麻辣烫3 小时前
Java开发手册规则精选
java·开发语言·学习
AI视觉网奇3 小时前
ue5.5 动画 选取 一段使用
笔记·学习·ue5
世人万千丶3 小时前
鸿蒙跨端框架Flutter学习day 1、变量与基本类型-智能家居监控模型
学习·flutter·ui·智能家居·harmonyos·鸿蒙·鸿蒙系统
阳光九叶草LXGZXJ3 小时前
达梦数据库-学习-41-表大小快速估算
linux·运维·数据库·sql·学习