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 选项,可以生成共享链接或嵌入代码,将仪表盘或图表嵌入到其他应用中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/334344.html

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

相关文章

58. UE5 RPG AI行为树的装饰器

书接56. UE5 RPG 给敌人添加AI实现跟随玩家,我们实现了AI一些基础设置,并实现了获取敌人附近的玩家实现了跟随功能 接下来,我们将实现区分职业,并根据职业不同设置不同的攻击距离,并且根据职业实现不同的技能施放。 …

VSCODE中F12无法跳转,快捷键设置F12和insert混淆了

异常现象 最近用新电脑(华为)的时候,发现VSCODE经常按F12无法跳转,在快捷键设置当中,也是设置成功的; 此时重新去快捷键设置,会发现按 F12变为了Insert 解决方法 华为笔记本的Fx按键&#x…

Euler 欧拉系统介绍

Euler 欧拉系统介绍 1 简介重要节点与版本EulerOS 特色EulerOS 与 openEuler 区别联系Euler 与 HarmonyOS 区别联系 2 openEuler特色支持 ARM,x86,RISC-V 等全部主流通用计算架构融入 AI 生态嵌入式实时能力提升引入 OpenHarmony 一些突出功能 参考 1 简…

23-LINUX--TCP连接状态

一.TCP服务的特点 传输层协议主要有两个:TCP 协议和 UDP协议。TCP 协议相对于UDP协议的特点是:面向连接、字节流和可靠传输。 使用TCP协议通信的双方必须先建立连接,然后才能开始数据的读写。双方都必须为该连接分配必要的内核资源&a…

OpenHarmony 适配HDMI接口声卡

高清多媒体接口(High Definition Multimedia Interface,HDMI )是一种全数字化视频和声音发送接口,可以发送未压缩的音频及视频信号。HDMI可用于机顶盒、DVD播放机、个人计算机、电视、游戏主机、综合扩大机、数字音响与电视机等设…

windows中每日定时执行python脚本,解决问题

由于需要一个每天定时执行的任务,所以需要定时启动,网上看了很多方法,感觉不能在python脚本种写个while true 定时执行,占资源不说还不可靠。 最后考虑通过系统工具定时启动,发现linux中有crontab,windows…

OpenHarmony实战开发——宿舍全屋智能开发指南

项目说明 基于OpenAtom OpenHarmony(以下简称“OpenHarmony”)、数字管家开发宿舍全屋智能,实现碰一碰开门、碰一碰开灯、碰一碰开风扇以及烟感检测。因为各项目开发流程大体相似,本文主要以碰一碰开门为例介绍如何在现有OpenHar…

海信集团携纷享销客启动LTC数字化落地 推动ToB业务再升级

日前,海信集团携手连接型CRM纷享销客正式启动LTC(Leads to Cash)数字化平台实施落地项目。作为海信集团数字化的重要里程碑,该项目将通过统一规划、统一投资、统一平台、资源共享和数据赋能,构建ToB业务数字化经营管理…

Python代码:十八、生成数字列表

1、描述 牛牛在牛客网系统录入了一连串数字,数字之间依靠逗号隔开,你能帮助他将这些数字存储在列表中吗,列表元素以int的形式。 输入描述: 输入一行整数,数字之间以空格间隔。 输出描述: 输出这些数字…

【基础篇-Day8:JAVA字符串的学习】

目录 1、常用API2、String类2.1 String类的特点2.2 String类的常见构造方法2.3 String类的常见面试题:2.3.1 面试题一:2.3.2 面试题二:2.3.3 面试题三:2.3.4 面试题四: 2.4 String类字符串用于比较的方法2.5 String类字…

5.28_Java语法_运算符,接收键盘数据

1、运算符 具体应用同我C语言操作符详解博客相同,另有补充会直接写 1.1、基本的算术运算符、符号做连接符 CSDN 具体应用同我C语言操作符详解博客相同 符号做连接符: ""符号与字符串运算连用的时候是用作连接符的,其结果依然是一个字符串…

【Java】类和对象

类和类的实例化 类就是一类对象的统称。对象就是这一类具体化的一个实例。 声明一个类就是创建一个新的数据类型,而类在 Java 中属于 引用类型 , Java 使用关键字 class 来声明类。我们来 看以下简单的声明一个类。 基本语法: class &…

3步骤找回丢失文件!EasyRecovery让你轻松应对数据灾难!

EasyRecovery:数据丢失的终结者,您的数字世界守护神 在数字化时代,数据已经成为我们生活的一部分。无论是个人照片、重要文件还是企业资料,数据都扮演着重要的角色。然而,意外删除、格式化、系统崩溃或病毒攻击等原因导…

OrangePi AIpro测评:智能与创新的完美结合

OrangePi AIpro上手指南 简介 香橙派与华为合作发布的香橙派AiPro为Ai主力,为边缘设备的Ai计算提供了可能。 集成图形处理器,拥有8GB/16GB LPDDR4X(我这个是8G内存版本的),可以外接32GB/64GB/128GB/256GB eMMC模块&a…

python自动化-自动化网络配置工具v2(可巡检,可批量配置)

在日常工作中遇到需要配置相同配置的场景,网络工程师一个个去登陆配置会让工作效率显得没那么高效。 但是随着科技发展,人们不断的学习,我们似乎可以使用一些软件或者脚本来帮助我们实现巡检任务或者配置任务。 今天我想给大家分享一款我自己…

攻击同学网络,让同学断网

技术介绍:ARP欺骗 ARP欺骗(ARP spoofing)是一种网络攻击技术,它通过伪造ARP(地址解析协议)响应包来欺骗目标设备,使其将网络流量发送到攻击者指定的位置。具体操作步骤如下: 攻击者…

Spark SQL 中DataFrame DSL的使用

在上一篇文章中已经大致说明了DataFrame APi,下面我们具体介绍DataFrame DSL的使用。DataFrame DSL是一种命令式编写Spark SQL的方式,使用的是一种类sql的风格语法。 文章链接: 一、单词统计案例引入 import org.apache.spark.sql.{DataFrame, SaveMod…

鸿蒙ArkUI-X跨语言调用说明:【平台桥接开发指南(Android)BridgePlugin】

BridgePlugin (平台桥接) 本模块提供ArkUI端和Android平台端消息通信的功能,包括数据传输、方法调用和事件调用。需配套ArkUI端API使用,ArkUI侧具体用法请参考[Bridge API]。 说明: 开发前请熟悉鸿蒙开发指导文档: gitee.com/li-…

采用java语言+B/S架构+后端SpringBoot前端Vue开发的ADR药品不良反应智能监测系统源码

采用java语言+B/S架构+后端SpringBoot前端Vue开发的ADR药品不良反应智能监测系统源码 ADR监测引擎每日主动获取检验数据、病历内容(可拓展)、以及其他临床数据,根据知识库内容自动判定患者是否有不良反应迹象&#xf…

Diffusion Model, Stable Diffusion, Stable Diffusion XL 详解

文章目录 Diffusion Model生成模型DDPM概述向前扩散过程前向扩散的逐步过程前向扩散的整体过程 反向去噪过程网络结构训练和推理过程训练过程推理过程优化目标 详细数学推导数学基础向前扩散过程反向去噪过程 Stable Diffusion组成结构运行流程网络结构变分自编码器 (VAE)文本编…