灯下哥谭 灯下哥谭
首页
关于
  • Hermes Agent 平台
  • Claude Code
  • OpenClaw
  • GPU 推理节点运维
  • DeepSeek Harness
  • MySQL 运维知识地图
  • Elasticsearch 运维知识地图
  • Redis 运维知识地图
  • TiDB 体系
  • DBA 常用 SQL 与命令
  • Nginx 运维知识地图
  • Prometheus 监控
  • Docker
  • Systemd
  • Iptables
  • Firewalld
  • Sshd
  • MySQL8 运维 SOP 手册
  • MySQL 实战 45 讲(读书笔记)
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

灯下哥谭

灯还亮着
首页
关于
  • Hermes Agent 平台
  • Claude Code
  • OpenClaw
  • GPU 推理节点运维
  • DeepSeek Harness
  • MySQL 运维知识地图
  • Elasticsearch 运维知识地图
  • Redis 运维知识地图
  • TiDB 体系
  • DBA 常用 SQL 与命令
  • Nginx 运维知识地图
  • Prometheus 监控
  • Docker
  • Systemd
  • Iptables
  • Firewalld
  • Sshd
  • MySQL8 运维 SOP 手册
  • MySQL 实战 45 讲(读书笔记)
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 工作笔记

  • 容器与编排

  • Nginx

  • 监控

    • prometheus监控介绍
      • PromQL介绍
      • VictoriaMetrics 集群版:三组件架构与水平扩展机制解析
      • rclone常用命令参数详解(含 WebDAV 挂载实战)
    • 网络安全

    • 其他

    • Linux笔记
    • 监控
    灯下哥谭
    2022-03-10
    目录

    prometheus监控介绍原创

    Prometheus 是一个开源的系统监控和报警工具,最初由SoundCloud开发,现为Cloud Native Computing Foundation的一部分。它特别适用于监控分布式系统和微服务架构。

    版本说明

    本文写于 2022-03,2026-08 复核。
    文中的架构、数据模型与拉取式采集机制在 Prometheus 2.x / 3.x 上均未变。
    需要注意的版本差异:Prometheus 3.0(2024-11 发布)改用了新的 Web UI、移除了若干长期弃用的命令行 flag,并默认启用 UTF-8 指标名支持;--storage.tsdb.retention(无后缀)等旧 flag 已删除,请改用 --storage.tsdb.retention.time。文中的下载链接为写作当时的版本号,实际部署请取最新 release。

    # Prometheus 的基本架构

    Prometheus 的架构由多个组件组成,每个组件可以独立运行。主要组件包括:

    1. Prometheus Server:

      • 负责数据采集和存储。
      • 通过HTTP拉取方式从各种目标收集时间序列数据。
      • 存储收集到的数据并提供查询能力。
    2. Exporters:

      • 监控目标的代理程序,用于暴露指标数据。
      • 常见的 Exporters 有 Node Exporter(监控主机硬件和操作系统指标)、MySQL Exporter、Redis Exporter等。
    3. Pushgateway:

      • 用于短生命周期的作业将指标推送到 Prometheus。
      • 例如,批处理作业在完成时将结果发送到 Pushgateway,然后由 Prometheus 拉取这些结果。
    4. Alertmanager:

      • 处理来自 Prometheus Server 的警报。
      • 支持告警去重、分组和路由,并可以将警报发送到不同的通知渠道(如邮件、Slack、PagerDuty等)。
    5. 客户端库:

      • 允许用户在自己的应用程序中埋点,生成自定义指标。
      • 支持多种编程语言,如Go、Java、Python、Ruby等。

    # 数据模型

    Prometheus 使用多维数据模型来存储时间序列数据。每个时间序列由唯一的指标名称和一组键值对(标签)标识。标签用于区分不同来源或维度的同一类型指标。

    例如:

    http_requests_total{method="GET", handler="/api"}  1027  1395066363000
    
    1
    • http_requests_total 是指标名称。
    • {method="GET", handler="/api"} 是标签。
    • 1027 是指标值。
    • 1395066363000 是时间戳。

    # Prometheus 的工作流程

    1. 数据收集: Prometheus Server 定期从配置的目标上拉取数据。这些目标通过 HTTP 暴露指标接口,通常为 /metrics 端点。

    2. 数据存储: Prometheus 使用本地存储将时间序列数据存储在磁盘上。数据采用基于时间的块存储,每个块包含一个时间范围内的所有数据。

    3. 数据查询: 使用 PromQL(Prometheus Query Language)进行数据查询。PromQL 是一种功能强大的查询语言,可以聚合、筛选和转换时间序列数据。

    4. 警报: Prometheus 根据定义的规则评估数据,并生成警报。警报通过 Alertmanager 发送到相应的通知渠道。

    # Prometheus 安装与配置

    以下是 Prometheus 的基本安装和配置步骤:

    1. 下载并安装 Prometheus:

      wget https://github.com/prometheus/prometheus/releases/download/v2.37.0/prometheus-2.37.0.linux-amd64.tar.gz
      tar xvfz prometheus-2.37.0.linux-amd64.tar.gz
      cd prometheus-2.37.0.linux-amd64
      
      1
      2
      3
    2. 配置 Prometheus: 编辑 prometheus.yml 文件,配置监控目标:

      global:
        scrape_interval: 15s # 默认抓取间隔
      
      scrape_configs:
        - job_name: 'node'
          static_configs:
            - targets: ['localhost:9100'] # Node Exporter 目标
      
      1
      2
      3
      4
      5
      6
      7
    3. 启动 Prometheus:

      ./prometheus --config.file=prometheus.yml
      
      1
    4. 安装 Exporter: 以 Node Exporter 为例,下载并启动 Node Exporter:

      wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
      tar xvfz node_exporter-1.3.1.linux-amd64.tar.gz
      cd node_exporter-1.3.1.linux-amd64
      ./node_exporter
      
      1
      2
      3
      4
    5. 访问 Prometheus: 打开浏览器访问 http://localhost:9090 可以看到 Prometheus 的仪表盘,可以进行数据查询和监控配置。

    # PromQL 示例

    • 查询一分钟内每秒的 HTTP 请求总数:

      rate(http_requests_total[1m])
      
      1
    • 查询每台主机的 CPU 使用率(百分比):

      100 - avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100
      
      1

      这里有一个高频写错的地方:很多教程写成 avg(rate(node_cpu_seconds_total{mode!="idle"}[5m])) by (instance),看着合理,结果是错的。node_cpu_seconds_total 的标签里既有 cpu 也有 mode,mode!="idle" 会保留 user / system / iowait / irq / softirq / steal / nice 共 7 个 mode 的独立时间序列,avg 是把这 7 个 mode 求平均,得到的是「单个 mode 的平均占用」,比真实使用率小了约 7 倍。

      正确的思路只有两种:一是像上面那样用 1 - idle(idle 只有一个 mode,avg 跨的是 CPU 核,语义正确);二是显式做比值:

      sum by (instance) (rate(node_cpu_seconds_total{mode!="idle"}[5m]))
        /
      sum by (instance) (rate(node_cpu_seconds_total[5m])) * 100
      
      1
      2
      3

      怎么确认自己没写错:任何时刻,一台机器所有 mode 的 rate 之和应该约等于它的逻辑核数。拿 sum by (instance) (rate(node_cpu_seconds_total[5m])) 查一下,8 核机器应该得到接近 8 的数字。如果你的使用率表达式算出来的值除以核数才对得上,说明聚合函数选错了。

    #可观测性
    上次更新: 9/11/2026

    ← Nginx Proxy Manager 使用笔记 PromQL介绍→

    最近更新
    01
    DeepSeek Harness 实战 06|学习笔记:插件、工具、技能不在同一个维度上 原创
    09-11
    02
    DeepSeek Harness 实战 05|让两个编码 Agent 共用一份长期记忆 原创
    09-09
    03
    DeepSeek Harness 实战 04|学习笔记:从「已知限制」里读出三处设计张力 原创
    09-08
    更多文章>
    Theme by Vdoing
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式