Prometheus 监控系统全维度指南
以下是整理后的 Prometheus 监控系统全维度指南,涵盖概述、生态组件、工作流程、部署实践(含告警、可视化、服务发现)等核心内容,结构清晰且信息完整:
一、Prometheus 概述
Prometheus 是开源的服务监控系统与时序数据库,核心特性包括:
- 多维数据模型:通过 “度量名称 + 键值对” 标识时间序列数据。
- 内置时序数据库:本地存储时序数据,也支持对接 InfluxDB、OpenTSDB 等远端存储。
- PromQL 查询语言:支持复杂的多维数据查询与聚合。
- 基于 HTTP 的 Pull 采集:主动拉取目标服务的监控指标,也可通过 PushGateway 接收推送数据。
- 动态服务发现:支持文件、DNS、Consul、Kubernetes 等多种发现机制。
- Grafana 集成:可作为数据源实现可视化展示。
二、生态组件与角色
| 组件 | 功能说明 |
|---|---|
| Prometheus Server | 核心组件,负责采集、存储指标,基于告警规则生成告警,由 Retrieval(采集)、Storage(存储)、PromQL(查询)模块组成。 |
| Exporters | 指标暴露器,收集非内建监控能力的服务 / 主机指标(如 Node Exporter 监控服务器、mysqld_exporter 监控 MySQL),并通过 HTTP 接口供 Server 拉取。 |
| Alertmanager | 独立告警模块,接收 Server 告警后进行去重、分组,并路由到邮件、钉钉等接收方。 |
| PushGateway | 接收短生命周期任务的指标推送,再由 Server 拉取,解决短期任务无法被 Pull 的问题。 |
| Grafana | 第三方可视化工具,支持 Prometheus 数据源,提供丰富的仪表盘与告警展示。 |
三、工作流程
- 数据采集:Server 主动拉取 Exporters / 目标服务的指标,或通过 PushGateway 拉取推送的指标。
- 数据存储:采集的指标以时序格式存储在本地 TSDB 或远端存储中。
- 告警生成:Server 基于告警规则计算指标,触发条件时将告警发送到 Alertmanager。
- 告警分发:Alertmanager 对告警进行去重、分组后,发送到邮件、钉钉等接收渠道。
- 数据可视化:Grafana 接入 Prometheus 数据源,以图表形式展示监控数据。
四、部署实践
1. 基础组件部署(Prometheus Server、Node Exporter)
-
Prometheus Server 部署:
# 下载解压 cd /opt && wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz tar xf prometheus-2.45.0.linux-amd64.tar.gz && mv prometheus-2.45.0.linux-amd64 /usr/local/prometheus# 配置 systemd 服务 cat > /etc/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/ ExecReload=/bin/kill -HUP $MAINPID Restart=on-failure [Install] WantedBy=multi-user.target EOF# 启动并设为开机自启 systemctl daemon-reload && systemctl enable --now prometheus -
Node Exporter 部署(监控服务器系统指标):
# 下载解压 cd /opt && wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz tar xf node_exporter-1.6.1.linux-amd64.tar.gz && mv node_exporter-1.6.1.linux-amd64/node_exporter /usr/local/bin# 配置 systemd 服务 cat > /etc/systemd/system/node_exporter.service << 'EOF' [Unit] Description=Node Exporter After=network.target [Service] Type=simple ExecStart=/usr/local/bin/node_exporter Restart=on-failure [Install] WantedBy=multi-user.target EOF# 启动并设为开机自启 systemctl daemon-reload && systemctl enable --now node_exporter -
关联 Prometheus 与 Node Exporter:编辑
prometheus.yml,添加 Node Exporter 监控目标:scrape_configs:- job_name: "node_exporter"static_configs:- targets: ["localhost:9100"] # Node Exporter 默认端口重启 Prometheus:
systemctl restart prometheus
2. 钉钉告警集成(Prometheus + Alertmanager + 钉钉中间件)
-
部署 prometheus-webhook-dingtalk:
cd /opt && wget https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v2.1.0/prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz tar xf prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz && mv prometheus-webhook-dingtalk-2.1.0.linux-amd64 /usr/local/dingtalk# 配置 systemd 服务 cat > /etc/systemd/system/dingtalk-webhook.service << 'EOF' [Unit] Description=Prometheus Webhook for DingTalk After=network.target [Service] Type=simple WorkingDirectory=/usr/local/dingtalk ExecStart=/usr/local/dingtalk/prometheus-webhook-dingtalk --config.file=config.yml Restart=on-failure [Install] WantedBy=multi-user.target EOF -
配置钉钉机器人与中间件:钉钉群创建自定义机器人,获取 Webhook 地址和加签 Secret,编辑
config.yml:timeout: 5s templates:- contrib/templates/legacy/template.tmpl default_message:title: '{{ template "legacy.title" . }}'text: '{{ template "legacy.content" . }}' targets:webhook1:url: "https://oapi.dingtalk.com/robot/send?access_token=你的Webhook"secret: "你的加签Secret" -
配置 Alertmanager:编辑
alertmanager.yml,转发告警到钉钉中间件:global:resolve_timeout: 5m route:receiver: 'dingtalk-webhook1' receivers: - name: 'dingtalk-webhook1'webhook_configs:- url: 'http://localhost:8060/dingtalk/webhook1/send'send_resolved: true -
配置 Prometheus 告警规则:创建告警规则文件(如
node_rules.yml),定义 Node Exporter 宕机告警:groups: - name: node_alertsrules:- alert: NodeExporterDownexpr: up{job="node_exporter"} == 0for: 1mlabels:severity: criticalannotations:summary: "Node Exporter 服务宕机"在
prometheus.yml中关联规则文件:rule_files:- "node_rules.yml"
3. Grafana 可视化部署
-
安装并启动 Grafana:
yum install -y grafana-7.4.0-1.x86_64.rpm systemctl enable --now grafana-server -
配置 Prometheus 数据源:浏览器访问
http://服务器IP:3000,添加数据源:- 类型选择 “Prometheus”,URL 填写
http://localhost:9090,保存并测试。
- 类型选择 “Prometheus”,URL 填写
-
导入仪表盘:从 Grafana 官方仪表盘库 搜索 “Node Exporter”,复制 ID 后导入,即可查看服务器指标可视化面板。
4. 服务发现实践
-
基于文件的服务发现:创建目标配置文件(如
targets/node-exporter.yaml):- targets:- 192.168.10.80:9100labels:job: node_exporter在
prometheus.yml中配置文件发现:scrape_configs:- job_name: "nodes"file_sd_configs:- files: ["targets/node-exporter.yaml"]refresh_interval: 2m -
基于 Kubernetes 的服务发现:配置
prometheus.yml对接 Kubernetes API,发现 Pod、Node 等资源:scrape_configs:- job_name: "kubernetes-nodes"kubernetes_sd_configs:- role: noderelabel_configs:- action: labelmapregex: __meta_kubernetes_node_label_(.+)
五、常见问题与排查
- 指标未采集:检查 Exporter 服务是否运行、Prometheus 配置的
targets是否正确。 - 告警未触发:确认告警规则表达式是否正确、Prometheus 已加载规则文件、Alertmanager 配置的接收方是否有效。
- 钉钉无通知:检查钉钉机器人 Webhook/Secret 是否正确、
dingtalk-webhook服务是否运行、Alertmanager 与中间件的网络连通性。
通过以上步骤,可搭建从指标采集→存储→告警→可视化的完整 Prometheus 监控体系,满足服务器、数据库、容器等多场景的监控需求。
