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

01 一文理解,Prometheus详细介绍

01 一文理解,Prometheus详细介绍

博客网站:https://qiuyl.com

介绍

大家好,我是秋意零。

Prometheus 是一个开源的系统监控和报警工具包,最初由SoundCloud开发,并在2012年作为开源项目发布。Prometheus 目前由Cloud Native Computing Foundation(CNCF)维护,已经成为监控和报警系统的事实标准,尤其在云原生环境中。

主要功能

  1. 多维数据模型:通过标签(键值对)定义的时间序列数据模型,可以灵活地对指标进行分类和过滤。
  2. 强大的查询语言(PromQL):提供了强大的查询语言 PromQL,允许用户对存储的时间序列数据进行复杂的查询和聚合操作。
  3. 时间序列数据库:内置高效的时间序列数据库,用于存储所有抓取到的指标数据。
  4. 抓取拉模型:使用 HTTP 协议定期从被监控的目标抓取指标数据,采用“拉”的方式获取数据。
  5. 自动化服务发现:支持多种服务发现机制,如 Kubernetes、Consul、DNS 等,可以自动发现监控目标。
  6. 多种数据导出格式:支持多种 Exporter,可以通过标准化的格式暴露各种系统和应用的指标。
  7. 告警管理:集成 Alertmanager,用于定义和处理告警规则,并支持多种通知方式,如邮件、Slack、PagerDuty 等。
  8. 可视化:内置简单的图表展示功能,并且与 Grafana 深度集成,可以创建复杂的仪表盘进行数据可视化。
  9. 扩展性强:通过远程存储接口,可以与其他存储系统集成,扩展 Prometheus 的数据存储能力。

架构图

架构图分解:

  • 左边部分:采集区(指标收集)
  • 中间部分:存储计算区(数据处理)
  • 右边部:应用区(告警、展示)

1)采集区

Exporters:用于将各种系统、服务和应用程序的指标转换为 Prometheus 可抓取格式的组件。它们通常运行在被监控系统的旁边,并持续暴露指标给 Prometheus 抓取。

特点:

持续运行: Exporters 通常作为长期运行的服务,持续暴露指标。

主动抓取: Prometheus 定期抓取 Exporters 暴露的指标。

标准化接口: Exporters 通常提供一个标准化的 HTTP 接口,Prometheus 通过配置抓取这些接口的数据。

应用场景:

  • 系统级监控: Node Exporter 用于收集主机系统的指标(如 CPU、内存、磁盘使用情况)。
  • 服务监控: MySQL Exporter、Redis Exporter 分别用于监控 MySQL 数据库和 Redis 服务。
  • 应用监控: Prometheus Python Client 用于监控基于 Python 的应用程序,通过集成 Prometheus 客户端库暴露的指标。

示例:

node_exporter 暴露主机系统的指标,Prometheus 定期抓取这些指标。

mysql_exporter 暴露 MySQL 数据库的性能指标,Prometheus 抓取这些指标进行监控。

Pushgateway:用于收集短暂或非常驻任务的指标的组件,这些任务可能无法持续运行以供 Prometheus 主动抓取。

特点:

指标推送: 短暂或一次性的作业将指标推送到 Pushgateway,而不是等待 Prometheus 抓取。

临时存储: Pushgateway 作为一个中间层,临时存储这些推送过来的指标,直到 Prometheus 来抓取。

适合短期任务: 主要用于那些无法持续运行的任务,例如批处理作业、临时脚本等。

应用场景:

  • 短暂作业监控: 例如,每天凌晨运行一次的数据处理批处理作业,通过 Pushgateway 推送指标。
  • 非常驻任务: 例如,临时启动的脚本或作业,这些任务在完成后会立即终止。

示例:

一个定时运行的批处理作业在完成后推送其运行时间和错误数到 Pushgateway,Prometheus 定期从 Pushgateway 抓取这些指标。

2)存储计算区

Prometheus 的 Service Discovery 功能旨在自动发现并监控动态基础设施中的目标(例如,容器化环境中的服务实例)。这是 Prometheus 在云原生环境中广泛使用的一个关键特性。

主要功能:

  • 自动发现监控目标:Prometheus 可以自动发现并监控动态变化的服务,无需手动更新配置。这对于容器化应用和动态伸缩的服务特别有用。
  • 支持多种服务发现机制:Prometheus 支持多种常见的服务发现机制,涵盖了大多数现代基础设施和编排系统。

支持的服务发现机制:

  • Kubernetes:自动发现 Kubernetes 集群中的所有服务、Pod 和 Endpoints,并根据标签和注解进行过滤和选择。
  • Consul:使用 Consul 服务发现注册表来自动发现并监控注册的服务。
  • DNS SRV 记录:基于 DNS SRV 记录来发现服务,适用于使用 DNS 进行服务发现的环境。
  • EC2:自动发现 AWS EC2 实例,根据标签和元数据来筛选目标。
  • GCE:自动发现 Google Cloud Engine (GCE) 实例,支持基于标签的过滤。
  • Azure:支持 Azure 虚拟机和规模集的自动发现,基于标签进行筛选。
  • OpenStack:支持 OpenStack 实例的自动发现,通过 OpenStack API 获取实例信息。
  • Triton:支持 Triton 数据中心自动发现实例。
  • Marathon:支持 Mesos/Marathon 环境的服务自动发现。
  • 文件静态配置:通过静态文件配置实现自定义的服务发现机制,文件内容会被动态重新加载。

使用示例

以下是一个Prometheus 配置,使用 Kubernetes 服务发现的示例:

这段配置将会抓取 Kubernetes 集群中所有属于 default 命名空间的 Pod。

scrape_configs:- job_name: 'kubernetes-pods'kubernetes_sd_configs:- role: podrelabel_configs:- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_pod_name]separator: ;regex: default;(.*)target_label: pod_namereplacement: $1action: replace

Prometheus Server 由多个核心组件组成,其中 Retrieval(收集)、TSDB(存储) 和 HTTP Server(查询) 是其关键部分。

a)Retrieval(数据检索) 组件负责从配置的监控目标(scrape targets)中定期抓取指标数据。它是 Prometheus 的数据采集部分。

主要功能

  • 抓取配置:根据 prometheus.yml 中的 scrape_configs 配置,确定需要抓取的监控目标和抓取频率。
  • 数据抓取:通过 HTTP 请求定期访问每个监控目标的 /metrics 端点,获取最新的指标数据。
  • 标签处理:在抓取过程中对指标数据进行标签重写(relabeling)和筛选,以确保数据的一致性和可用性。

工作流程

  • 配置抓取目标:Prometheus 根据 scrape_configs 配置确定抓取目标。
  • 定期抓取数据:按照配置的抓取频率,通过 HTTP 请求抓取每个目标的指标数据。
  • 标签处理和过滤:对抓取到的指标数据进行标签处理和过滤。
  • 传递给存储组件:将处理后的数据传递给存储组件(TSDB)。

b)TSDB(时间序列数据库):TSDB(Time Series Database)是 Prometheus 内置的时间序列数据库,用于高效地存储和压缩时间序列数据。

主要功能

  • 数据存储:存储从监控目标抓取的所有指标数据。
  • 数据压缩:使用高效的存储格式和压缩算法,减少存储空间占用。
  • 数据检索:支持快速的时间序列数据检索,满足查询和分析需求。

工作流程

  1. 接收数据:接收 Retrieval 组件抓取并处理后的指标数据。
  2. 存储和压缩:将数据按照时间序列的方式进行存储和压缩。
  3. 数据检索:提供高效的数据检索接口,支持 PromQL 查询操作。

存储结构

  • 块存储:TSDB 将数据划分为固定时间跨度的块,每个块包含一组时间序列数据。
  • WAL(预写日志):在写入数据之前,首先记录在 WAL 中,确保数据的持久性和可靠性。
  • 压缩算法:TSDB 使用了多种压缩算法来优化存储效率。

c)HTTP Server(HTTP 服务器):是 Prometheus 提供的 Web 服务接口,用于与用户和其他系统进行交互。它是 Prometheus 的外部接口部分。

主要功能

  • 查询接口:提供 PromQL 查询接口,允许用户通过 HTTP 请求查询时间序列数据。
  • 管理接口:提供各种管理和调试接口,如 /config/targets/metrics 等,用于查看当前配置、抓取状态和 Prometheus 自身的指标数据。
  • Web UI:提供内置的 Web 界面,用户可以通过浏览器访问 Prometheus 的查询和管理功能。

工作流程

  • 接收请求:接收用户和其他系统通过 HTTP 发起的请求。
  • 处理查询请求:使用 PromQL 从 TSDB 中检索数据并返回结果。
  • 处理管理请求:提供当前配置、抓取状态和 Prometheus 自身的监控数据。
  • 展示 Web UI:通过 Web 界面展示查询结果和管理信息。

3)应用区

Alertmanager 是 Prometheus 监控系统的重要组成部分,专门用于处理和管理告警(alerts)。

主要功能

  1. 接收告警:Alertmanager 从 Prometheus Server 接收告警信息。这些告警是基于 Prometheus 的告警规则定义的,当规则条件满足时触发告警。
  2. 告警去重:对重复的告警进行去重处理,以避免多次发送相同的告警信息。
  3. 告警分组:将相似的告警进行分组,以便于批量处理和发送。例如,可以根据服务或严重程度对告警进行分组。
  4. 告警抑制:支持告警抑制规则,可以在某些条件下抑制告警的发送。例如,当有一个高优先级的告警时,可以抑制相关的低优先级告警。
  5. 告警路由:基于告警内容和标签,定义路由规则,将告警发送到不同的接收器(如邮件、Slack、PagerDuty 等)。
  6. 多种通知渠道:支持多种通知方式,包括邮件、Slack、PagerDuty、Webhook 等,用户可以根据需求配置不同的通知渠道。

工作流程

  1. 告警规则定义:在 Prometheus 的配置文件中定义告警规则,当特定条件满足时触发告警。例如:

    groups:- name: examplerules:- alert: HighCPUUsageexpr: cpu_usage_seconds_total > 80for: 5mlabels:severity: criticalannotations:summary: "High CPU usage detected"description: "CPU usage has been above 80% for more than 5 minutes."
    
  2. 告警发送到 Alertmanager:Prometheus 评估告警规则,当条件满足时,将告警发送到 Alertmanager。

  3. 告警处理

    • Alertmanager 接收告警后,对告警进行去重、分组、抑制等处理。
    • 基于配置的路由规则,将告警路由到相应的接收器。
  4. 通知发送:Alertmanager 将处理后的告警通过配置的通知渠道发送给用户。例如,通过邮件、Slack、PagerDuty 等。

Grafana 是一个开源的、多平台的数据可视化和监控工具,广泛用于构建和查看数据的实时仪表盘。通过 PromQL 与 Prometheus 集成,以查询和可视化 Prometheus 收集的时间序列数据。

主要功能

  1. 数据可视化:提供丰富的图表类型,包括时间序列图、柱状图、饼图、热力图等,用户可以根据需要选择合适的图表类型展示数据。
  2. 多数据源支持:支持多种数据源,包括 Prometheus、Graphite、InfluxDB、Elasticsearch、MySQL、PostgreSQL 等,允许用户从不同的数据源中获取数据进行可视化。
  3. 动态仪表盘:支持创建动态和交互式的仪表盘,用户可以通过变量和模板在仪表盘中切换不同的视图和数据。
  4. 警报和通知:集成告警功能,允许用户基于指定的条件触发告警,并通过邮件、Slack、PagerDuty 等渠道发送通知。
  5. 用户管理:提供用户和团队管理功能,可以定义不同的用户角色和权限,控制仪表盘的访问和编辑权限。
  6. 插件扩展:支持插件系统,用户可以安装和配置第三方插件,扩展 Grafana 的功能和数据源支持。
  7. 共享和嵌入:支持将仪表盘和图表共享给其他用户,或嵌入到其他应用和网页中,方便数据展示和协作。

工作流程

  1. 安装 Grafana:Grafana 可以通过多种方式安装,例如使用 Docker、Kubernetes、二进制文件或包管理器。

    使用 Docker 安装 Grafana:

    docker run -d -p 3000:3000 --name=grafana grafana/grafana
    
  2. 配置数据源

    • 启动 Grafana 后,访问其 Web 界面(默认地址为 http://localhost:3000),并登录(默认用户名和密码都是 admin)。
    • 进入 Configuration -> Data Sources -> Add data source,选择需要添加的数据源类型,并根据提示填写数据源连接信息。
  3. 创建仪表盘

    • 在 Grafana Web 界面中,进入 Dashboards -> New Dashboard,创建一个新的仪表盘。
    • 添加图表和其他可视化组件,配置查询语句和展示方式。
  4. 设置告警

    • 在图表配置中,进入 Alert 选项卡,定义告警规则和条件。
    • 配置告警通知渠道,例如邮件、Slack、PagerDuty 等。
  5. 共享和嵌入:在仪表盘设置中,选择 Share 选项,可以生成共享链接或嵌入代码,将仪表盘或图表嵌入到其他应用中。

相关文章:

  • Java-Stream流-概述、创建、使用:遍历/匹配、筛选、聚合、映射、归约、排序、提取/组合
  • LeetCode hot100-51-G
  • iOS--工厂设计模式
  • Linux基础知识,配置网卡(七)
  • 【算法】位运算算法——两整数之和
  • 手写电纸书天花板,阅读办公新体验 | 汉王手写电纸本 N10 2024 版使用评测
  • 【Python-Pandas】DataFrame选取行数据
  • 5.27作业
  • Linux中 “权限设置修改”
  • 在 MFC 中 UNICODE 加 _T 与 L 长字符串,有什么区别?
  • 样本拟合正弦函数? 梯度下降法? NO,比梯度下降还快的算法.
  • 使用 Django Admin 进行高效的后台管理
  • 【教学类-58-06】黑白三角拼图06(1页3张彩色黑点卡片,一种宫格36张,适合一个班级一次操作)
  • vue3 excel 文件导出
  • 走进全球LED显示龙头艾比森,深挖逆势增长43%的数智化逻辑
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • Android优雅地处理按钮重复点击
  • C语言笔记(第一章:C语言编程)
  • Java,console输出实时的转向GUI textbox
  • js 实现textarea输入字数提示
  • Js基础知识(一) - 变量
  • mongo索引构建
  • passportjs 源码分析
  • PHP面试之三:MySQL数据库
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Sass 快速入门教程
  • uni-app项目数字滚动
  • Vim 折腾记
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 回顾2016
  • 讲清楚之javascript作用域
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 前端路由实现-history
  • 三栏布局总结
  • 主流的CSS水平和垂直居中技术大全
  • MyCAT水平分库
  • 从如何停掉 Promise 链说起
  • ​Linux·i2c驱动架构​
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • ‌分布式计算技术与复杂算法优化:‌现代数据处理的基石
  • #pragma multi_compile #pragma shader_feature
  • $.ajax()参数及用法
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (回溯) LeetCode 46. 全排列
  • (南京观海微电子)——示波器使用介绍
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (转)socket Aio demo
  • (转)大型网站的系统架构
  • .net CHARTING图表控件下载地址
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .NET设计模式(2):单件模式(Singleton Pattern)