初识prometheus

Prometheus:云原生时代的监控利器

在当今快速发展的云原生和微服务架构时代,传统的监控系统面临着巨大的挑战:如何高效地收集海量、动态变化的指标?如何实时告警并快速定位问题?如何实现灵活的可视化和强大的数据查询能力?Prometheus,作为 CNCF(云原生计算基金会)的毕业项目,凭借其强大的功能和云原生友好的设计,已成为监控领域的事实标准。

本文将带你深入了解 Prometheus 的核心概念、架构、优势以及如何快速上手。

一、什么是 Prometheus?

Prometheus 是一个开源的系统监控和告警工具包,最初由 SoundCloud 开发,并于 2016 年加入 CNCF。它特别适用于记录任意纯数字时间序列数据,即按时间顺序记录的数值。

核心特点:

  • 多维数据模型: 数据由指标名称(metric name)和键值对(标签/labels)唯一标识。例如:http_requests_total{method="POST", endpoint="/api/users", status="200"}。这种模型使得查询和聚合极其灵活。
  • 灵活的查询语言(PromQL): Prometheus Query Language (PromQL) 允许用户以强大的方式选择和聚合时间序列数据。
  • 不依赖分布式存储: 单个 Prometheus 服务器是自治的,本地存储其抓取的所有数据,无需依赖外部存储(如 HDFS)。
  • 通过 HTTP 拉取(Pull)模式收集数据: Prometheus 周期性地从配置的目标(targets)的 HTTP 接口拉取(scrape)指标数据。这与传统的推送(Push)模式(如 StatsD)不同。
  • 服务发现: 支持动态发现监控目标,与 Kubernetes、Consul、etcd 等集成,自动管理目标列表。
  • 强大的告警功能: 通过 Alertmanager 组件,支持基于 PromQL 的复杂告警规则,并能对告警进行分组、抑制、静默和路由到多种通知渠道(邮件、Slack、PagerDuty 等)。
  • 图形化和仪表板: 虽然自带简单的图形界面,但通常与 Grafana 等专业可视化工具集成,创建丰富的仪表板。

二、Prometheus 核心组件与架构

在这里插入图片描述

一个典型的 Prometheus 监控系统包含以下核心组件:

  1. Prometheus Server: 核心组件,负责:

    • 抓取(Scraping): 从配置的 HTTP endpoints 拉取指标数据。
    • 存储(Storage): 将收集到的时间序列数据存储在本地磁盘。
    • 查询(Querying): 通过 PromQL 提供数据查询接口。
    • 规则处理(Rule Processing): 计算预定义的记录规则(Recording Rules)和告警规则(Alerting Rules)。
  2. Exporters: 这是 Prometheus 生态的关键。由于 Prometheus 本身不直接监控应用程序,需要由 Exporter 将第三方系统的指标暴露为 Prometheus 可读的格式(通常是 /metrics 的 HTTP 端点)。

    • 官方/社区 Exporter:node_exporter (监控主机)、mysqld_exporter (MySQL)、redis_exporter (Redis)、blackbox_exporter (黑盒探测) 等。
    • 应用内嵌 Exporter: 许多现代应用(如 Kubernetes 组件、etcd)直接内置了 Prometheus metrics 端点。
  3. Pushgateway: 用于处理来自短生命周期作业(如批处理任务、Cron Jobs)的指标。这些作业在 Prometheus 完成抓取前可能已经结束,因此需要先将指标推送到 Pushgateway,再由 Prometheus 从 Pushgateway 拉取。

  4. Alertmanager: 专门处理由 Prometheus Server 发送的告警。它负责:

    • 去重(Deduplication)
    • 分组(Grouping)
    • 路由(Routing)到正确的接收者
    • 抑制(Inhibition)
    • 静默(Silences)
    • 发送通知(通过邮件、Webhook、Slack 等)
  5. 客户端库(Client Libraries): 用于在应用程序代码中直接暴露自定义指标(如计数器 Counter、仪表 Gauge、直方图 Histogram、摘要 Summary)。支持多种语言(Go, Java, Python, Ruby, .NET 等)。

  6. 可视化工具(如 Grafana): 虽然不是 Prometheus 的一部分,但 Grafana 是最流行的与 Prometheus 集成的可视化平台,用于创建交互式仪表板。

[应用程序/服务] --> (通过客户端库暴露指标 或 Exporter)
                                      |
                                      v
                            [Prometheus Server]
                                  /       \
                                 /         \
                    (抓取数据) /           \ (发送告警)
                               /             \
                              v               v
                  [本地时间序列数据库]    [Alertmanager]
                              |               |
                              |               v
                              |       [通知渠道 (邮件, Slack...)]
                              |
                              v
                     [Grafana (可视化)]

三、快速上手:部署一个简单的 Prometheus

1. 下载并运行 Prometheus

# 下载 Prometheus (以 Linux 为例)
wget https://github.com/prometheus/prometheus/releases/download/v2.50.0/prometheus-2.50.0.linux-amd64.tar.gz
tar xvfz prometheus-2.50.0.linux-amd64.tar.gz
cd prometheus-2.50.0.linux-amd64/

# 查看配置文件 (prometheus.yml)
# 默认配置会监控自己
cat prometheus.yml

# 启动 Prometheus
./prometheus --config.file=prometheus.yml

Prometheus 默认在 http://localhost:9090 提供 Web UI。

2. 配置监控目标

编辑 prometheus.yml,添加一个 node_exporter 目标:

global:
  scrape_interval: 15s # 默认抓取间隔

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090'] # 监控 Prometheus 自身

  - job_name: 'node' # 监控主机
    static_configs:
      - targets: ['your-server-ip:9100'] # 假设 node_exporter 运行在 9100 端口

重启 Prometheus 服务,访问 Web UI 的 Status -> Targets 页面,应该能看到新的目标处于 UP 状态。

3. 使用 PromQL 查询

在 Prometheus Web UI 的 Graph 标签页,尝试一些简单的 PromQL 查询:

  • up{job="node"}:查看 node 任务的监控目标是否在线(1=在线,0=离线)。
  • node_memory_MemAvailable_bytes{job="node"}:查看主机可用内存。
  • rate(node_cpu_seconds_total{job="node",mode="idle"}[5m]):计算过去 5 分钟 CPU 空闲时间的平均使用率(注意:idle 时间减少代表 CPU 使用增加)。
  • node_filesystem_avail_bytes{job="node",mountpoint="/"} / node_filesystem_size_bytes{job="node",mountpoint="/"}:计算根分区的可用空间百分比。

4. 集成 Grafana

  1. 安装并启动 Grafana。
  2. 在 Grafana 中添加 Prometheus 作为数据源(URL: http://<your-prometheus-host>:9090)。
  3. 导入或创建仪表板。例如,导入 Node Exporter Full 仪表板 (ID: 1860) 可以全面监控主机状态。

prometheus doc

prometheus与k8s的结合

真实的生产环境往往很复杂,并不能通过单一的prometheus解决整个系统的监控,因此这里推荐一个工业级别的项目
kube-prometheus
接下来对于prometheus的学习也是基于kube-prometheus开源库进行的,可以这样说,只要你把这个库掌握了你就可以直接去找与prometheus相关的工作了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

andrewbytecoder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值