【微服务】springboot对接Prometheus指标监控使用详解

目录

一、前言

二、微服务监控概述

[2.1 微服务常用监控指标](#2.1 微服务常用监控指标)

[2.2 微服务常用指标监控工具](#2.2 微服务常用指标监控工具)

[2.3 微服务使用Prometheus监控优势](#2.3 微服务使用Prometheus监控优势)

三、环境准备

[3.1 部署Prometheus服务](#3.1 部署Prometheus服务)

[3.2 部署Grafana 服务](#3.2 部署Grafana 服务)

[3.3 提前搭建springboot工程](#3.3 提前搭建springboot工程)

[3.3.1 引入基础依赖](#3.3.1 引入基础依赖)

[3.3.2 配置Actuator 端点](#3.3.2 配置Actuator 端点)

[3.3.3 访问actuator端点](#3.3.3 访问actuator端点)

四、springboot接入Prometheus

[4.1 工程配置与改造操作流程](#4.1 工程配置与改造操作流程)

[4.4.1 引入新的依赖包](#4.4.1 引入新的依赖包)

[4.4.2 补充配置信息](#4.4.2 补充配置信息)

[4.4.3 prometheus 端点验证](#4.4.3 prometheus 端点验证)

[4.4.4 增加配置bean](#4.4.4 增加配置bean)

[4.4.5 打包并部署到服务器](#4.4.5 打包并部署到服务器)

[4.2 配置Prometheus](#4.2 配置Prometheus)

[4.2.1 修改Prometheus 配置文件](#4.2.1 修改Prometheus 配置文件)

[4.2.2 重启Prometheus 服务](#4.2.2 重启Prometheus 服务)

五、SpringBoot监控指标接入Grafana

[5.1 部署与启动Grafana服务](#5.1 部署与启动Grafana服务)

[5.2 官网拷贝监控模板的ID](#5.2 官网拷贝监控模板的ID)

[5.3 配置dashboard](#5.3 配置dashboard)

六、写在文末


一、前言

随着微服务在生产环境大规模部署和应用,随之而来也带来了新的问题,其中比较关键的就是关于微服务的运维和监控。行业有句话叫无监控不运维,以springboot为基础框架的微服务开发和部署模式,给业务快速发展提供了有效的支撑,但随着业务的飞速发展,需要拆分的服务也越来越多,这就给线上的运维工作带了很大的挑战,所以近些年来,微服务的运维、链路跟踪和各类指标监控被日渐重视起来。本文将结合微服务运维监控中的指标监控进行详细的说明。

二、微服务监控概述

2.1 微服务常用监控指标

在微服务的监控世界里,可以说涉及到的内容非常多,涵盖内容也比较多,结合实际经验以下列举了微服务中常用的一些监控指标:

  • 性能指标

    • 响应时间 (Response Time):请求从发起到收到响应的时间。

    • 吞吐量 (Throughput):单位时间内处理的请求数量。

    • 延迟 (Latency):请求到达系统到处理完成的时间。

  • 资源利用

    • CPU 使用率 (CPU Utilization):微服务进程或容器的CPU资源使用情况。

    • 内存使用量 (Memory Usage):微服务进程或容器的内存消耗情况。

    • 磁盘I/O (Disk I/O):磁盘读写操作的性能情况。

  • 错误指标

    • 错误率 (Error Rate):错误请求的比例,通常包括4xx和5xx错误。

    • 失败请求数 (Failed Requests):特定时间段内的失败请求总数。

  • 系统健康

    • 健康检查 (Health Checks):检查微服务的健康状态,通常包括应用程序、数据库、依赖服务等。

    • 服务可用性 (Service Availability):服务的可用时间与总时间的比率。

  • 业务指标

    • 请求量 (Request Volume):特定时间段内的请求总数。

    • 业务关键指标 (Business KPIs):如订单数量、用户注册数等与业务目标相关的指标。

  • 日志监控

    • 日志分析 (Log Analysis):监控应用生成的日志信息,帮助排查问题。
  • 网络指标

    • 网络延迟 (Network Latency):网络传输数据的延迟时间。

    • 带宽使用率 (Bandwidth Usage):网络带宽的使用情况。

  • 分布式跟踪

    • 追踪请求链路 (Request Tracing):追踪请求在微服务间的流动情况,识别瓶颈。

2.2 微服务常用指标监控工具

在微服务架构中,常用的指标监控工具有很多选择,以下列举了几个比较流行和广泛使用的工具:

  • Prometheus

    • Prometheus 是一个开源的监控和警报工具包,特别适合动态服务发现和高度动态的环境。它具有强大的数据模型和查询语言,可以实时存储和查询大量时间序列数据,用于监控各种微服务的性能指标。
  • Grafana

    • Grafana 是一个开源的数据可视化和监控平台,与多种数据源兼容,包括 Prometheus、Elasticsearch、InfluxDB 等。它可以通过仪表盘展示监控数据,支持创建灵活的图表和警报。
  • Jaeger

    • Jaeger 是一个开源的分布式追踪系统,用于监控和故障排除微服务架构中的服务调用。它提供了端到端的跟踪信息,帮助理解和优化服务间的调用路径和性能问题。
  • Datadog

    • Datadog 是一种云端监控和安全平台,支持监控微服务的性能、日志和安全事件。它提供实时分析、警报和可视化工具,帮助团队监控和优化复杂的微服务架构。
  • ELK Stack (Elasticsearch, Logstash, Kibana)

    • ELK Stack 是一个流行的日志管理和分析解决方案,Elasticsearch 用于存储和搜索日志数据,Logstash 用于数据收集和处理,Kibana 用于数据可视化和分析。ELK Stack 适用于监控微服务的日志输出,帮助分析和排查问题。
  • Zipkin

    • Zipkin 是另一个开源的分布式追踪系统,可以帮助追踪和可视化请求在微服务间的传播和延迟情况。它支持多种后端存储,如MySQL、Cassandra等。
  • AWS CloudWatch

    • AWS CloudWatch 是亚马逊提供的监控和管理服务,用于收集和跟踪AWS云上的资源和应用程序。它支持监控各种AWS服务以及自定义应用程序指标,可以设置警报和自动响应。
  • New Relic

    • New Relic 提供全栈的性能监控解决方案,适用于云端和本地部署环境。它支持实时监控应用程序性能、基础设施状态和用户行为,帮助优化微服务的性能和稳定性。

工具的选择通常需要结合团队的配置,资源的预算以及当前系统所处的阶段合理选择,没有确定的标准,但是有一点是需要注意的,选择监控工具时,尽量选择那些知名度高,运维难度低,社区活跃,同时生态较为丰富的工具。

2.3 微服务使用Prometheus监控优势

在上一篇 Prometheus搭建与使用,我们较为详细的了解了Prometheus的使用,Prometheus提供了强大而丰富的监控功能,而且可以结合Grafana 将动态监控的各项指标进行可视化图形展示,可以说是非常完美的使用组合,而springboot服务在线上运行的过程中,也会产生各类指标数据,基于此,可以将微服务对接Prometheus,利用Grafana 将微服务运行过程中的各项指标信息呈现出来。

具体来说,微服务架构与Prometheus结合使用有几个显著的优势:

  • 动态服务发现和监控

    • 微服务架构通常涉及多个服务实例的动态扩展和收缩,这些实例可以动态添加或删除。Prometheus支持与服务发现工具(如Kubernetes、Consul等)集成,能够自动发现和监控这些服务实例的健康状态和性能指标,无需手动配置每个实例。
  • 多维度数据模型

    • Prometheus使用灵活的多维数据模型来存储时间序列数据。这种模型允许开发人员定义和记录各种自定义指标,可以根据服务的特定需求捕获各种不同的度量数据,如请求延迟、吞吐量、错误率等。这对于微服务架构中的复杂度是非常重要的。
  • 强大的查询语言

    • Prometheus提供了PromQL查询语言,允许开发人员执行高级查询和聚合操作,以分析和理解微服务架构中不同服务的性能和行为。这些查询可以帮助识别瓶颈、优化资源使用和改进系统的可靠性。
  • 可扩展性和灵活性

    • Prometheus设计为可扩展和灵活的监控解决方案,适用于从小型部署到大规模微服务架构的各种场景。它支持水平扩展和分布式部署,可以处理大量的时间序列数据并保持低延迟查询。
  • 与Grafana等工具的集成

    • Prometheus与Grafana等数据可视化工具集成紧密,可以通过仪表盘直观地展示收集到的监控数据。这种集成使开发团队能够快速识别问题、监控关键性能指标并实时做出响应。

三、环境准备

在正式使用springboot接入Prometheus之前,需要提前将相关的环境准备完成。提前准备一台服务器,部署如下几个服务即可。

3.1 部署Prometheus服务

参考相关的资料部署Prometheus服务,部署完成后确保能够访问下面的页面

3.2 部署Grafana 服务

Grafana 主要用于展示监控的服务指标信息,以更优雅的可视化看板进行展示

3.3 提前搭建springboot工程

提前准备一个springboot工程,便于后面做集成使用

3.3.1 引入基础依赖

java 复制代码
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.5</version>
        <relativePath/>
    </parent>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>

    </dependencies>

重点说明一下actuator的作用,这是springboot将指标上报Prometheus的关键组件,关于actuator具备如下作用:

  • 健康检查

    • Actuator 提供了一个 /actuator/health 端点,用于检查应用程序的健康状态,开发者可以通过该端点了解应用程序是否正常运行,以及是否存在任何健康问题。
  • 信息端点

    • Actuator 提供了一组信息端点,用于获取应用程序的详细信息,例如,/actuator/info 端点可以返回应用程序的自定义信息,如版本号、环境配置等。
  • 度量指标

    • Actuator 收集和暴露了许多与应用程序性能相关的度量指标,如 CPU 使用率、内存使用情况、请求计数等,这些指标可以通过 /actuator/metrics 端点获取,并用于监控和性能调优。
  • 日志管理

    • Actuator 允许动态修改应用程序的日志级别,而无需重新启动应用程序,通过 /actuator/loggers 端点,开发者可以查看和修改应用程序中各个日志记录器的级别。
  • 远程 Shell

    • Actuator 提供了一个远程 Shell 端点,可以通过命令行或远程终端与应用程序进行交互,这使得开发者可以在运行中的应用程序中执行命令、查看状态等。

3.3.2 配置Actuator 端点

在springboot的yml配置文件中添加如下信息:

java 复制代码
server:
  port: 8087

spring:
  application:
    name: boot-pro

#暴露actuator的端点
management:
  endpoints:
    web:
      exposure:
        include: "*"

在上面的配置中,通过management这个标签将actuator的相关指标暴露出去

3.3.3 访问actuator端点

启动工程之后,访问actuator的端点,确保可以正常暴露指标信息

在/actuator这个端点中,列举出了更详细的指标信息的url访问地址,比如需要访问系统的健康信息指标,可以访问如下的url

到这里基本的前置准备工作就初步完成了,接下来就是如何接入Prometheus的过程。

四、springboot接入Prometheus

通过上一步,利用actuator暴露服务端点信息的能力,可以将微服务的各项指标暴露出去,理论上讲,actuator这个组件就相当于是上一篇提到的各种exporter,用于搜集指标,然后上报到Prometheus,但是光有上面暴露出来的指标信息还不够,因为Prometheus并不认识这些指标,因此需要通过某种方式进行转换之后才能被Prometheus接受,下面看具体的操作流程。

4.1 工程配置与改造操作流程

4.4.1 引入新的依赖包

为了让Prometheus能够解析actuator的指标信息,还需要引入下面的依赖,通过该组件,将服务的指标信息转换成Prometheus能够接收的数据格式

java 复制代码
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-registry-prometheus</artifactId>
            <scope>runtime</scope>
        </dependency>

4.4.2 补充配置信息

在yml配置文件中补充关于Prometheus的配置信息,完整配置如下:

java 复制代码
server:
  port: 8087

spring:
  application:
    name: boot-pro

#暴露actuator的端点
management:
  endpoints:
    web:
      exposure:
        include: "*"
        
  # 激活prometheus
  endpoint:
    prometheus:
      enabled: true
    health:
      show-details: always
  #指标信息相关配置
  metrics:
    export:
      prometheus:
        enabled: true

4.4.3 prometheus 端点验证

再次启动工程,重新访问/actuator端点,此时可以看到展示的端点列表中就有了prometheus的信息

进一步,当访问prometheus的端点url时,就能看到关于prometheus的相关指标信息了,那么当服务接入prometheus时,prometheus监控的就是如下这些指标数据

4.4.4 增加配置bean

增加如下的配置bean,主要是为了将当前接入到prometheus中的服务具有一个明确的标识

java 复制代码
    @Bean
    MeterRegistryCustomizer<MeterRegistry> configureBean (
            @Value("${spring.application.name}") String appName
    ){
        return (registry) -> registry.config().commonTags("application",appName);
    }

4.4.5 打包并部署到服务器

工程打包并部署到服务器

在工程中有一个接口可以测试一下是否可以正常访问

4.2 配置Prometheus

以上工程改造就完成了,接下来就需要配置Prometheus 的相关信息了,参考下面的步骤。

4.2.1 修改Prometheus 配置文件

找到prometheus.yml配置文件中,在job的部分添加如下配置内容

java 复制代码
scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]
      
  #新增springboot服务的监控    
  - job_name: "boot-pro"
    scrape_interval: 5s
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: ["localhost(建议使用公网IP):8087"]

配置内容说明:

  • scrape_interval:5s;

    • 每隔5秒,prometheus发起向指点的端点url拉取一次指标监控信息并存储至本地;
  • metrics_path:

    • 暴露给prometheus拉取监控指标信息的url;

4.2.2 重启Prometheus 服务

重启完成之后,再次访问Prometheus 的控制台,可以看到上述的微服务指标就在这里展现出来了

通过链接点击进去,正好是 /actuator/prometheus这个端点,里面展示了详细的被prometheus监控的指标信息

五、SpringBoot监控指标接入Grafana

通过上面的整合,我们已经可以通过Prometheus拉取到springboot的指标信息,但为了后续能够更直观的看到指标中的各项数据的动态变化,还需要接入Grafana,利用Grafana强大的数据看板功能进行呈现,下面介绍如何在Grafana中展示SpringBoot的监控指标信息。

5.1 部署与启动Grafana服务

在准备阶段完成

5.2 官网拷贝监控模板的ID

进入Grafana的官网,找一个展示效果还不错的模板,然后拷贝模板ID供下面配置dashboard使用

dashboard地址:Grafana dashboards | Grafana Labs

可以根据自己的需要搜索并选择一个合适的模板

比如我选择下面这个,拷贝并保存这个ID:4701

5.3 配置dashboard

在Grafana界面找到配置dashboard的入口

点击添加一个新的dashboard,来到下面的页面

点击导入一个dashboard

拷贝上面的ID到此处,然后点击load

首先需要点击ID框右侧的load,它会做ID的正确性检查,校验通过之后,再点击下面的load,才会跳转到下一页面,在下面的页面中,如果之前你没有配置过Prometheus的数据源的话,还需要重新配置一下

出现上面的信息之后,点击Import即可,如果导入成功,将会跳转到下面的页面看到如下的可视化效果展示

上面只是截了一部分的指标监控信息,页面上还有更完整的信息可以看到,有兴趣的同学可以深入研究里面的配置项。

六、写在文末

本文通过详细的操作展示了如何将springboot应用快速接入Prometheus进行指标监控,并且通过配置Grafana将Prometheus监控的指标信息可视化的呈现出来,基于此,可以在实际的项目中,利用这个思路改造现有的工程,并接入Prometheus进行全方位的监控,为日常微服务的运维工作提供便利,希望对看到的同学有用,本篇到此结束,感谢观看。