当前位置: 首页 > 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.dtcms.com/a/312826.html

相关文章:

  • 控制建模matlab练习04:二阶系统的时域响应
  • Supergateway教程
  • 前端技术制作简单网页游戏
  • 力扣457:环形数组是否存在循环
  • 【Excel】利用函数和Power Query进行数据分析
  • Java企业级应用性能优化实战
  • 控制建模matlab练习09:超前补偿器
  • K8S部署ELK(四):部署logstash
  • 使用trae进行本地ai对话机器人的构建
  • 【LLM】 BaseModel的作用
  • 《软件测试与质量控制》实验报告三 系统功能测试
  • Tomcat访问Controller的内部实现原理
  • 批发订货系统:私有化部署与源代码支持越来越受市场追捧
  • 【Android】RecyclerView循环视图(2)——动态加载数据
  • IntelliJ IDEA开发编辑器摸鱼看股票数据
  • git用户设置
  • LangChain4J入门:使用SpringBoot-start
  • 【abc417】E - A Path in A Dictionary
  • template<typename R = void> 意义
  • 2. 字符设备驱动
  • LeetCode Hot 100,快速学习,不断更
  • #C语言——刷题攻略:牛客编程入门训练(四):运算
  • Kazam产生.movie.mux后恢复视频为.mp4
  • 小宿科技:AI Agent 的卖铲人
  • zookeeper持久化和恢复原理
  • idea中.xml文件的块注释快捷键
  • Hugging Face 模型文件介绍
  • IDEA查看源码利器XCodeMap插件
  • 【高等数学】第七章 微分方程——第八节 常系数非齐次线性微分方程
  • 【lucene】ByteBuffersIndexInput