66 Prometheus监控基础与安装

文章目录

前言

监控系统是运维人员的"眼睛"和"24小时值班保安",本笔记系统化整理了 Prometheus 监控系统的核心概念、部署流程与实用技巧。通过理论阐述和实验操作,掌握从基础架构到高级服务发现的全链路监控能力。内容涵盖 Prometheus 核心原理、组件协作、实战部署(包括服务器、数据库、Nginx 监控)、服务发现机制及可视化展示。

  1. Prometheus是什么
  2. 为什么用Prometheus
  3. 实验环境
  4. 部署Prometheus_Server
  5. 部署Node_Exporter
  6. 监控MySQL
  7. 监控Nginx
  8. 部署Grafana
  9. 服务发现机制
  10. Prometheus的局限

理论部分

1_Prometheus_是什么

Prometheus 是一个开源的服务监控系统和时序数据库,提供通用数据模型和快捷数据采集、存储与查询接口。

1.1_核心概念

数据流向原理
Exporter

cadivor

Pushgateway
告警规则
被监控目标
Prometheus Server
TSDB存储
PromQL查询
Grafana可视化
Alertmanager
告警接收方

1.2_核心特点

特点 含义 比喻
Pull模式 Prometheus主动拉取数据 你去快递柜取件
多维数据模型 同指标可打多个标签 电商筛选商品
PromQL 强大的查询语言 Excel公式
服务发现 自动发现监控目标 云端通讯录

Pull vs Push 模式对比

模式 说明 特点 适用场景
Pull Prometheus主动拉取 周期性拉取,频率可控。 服务器/数据库等长期服务
Push 通过Pushgateway中转推送 随时推送,频率不可控。 短期任务/批处理

1.3_生态组件

① 组件汇总表
组件 位置 主要作用 默认端口 访问地址
Prometheus Server 中心 数据拉取/存储/查询/告警触发 9090 http://IP:9090
├── Retrieval Server内部 通过HTTP拉取指标 - -
├── TSDB Server内部 时序数据库存储指标 - -
├── PromQL Server内部 查询语言分析数据 - -
├── Alerting Server内部 基于规则生成告警 - -
Alertmanager Server外部 告警去重/分组/路由 9093 http://IP:9093
Grafana 最上层 指标可视化仪表盘 3000 http://IP:3000
Exporter 被监控目标旁 转换指标为Prometheus格式 不同类型各异 http://IP:端口/metrics
Pushgateway 底部 接收推送指标的中转站 9101 http://IP:9091
Counsul 服务发现 动态发现监控目标 8500 http://IP:8500
组件详细介绍
Prometheus Server:核心组件,由三部分构成
  • Retrieval:在活跃的 target 主机上抓取监控指标数据
  • Storage:将采集数据存储到磁盘(默认保留15天)
  • PromQL:查询语言模块,用于数据分析和告警判断

Client Library:为应用程序提供原生监控能力的开发库

Exporters

  • Node-Exporter:收集服务器物理指标(指标详情:https://github.com/prometheus/node_exporter)
  • mysqld-exporter:监控MySQL数据库
  • nginx-exporter:监控Nginx服务
  • Kube-State-Metrics:采集Kubernetes资源状态(不存储数据,只提供metrics)
  • cAdvisor:监控容器资源使用(CPU/内存/网络I/O/磁盘I/O)
  • blackbox-exporter:监控业务容器存活性
  • kafka-exporter:监控Kafka指标

Service Discovery:支持多种发现机制(文件/DNS/Consul/Kubernetes)

Alertmanager:负责告警去重/分组/路由,从Prometheus接收告警指示后发送通知

Pushgateway:接收短期任务推送数据的中转站

Grafana:跨平台数据可视化工具,提供丰富仪表盘插件

②_端口汇总表
组件 端口 访问地址
Prometheus 9090 http://IP:9090
Node Exporter 9100 http://IP:9100/metrics
MySQL Exporter 9104 http://IP:9104/metrics
Nginx Exporter 9913 http://IP:9913/metrics
Grafana 3000 http://IP:3000
Consul 8500 http://IP:8500
redis_exporterRedis 9121 指标
kafka_exporterKafka 9308 指标
blackbox_exporter 9115 探测(HTTP/TCP/ICMP)
③_整套流程
复制代码
Exporter / Pushgateway → Prometheus拉取 → TSDB存储 → PromQL查询 → Grafana展示 → Alertmanager告警通知

Exporter 和 Pushgateway 的区别

特性 Exporter Pushgateway
数据流 Prometheus → 拉取 → Exporter 任务 → 推送 → Pushgateway → Prometheus 拉取
适用场景 长期运行的服务(Node、MySQL等) 短生命周期任务(批处理、CronJob等)

工作流程详细步骤

  1. Prometheus Server 从监控目标通过 pull 方式拉取指标数据,或通过 Pushgateway 间接采集数据
  2. 采集到的指标数据通过 TSDB 存储到本地 HDD/SSD 中
  3. Prometheus 采集的监控指标数据按时间序列存储,通过配置报警规则,把触发的告警通知发送到 Alertmanager
  4. Alertmanager 通过配置报警接收方,发送报警到邮件、钉钉或者企业微信等
  5. Prometheus 自带的 Web UI 界面提供 PromQL 查询语言,可查询监控数据
  6. Grafana 可接入 Prometheus 数据源,把监控数据以图形化形式展示出

2_为什么用_Prometheus

2.1_监控数据特点

  • 写多读少:不断产生,很少查历史 → 银行流水(写入频繁,查询不多)
  • 按时间顺序:每条数据带时间戳 → 体温记录(按时间排序)
  • 很少修改:数据写入后不变 → 考勤记录(写完就固定)
  • 批量删除:删除整段时间数据 → 手机相册(批量删除旧照片)

2.2_TSDB_vs_普通数据库

TSDB 作为 Prometheus 的存储引擎完美契合监控数据应用场景

  • 存储的数据量级十分庞大
  • 大部分时间都是写入操作
  • 写入操作几乎是顺序添加,大多数时候数据都以时间排序
  • 很少更新数据,大多数情况在数据被采集到数秒或者数分钟后就会被写入数据库
  • 删除操作一般为区块删除,选定开始的历史时间并指定后续的区块。很少单独删除某个时间或者分开的随机时间的数据
  • 基本数据大,一般超过内存大小。一般选取的只是其一小部分且没有规律,缓存几乎不起任何作用
  • 读操作是十分典型的升序或者降序的顺序读
  • 高并发的读操作十分常见

对比

plaintext 复制代码
普通数据库: 
┌──────────────────┐
│ CPU:45%  9:00    │ 
│ CPU:46%  9:00    │ → 需要索引,随机读写(慢)
│ CPU:47%  9:01    │
└──────────────────┘

TSDB: 
┌──────────────────┐
│ 9:00             │
│   CPU:45%        │ → 按时间顺序连续读写(快!)
│   CPU:46%        │
│ 9:01             │
│   CPU:47%        │
└──────────────────┘

2.3_Prometheus核心优势

优势 说明
云原生标配 K8s 官方监控方案
部署简单 单个二进制文件,无依赖
查询强大 PromQL 满足各种查询需求
生态丰富 Grafana/Alertmanager 无缝集成
自动发现 不用手动配置成百上千台服务器

3_服务发现机制

3.1_基于文件

  • 基于文件的服务发现是仅仅略优于静态配置的服务发现方式,它不依赖于任何平台或第三方服务,因而也是最为简单和通用的实现方式。
  • Prometheus Server 会定期从文件中加载 Target 信息,文件可使用 YAML 和 JSON 格式,它含有定义的 Target 列表,以及可选的标签信息。

3.2_基于consul

  • Consul是一款基于golang开发的服务注册和发现的开源工具;
  • 主要面向分布式,常用于微服务架构;
  • 它提供了一个Web界面,可以方便地查看和管理注册的服务;
  • 提供服务注册/发现、健康检查、Key/Value存储、多数据中心和分布式一致性保证等功能。

3.3_基于K8s_API

在 Kubernetes 环境中,Prometheus 可以直接对接 Kubernetes API 来发现需要监控的资源,包括

Pod、Service、Endpoint、Node、Ingress 等。这种方式是最符合云原生架构的。

3.4_服务发现方式对比

方式 适用场景 复杂度 优点 缺点 配置区别
静态配置 10台以内服务器 简单 不灵活 static_configs:
文件服务发现 几十台服务器 通用 需手动维护文件 file_sd_configs:
Consul注册中心 微服务架构 功能丰富 需要部署 Consul consul_sd_configs:
K8s原生API K8s 集群 原生支持 依赖 K8s 环境 kubernetes_sd_configs:
DNS 有 DNS 基础设施 简单、无额外组件 功能有限

3.5_为什么需要服务发现

静态配置的痛点

❌ 服务器 1000 台?配置写到手断

❌ 每次增减服务器都要改配置

❌ K8s Pod 动态变化,根本没法手动配
服务发现的解决方案

✅ 自动感知目标变化

✅ 不用手动维护配置

✅ K8s 环境原生支持

4_Prometheus的局限

Prometheus 不擅长什么?

场景 合适? 解决思路
日志监控 用 ELK/Loki(云原生日志收集)
长期存储 需导出到外部存储 InfluxDB 或 OpenTSDB
高可用 需要 Thanos/Cortex
总结
✅ 适合:指标监控、趋势展示、云原生环境
❌ 不适合:日志分析、长期归档、复杂事件

5_故障排查思路

告警没收到?

复制代码
│
├── Prometheus 采集成功吗?
│   └── 查看 Targets 状态
│
├── Alertmanager 收到告警吗?
│   └── 查看 Alertmanager 日志
│
└── 通知渠道配置对吗?
    └── 测试邮件/钉钉发送

数据采集中断?

复制代码
│
├── 被监控目标 Exporter 挂了?
│   └── systemctl status xxx_exporter
│
├── 网络不通?
│   └── telnet IP 端口
│
└── 防火墙阻止?
    └── firewall-cmd --list-all

实验部分

1_实验环境

1.1_主机配置表

节点 主机名 IP 角色 安装组件
node17 prometheus-server 192.168.100.17 监控中心 Prometheus + Grafana
node18 nginx-exporter 192.168.100.18 被监控 Node Exporter + Nginx Exporter
node19 mysql-exporter 192.168.100.19 被监控 Node Exporter + MySQL Exporter
node20 node-exporter 192.168.100.20 被监控 Node Exporter

1.2_实验环境拓扑图

plaintext 复制代码
┌────────────────────────────────────────────────────────┐
│  prometheus-server (192.168.100.17)                    │
│  ┌────────────────────────────────────┐                │
│  │  Prometheus Server (:9090)         │                │
│  │  Grafana (:3000)                   │                │
│  └────────────────────────────────────┘                │
│                      │ 拉取数据                         │
│                      ▼                                 │
│  ┌──────────────┬──────────────┬──────────────┐        │
│  │nginx-exporter│mysql-exporter│node-exporter │        │
│  │192.168.100.18│192.168.100.19│192.168.100.20│        │
│  ├──────────────┼──────────────┼──────────────┤        │
│  │:9100 Node    │:9100 Node    │:9100 Node    │        │
│  │:9913 Nginx   │:9104 MySQL   │              │        │
│  └──────────────┴──────────────┴──────────────┘        │
└────────────────────────────────────────────────────────┘

2_部署PrometheusServer

node17

2.1_安装步骤

  • 关闭防火墙
shell 复制代码
systemctl stop firewalld
setenforce 0

setenforce 0:临时禁用SELinux

  • 解压安装包
shell 复制代码
cd /opt/
tar -xf prometheus-2.35.0.linux-amd64.tar.gz
mv prometheus-2.35.0.linux-amd64 /usr/local/prometheus

tar xf:解压压缩包
mv:移动目录到安装位置

  • 配置系统服务
shell 复制代码
cat > /usr/lib/systemd/system/prometheus.service <<'EOF'
[Unit]
Description=Prometheus Server
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/prometheus/prometheus \
--config.file=/usr/local/prometheus/prometheus.yml \
--storage.tsdb.path=/usr/local/prometheus/data/ \
--storage.tsdb.retention=15d \
--web.enable-lifecycle
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF

--storage.tsdb.retention=15d:设置数据保留15天
--web.enable-lifecycle:启用热加载配置

  • 启动服务
shell 复制代码
systemctl daemon-reload
systemctl enable --now prometheus.service
systemctl status prometheus.service

2.2_验证安装

  • 检查端口
shell 复制代码
ss -antlp | grep 9090

grep :9090:过滤9090端口

  • 访问Web UI
shell 复制代码
firefox http://192.168.100.17:9090

Web界面地址:默认端口9090

2.3_配置文件说明

shell 复制代码
cat /usr/local/prometheus/prometheus.yml
yaml 复制代码
global:
  scrape_interval: 15s     # 采集间隔(默认15秒)
  evaluation_interval: 15s # 告警计算间隔
  scrape_timeout: 10s      # 超时时间
alerting:
  alertmanagers:
    - static_configs:
        - targets: []
rule_files:
  - "first_rules.yml"
scrape_configs:
  - job_name: "prometheus"
    metrics_path: '/metrics'
    static_configs:
      - targets: ["localhost:9090"]

scrape_configs:定义监控目标
job_name:任务名称标识,自动生成job=xxx标签
static_configs:静态配置目标主机

2.4_验证监控目标

浏览器访问 → Status → Targets → 确认prometheus状态为UP ✅

3_部署_Node_Exporter

3.1_安装步骤

node18、19、20

  • 解压安装包
shell 复制代码
cd /opt/
tar -xf node_exporter-1.3.1.linux-amd64.tar.gz
mv node_exporter-1.3.1.linux-amd64/node_exporter /usr/local/bin/
  • 配置系统服务
shell 复制代码
cat > /usr/lib/systemd/system/node_exporter.service <<'EOF'
[Unit]
Description=node_exporter
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/node_exporter \
--collector.ntp \
--collector.mountstats \
--collector.systemd \
--collector.tcpstat
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF

--collector.ntp:收集NTP时间同步指标
--collector.mountstats:收集磁盘挂载统计

  • 启动服务
shell 复制代码
systemctl daemon-reload
systemctl enable --now node_exporter.service
systemctl status node_exporter.service

3.2_验证NodeExporter

  • 检查端口
shell 复制代码
ss -antlp | grep 9100
  • 查看指标数据
plaintext 复制代码
firefox http://192.168.100.18:9100/metrics

指标含义:
node_cpu_seconds_total:CPU使用时间
node_memory_MemTotal_bytes:总内存
node_filesystem_size_bytes:文件系统大小

3.3_在Prometheus添加监控

node17

  • 编辑Prometheus配置
shell 复制代码
cd /usr/local/prometheus/
cp prometheus.yml prometheus.yml_bak
vim /usr/local/prometheus/prometheus.yml
yaml 复制代码
  - job_name: nodes
    metrics_path: "/metrics"
    static_configs:
      - targets:
        - 192.168.100.18:9100
        - 192.168.100.19:9100
        - 192.168.100.20:9100
        labels:
          app: node-exporter

metrics_path:默认/metrics,保持与Exporter一致
labels:自定义额外标签

  • 重载配置
shell 复制代码
curl -X POST http://192.168.100.17:9090/-/reload

systemctl reload prometheus,但需要systemctl status prometheus.service查看报错。

3.4_验证

浏览器访问 → Status → Targets → 3个nodes状态为UP ✅

4_监控MySQL

4.1_安装mysqld_exporter

  • 解压安装包
shell 复制代码
cd /opt/
tar -xvf mysqld_exporter-0.14.0.linux-amd64.tar.gz
mv mysqld_exporter-0.14.0.linux-amd64/mysqld_exporter /usr/local/bin/
  • 配置MySQL连接
shell 复制代码
vim /etc/my.cnf
ini 复制代码
[client]
host=localhost
user=exporter
password=abc123

指向监控用户凭证

  • 创建监控用户
mysql 复制代码
mysql -uroot -pabc123
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost' IDENTIFIED BY 'abc123';

GRANT:赋予权限,需PROCESS/REPLICATION CLIENT权限

  • 配置服务
shell 复制代码
cat > /usr/lib/systemd/system/mysqld_exporter.service <<'EOF'
[Unit]
Description=mysqld_exporter
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/mysqld_exporter --config.my-cnf=/etc/my.cnf
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF

--config.my-cnf:指定MySQL配置文件路径

  • 启动服务
shell 复制代码
systemctl daemon-reload
systemctl enable --now mysqld_exporter.service
systemctl status mysqld_exporter.service

4.2_在Prometheus添加监控

  • 编辑配置文件
yaml 复制代码
  - job_name: mysqld
    metrics_path: "/metrics"
    static_configs:
      - targets:
        - 192.168.100.19:9104
        labels:
          service: mysqld
  • 重载配置
shell 复制代码
curl -X POST http://192.168.100.17:9090/-/reload

4.3_关键监控指标

指标 含义 告警建议
mysql_global_status_threads_connected 当前连接数 >80%最大连接时告警
mysql_global_status_slow_queries 慢查询数 >5个/分钟告警
mysql_global_status_innodb_buffer_pool_bytes_data 缓冲池使用量 >90%时告警

5_监控Nginx

5.1_安装NginxVTS模块

  • 解压VTS模块
shell 复制代码
cd /opt
tar xf nginx-module-vts-0.1.18.tar.gz
mv nginx-module-vts-0.1.18 /usr/local/nginx-module-vts
  • 编译安装Nginx
shell 复制代码
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
useradd -M -s /sbin/nologin nginx
tar xf nginx-1.18.0.tar.gz
cd nginx-1.18.0/
./configure --prefix=/usr/local/nginx \
--user=nginx --group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module \
--add-module=/usr/local/nginx-module-vts
make && make install

--add-module:添加VTS模块路径

5.2_配置Nginx

  • 配置文件修改
nginx 复制代码
http {
  vhost_traffic_status_zone;
  vhost_traffic_status_filter_by_host on; # 按host统计流量
  server {
    vhost_traffic_status off; # 禁用不需监控的server,这里不需要禁用。
    listen 8080;
    allow 127.0.0.1;
    allow 192.168.100.17; # Prometheus服务器IP
    location /nginx-status {
      stub_status on;
      access_log off;
    }
    location /status {
      vhost_traffic_status_display;
      vhost_traffic_status_display_format json;
    }
  }
}

vhost_traffic_status_filter_by_host:按域名区分流量统计
vhost_traffic_status off:禁用不需监控的server,只有不需要监控的虚拟主机需要配。
allow 192.168.100.17:仅允许Prometheus访问

  • 启动Nginx
shell 复制代码
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
nginx -t
cat > /lib/systemd/system/nginx.service <<'EOF'
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
[Install]
WantedBy=multi-user.target
EOF
systemctl enable --now nginx
systemctl status nginx

5.3_安装nginx-vts-exporter

  • 安装服务
shell 复制代码
cd /opt/
tar -zxvf nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
mv nginx-vts-exporter-0.10.3.linux-amd64/nginx-vts-exporter /usr/local/bin/
  • 配置服务
shell 复制代码
cat > /usr/lib/systemd/system/nginx-exporter.service <<'EOF'
[Unit]
Description=nginx-exporter
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/nginx-vts-exporter --nginx.scrape_uri=http://localhost:8080/status/format/json
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF

-nginx.scrape_uri:指定Nginx VTS状态接口地址
localhost:8080:Nginx监听端口,与配置文件一致

  • 启动服务
shell 复制代码
systemctl enable --now nginx-exporter
systemctl status nginx-exporter
  • 验证端口
shell 复制代码
ss -antlp | grep :9913

默认端口9913,可查看指标数据:http://nginx-exporter:9913/metrics

5.4_在_Prometheus_添加监控

  • 编辑Prometheus配置
yaml 复制代码
  - job_name: nginx
    metrics_path: "/metrics"
    static_configs:
      - targets:
        - 192.168.100.18:9913
        labels:
          service: nginx

targets:指定nginx-exporter的IP和端口

  • 重载配置
shell 复制代码
curl -X POST http://192.168.100.17:9090/-/reload

5.5_关键监控指标

指标 含义
nginx_server_requests 请求数
nginx_server_bytes 流量统计
nginx_vts_info VTS模块信息

5_部署_Grafana

5.1_安装

  • 安装Grafana
shell 复制代码
yum install -y grafana-7.4.0-1.x86_64.rpm

下载地址:

https://grafana.com/grafana/download/

https://mirrors.bfsu.edu.cn/grafana/yum/rpm/

  • 启动服务
shell 复制代码
systemctl enable --now grafana-server
systemctl status grafana-server

5.2_访问

plaintext 复制代码
http://192.168.100.17:3000

默认账号:admin

默认密码:admin

5.3_配置数据源

  1. Configuration → Data Sources → Add data source
  2. 选择Prometheus
  3. URL: http://192.168.100.17:9090
  4. Save & Test ✅

5.4_导入仪表盘

  1. 访问 https://grafana.com/grafana/dashboards
  2. 搜索 "Node Exporter Full"
  3. 记住ID: 12486
  4. Grafana → + → Import
  5. 输入12486 → Load → 选择Prometheus → Import

导入后可查看系统CPU、内存、磁盘等可视化指标

6_服务发现机制

node17

6.1_基于文件

  • 创建配置文件
shell 复制代码
cd /usr/local/prometheus
mkdir targets
vim targets/node-exporter.yaml
yaml 复制代码
- targets:
  - 192.168.100.19:9100
  - 192.168.100.20:9100
  labels:
    app: node-exporter
    job: node

labels:添加通用标签便于查询

  • 修改Prometheus配置
shell 复制代码
vim /usr/local/prometheus/prometheus.yml
yaml 复制代码
scrape_configs:
  - job_name: file_sd
    file_sd_configs:
      - files:
        - targets/node*.yaml
        refresh_interval: 2m

refresh_interval:2分钟自动重新加载配置

  • 重载配置
shell 复制代码
systemctl reload prometheus

6.2_基于Consul

  • 部署Consul
shell 复制代码
cd /opt/
unzip consul_1.9.2_linux_amd64.zip
mv consul /usr/local/bin/
mkdir /var/lib/consul-data /etc/consul/

consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-config-dir=/etc/consul/ \
-bind=192.168.100.17 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &

-server:表示以服务器模式运行
-bootstrap:表示这是第一个节点
-ui:启用Web界面,访问http://prometheus-server:8500
-data-dir:指定数据目录
-bind=:绑定地址
-client=:允许所有客户端地址访问
-node=:节点,用于三主三从,这里只演示一个。

  • 在Consul注册服务
shell 复制代码
vim /etc/consul/nodes.json
json 复制代码
{
  "services": [
    {
      "id": "nginx_exporter-node18",
      "name": "nginx-node18",
      "address": "192.168.100.18",
      "port": 9913,
      "tags": ["nodes"],
      "checks": [{
        "http": "http://192.168.100.18:9913/metrics",
        "interval": "5s"
      }]
    }
    {
      "id": "mysql_exporter-node19",
      "name": "mysql-node19",
      "address": "192.168.100.19",
      "port": 9104,
      "tags": ["nodes"],
      "checks": [{
        "http": "http://192.168.100.19:9104/metrics",
        "interval": "5s"
      }]
    }
    {
      "id": "node_exporter-node20",
      "name": "node20",
      "address": "192.168.100.20",
      "port": 9100,
      "tags": ["nodes"],
      "checks": [{
        "http": "http://192.168.100.20:9100/metrics",
        "interval": "5s"
      }]
    }
  ]
}

checks:Health检查配置,5秒检查一次

  • 重载Consul配置
shell 复制代码
consul reload
  • Prometheus配置
yaml 复制代码
- job_name: consul
  consul_sd_configs:
    - server: 192.168.100.17:8500
      tags:
        - nodes
      refresh_interval: 2m

tags:过滤只监控带"nodes"标签的服务

  • 访问 Consul Web 界面
shell 复制代码
firefox http://192.168.100.17:8500

可以看到已注册的服务列表

  • 服务注销和重新注册
shell 复制代码
# 注销服务
consul services deregister -id="node_exporter-node02"

# 重新注册
consul services register /etc/consul/nodes.json

6.3_基于K8s_API

  • 典型配置示例
yaml 复制代码
- job_name: 'kubernetes-pods'
  kubernetes_sd_configs:
    - role: pod
  relabel_configs:
    - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
      action: keep
      regex: true

role:可选值包括pod、service、node、endpoints、ingress。Prometheus 会持续监听 API Server,当有新的资源创建或旧资源删除时,会自动更新监控目标。

需配置RBAC权限

结语

Prometheus 通过 Pull 模式构建了轻量级但功能强大的监控体系,结合多维数据模型、PromQL 和服务发现机制,成为云原生监控的事实标准。成功部署需注意:Exporter 与 Prometheus 的正确集成、服务发现机制的选择及配置文件的热加载应用。

Prometheus 官网https://prometheus.io
Prometheus GitHubhttps://github.com/prometheus

Prometheus 工作流程 :Exporter / Pushgateway → Prometheus拉取 → TSDB存储 → PromQL查询 → Grafana展示 → Alertmanager告警通知
服务发现方式对比 :静态配置(目标固定)、文件发现(变化不频繁)、Consul(微服务架构)、K8s API(云原生环境)
告警机制:Prometheus仅生成告警指示,由Alertmanager完成去重/分组/路由

!question\] Prometheus 为什么使用 Pull 模式? Pull 模式更简单可靠,便于控制数据采集频率,便于防火墙策略管理,且能检测目标是否存活;额外数据推送通过 Pushgateway 支持短期任务需求。 \[!question\] TSDB 与普通数据库相比有什么优势? TSDB 专门针对监控数据设计:写多读少、按时间排序、很少修改、批量删除。按时间连续存储使数据读取更高效,相比普通数据库的随机读写性能大幅提升。 \[!question\] 服务发现解决了什么痛点? 当服务器规模达到上百台时,手动维护监控目标不可能。服务发现实现:自动感知目标变化、无需手动维护配置、支持动态环境(如K8s Pod快速变化)。 \[!question\] Prometheus 适合监控什么场景? 指标监控、趋势展示、云原生环境;不适合日志分析、长期归档或处理复杂事件(需结合专有工具如ELK/Loki)。 \[!question\] 告警通知为何需要 Alertmanager? Alertmanager 专门处理告警:接收告警、去重、分组、路由到正确接收人,还支持静默时段、抑制规则等高级功能,使告警更加精准有效。

相关推荐
咕噜企业分发小米7 小时前
腾讯云IM如何与第三方实时音频服务集成?
云计算·音视频·腾讯云
咕噜企业分发小米11 小时前
腾讯云IM与TRTC集成时,如何优化用户体验?
云计算·腾讯云
咕噜企业分发小米12 小时前
腾讯云IM的优点
云计算·腾讯云
阿里云云原生14 小时前
研发数据不出域,安全合规再升级!云效 Region 版发布
安全·阿里云·云原生·云计算·云效
翼龙云_cloud14 小时前
阿里云渠道商:弹性伸缩的成本和效率如何平衡?
服务器·阿里云·云计算
翼龙云_cloud14 小时前
阿里云渠道商:3步实现ESS智能缩容,节省30%成本
服务器·阿里云·云计算
咕噜企业分发小米15 小时前
腾讯云im实时音频
云计算·音视频·腾讯云
十月南城2 天前
高可用的三件事——无状态化、水平扩展与故障转移的协同设计
运维·web安全·微服务·云计算·xss
Akamai中国2 天前
构建分布式应用?Akamai 和 Fermyon 正在改变游戏规则
人工智能·云计算·云服务·云存储