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.pswp.cn/diannao/94176.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/94176.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/94176.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从源码角度分析导致 JVM 内存泄露的 ThreadLocal

文章目录1. 为什么需要ThreadLocal2. ThreadLocal的实现解析1.1 实现分析1.2 具体实现1.3 ThreadLocalMap中Hash冲突的解决1.3.1 Hash冲突解决的几种方法1.3.1.1 开放定值法1.3.1.2 链地址法1.3.1.3再哈希法&#xff1a;1.3.1.4 建立公共溢出区1.3.2 ThreadLocal解决Hash冲突的…

React组件化的封装

1. 组件化封装的结构 1.1. 定义一个类(组件名必须是大写&#xff0c;小写会被认为是html元素), 继续自React.Component1.2. 实现当前组件的render函数 render当中返回的jsx内容&#xff0c;就是之后React会帮助我们渲染的内容 1.3. 结构图如下&#xff1a; data 方法render()…

嵌入式仿真教学的革新力量:深圳航天科技创新研究院引领高效学习新时代

嵌入式系统作为现代信息技术的核心基石&#xff0c;已深度融入工业控制、物联网、智能终端等关键领域。高校肩负着培养嵌入式技术人才的重任&#xff0c;但传统教学方式正面临严峻挑战&#xff1a;硬件实验设备投入巨大、更新滞后、维护繁琐、时空限制严格&#xff0c;难以满足…

六、Linux核心服务与包管理

作者&#xff1a;IvanCodes 日期&#xff1a;2025年8月3日 专栏&#xff1a;Linux教程 要保证一个Linux系统稳定、安全、功能完备&#xff0c;有效管理其后台服务和软件包是至关重要的。本文将深入介绍现代Linux系统中四个核心的管理工具&#xff1a;systemctl (服务管理)&…

【数据结构】哈希表实现

目录 1. 哈希概念 2 哈希冲突和哈希函数 3. 负载因子 4. 将关键字转为整数 5. 哈希函数 5.1直接定址法 5.2 除法散列法/除留余数法 5.3 乘法散列法&#xff08;了解&#xff09; 5.4 全域散列法&#xff08;了解&#xff09; 5.5 其他方法&#xff08;了解&#xff09…

PostgreSQL面试题及详细答案120道(21-40)

《前后端面试题》专栏集合了前后端各个知识模块的面试题&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

数据建模及基本数据分析

目录 &#xff08;一&#xff09;数据建模 1.以数据预测为核心的建模 2.以数据聚类为核心的建模 &#xff08;二&#xff09;基本数据分析 1.Numpy 2. Pandas 3.实例 4.Matplotlib 资料自取&#xff1a; 链接: https://pan.baidu.com/s/1PROmz-2hR3VCTd6Eei6lFQ?pwdy8…

电动汽车DCDC转换器的用途及工作原理

在电动汽车的电气架构中&#xff0c;DCDC转换器&#xff08;直流-直流转换器&#xff09;是一个至关重要的部件&#xff0c;负责协调高压动力电池&#xff08;通常300V~800V&#xff09;与低压电气系统&#xff08;12V/24V&#xff09;之间的能量流动。它的性能直接影响整车的能…

PyTorch 应用于3D 点云数据处理汇总和点云配准示例演示

PyTorch 已广泛应用于 3D 点云数据处理&#xff0c;特别是在深度学习驱动的任务中如&#xff1a; 分类、分割、配准、重建、姿态估计、SLAM、目标检测 等。 传统 3D 点云处理以 PCL、Open3D 为主&#xff0c;深度学习方法中&#xff0c;PyTorch 是构建神经网络处理点云的核心框…

ABP VNext + Quartz.NET vs Hangfire:灵活调度与任务管理

ABP VNext Quartz.NET vs Hangfire&#xff1a;灵活调度与任务管理 &#x1f680; &#x1f4da; 目录ABP VNext Quartz.NET vs Hangfire&#xff1a;灵活调度与任务管理 &#x1f680;✨ TL;DR&#x1f6e0; 环境与依赖&#x1f527; Quartz.NET 在 ABP 中接入1. 安装与模块…

[硬件电路-148]:数字电路 - 什么是CMOS电平、TTL电平?还有哪些其他电平标准?发展历史?

1. CMOS电平定义&#xff1a; CMOS&#xff08;Complementary Metal-Oxide-Semiconductor&#xff09;电平基于互补金属氧化物半导体工艺&#xff0c;由PMOS和NMOS晶体管组成。其核心特点是低功耗、高抗干扰性和宽电源电压范围&#xff08;通常为3V~18V&#xff09;。关键参数&…

0基礎網站開發技術教學(二) --(前端篇 2)--

書接上回說到的前端3種主語言以及其用法&#xff0c;這期我們再來探討一下javascript的一些編碼技術。 一) 自定義函數 假如你要使用一個功能&#xff0c;正常來說直接敲出來便可。可如果這個功能你要用不止一次呢?難道你每次都敲出來嗎?這個時侯&#xff0c;就要用到我們的自…

前端 拼多多4399笔试题目

拼多多 3 选择题 opacity|visibity|display区别 在CSS中&#xff0c;opacity: 0 和 visibility: hidden 都可以让元素不可见&#xff0c;但它们的行为不同&#xff1a; ✅ opacity: 0&#xff08;透明度为0&#xff09; 元素仍然占据空间&#xff08;不移除文档流&#xff0…

数琨创享:全球汽车高端制造企业 QMS质量管理平台案例

01.行业领军者的质量升级使命在全球汽车产业链加速升级的浪潮中&#xff0c;质量管控能力已成为企业核心竞争力的关键。作为工信部认证的制造业单项冠军示范企业&#xff0c;万向集团始终以“全球制造、全球市场、做行业领跑者”为战略愿景。面对奔驰、宝马、大众等“9N”高端客…

GaussDB 约束的使用举例

1 not null 约束not null 约束强制列不接受 null 值。not null 约束强制字段始终包含值。这意味着&#xff0c;如果不向字段添加值&#xff0c;就无法插入新记录或者更新记录。GaussDB使用pg_get_tabledef()函数获取customers表结构&#xff0c;如&#xff1a;csdn> set sea…

自动驾驶中的传感器技术13——Camera(4)

1、自驾Camera开发的方案是否归一化对于OEM&#xff0c;或者自驾方案商如Mobileye如果进行Camera的开发&#xff0c;一般建议采用Tesla的系统化最优方案&#xff0c;所有Camera统一某个或者某两个MP设计&#xff08;增加CIS议价权&#xff0c;减少Camera PCBA的设计维护数量&am…

开源利器:glTF Compressor——高效优化3D模型的终极工具

在3D图形开发领域,glTF(GL Transmission Format)已成为Web和移动端3D内容的通用标准。然而,3D模型的文件体积和纹理质量往往面临权衡难题。Shopify最新开源的glTF Compressor工具,为开发者提供了一套精细化、自动化的解决方案,让3D模型优化既高效又精准。本文将深入解析这…

LeetCode Hot 100,快速学习,不断更

工作做多了有时候需要回归本心&#xff0c;认真刷题记忆一下算法。那就用我这练习时长两年半的代码农民工来尝试着快速解析LeetCode 100吧 快速解析 哈希 1. 两数之和 - 力扣&#xff08;LeetCode&#xff09; 这题很简单啊&#xff0c;思路也很多 1. 暴力搜索&#xff0c;…

MySQL的子查询:

目录 子查询的相关概念&#xff1a; 子查询的分类&#xff1a; 角度1&#xff1a; 单行子查询&#xff1a; 单行比较操作符&#xff1a; 子查询的空值情况&#xff1a; 多行子查询&#xff1a; 多行比较操作符&#xff1a; ANY和ALL的区别&#xff1a; 子查询为空值的…

Python批处理深度解析:构建高效大规模数据处理系统

引言&#xff1a;批处理的现代价值在大数据时代&#xff0c;批处理&#xff08;Batch Processing&#xff09; 作为数据处理的核心范式&#xff0c;正经历着复兴。尽管实时流处理备受关注&#xff0c;但批处理在数据仓库构建、历史数据分析、报表生成等场景中仍不可替代。Pytho…