当前位置: 首页 > news >正文

初识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相关的工作了

http://www.lryc.cn/news/608659.html

相关文章:

  • Selenium Web 自动化
  • 【软考中级网络工程师】知识点之 RIP 协议
  • 华为智能家居与Spring人工智能
  • 决策树学习全解析:从理论到实战
  • C++手撕基于ID3算法的决策树
  • 著作权登记遇难题:创作者如何突破确权困境?
  • 自动驾驶中的传感器技术19——Camera(10)
  • ELECTRICAL靶场
  • ClickHouse Windows迁移方案与测试
  • 【动态规划算法】路径问题
  • WebRTC前处理模块技术详解:音频3A处理与视频优化实践
  • Node.js (Express) + MySQL + Redis构建项目流程
  • 决策树的实际案例
  • sqli-labs:Less-25关卡详细解析
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | TodoList(代办事项组件)
  • 子区间问题
  • 主机序列号的修改方法与原理
  • Azure DevOps 中的代理
  • 渗透作业4
  • LeetCode - 合并两个有序链表 / 删除链表的倒数第 N 个结点
  • webrtc弱网-QualityScaler 源码分析与算法原理
  • PLC传感器接线与输出信号接线
  • WSUS服务器数据库维护与性能优化技术白皮书
  • 力扣 hot100 Day64
  • 六、Linux核心服务与包管理
  • 若没有安全可靠性保障,对于工程应用而言,AI或许就是大玩具吗?
  • Python黑科技:用@property优雅管理你的属性访问
  • ThinkPHP5x,struts2等框架靶场复现
  • 控制建模matlab练习10:滞后补偿器
  • 吴恩达【prompt提示词工程】学习笔记