十七、监控与度量-Prometheus/Grafana/Actuator

文章目录

  • 前言
  • 一、Spring Boot Actuator
    • 1. 简介
    • 2. 添加依赖
    • 2. 开启端点
    • 3. 暴露端点
    • 4. 总结
  • 二、Prometheus
    • 1. 简介
    • 2. Prometheus客户端
    • 3. Prometheus服务端
    • 4. 总结
  • 三、Grafana
    • 1. 简介
    • 2. Grafana安装
    • 3. Grafana配置


前言

系统监控

在企业级的应用中,系统监控至关重要,可以帮助我们预防故障,预测变化趋势,在达到阈值的时候报警,为排查生产问题提供更多的信息。
同时也能看到系统问题,早做优化,避免更大的事故发生。


一、Spring Boot Actuator

1. 简介

  Spring Boot包含了很多附加功能帮助我们监控和管理我们的应用,可以使用HTTP或者JMX等方式通过端点(endpoint)获取应用的健康状态以及其他指标收集

  Spring Boot Actuator模块就是Spring Boot提供的集成了上面所述的监控和管理的功能。像Spring Boot其他模块一样开箱即用,非常方便,通过Actuator就可以使用HTTP或者JMX来监控我们的应用。

JMX(Java Management Extensions):Java平台的管理和监控接口,任何程序只要按JMX规范访问这个接口,就可以获取所有管理与监控信息。

下面简单介绍Spring Boot Actuator是如何使用的,具体的使用方法见官方文档。

2. 添加依赖

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

2. 开启端点

  Spring Boot中监控应用或者与应用交互都是通过端点(endpoint)进行的,Spring Boot提供了非常多的原生端点,比如health,可以帮助我们监控应用的监控状态(是否可用),同时可以添加自定义的端点。每个端点都可以单独设置是否开启,并通过HTTP或者JMX暴露给外部系统。如果选择HTTP方式,则URL的前缀一般是/actuator,比如health的url地址就是/actuator/health

默认情况下,除了‌shutdown‌(让系统优雅的关闭) ,其他端点默认是开启的。我们可以通过 ‌management.endpoint.<id>.enabled‌ 设置某个端口的状态,比如开启shutdown端口。

management.endpoint.shutdown.enabled=true
# shutdown:开启actuator的停机组件,可以通过curl -X POST /actuator/shutdown来关闭服务。
# health:开启actuator的健康检测组件。
# metrics,prometheus:开启监控组件
management:
  server:
    # 采用与web服务不同的端口,该端口不暴露到K8S集群外部
    port: 8888
    # 开启优雅停机
    shutdown: graceful
  endpoint:
    shutdown:
      # 开启actuator的停机端口。
      enabled: true
  health:
    defaults:
      # 开启actuator的健康检测判定,默认为所有引入的组件(如redis)都作为健康与否的判定依据。
      enabled: true
    redis:
      # 关闭actuator的特定组件健康检测判定,如redis如果健康情况不影响服务的运行,可以关闭。
      enabled: false
  metrics:
    tags:
      # 配置监控的tag,指向服务名称。
      application: ${spring.application.name}

3. 暴露端点

  开启端点后还必须暴露端点给HTTP或者JMX才能正常使用,但是端口可能包含一些敏感的数据,所以Spring Boot的原生端口默认只支持HTTP或者JMX。

如果要改变端口暴露的方式,使用 ‌include‌ 或者 ‌exclude‌ 属性,比如:

management.endpoints.jmx.exposure.include=*
management.endpoints.web.exposure.include=health,info,prometheus
management:
  endpoints:
    web:
      # 设置是否暴露端点 默认只有health和info可见
      exposure:
        include: shutdown,health,metrics,prometheus
        # GET /actuator/gateway/routes 查看路由清单
        # GET /actuator/gateway/routes/{id} 查看特定Id路由详情
        # GET /actuator/gateway/globalfilters
        # GET /actuator/gateway/routefilters
        # POST /actuator/gateway/refresh 刷新路由缓存
        # POST /actuator/gateway/routes/{id} 增加路由
        # DELETE /actuator/gateway/routes/{id} 删除路由
        # GET /actuator/health 查看健康状态
        # GET /actuator/metrics 查看指标列表
        # GET /actuator/metrics/{metricsName} 查看指标

4. 总结

  到目前为止,Spring Boot Actuator就配置好了,除了上述端点的开启和暴露方式,还有HTTP,JMX,日志,指标(Metrics),权限,HTTP追踪,进程监控等功能,如果想了解更多,可以去官网进一步学习。

二、Prometheus

1. 简介

  中文名普罗米修斯,是新一代的监控系统,与其他监控系统相比,具有易于管理,监控服务的内部运行状态,强大的数据模型,强大的查询语言PromQL,高效,可扩展,易于集成,可视化,开放性等众多功能。详细内容可见官网。

2. Prometheus客户端

  在Spring Boot中,原生支持了prometheus端口,只需要通过如下配置,就可集成Prometheus,暴露给HTTP。
还需要配置 metrics ,因为如果没有这个参数,很多报表不能正常显示。

management:
  endpoints:
    web:
      exposure:
        include: "prometheus"
  metrics:
    tags:
      application: ${spring.application.name}

这样通过,Spring Boot Actuator配置,开启和暴露prometheus和metrics端点,就把Prometheus的客户端配置好了。

3. Prometheus服务端

  服务端,这里我们使用docker方式。

  1. prometheus.yml

需要配置文件prometheus.yml。

scrape_configs:
  # 任意写,建议英文,不要包含特殊字符
  - job_name: 'jobName'
    # 采集的间隔时间
    scrape_interval: 15s
    # 采集时的超时时间
    scrape_timeout: 10s
    # 采集路径
    metrics_path: '/actuator/prometheus'
    # 采集服务的地址,也就是我们应用的地址
    static_configs:
      - targets: ['localhost:8080']
  1. docker-compose.yml

创建docker-compose.yml,注意prometheus.yml与docker-compose.yml的相对路径,如果放在同样的目录下,volumes则为- ‘./prometheus.yml:/etc/prometheus/config.yml’。

version: '3.3'
services:
  prometheus:
    image: 'prom/prometheus:v2.14.0'
    ports:
      - '9090:9090'
    command: '--config.file=/etc/prometheus/config.yml'
    volumes:
      - './prometheus.yml:/etc/prometheus/config.yml'
  1. 启动

直接使用命令docker-compose up -d启动即可。

  1. 测试

启动之后,在浏览器中访问http://localhost:9090。

Prometheus启动测试然后,通过查询关键字,可以查看不同指标的监控数据,比如jvm_memory_used_bytes。

Prometheus查询测试

4. 总结

这样,就通过Prometheus已经可以看到Spring Boot不同指标的监控数据了。但Prometheus的可视化还是比较粗糙,需要通过Grafana,才可以实现完美的可视化仪表盘。

三、Grafana

1. 简介

  Grafana是一个可视化面板,可以展示非常漂亮的图标和布局,支持Prometheus,SQL(MySQL,PostgreSQL)等作为数据源。

有如下特点:

  • 可视化:非常精美的各种组件可供选择,比如图表,文本,提醒事项,还有灵活的布局,可以自由配置你的可视化面板。

  • 数据源:目前支持Prometheus,Graphite,Loki,Elasticsearch,MySQL,PostgreSQL,Stackdriver和TestData DB等多种数据源。

  • 通知提醒:通过可视化的方式配置通知规则,在数据达到阈值时,将配置好的信息发送给指定管理员。

  • 混合数据源:在同一个图中混合不同的数据源,基于每个查询指定数据源。

2. Grafana安装

使用docker compose的方式安装。

  1. docker-compose.yml

此处可以与Prometheus合并到一个docker compose中:

version: '3.3'
services:
  prometheus:
    image: 'prom/prometheus:v2.14.0'
    ports:
      - '9090:9090'
    command: '--config.file=/etc/prometheus/config.yml'
    volumes:
      - './prometheus.yml:/etc/prometheus/config.yml'

  grafana:
    image: 'grafana/grafana:6.5.0'
    ports:
      - '3000:3000'
  1. 启动

通过命令docker-compose up -d启动。

  1. 测试

启动之后,在浏览器中访问http://localhost:3000,并使用初始账号admin:admin登录。

Grafana启动测试

3. Grafana配置

  1. 配置数据源

登录Grafana之后,选择添加数据源,选择Prometheus。

Grafana添加数据源输入数据源名称(任意),Prometheus的url地址,然后点击添加保存。

Grafana配置数据源

  1. 配置仪表盘

在这里有两个选择,其一是创建新的仪表盘,选择不同的组件,设置布局,还有一种方式是选择Grafana官方或者社区提供的仪表盘,而且他们的样式都十分精美,可以直接导入。这里我们选择导入仪表盘,因为我们是Java应用,重点关注的肯定是JVM相关的指标,所以我们搜索JVM,通过安装量进行排序。

Grafana添加仪表盘点击第一个,这个仪表盘包含了JVM,线程,CPU等指标,我们就导入这个,当然你也可以选择其他的仪表盘或者自建。

Grafana提供仪表盘在Grafana.com Dashboard处输入4701。

在这里插入图片描述
选择数据源,点击导入。

在这里插入图片描述
最终呈现的仪表盘就如下图:

在这里插入图片描述


本文的引用仅限自我学习如有侵权,请联系作者删除。
参考知识
使用 Prometheus + Grafana + Spring Boot Actuator 监控应用


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

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

相关文章

在c#控制台中使用Raylib-cs库,绘制控制小球和插入音频(附带c++中小球的控制代码)

下载网址 GitHub - chrisdill/raylib-cs: C# bindings for raylib, a simple and easy-to-use library to learn videogames programming 克隆库 克隆GitHub仓库-CSDN博客 1 .制作dll 点击 生成之后就会多出这些东西 2.在项目中添加dll 然后就导进来了 测试一下用例代码 …

400G智算网络助力知名自动驾驶企业算力训练提效

根据Gartner的最新趋势预测&#xff0c;自动驾驶技术正迅速发展&#xff0c;预计在未来几年内将带来显著的商业效益&#xff0c;特别是在决策智能和边缘人工智能领域。目前&#xff0c;一家领军企业正积极拥抱基于大模型的数字化转型之路&#xff0c;作为自动驾驶领域的佼佼者&…

STM32编码器接口及编码器测速模板代码

编码器是什么&#xff1f; 编码器是一种将角位移或者角速度转换成一连串电数字脉冲的旋转式传感 器&#xff0c;我们可以通过编码器测量到底位移或者速度信息。编码器从输出数据类型上 分&#xff0c;可以分为增量式编码器和绝对式编码器。 从编码器检测原理上来分&#xff0…

数组常见查找算法

文章目录 时间复杂度1. 顺序查找&#xff08;Linear Search&#xff09;2. 二分查找&#xff08;Binary Search&#xff09;3. 插值查找&#xff08;Interpolation Search&#xff09;4.分块查找5.哈希查找 时间复杂度 衡量算法执行时间随输入规模增长而增长的速度的一个概念。…

网际协议(IP)与其三大配套协议(ARP、ICMP、IGMP)

网际协议&#xff08;Internet Protocol&#xff0c;IP&#xff09;&#xff0c;又称互联网协议。是OSI中的网络层通信协议&#xff0c;用于跨网络边界分组交换。它的路由功能实现了互联互通&#xff0c;并从本质上建立了互联网。网际协议IP是 TCP/IP 体系中两个最主要的协议之…

CountDownLatch、Semaphore和Cyclicbarrier

文章目录 前言一、CountDownLatch1、概念2、源码3、代码示例&#xff1a;4、应用场景&#xff1a; 二、Semaphore1.概念2.源码3.代码示例4.应用场景 三、Cyclicbarrier1、简介2、源码3、代码示例4、应用场景&#xff1a;5、CyclicBarrier对比CountDownLatch 总结 前言 countDo…

【开源免费】基于Vue和SpringBoot的课程答疑系统(附论文)

博主说明&#xff1a;本文项目编号 T 070 &#xff0c;文末自助获取源码 \color{red}{T070&#xff0c;文末自助获取源码} T070&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…

Flink 中双流 Join 的深度解析与实战

目录 一、Join 算子 一&#xff09;语义与特性 二&#xff09;通用用法 三&#xff09;不同窗口类型表现 滚动窗口 Join 滑动窗口 Join 二、CoGroup 算子 一&#xff09;功能特点 二&#xff09;通用用法与连接类型实现 内连接&#xff08;InnerJoin&#xff09; 左…

QNX的内存布局和启动入口

参考资料: QNX官网文档 内存布局 添加图片注释,不超过 140 字(可选) 查看系统内存布局 # pidin syspage=asinfo Header size=0x00000108, Total Size=0x0000d1b0, #Cpu=8, Type=257 Section:asinfo offset:0x0000bdf0 size:0x00000d00 elsize:0x000000200000

数学建模之RSR秩和比综合评价法(详细)

RSR秩和比综合评价法 一、概述 秩和比法(Rank-sum ratio&#xff0c;简称RSR法)是我国学者田凤调于1988年提出的&#xff0c;田教授是我国杰出的卫生统计学家&#xff0c;该方法最初提出时用于解决医学卫生领域的综合评价问题&#xff0c;后经各领域学者的补充和完善&#xf…

计算机网络复习6——网络层

域名系统NDS NDS是互联网的命名系统&#xff0c;用来把便于人们使用的机器名字转换为IP地址&#xff0c;作为人与机器之间的中间件 域名 域名是主机的名字 域名使用层次树状结构&#xff0c;由标号序列组成&#xff0c;各标号之间用点隔开&#xff0c;每个名字在互联网上是…

【PlantUML系列】类图(一)

目录 一、类 二、接口 三、抽象类 四、泛型类 五、类之间的关系 六、添加注释 七、包图 八、皮肤参数 一、类 使用class关键字定义类&#xff0c;类名后跟大括号&#xff0c;声明类的属性和方法。 属性&#xff1a;格式为{visibility} attributeName : AttributeType…

【AI系统】FBNet 系列

FBNet 系列 本文主要介绍 FBNet 系列&#xff0c;在这一章会给大家带来三种版本的 FBNet 网络&#xff0c;从基本 NAS 搜索方法开始&#xff0c;到 v3 版本的独特方法。在本节中读者会了解到如何用 NAS 搜索出最好的网络和训练参数。 FBNet V1 模型 FBNetV1:完全基于 NAS 搜…

高校数字化运营平台解决方案:构建统一的服务大厅、业务平台、办公平台,助力打造智慧校园

教育数字化是建设教育强国的重要基础&#xff0c;利用技术和数据助推高校管理转型&#xff0c;从而更好地支撑教学业务开展。 近年来&#xff0c;国家多次发布政策&#xff0c;驱动教育行业的数字化转型。《“十四五”国家信息化规划》&#xff0c;推进信息技术、智能技术与教育…

【JavaEE 初阶】⽹络编程套接字

一、⽹络编程基础 1.应用层 操作系统提供的一组 api >socket api(传输层给应用层提供) 2.传输层 两个核心协议. TCPUDP 差别非常大,编写代码的时候,也是不同的风格 因此, socket api 提供了两套 TCP 有连接, 可靠传输, 面向字节流, 全双工 UDP …

AI大模型驱动数据分析:利用自然语言实现数据查询与可视化(1)

在当今AI驱动的时代&#xff0c;数据分析已成为各行各业不可或缺的能力。然而&#xff0c;传统的数据分析流程通常需要掌握SQL、数据处理和可视化等多项专业技能&#xff0c;这对非技术背景的业务人员来说是一个不小的挑战。 想象一下&#xff0c;当数据中心的负责人打开手机时…

注解方式的AspectJ实现方式

BookService类 package com.hkd.service;public interface BookService {public void buyJava();public int comment();void buy(); }BookServiceImp类 package com.hkd.service;import org.springframework.stereotype.Component;Component("bs") public class Bo…

如何避免数据丢失:服务器恢复与预防策略

在当今数字时代&#xff0c;数据对于个人和企业来说都至关重要。数据丢失可能会导致严重的财务损失、业务中断甚至法律责任。因此&#xff0c;采取措施防止数据丢失至关重要。本文将讨论服务器数据丢失的常见原因以及如何防止数据丢失的有效策略。 服务器数据丢失的常见原因 服…

远程连接服务--Linux中

远程连接服务–Linux中 1. 远程连接服务器简介 1.1 什么是远程连接服务器 ​ 远程连接服务器通过文字或图形接口方式来远程登录系统&#xff0c;让你在远程终端前登录linux主机以取得可操作主机接口&#xff08;shell&#xff09;&#xff0c;而登录后的操作感觉就像是坐在系…

Mac安装MINIO服务器实现本地上传和下载服务

0.MINIO学习文档 Minio客户端mc使用 | Elibaron学习笔记 1.Mac安装MINIO 中文官方网址&#xff1a;MinIO下载和安装 | 用于创建高性能对象存储的代码和下载内容 (1) brew 安装 brew install minio/stable/minio &#xff08;2&#xff09;安装完成&#xff0c;执行brew i…