macOS 下载、安装 Prometheus,云原生监控与告警的开源系统(附安装包prometheus-3.13.2.darwin-arm64.tar.gz)

发布于 2026/8/10 · 1 阅读
Prometheus监控系统告警PromQL时序数据库云原生CNCFKubernetes开源软件macOS
Prometheus 是一款开源的系统与服务监控告警平台,采用多维数据模型与 PromQL 查询语言,单节点自治、无需分布式存储,支持服务发现与原生告警,是 Kubernetes 生态中云原生监控的事实标准。

封面.png

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
└── LICENSE

4. 安装

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 prometheus

5. 使用

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 快速排查不可访问的目标。