Prometheus:开源监控解决方案的力量

news2024/10/10 20:17:59

前言

在当今高度数字化和云原生应用的时代,监控系统是确保系统稳定性和性能的关键组成部分。而 Prometheus 作为一种开源的监控解决方案,正在成为越来越多企业和开发者的首选。本文将深入探讨 Prometheus 的特性、优势以及如何利用它来构建强大的监控系统。

一、什么是 Prometheus

Prometheus是一种开源的系统监控和警报工具包,最初由 SoundCloud 开发并于 2012 年发布。它已成为 CNCF(Cloud Native Computing Foundation)的一部分,得到了广泛的社区支持和贡献。

Prometheus 核心特性:

  1. 多维数据模型: Prometheus 通过时间序列数据来描述监控数据。每条时间序列由指标名称和一组键值对标签唯一标识。
  2. 灵活的查询语言: PromQL 是 Prometheus 的查询语言,支持强大的多维度数据分析和聚合功能,如查询、过滤、聚合和计算。
  3. 实时警报: Prometheus 支持灵活的警报规则定义和管理,可以及时响应监控数据中的异常情况。
  4. 可扩展性和易部署: Prometheus 具有良好的可扩展性,能够与其他工具和系统集成。它也支持多种部署方式,包括单机、多机和容器化部署。
  5. 数据持久化: Prometheus 使用本地存储以简化部署和运维,并通过分片和压缩来优化存储效率。

二、Prometheus 发展历史

Prometheus 的发展历史可以追溯到 2012 年,以下是其主要发展阶段和关键事件:

  1. 创始和开源发布(2012年)
    • Prometheus 最初由 SoundCloud 的工程师团队开发,作为一种内部监控解决方案。
    • 在 2012 年,SoundCloud 将 Prometheus 开源发布,成为开放社区的一部分。
  2. 成为 CNCF 项目(2016年)
    • 2016 年,Prometheus 被 Cloud Native Computing Foundation(CNCF)接纳为其项目之一。
    • 这一举动加强了 Prometheus 在云原生和容器化技术生态系统中的地位,吸引了更广泛的社区参与和贡献。
  3. 1.0 版本发布(2016年)
    • 2016 年 11 月,Prometheus 发布了 1.0 版本,标志着其稳定性和生产就绪性的确认。
    • 此版本的发布进一步推动了 Prometheus 在企业和开发者社区中的广泛采用。
  4. 生态系统扩展(2017年以后)
    • 随着时间的推移,Prometheus 生态系统迅速扩展,包括各种 Exporter、集成插件、客户端库和可视化工具的增加。
    • 社区贡献者和合作伙伴不断推动 Prometheus 功能和兼容性的增强。
  5. PromQL 和功能增强
    • Prometheus 的查询语言 PromQL 在功能上不断演进,增加了更多复杂的查询和聚合功能,使其更适合于复杂的监控和分析场景。
  6. Cloud Native 推广(2018年以后)
    • 随着云原生技术的兴起,Prometheus 作为一种本地的云原生监控解决方案得到了广泛应用。
    • 它与 Kubernetes 等容器编排平台的集成使其成为云原生应用监控的重要组成部分。
  7. 持续发展和更新
    • Prometheus 继续保持活跃的开发和更新状态,定期发布新版本,以应对新的技术挑战和用户需求。
    • 其在监控、告警、数据存储和可扩展性方面的不断改进,使其保持了领先地位。

三、Prometheus 应用场景

Prometheus 作为一种灵活、强大的开源监控解决方案,适用于多种应用场景。

  1. 微服务架构监控
    • 在微服务架构中,通常有多个服务实例运行并且动态变化。Prometheus 能够轻松地监控每个服务的性能指标,如请求响应时间、吞吐量、错误率等。
    • Prometheus 的多维数据模型和灵活的查询语言(PromQL)使得在高度动态的微服务环境中进行监控成为可能。
  2. 容器化环境监控
    • 在使用容器编排工具如 Kubernetes 管理容器化应用时,Prometheus 可以集成到 Kubernetes 的监控解决方案中。
    • 它能够监控每个容器的资源使用情况(CPU、内存、存储)、容器健康状态以及整个集群的性能指标,帮助运维团队实时了解和管理系统状态。
  3. 云原生监控
    • 作为云原生应用的一部分,Prometheus 支持自动扩展和弹性架构的监控需求。
    • 它能够与云平台(如 AWS、Azure、Google Cloud)集成,并与其他云原生工具(如 Kubernetes、Prometheus Operator)配合使用,为云环境提供完整的监控解决方案。
  4. 基础设施监控
    • Prometheus 不仅可以监控应用程序层面的指标,还可以监控底层的基础设施组件,如服务器、网络设备、数据库等。
    • 通过 Exporter 或者其他集成方式,Prometheus 能够收集和展示关键的基础设施数据,帮助运维人员及时发现和解决问题。
  5. 自定义监控需求
    • Prometheus 提供了丰富的 API 和插件系统,用户可以根据自己的需求扩展和定制监控功能。
    • 可以通过编写自定义的 Exporter 或者使用已有的 Exporter 来监控特定的应用程序或服务。
  6. 大数据监控
    • 对于需要大规模数据处理和分析的场景,Prometheus 的数据模型和查询语言可以处理海量的时间序列数据,并支持高效的数据存储和查询。

四、Prometheus 体系结构

Prometheus 的体系结构主要包括以下几个关键组件:

  1. Prometheus Server
    • Prometheus Server 是整个监控系统的核心组件,负责收集、存储和查询时间序列数据
    • 它定期通过 HTTP 协议从各个目标(如应用程序、服务、服务器)中拉取指标数据,并将数据存储在本地的时间序列数据库中。
    • Prometheus Server 还提供了一个内置的 Web 界面,可以用于查询和可视化监控数据。
  2. Exporter
    • Exporter 是用于将各种应用程序、服务或系统的指标数据暴露给 Prometheus Server 的代理程序
    • Prometheus 生态系统中有许多现成的 Exporter,如 Node Exporter(用于主机监控)、Blackbox Exporter(用于网络监控)等。
    • 用户也可以编写自定义的 Exporter 来暴露特定应用程序或系统的指标数据。
  3. Pushgateway
    • Pushgateway 允许临时作业(如批处理任务、短期作业)向 Prometheus 推送指标数据
    • 通过 Pushgateway,这些作业可以把采集到的数据推送给 Prometheus Server,而不需要直接与Prometheus Server 通信。
  4. Alertmanager
    • Alertmanager 用于处理由 Prometheus Server 生成的警报信息
    • 它能够根据预先定义的规则对警报进行分类、去重、分组,并发送通知到各种不同的接收端,如电子邮件、Slack 等。
  5. PromQL
    • PromQL 是 Prometheus 的查询语言,用于从时间序列数据库中检索和分析数据。
    • 用户可以使用 PromQL 编写灵活的查询来获取所需的监控数据,并进行各种数据操作和计算。
  6. 存储
    • Prometheus 使用本地存储来保存时间序列数据,默认情况下采用 TSDB(Time Series Database)进行存储。
    • 存储层负责有效地管理和压缩数据,以便进行快速查询和检索。

五、Prometheus 快速入门

Prometheus 是一款数据的监控工具,为了可视化这些监控数据,可以搭配使用 Grafana 可视化工具。使用 Docker Compose 快速部署 Prometheus 和 Grafana 是一个高效的方法,我们以此来演示 Prometheus 的使用。

  1. 安装 Docker 和 Docker Compose:首先确保你的系统已经安装了 Docker 和 Docker Compose。如果没有安装,请参考官方文档进行安装。

  2. 创建项目目录:在你的工作目录下创建一个新的目录,例如 prometheus-grafana,然后进入该目录:

    mkdir prometheus-grafana
    cd prometheus-grafana
    
  3. 创建 Docker Compose 配置文件:在目录中创建一个 docker-compose.yml 文件,内容如下:

    version: '3.8'  # 定义 Docker Compose 文件的版本
    
    services:  # 定义要运行的服务
      prometheus:  # Prometheus 服务配置
        image: prom/prometheus:latest  # 使用的 Prometheus 镜像
        container_name: prometheus  # 容器名称
        volumes:
          - ./prometheus:/etc/prometheus  # 将本地目录映射到容器内的 Prometheus 配置目录
        ports:
          - "9090:9090"  # 将容器的 9090 端口映射到宿主机的 9090 端口
    
      grafana:  # Grafana 服务配置
        image: grafana/grafana:latest  # 使用的 Grafana 镜像
        container_name: grafana  # 容器名称
        depends_on:
          - prometheus  # 定义依赖关系,确保 Prometheus 在 Grafana 之前启动
        ports:
          - "3000:3000"  # 将容器的 3000 端口映射到宿主机的 3000 端口
        environment:
          - GF_SECURITY_ADMIN_PASSWORD=admin  # 设置 Grafana 管理员密码为 admin
        volumes:
          - grafana-storage:/var/lib/grafana  # 将 Grafana 的数据目录映射到本地卷
    
    volumes:  # 定义 Docker 数据卷
      grafana-storage:  # Grafana 数据卷
    
  4. 创建 Prometheus 配置文件:在项目目录下创建一个 prometheus 目录,并在其中创建一个 prometheus.yml 文件,内容如下:

    global:
      scrape_interval: 15s # 拉取间隔
    
    scrape_configs:
      - job_name: 'prometheus'
        static_configs:
          - targets: ['localhost:9090']
    
  5. 启动服务:在项目目录下运行以下命令来启动 Prometheus 和 Grafana:

    docker-compose up -d
    
  6. 访问 Web 界面: Prometheus Web 界面功能单一,Grafana Web 界面功能比较丰富

    • 通过浏览器地址 http://localhost:9090 访问 Prometheus Web 界面

      image.png

    • 通过浏览器地址 http://localhost:3000 访问 Grafana Web 界面

      默认情况下,Grafana 的管理员用户名为 admin,密码为 admin(可以在 docker-compose.yml 中通过 GF_SECURITY_ADMIN_PASSWORD 环境变量更改)。

      image.png

六、Prometheus 监控指标

Prometheus + Grafana 搭建好之后,我们可以监控想要监控的指标。例如在 Grafana 中进行配置:

image.png

当配置好之后,我们可以看到如下效果:

image.png

我们可以针对同一指标选择不同图形进行展示,例如:

image.png

以上的 CPU 指标,是 Prometheus 中内置的,如果我们想要监控自己开发项目的指标该如何做呢?

以 SpringBoot 项目为例,在 SpringBoot 应用程序中集成 Prometheus 监控,通常需要通过以下步骤进行配置和实现:

  1. 添加 Prometheus 客户端库依赖: 首先,在 Spring Boot 项目中,需要添加 Prometheus 客户端库的依赖。Prometheus 提供了多种语言的客户端库,用于在应用程序中暴露和格式化监控指标,例如在 Java 中使用 prometheus/client_java 库。

    <dependency>
      <groupId>io.prometheus</groupId>
      <artifactId>simpleclient_spring_boot</artifactId>
      <version>0.11.0</version>
    </dependency>
    
  2. 配置 Spring Boot 应用:在 Spring Boot 应用程序的配置中,需要将 Prometheus 的相关配置信息集成进来。通常,这包括将 Prometheus 客户端库配置为自动配置,并设置指标的基本信息。

    @SpringBootApplication
    public class YourApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(YourApplication.class, args);
        }
    
        // 定义一个 Bean,配置 Prometheus 客户端的 Spring Boot 指标收集器
        @Bean
        public SpringBootMetricsCollector springBootMetricsCollector(Collection<PublicMetrics> publicMetrics) {
            // 创建 SpringBootMetricsCollector 对象,传入 PublicMetrics 集合作为参数
            return new SpringBootMetricsCollector(publicMetrics);
        }
    
    }
    
  3. 暴露 Metrics 端点:Spring Boot 应用程序默认提供了 /actuator/metrics 端点,该端点用于公开应用程序的各种指标。为了确保 Prometheus 能够正确抓取这些指标,你需要确保以下操作:

    management:  # 管理端点配置
      endpoints:  # 端点配置
        web:  # web 端点配置
          exposure:  # 暴露配置
            include: prometheus  # 包含 prometheus 端点
    
  4. 配置 Prometheus:最后,需要配置 Prometheus 以从 Spring Boot 应用程序中抓取指标。在 Prometheus 的配置文件 prometheus.yml 中,添加以下内容:

    scrape_configs:
      - job_name: 'spring-boot-app'  # 定义作业名称,用于标识这个抓取作业
        metrics_path: '/actuator/prometheus'  # 指定应用程序暴露指标的路径
    
        static_configs:
          - targets: ['your_spring_boot_app_host:port']  # 指定要抓取数据的目标地址
    

    在上述配置中:

    • job_name 是 Prometheus 用来标识这个任务的名称。
    • metrics_path 是 Spring Boot 应用程序暴露监控指标的路径,默认为 /actuator/prometheus
    • targets 是 Spring Boot 应用程序的主机和端口。

七、小结

Prometheus 作为一款功能强大且灵活的监控系统,在当今快速发展的技术领域中扮演着至关重要的角色。其简单的部署方式、强大的查询语言和多维度数据模型,使得开发人员和运维团队能够更加高效地管理和监控复杂的应用环境。

推荐阅读

  1. Spring 三级缓存
  2. 深入了解 MyBatis 插件:定制化你的持久层框架
  3. Zookeeper 注册中心:单机部署
  4. 【JavaScript】探索 JavaScript 中的解构赋值
  5. 深入理解 JavaScript 中的 Promise、async 和 await

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为VPN通过安当ASP身份认证系统快速实现认证

华为VPN通过安当ASP身份认证系统实现认证的过程&#xff0c;主要涉及到Radius OTP&#xff08;一次性密码&#xff09;认证技术的使用。以下是实现这一过程的详细步骤&#xff1a; 1. 前提条件&#xff1a; 确保系统已经激活了Radius模块&#xff0c;并在安全设置中的RADIUS配…

6、双足机器人mpc构建

状态方案预处理由质心动力学状态方程将{状态递推序列x}展开: 其中: x为状态递推序列,其下是堆叠矩阵表达式。xn为n时刻的状态变量,un-1为n-1时刻的输入变量。输出y=x,参考目标Refer=0,误差e=y-Refer=x-0=x,n为预测空间;二次规划前述建立了空间状态方程,接下来就可以…

全球行政边界数据(多年份)

GADM&#xff0c;全称Database of Global Administrative Areas&#xff0c;是一个高精度的全球行政区划数据库。其包含了全球所有国家和地区的国界、省界、市界、区界等多个级别的行政区划边界数据。 两种下载方式&#xff1a; 下载全球所有国家和地区的所有数据 https://gad…

Java核心知识(一):JVM

JVM 前言 文本源自微博客 (www.microblog.store),且已获授权. 一、线程 1.1 基本概念 JVM是可运行java代码的假象计算机,包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收、堆和一个存储方法域。JVM是运行在操作系统之上的&#xff0c;与硬件没有直接的交互。 1.2 运…

RabbitMQ(消息队列)

RabbitMQ 它是消息中间件&#xff0c;是在消息的传输过程中保存消息的容器&#xff0c;实现应用程序和应用程序之间通信的中间产品。目前主流消息队列通讯协议是AMQP&#xff08;二进制传输&#xff0c;支持多种语言&#xff09;、JMS&#xff08;HTTP传输&#xff0c;只支持J…

故障诊断 | HO-VMD-TCN河马优化算法优化变分模态分解时间卷积神经网络故障诊断模型

效果一览 文章概述 故障诊断 | HO-VMD-TCN河马优化算法优化变分模态分解时间卷积神经网络故障诊断模型&#xff01;河马优化算法&#xff08;Hippopotamus optimization algorithm&#xff0c;HO&#xff09;由Amiri等人于2024年提出&#xff0c;该算法模拟了河马在河流或池塘中…

突破架构瓶颈:克服软件系统中的漂移和侵蚀

一种常见但不完美的比喻是将软件系统中的架构漂移和侵蚀与物理建筑的架构相比。虽然这个比喻很直观&#xff0c;但它存在一个根本性的误解&#xff0c;这也常常引发软件开发中的架构问题。 试想一下&#xff0c;一个设计良好的摩天大楼或房屋建成后&#xff0c;我们期望它基本保…

数字革命的先锋:揭示Facebook的技术创新

在当今数字化飞速发展的时代&#xff0c;技术创新不仅改变了人们的生活方式&#xff0c;也深刻影响着社会的发展和文化的演变。作为全球最大的社交网络平台&#xff0c;Facebook不仅扮演着连接人与人之间的桥梁角色&#xff0c;更是技术创新的领军者之一。本文将深入探讨Facebo…

【STM32入门学习】学习嵌入式实时操作系统(RTOS)移植uc/OS到stm32F103上

目录 一、建立STM32HAL库工程 1.1实时操作系统 1.2基于HAL库创建工程 二、获取uC/OS-III源码 三、移植准备 3.1复制uC/OS-III文件到工程文件夹 3.2添加工程组件和头文件路径 四、移植修改代码 &#xff14;.1.启动文件修改&#xff1a; &#xff14;.2.app_cfg.h &a…

【PA交易】BackTrader的交易管理

前言 本主要讨论BackTrader中的Broker定制化。如果你已经对于BackTrader的交易管理非常熟悉&#xff0c;并且自己有了成熟的适配方案&#xff0c;那么并不需要看这篇文章。但是如果你还没有深入研究过&#xff0c;那么这篇文章可能会给到你启发。 背景与需求 网上现存大量资…

【数据结构】(C语言):链表

链表&#xff1a; 基本单位是节点。节点至少两部分&#xff1a;数据&#xff0c;下一个数据的地址。头指针head&#xff0c;始终指向链表的第一个节点。若没有节点&#xff0c;则headNULL。链表在内存中是非连续的。不能使用索引&#xff08;下标&#xff09;查找元素。只能从…

关于application/x-www-form-urlencoded跟application/json请求的区别

当你的java方法是这样定义的 PostMapping("/rePushMedicalRecord") public String rePushMedicalRecord(RequestParam("topicId") String topicId){ } 参数是RequestParam接收&#xff0c;则请求时需要用application/x-www-form-urlencoded请求 如果是R…

【ARMv8/v9 GIC 系列 2.3 -- GIC SPI 中断的 GICD_CLRSPI_NSR寄存器】

文章目录 GICD_CLRSPIN_NSR寄存器功能INTID 位 [12:0]中断触发类型的影响小结 GICD_CLRSPIN_NSR 在 ARMv9 架构下&#xff0c;GIC&#xff08;Generic Interrupt Controller&#xff09;是负责中断管理的关键组件&#xff0c;它支持复杂的中断处理需求&#xff0c;包括多处理器…

OS中断机制-嵌套和竞争

对于FreeRTOS最好不去用中断嵌套,中断嵌套会增加堆栈空间的使用,因为每个中断服务程序都需要保存和恢复寄存器状态,这可能会耗尽有限的堆栈空间,从而导致系统故障。以及中断嵌套时,不同的中断服务程序可能会竞争访问共享资源,从而增加死锁的风险。这可能会导致系统出现故…

第二节课 6月13日 ssh密钥登陆方式

centos和ubuntu openssh服务的初始安装 一、实验&#xff1a;ubuntu系统激活root用户 ubuntu系统如何激活root用户&#xff0c;允许root用户ssh登陆&#xff1f; 1、ubuntu默认root用户未设置密码&#xff0c;未激活 激活root用户&#xff0c;设置root密码 sudo passwd roo…

从零开始做题:修猫

修猫 1 题目 2 解题 2.1 使用Stegslove分析图片 (base) ┌──(holyeyes㉿kali2023)-[~/Misc/tool-misc] └─$ java -jar Stegsolve.jar 2.2 analyse -frame browser 2.3 得到flag DASCTF{818ca3a840e768da7d5fcdeaedd5012f}

37岁,被裁员,失业三个月,被面试官嫌弃“太水”:就这也叫10年以上工作经验?

今年部门要招两个自动化测试&#xff0c;这几个月我面试了几十位候选人。发现一个很奇怪的现象&#xff0c;面试中一问到元素定位、框架api、脚本编写之类的&#xff0c;很多候选人都对答如流。但是一问到实际项目&#xff0c;比如“项目中UI自动化和接口自动化如何搭配使用&am…

前端:HTML、CSS、JavaScript 代码注释 / 注释与代码规范

一、HTML 行内注释 HTML注释是在HTML代码中添加说明和解释的一种方法&#xff0c;这些注释不会被浏览器渲染或显示在页面上&#xff0c;而是被浏览器忽略。HTML注释对于代码的可读性、可维护性和团队协作非常重要。 1.1、HTML注释的语法 HTML注释的语法是以<!--开始&…

【算法与数据结构】【字符串篇】【String的常见函数】

系列文章 本人系列文章-CSDN博客https://blog.csdn.net/handsomethefirst/article/details/138226266?spm1001.2014.3001.5502 1.string基本概念 string是C风格的字符串&#xff0c;而string本质上是一个类。 string和char * 区别&#xff1a; char * 是一个指针 string是一…

OpenAI 收购桌面实时协作公司 Multi;iOS 18 开放 iPhone 镜像测试丨RTE 开发者日报 Vol.231

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…