共计 3325 个字符,预计需要花费 9 分钟才能阅读完成。
在云原生体系中,Prometheus 已成为最主流的监控与报警系统之一。其高可靠性、灵活的数据模型、强大的查询语言 PromQL,以及与 Kubernetes 的天然适配,使其成为现代运维体系的核心组件。本文全面介绍 Prometheus 的架构、部署方法以及指标收集方式,为你搭建高可用监控体系提供参考。
一、Prometheus 架构概述
Prometheus 采用 Pull 模式
整体架构由以下组件组成:
1. Prometheus Server
核心组件,负责:
-
定时拉取指标(scrape)
-
存储时序数据(TSDB)
-
提供 PromQL 查询
2. Exporter
用于暴露特定系统或服务的监控指标,例如:
-
Node Exporter:主机资源监控
-
Blackbox Exporter:HTTP/TCP/ICMP 探测
-
mysqld_exporter:MySQL 监控
-
windows_exporter:Windows 主机监控
3. Alertmanager
负责接收 Prometheus 发送的告警,进行聚合、抑制、路由,并推送到邮件、Webhook、飞书、钉钉等通知渠道。
4. Pushgateway
允许临时任务(如批处理脚本)主动推送指标。
5. Grafana
可视化工具,用于构建监控看板。通常会与 Prometheus 配套使用。
二、Prometheus 的部署方式
Prometheus 支持多种部署方式,包括二进制安装、Docker、Kubernetes Helm Chart 等。以下分别介绍常见场景。
1. 二进制安装(适用于物理机 / 虚拟机)
Step 1. 下载 Prometheus
访问官方发布页面下载最新版压缩包:
https://prometheus.io/download/
例如 Linux x86_64:
tar xvf prometheus-*.tar.gz
cd prometheus-*
Step 2. 配置 prometheus.yml
默认配置示例:
global
scrape_interval15s
scrape_configs
job_name'prometheus'
static_configs
targets'localhost:9090'
Step 3. 启动服务
./prometheus --config.file=prometheus.yml
Prometheus UI 默认开放于:
http://localhost:9090
2. 使用 Docker 部署
结合用户常用的 Docker 场景,直接提供 Docker Compose 方案:
version'3'
services
prometheus
imageprom/prometheus
container_nameprometheus
volumes
./prometheus.yml:/etc/prometheus/prometheus.yml
./data:/prometheus
ports
"9090:9090"
部署:
docker compose up -d
3. Kubernetes 环境使用 Helm 部署(推荐)
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prometheus prometheus-community/prometheus
默认安装内容包括:
-
Prometheus Server
-
Alertmanager
-
Node Exporter
-
kube-state-metrics
这是生产环境最主流的部署方案。
三、指标收集(Scrape)的配置与管理
Prometheus 使用 scrape_configs 配置采集任务。常见数据源包括:
1. Static_configs(静态采集)
适用于固定 IP 的服务:
scrape_configs
job_namenode
static_configs
targets'192.168.1.100:9100'
例如采集 Node Exporter 指标。
2. Kubernetes Service Discovery(自动发现)
在 K8s 中,Prometheus 可自动识别 Pod、Service、Endpoints:
scrape_configs
job_name'kubernetes-pods'
kubernetes_sd_configs
rolepod
无需手动更新配置,支持大规模动态环境。
3. 使用 Exporter 采集主机和服务指标
Node Exporter 部署(主机监控)
docker run -d -p 9100:9100 --name node_exporter quay.io/prometheus/node-exporter
然后在 prometheus.yml 中添加:
job_name'node_exporter'
static_configs
targets'192.168.1.10:9100'
4. Pushgateway 场景(短任务)
适用于临时任务,例如定时脚本:
脚本推送示例:
echo "batch_job_duration_seconds 42" | curl --data-binary @- http://pushgateway:9091/metrics/job/batch_job
Prometheus 中配置:
job_name'pushgateway'
static_configs
targets'pushgateway:9091'
四、PromQL:强大灵活的查询语言
PromQL 是 Prometheus 的核心竞争力,常用示例包括:
查看 CPU 使用率(Node Exporter)
rate(node_cpu_seconds_total{mode!="idle"}[5m])
查看 HTTP 请求 QPS
sum(rate(http_requests_total[1m]))
统计某服务所有实例的延迟 P95
histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le))
掌握 PromQL,即可快速构建监控视图和告警规则。
五、Alertmanager 告警通知
Prometheus 告警规则示例:
groups
namesystem_alerts
rules
alertHighCPUUsage
expravg(rate(node_cpu_seconds_totalmode!="idle"5m)) > 0.8
for2m
labels
severitywarning
annotations
description"CPU usage is over 80% for the last 5 minutes"
Alertmanager 可推送至:
-
邮件
-
飞书 / 钉钉 / 企业微信
-
Webhook
-
PagerDuty
六、Grafana 监控可视化
部署 Grafana 后,在 DataSource 配置中指定 Prometheus 地址:
http://prometheus:9090
常用 Dashboard:
-
Node Exporter Full
-
Kubernetes Cluster Monitoring
-
MySQL Overview
Grafana 是构建企业监控看板的核心工具。
七、总结
Prometheus 作为云原生时代的监控标准,具备以下优势:
-
架构简单可靠
-
Pull 模式灵活可控
-
丰富的 Exporter 生态
-
强大的 PromQL 查询语言
-
完整的告警体系(Alertmanager)
-
对 Kubernetes 天然友好
无论是物理机环境的传统监控,还是 Kubernetes 集群中的大规模监控场景,Prometheus 都能提供稳定、可扩展的解决方案。






