Linux 下载、安装 Prometheus,云原生监控与告警的开源系统(附安装包prometheus-3.13.2.linux-amd64.tar.gz)
文章目录

1. Prometheus 简介
Prometheus 是一款开源的系统与服务监控告警平台,2012 年诞生于 SoundCloud,由 Matt Proud 和 Julius Volz 在 Google 内部监控系统 Borgmon 的启发下用 Go 语言编写。2016 年 5 月成为云原生计算基金会(CNCF)最早一批项目之一,2018 年更成为继 Kubernetes 之后第二个从 CNCF 毕业的项目。如今 Prometheus 在 GitHub 上拥有约 6.5 万颗星标、1.7 万余位贡献者,是云原生监控领域的事实标准,几乎所有 Kubernetes 集群都在用它做指标采集与告警。
Prometheus 要解决的,是分布式环境中指标监控数据分散、查询困难的问题:传统监控工具要么依赖分布式存储、部署复杂,要么只能看曲线、难以按维度查询告警。而 Prometheus 用"拉取(pull)"模式定时抓取各目标暴露的指标,配合多维数据模型和 PromQL 查询语言,让运维能随时用一条查询看清任意维度的服务状态,并在条件满足时自动触发告警——单节点即可独立运行,无需外部存储依赖。
Prometheus 的核心特点:
- 多维数据模型:时间序列由指标名和一组键/值标签(label)定义,天然支持按维度切片与聚合
- PromQL 查询语言:强大灵活的查询语言,充分利用维度化数据模型
- 单节点自治:不依赖分布式存储,单个服务器节点即可独立运行
- HTTP 拉取模型:按配置周期通过 HTTP 拉取目标指标,也支持通过 Pushgateway 接收批处理作业的推送
- 服务发现:支持 Kubernetes、Consul 等动态发现抓取目标,也支持静态配置
- 原生告警:内置告警规则评估,可对接 Alertmanager 统一告警分发
- 联邦扩展:支持层级与水平方向的联邦(federation),可横向扩展采集规模
2. v3.13.2 版本亮点
该版本汇集了 2 位贡献者 的 2 条 贡献。
v3.13.2 发布于 2026 年 7 月 29 日,是一个维护性补丁版本,重点包含安全升级与一处稳定性修复:
2.1 安全修复
- 升级
golang.org/x/text至 v0.39.0,修复安全漏洞 CVE-2026-56852;升级google.golang.org/grpc至 v1.82.1,修复 GHSA-hrxh-6v49-42gf - 建议所有使用远程写入(Remote Write)或 OTLP 接收功能的用户尽快升级
2.2 缺陷修复
- PromQL 稳定性:预分配活跃查询跟踪器(active query tracker)文件,避免数据磁盘写满时出现 SIGBUS 崩溃
3. 获取安装包
如果访问 GitHub 不便,安装包及中文文档:https://hanshuixin.org/go/225F(内含 prometheus-3.13.2.linux-amd64.tar.gz、README 中英对照、发布说明中英对照和 LICENSE)。
适用于 Linux x86_64(amd64)。
Prometheus 其他版本:https://hanshuixin.org/resource/software_integrated_package/Linux/Prometheus
Linux安装prometheus-v3.13.2(prometheus-3.13.2.linux-amd64).zip
├── prometheus-3.13.2.linux-amd64.tar.gz ← 解压后运行
├── Linux安装prometheus-v3.13.2(prometheus-3.13.2.linux-amd64).pdf
├── README/
│ ├── README.md
│ └── README-中文版.md
├── 发布说明/
│ ├── RELEASE-NOTES.md
│ └── RELEASE-NOTES-中文版.md
└── LICENSE4. 安装
prometheus-3.13.2.linux-amd64.tar.gz 是 Prometheus 官方发布的 Linux x86_64 预编译二进制包,不绑定特定发行版,解压即可运行:
# 解压二进制包
tar -xzf prometheus-3.13.2.linux-amd64.tar.gz
# 进入解压目录(内含 prometheus 与 promtool 两个可执行文件)
cd prometheus-3.13.2.linux-amd64
# 启动 Prometheus(使用自带的默认配置)
./prometheus --config.file=prometheus.yml启动后访问 http://localhost:9090 即可打开 Prometheus 的 Web 界面。
4.1 生产环境配置(systemd 服务化)
实际生产部署中,建议将二进制部署到统一目录,创建无登录权限的专用运行用户,并以 systemd 服务托管,便于开机自启、崩溃自动拉起与统一管理:
# 将二进制部署到统一目录
sudo mkdir -p /opt/prometheus
sudo cp prometheus promtool /opt/prometheus/
# 创建专用用户(无登录权限)并授权
sudo useradd --system --no-create-home --shell /sbin/nologin prometheus
sudo chown -R prometheus:prometheus /opt/prometheus创建服务文件 /etc/systemd/system/prometheus.service:
[Unit]
Description=Prometheus Monitoring
Documentation=https://prometheus.io/docs/introduction/overview/
After=network.target
[Service]
Type=simple
User=prometheus
Group=prometheus
WorkingDirectory=/opt/prometheus
ExecStart=/opt/prometheus/prometheus \
--config.file=/opt/prometheus/prometheus.yml \
--web.listen-address=0.0.0.0:9090 \
--storage.tsdb.retention.time=1y \
--storage.tsdb.path=/opt/prometheus/data
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=5
MemoryLimit=1G
[Install]
WantedBy=multi-user.target配置要点说明:
--storage.tsdb.retention.time:数据保留时长,示例1y表示保留一年,可按磁盘容量调整为180d、90d等ExecReload:配合systemctl reload实现配置热加载,无需重启进程MemoryLimit:限制 Prometheus 内存占用上限,防止异常时吃满主机内存User:以无登录权限的专用用户运行,符合最小权限原则
# 开机自启并启动
sudo systemctl enable prometheus
sudo systemctl start prometheus
# 查看状态
sudo systemctl status prometheus5. 使用
5.1 配置抓取目标
Prometheus 通过 prometheus.yml 中的 scrape_configs 配置抓取目标。一个生产环境通常会同时抓取多种类型的目标,下面是一个涵盖 Linux 主机、Java 服务和 Prometheus 自身的典型配置:
# 全局设置:每 15 秒抓取一次,每 15 秒评估一次告警规则
global:
scrape_interval: 15s
evaluation_interval: 15s
# 抓取 Prometheus 自身指标
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
# Linux 主机指标(node_exporter)
- job_name: "node"
static_configs:
- targets: ["10.0.0.11:9100", "10.0.0.12:9100"]
labels:
env: "prod"
# Java / Spring Boot 服务指标(通过 Actuator 暴露 Micrometer 指标)
- job_name: "springboot"
metrics_path: "/actuator/prometheus"
static_configs:
- targets: ["10.0.1.21:8080", "10.0.1.22:8080"]
labels:
application: "order-service"要点说明:
node_exporter部署在每台 Linux 主机上,监听9100端口,暴露 CPU、内存、磁盘等主机指标- Spring Boot 等服务通过
management.endpoints.web.exposure.include=prometheus暴露指标端点,Prometheus 抓取/actuator/prometheus - 通过
labels给目标打标签(如env: prod),后续查询和告警中即可按环境、应用区分
除以上类型外,常见的还有 GPU 服务器(dcgm_exporter)、Windows 主机(windows_exporter)、MySQL(mysqld_exporter)等,均以类似方式加入一个 job 即可。
外部站点探活(Blackbox Exporter)
"网站能不能访问"这类问题用普通的指标抓取无法回答,需要 Blackbox Exporter 配合 relabel_configs 实现。原理是让 Prometheus 请求 Blackbox 的 /probe 接口,由它代为探测目标地址:
- job_name: blackbox
metrics_path: /probe
params:
module: [http_2xx] # 使用 http_2xx 探测模块
static_configs:
- targets:
- https://example.com/
- https://api.example.com/health
relabel_configs:
- source_labels: [__address__]
target_label: __param_target # 把目标地址传给 Blackbox
- source_labels: [__param_target]
target_label: instance # 用目标地址作为 instance 标签
- target_label: __address__
replacement: localhost:9115 # 实际请求发往 Blackbox(9115 端口)5.2 PromQL 常用查询
打开 Web 界面的查询页,用 PromQL 表达式即时查询指标。例如:
# 查看 5 分钟内 Prometheus 自身 HTTP 请求速率
rate(prometheus_http_requests_total[5m])
# 按 job 分组统计 CPU 使用
sum by (job) (rate(node_cpu_seconds_total{mode="idle"}[5m]))
# 查看某台主机磁盘剩余空间(配合告警规则判断是否即将写满)
node_filesystem_avail_bytes{mountpoint="/", instance="10.0.0.11:9100"}5.3 告警规则
Prometheus 通过规则文件定义告警:表达式满足条件并持续 for 指定时长后进入告警状态,可通过 labels 标注严重级别(severity),并在 annotations 中用 {{ $labels.xxx }} 引用标签生成可读描述。在 prometheus.yml 中引入规则文件:
rule_files:
- "rules.yml"rules.yml 按场景分组成组,常见的有基础设施、业务应用、站点可用性三类:
groups:
- name: infra-alerts
rules:
# 主机离线
- alert: 主机离线
expr: up{job="node"} == 0
for: 2m
labels:
severity: critical
annotations:
summary: 主机离线
description: "{{ $labels.instance }} 无法访问,已持续 2 分钟"
# 磁盘空间不足
- alert: 磁盘空间不足
expr: node_filesystem_avail_bytes{mountpoint="/"} < 5 * 1024 * 1024 * 1024
for: 10m
labels:
severity: warning
annotations:
description: "{{ $labels.instance }} 磁盘剩余空间低于 5GB"
- name: app-alerts
rules:
# 业务服务离线
- alert: 服务离线
expr: up{job="springboot"} == 0
for: 1m
labels:
severity: critical
annotations:
description: "{{ $labels.instance }} 无法访问"
# JVM 堆内存过高
- alert: JVM堆内存过高
expr: sum by(instance)(jvm_memory_used_bytes{area="heap"}) /
sum by(instance)(jvm_memory_max_bytes{area="heap"}) > 0.9
for: 15m
labels:
severity: warning
annotations:
description: "{{ $labels.instance }} JVM 堆内存使用率超过 90%"
- name: site-alerts
rules:
# 官网首页不可访问(由 Blackbox 探测产生 probe_success 指标)
- alert: 首页不可访问
expr: probe_success{instance=~".*example.com/$"} == 0
for: 1m
labels:
severity: critical
annotations:
description: "{{ $labels.instance }} 探测失败"告警触发后,Prometheus 会将告警推送给 Alertmanager 做统一去重、分组、静默,再通过邮件、Webhook 等方式通知,形成完整告警链路。
5.4 配置校验与热加载
修改配置后,先用 promtool 校验再热加载,避免错误配置导致服务异常:
# 校验配置
./promtool check config prometheus.yml
# 校验规则文件
./promtool check rules rules.yml
# 热加载(无需重启)
sudo systemctl reload prometheus5.5 运行状态监控
Web 界面的"状态"菜单提供了监控 Prometheus 自身的手段:
- Targets(抓取目标):查看每个抓取目标的健康状态、抓取耗时与最近错误
- Alerts(告警):查看所有告警规则当前状态(inactive / pending / firing)
- Status:查看配置哈希、启动时间、TSDB 运行信息等
对外部站点探活类指标,也可在查询页用 probe_success == 0 快速排查不可访问的目标。