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: pod
    relabel_configs:
      - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_pod_name]
        separator: ;
        regex: default;(.*)
        target_label: pod_name
        replacement: $1
        action: 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: example
        rules:
          - alert: HighCPUUsage
            expr: cpu_usage_seconds_total > 80
            for: 5m
            labels:
              severity: critical
            annotations:
              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 选项,可以生成共享链接或嵌入代码,将仪表盘或图表嵌入到其他应用中。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python爬虫之pandas库——数据清洗

安装pandas库 pip install pandas pandas库操作文件 已知在本地桌面有一名为Python开发岗位的csv文件(如果是excel文件可以做简单修改即可,道理是通用的) 打开文件: 打开文件并查看文件内容 from pandas import DataFrame import pandas as pd data_c…

AIGC 010-CLIP第一个文本和图像对齐的大模型!

AIGC 010-CLIP第一个文本和图像对齐的大模型! 文章目录 0 论文工作1 论文方法2 效果 0 论文工作 不客气的说CLIP和扩散模型的成功让计算式视觉领域几乎所有工作都重新做了一遍。 CLIP(对比语言-图像预训练)论文提出了一种新的对比学习方法&a…

【C++课程学习】:二叉树的基本函数实现

🎁个人主页:我们的五年 🔍系列专栏:C课程学习 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 🍉二叉树的结构类型: 🍉1.创建二叉树函数(根据数组&am…

如何将云服务器上操作系统由centos切换为ubuntu

本文将介绍如何将我们购买的云服务器上之前装的centos切换为ubuntu,云服务器以华为云为例,要切换的ubuntu版本为ubuntu20.04。 参考官方文档:切换操作系统_弹性云服务器 ECS (huaweicloud.com) 首先打开华为云官网,登录后点击右…

机器学习(五) -- 监督学习(5) -- 线性回归1

系列文章目录及链接 上篇:机器学习(五) -- 监督学习(4) -- 集成学习方法 - 随机森林 下篇:机器学习(五) -- 监督学习(5) -- 线性回归2 前言 tips&#xff1…

树莓派指令

1.常用指令 2.在终端窗口编辑文本文件 2.1nano编辑器 在文本里ctrlG就可以查看更多的快捷按键 2.2vi编辑器 进入默认为命令模式

Spring-Cloud-OpenFeign源码解析-04-调用流程分析

在Spring-Cloud-OpenFeign源码解析-03-FeignClientFactoryBean分析到,通过Autowired或者Resource注入FeignClient实例的时候,实际上返回的是JDK动态代理对象,具体的实现逻辑在InvocationHandler的invoke方法中 回看ReflectiveFeign.newInsta…

怎么简单的把图片缩小?图片在线改大小的方法

在日常工作中经常需要在网上上传图片,但是一般网上不同的平台对上传的图片大小和尺寸都会有限定的要求,不符合要求无法正常上传使用。所以当遇到图片太大的问题时,该如何快速修改图片大小,有很多的小伙伴都很关注这个问题的解决方…

macOS上用Qt creator编译并跑shotcut

1 简介 Shotcut是一个开源的跨平台的视频编辑软件,支持WIN/MACOS/LINUX等平台,由于该项目的编译较为麻烦,踩坑几许,因此写此文章记录完整编译构建过程,后续按此法编译,可减少走弯路,提高生产力。…

Springboot项目打包:将依赖的jar包输出到指定目录

场景 公司要对springboot项目依赖的jar包进行升级,但是遇到一个问题,项目打包之后,没办法看到他里面依赖的jar包,版本到底是不是升上去了,没办法看到。 下面是项目打的jar包 我们通过反编译工具jdgui,来…

Compose Button移除水波纹效果

一、背景 在使用Compose实现Button按钮时,设计要求移除按钮的水波纹效果,只保留按压效果,经查Compose1.4.3版本中,并没有直接移除水波纹的能力 二、遇到问题 经过多次尝试,使用Compose的Button组件始终无法实现目标效…

SpringBoot基础篇

1:parent 目的:减少依赖配置 开发SpringBoot程序要继承spring-boot-starter-parentspring-boot-starter-parent中定义了若干个依赖管理继承parent模块可以避免多个依赖使用相同技术出现依赖版本冲突继承parent的形式也可以采用引入依赖的i形式实现效果…

《java数据结构》--栈的详解

一.栈的认识 栈是一种不同于链表和顺序表的储存数据结构,它对存储数据和取出数据有着特殊的要求🤔。 首先栈只能从一端存储数据,也就是从一端进,还从这一端出这也是栈最大的特点,这也导致在栈中存取数据都必须遵循先…

FreeRtos进阶——队列的特殊用途

信号量与互斥量都一样,都是特殊的队列。但是只有互斥量实现了优先级继承机制。 信号量与互斥量与队列一样,在操作增加或者减少时,必须先关中断在进行操作! 信号量创建揭秘 图中信号量的创建过程,在代码中的体现本质就是…

vue+antd实践:在输入框光标处插入内容

今天来看一个很简单的需求。 需求描述:在输入框光标处,插入指定的内容。 效果如下: 实现思路:刚开始还在想怎么获取光标的位置,但是发现所做的项目是基于vue3antd组件,那么不简单了嘛,只要调…

SwiftUI初探

SwiftUI 虽然出现了好几年(1.0好像2019年出的,还有SPM也是同一年),现在已经到从1.0到5.0,但受限于对系统的要求(最低iOS13.0,有的要求17.0及以上),每个版本里面差异也很大,语法和Flutter 的Dart 比较像。空闲之余可以先…

Design and implementation of robot impedance controller

机器人阻抗控制器的设计与实现是一个复杂但关键的过程,它涉及到多个方面以确保机器人能够在外界环境的影响下保持稳定的性能。以下是对机器人阻抗控制器设计与实现的详细解答: 一、阻抗控制原理 阻抗控制的基本原理是建立一个期望的机器人位置和接触力…

HTML用法介绍

文章目录 一、HTML概念和模版二、常用标签及用法1.p标签2.span标签3.h标签4.hr标签5.img标签6.a标签7.input标签8.table标签 一、HTML概念和模版 HTML的全称为超文本标记语言&#xff0c;它包括一系列标签组成&#xff0c;模版及各部分注释如下&#xff1a; <!--声明文档类…

iptables练习题

目录 练习题1. 显示当前的iptables规则2. 允许所有来自192.168.1.0/24的TCP流量到本机的22端口&#xff08;SSH&#xff09;3. 禁止所有来自10.0.0.0/8的ICMP流量4. 允许所有出站流量5. 拒绝所有来自外部的HTTP流量&#xff08;80端口&#xff0c;tcp协议&#xff09;6. 删除IN…

设计模式19——观察者模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 观察者模式&#xff08;Observ…