macOS 下载、安装 Prometheus,云原生监控与告警的开源系统(附安装包prometheus-3.13.2.darwin-arm64.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/225G(内含 prometheus-3.13.2.darwin-arm64.tar.gz、README 中英对照、发布说明中英对照和 LICENSE)。
适用于 macOS arm64(Apple Silicon,M 系列芯片)。Intel(x86_64)Mac 请选择对应的 prometheus-3.13.2.darwin-amd64.tar.gz。
Prometheus 其他版本:https://hanshuixin.org/resource/software_integrated_package/macOS/Prometheus
macOS安装prometheus-v3.13.2(prometheus-3.13.2.darwin-arm64).zip
├── prometheus-3.13.2.darwin-arm64.tar.gz ← 解压后运行
├── macOS安装prometheus-v3.13.2(prometheus-3.13.2.darwin-arm64).pdf
├── README/
│ ├── README.md
│ └── README-中文版.md
├── 发布说明/
│ ├── RELEASE-NOTES.md
│ └── RELEASE-NOTES-中文版.md
└── LICENSE4. 安装
prometheus-3.13.2.darwin-arm64.tar.gz 是 Prometheus 官方发布的 macOS arm64 预编译二进制包,解压即可运行:
# 解压二进制包
tar -xzf prometheus-3.13.2.darwin-arm64.tar.gz
# 进入解压目录(内含 prometheus 与 promtool 两个可执行文件)
cd prometheus-3.13.2.darwin-arm64
# 启动 Prometheus(使用自带的默认配置)
./prometheus --config.file=prometheus.yml启动后访问 http://localhost:9090 即可打开 Prometheus 的 Web 界面。
4.1 开机自启(launchd 服务化)
macOS 系统中,推荐将 Prometheus 托管为 launchd 启动项,实现开机自启与崩溃自动拉起。先将二进制部署到统一目录:
# 部署到统一目录并设置可执行权限
sudo mkdir -p /usr/local/prometheus
sudo cp prometheus promtool /usr/local/prometheus/
sudo chmod +x /usr/local/prometheus/prometheus /usr/local/prometheus/promtool创建 plist 文件 ~/Library/LaunchAgents/com.prometheus.plist(用户级,登录后自启;若需开机即启动、不依赖登录,则放到 /Library/LaunchDaemons/):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.prometheus</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/prometheus/prometheus</string>
<string>--config.file=/usr/local/prometheus/prometheus.yml</string>
<string>--storage.tsdb.path=/usr/local/prometheus/data</string>
<string>--web.listen-address=0.0.0.0:9090</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/usr/local/prometheus/prometheus.log</string>
<key>StandardErrorPath</key>
<string>/usr/local/prometheus/prometheus.err.log</string>
</dict>
</plist>配置要点说明:
KeepAlive:进程异常退出时自动拉起RunAtLoad:加载该 launchd 任务时立即启动服务StandardOutPath/StandardErrorPath:日志输出到指定文件,便于排查- 数据目录与日志路径需确保
prometheus运行用户有写入权限
加载并启动服务:
# 加载 launchd 服务并启动
launchctl load ~/Library/LaunchAgents/com.prometheus.plist
# 启动 / 停止 / 查看状态
launchctl start com.prometheus
launchctl stop com.prometheus
launchctl list | grep prometheus5. 使用
5.1 配置抓取目标
Prometheus 通过 prometheus.yml 中的 scrape_configs 配置抓取目标。一个生产环境通常会同时抓取多种类型的目标,下面是一个涵盖 macOS/Linux 主机、Java 服务和 Prometheus 自身的典型配置:
# 全局设置:每 15 秒抓取一次,每 15 秒评估一次告警规则
global:
scrape_interval: 15s
evaluation_interval: 15s
# 抓取 Prometheus 自身指标
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
# 主机指标(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部署在每台主机上,监听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
# 热加载(无需重启)
kill -HUP $(pgrep prometheus)5.5 运行状态监控
Web 界面的"状态"菜单提供了监控 Prometheus 自身的手段:
- Targets(抓取目标):查看每个抓取目标的健康状态、抓取耗时与最近错误
- Alerts(告警):查看所有告警规则当前状态(inactive / pending / firing)
- Status:查看配置哈希、启动时间、TSDB 运行信息等
对外部站点探活类指标,也可在查询页用 probe_success == 0 快速排查不可访问的目标。