当前位置: 首页 > news >正文

SpringBoot2核心功能 --- 指标监控

一、SpringBoot Actuator

1.1、简介

未来每一个微服务在云上部署以后,我们都需要对其进行监控、追踪、审计、控制等。SpringBoot就抽取了Actuator场景,使得我们每个微服务快速引用即可获得生产级别的应用监控、审计等功能。

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

 

1.2、1.x与2.x的不同

 

1.3、如何使用

  • 引入场景
  • 访问 http://localhost:8080/actuator/**
  • 暴露所有监控信息为HTTP
management:endpoints:enabled-by-default: true #暴露所有端点信息web:exposure:include: '*'  #以web方式暴露endpoint:  #开启某个端点的具体配置health:show-details: always

测试:

http://localhost:8080/actuator/beans

http://localhost:8080/actuator/configprops

http://localhost:8080/actuator/metrics

http://localhost:8080/actuator/metrics/jvm.gc.pause

http://localhost:8080/actuator/endpointName/detailPath

 

1.4、可视化

GitHub - codecentric/spring-boot-admin: Admin UI for administration of spring boot applications

 

 

二、Actuator Endpoint

2.1、最常使用的端点

ID

描述

auditevents

暴露当前应用程序的审核事件信息。需要一个AuditEventRepository组件

beans

显示应用程序中所有Spring Bean的完整列表。

caches

暴露可用的缓存。

conditions

显示自动配置的所有条件信息,包括匹配或不匹配的原因。

configprops

显示所有@ConfigurationProperties

env

暴露Spring的属性ConfigurableEnvironment

flyway

显示已应用的所有Flyway数据库迁移。
需要一个或多个Flyway组件。

health

显示应用程序运行状况信息。

httptrace

显示HTTP跟踪信息(默认情况下,最近100个HTTP请求-响应)。需要一个HttpTraceRepository组件。

info

显示应用程序信息。

integrationgraph

显示Spring integrationgraph 。需要依赖spring-integration-core

loggers

显示和修改应用程序中日志的配置。

liquibase

显示已应用的所有Liquibase数据库迁移。需要一个或多个Liquibase组件。

metrics

显示当前应用程序的“指标”信息。

mappings

显示所有@RequestMapping路径列表。

scheduledtasks

显示应用程序中的计划任务。

sessions

允许从Spring Session支持的会话存储中检索和删除用户会话。需要使用Spring Session的基于Servlet的Web应用程序。

shutdown

使应用程序正常关闭。默认禁用。

startup

显示由ApplicationStartup收集的启动步骤数据。需要使用SpringApplication进行配置BufferingApplicationStartup

threaddump

执行线程转储。

 

如果您的应用程序是Web应用程序(Spring MVC,Spring WebFlux或Jersey),则可以使用以下附加端点:

ID

描述

heapdump

返回hprof堆转储文件。

jolokia

通过HTTP暴露JMX bean(需要引入Jolokia,不适用于WebFlux)。需要引入依赖jolokia-core

logfile

返回日志文件的内容(如果已设置logging.file.namelogging.file.path属性)。支持使用HTTPRange标头来检索部分日志文件的内容。

prometheus

以Prometheus服务器可以抓取的格式公开指标。需要依赖micrometer-registry-prometheus

最常用的Endpoint

  • Health:监控状况
  • Metrics:运行时指标
  • Loggers:日志记录

 

2.2、Health Endpoint

健康检查端点,我们一般用于在云平台,平台会定时的检查应用的健康状况,我们就需要Health Endpoint可以为平台返回当前应用的一系列组件健康状况的集合。

重要的几点:

  • health endpoint返回的结果,应该是一系列健康检查后的一个汇总报告
  • 很多的健康检查默认已经自动配置好了,比如:数据库、redis等
  • 可以很容易的添加自定义的健康检查机制

 

2.3、Metrics Endpoint

提供详细的、层级的、空间指标信息,这些信息可以被pull(主动推送)或者push(被动获取)方式得到;

  • 通过Metrics对接多种监控系统
  • 简化核心Metrics开发
  • 添加自定义Metrics或者扩展已有Metrics

 

2.4、管理Endpoints

1、开启与禁用Endpoints

  • 默认所有的Endpoint除过shutdown都是开启的。
  • 需要开启或者禁用某个Endpoint。配置模式为 management.endpoint.<endpointName>.enabled = true
management:endpoint:beans:enabled: true
  • 或者禁用所有的Endpoint然后手动开启指定的Endpoint
management:endpoints:enabled-by-default: false #关闭所有端点信息web:exposure:include: '*'  #以web方式暴露endpoint:health:show-details: alwaysenabled: trueinfo:enabled: true #手动开启端点beans:enabled: truemetrics:enabled: true

 

2、暴露Endpoints

支持的暴露方式

  • HTTP:默认只暴露healthinfo Endpoint
  • JMX:默认暴露所有Endpoint
  • 除过health和info,剩下的Endpoint都应该进行保护访问。如果引入SpringSecurity,则会默认配置安全访问规则

ID

JMX

Web

auditevents

Yes

No

beans

Yes

No

caches

Yes

No

conditions

Yes

No

configprops

Yes

No

env

Yes

No

flyway

Yes

No

health

Yes

Yes

heapdump

N/A

No

httptrace

Yes

No

info

Yes

Yes

integrationgraph

Yes

No

jolokia

N/A

No

logfile

N/A

No

loggers

Yes

No

liquibase

Yes

No

metrics

Yes

No

mappings

Yes

No

prometheus

N/A

No

scheduledtasks

Yes

No

sessions

Yes

No

shutdown

Yes

No

startup

Yes

No

threaddump

Yes

No

 

 

三、定制 Endpoint

3.1、定制 Health 信息

实现接口:

import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Component;@Component
public class MyHealthIndicator implements HealthIndicator {@Overridepublic Health health() {int errorCode = check(); // perform some specific health checkif (errorCode != 0) {return Health.down().withDetail("Error Code", errorCode).build();}return Health.up().build();}}构建Health
Health build = Health.down().withDetail("msg", "error service").withDetail("code", "500").withException(new RuntimeException()).build();
management:health:enabled: trueshow-details: always #总是显示详细信息。可显示每个模块的状态信息

继承类实现 

@Component
public class MyComHealthIndicator extends AbstractHealthIndicator {/*** 真实的检查方法* @param builder* @throws Exception*/@Overrideprotected void doHealthCheck(Health.Builder builder) throws Exception {//mongodb。  获取连接进行测试Map<String,Object> map = new HashMap<>();// 检查完成if(1 == 2){
//            builder.up(); //健康builder.status(Status.UP);map.put("count",1);map.put("ms",100);}else {
//            builder.down();builder.status(Status.OUT_OF_SERVICE);map.put("err","连接超时");map.put("ms",3000);}builder.withDetail("code",100).withDetails(map);}
}

 

3.2、定制info信息

常用两种方式:

1、编写配置文件

info:appName: boot-adminversion: 2.0.1mavenProjectName: @project.artifactId@  #使用@ ... @可以获取maven的pom文件值mavenProjectVersion: @project.version@

 

2、编写InfoContributor

import java.util.Collections;import org.springframework.boot.actuate.info.Info;
import org.springframework.boot.actuate.info.InfoContributor;
import org.springframework.stereotype.Component;@Component
public class ExampleInfoContributor implements InfoContributor {@Overridepublic void contribute(Info.Builder builder) {builder.withDetail("example",Collections.singletonMap("key", "value"));}}

http://localhost:8080/actuator/info 会输出以上方式返回的所有info信息

 

3.3、定制Metrics信息

1、SpringBoot支持自动适配的Metrics

  • JVM metrics, report utilization of:

        Various memory and buffer pools

        Statistics related to garbage collection

        Threads utilization

        Number of classes loaded/unloaded

  • CPU metrics
  • File descriptor metrics
  • Kafka consumer and producer metrics
  • Log4j2 metrics: record the number of events logged to Log4j2 at each level
  • Logback metrics: record the number of events logged to Logback at each level
  • Uptime metrics: report a gauge for uptime and a fixed gauge representing the application’s absolute start time
  • Tomcat metrics (server.tomcat.mbeanregistry.enabled must be set to true for all Tomcat metrics to be registered)
  • Spring Integration metrics

 

2、增加定制Metrics

class MyService{Counter counter;public MyService(MeterRegistry meterRegistry){counter = meterRegistry.counter("myservice.method.running.counter");}public void hello() {counter.increment();}
}//也可以使用下面的方式
@Bean
MeterBinder queueSize(Queue queue) {return (registry) -> Gauge.builder("queueSize", queue::size).register(registry);
}

 

3.4、定制Endpoint

@Component
@Endpoint(id = "container")
public class DockerEndpoint {@ReadOperationpublic Map getDockerInfo(){return Collections.singletonMap("info","docker started...");}@WriteOperationprivate void restartDocker(){System.out.println("docker restarted....");}}

场景:开发ReadinessEndpoint来管理程序是否就绪,或者LivenessEndpoint来管理程序是否存活;

当然,这个也可以直接使用 Production-ready Features

相关文章:

SpringBoot2核心功能 --- 指标监控

一、SpringBoot Actuator 1.1、简介 未来每一个微服务在云上部署以后&#xff0c;我们都需要对其进行监控、追踪、审计、控制等。SpringBoot就抽取了Actuator场景&#xff0c;使得我们每个微服务快速引用即可获得生产级别的应用监控、审计等功能。 <dependency><gro…...

python实战应用讲解-【numpy数组篇】常用函数(三)(附python示例代码)

目录 Python numpy.repeat() Python numpy.tile() Python numpy.asarray_chkfinite() Python numpy.asfarray() Python numpy.asfortranarray() Python numpy.repeat() Python numpy.repeat()函数重复数组中的元素 – arr. 语法 : numpy.repeat(arr, repetitions, axis …...

DIN论文翻译

摘要 在电子商务行业&#xff0c;利用丰富的历史行为数据更好地提取用户兴趣对于构建在线广告系统的点击率(CTR)预测模型至关重要。关于用户行为数据有两个关键观察结果&#xff1a;i) 多样性(diversity)。用户在访问电子商务网站时对不同种类的商品感兴趣。ii) 局部激活(local…...

python列表,元组和字典

1、python列表 1.1.列表的定义 list是一种有序的集合、基于 链表实现,name[ ] ,全局定义:list2list([ ])。 1.2下标索引 python不仅有负索引也有正索引。正索引从0开始,负索引从-1开始。这两个可以混用,但指向还是那个位置 a[0]a[-9]//length为10的数组a1.3列表的切片 列表可…...

300元左右的蓝牙耳机哪个好?300左右音质最好的蓝牙耳机

无线耳机是人们日常生活中必不可少的设备&#xff0c;无论是听音乐化石看电影都能获得身临其境的感觉&#xff0c;由于科技真在发展中&#xff0c;不断地的发生变化&#xff0c;百元价位就可以感受到不错的音色&#xff0c;下面小编整理了几款300左右音质表现不错的蓝牙耳机。 …...

【消息队列】聊一下生产者消息发送流程

消息发送流程 1.生产者main线程调用send发送消息&#xff0c;先走拦截器&#xff0c;然后会将消息进行序列化&#xff0c;然后选择对应的分区器&#xff0c;将消息发送到RecordAccumulator中&#xff0c;默认是32m 2.Sender线程会异步读取&#xff0c;要不数据达到batch的大小 …...

特斯拉和OpenAI的加持,马斯克简直人生赢家

赢家已定 商人行事&#xff0c;最重要的因素之一是利益驱动。这里&#xff0c;最服“马斯克”。 以马斯克为首的特斯拉公司周日宣布&#xff0c;将在上海新建一家超级工厂&#xff0c;专门生产该公司的储能产品Megapack。签约的特斯拉储能超级工厂项目也是该公司在美国本土以…...

优维低代码:第三方接口接入

优维低代码技术专栏&#xff0c;是一个全新的、技术为主的专栏&#xff0c;由优维技术委员会成员执笔&#xff0c;基于优维7年低代码技术研发及运维成果&#xff0c;主要介绍低代码相关的技术原理及架构逻辑&#xff0c;目的是给广大运维人提供一个技术交流与学习的平台。 连载…...

SQL 177. 第N高的薪水

SQL 177. 第N高的薪水数据需求解决方法1方法2题目 &#xff1a; https://leetcode.cn/problems/nth-highest-salary/ 数据 Create table If Not Exists Employee (Id int comment 主键列, Salary int comment 工资 );Truncate table Employee;insert into Employee (id, sala…...

14天手撸交互式问答数字人直播教程-课程计划

一、课程计划 二、时间安排 第01天&#xff1a;交互式问答数字人发展现状 从一个真实案例开始&#xff0c;介绍当前主流的交互式数字人平台&#xff0c;需求和应用场景&#xff0c;引入交互式数字人的交互流程和关键技术。后续整个直播系列的内容安排。 第02天&#xff1a;音…...

spring boot3.0新特性Http客户端远程调用

1、安装依赖 <!-- For reactive support --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency>2、项目结构 3、新建配置类WebConfig package com.exa…...

查询联系:多表查询 - 1

查询所有学生的 name&#xff0c;以及该学生在 score 表中对应的 c_no 和 degree 。 SELECT no, name FROM student; ---------------- | no | name | ---------------- | 101 | 曾华 | | 102 | 匡明 | | 103 | 王丽 | | 104 | 李军 | | 105 | 王芳…...

「Bug」OpenCV读取图像为 None 分析

头一次遇到 OpenCV 无法读取图像&#xff0c;并且没有任何提示&#xff0c;首先怀疑的就是中文路径&#xff0c;因为大概率是这个地方出错的&#xff0c;但是修改完依旧是None&#xff0c;这就很苦恼了&#xff0c;分析了下出现None的原因&#xff0c;大概有以下三种情况&#…...

EVO——视觉里程计/SLAM轨迹评估工具

EVO——SLAM轨迹精度评估软件 EVO简介 evo是一款用于视觉里程计VIO和slam轨迹评估 Python 包&#xff08;Linux / macOS / Windows / ROS&#xff09;。能够绘制轨迹&#xff0c;评估轨迹与真值的误差。支持多种数据集的轨迹格式&#xff08;TUM、KITTI、EuRoC的Mav、ROSbag&…...

TCP为什么要三次握手,而不是两次或四次?

文章目录TCP为什么要三次握手&#xff0c;而不是两次或四次&#xff1f;三次握手才可以阻止重复历史连接的初始化&#xff08;主要原因&#xff09;同步双方初始序列号避免资源浪费小结TCP为什么要三次握手&#xff0c;而不是两次或四次&#xff1f; TCP连接时用于保证可靠性和…...

git 命令:工作日常使用

git start 存储分支 git start list 查看所有存储 拉取最新master 合并到自己分支&#xff1a; git remote add [远程名称] [远程仓库链接] //关联(添加)远程仓库; 第一步&#xff1a;查看分支在哪里&#xff0c;是自己的吗&#xff0c;添加暂存区&#xff0c;添加到仓…...

Http和Https

http和https的区别 开销&#xff1a;HTTPS 协议需要到 CA 申请证书&#xff0c;一般免费证书很少&#xff0c;需要交费&#xff1b;资源消耗&#xff1a;HTTP 是超文本传输协议&#xff0c;信息是明文传输&#xff0c;HTTPS 则是具有安全性的 ssl 加密传输协议&#xff0c;需要…...

【计算机网络复习】第三章 传输层 2

UDP: 用户数据报协议 u 简单高效的传输层协议 u 提供“尽力而为(best effort)”服务 UDP数据报可能丢失 接收的顺序可能与发送顺序不一致 u 无连接协议 在发送数据之前&#xff0c;发送端和接收端没有握手(handshaking ) 每个UDP数据报都是独立的&#xff0c;…...

你真的会自动化测试?自动化测试技术选型抉择

自动化测试框架 在学习自动化测试或者实践自动化测试时&#xff0c;我们一定会对一个名词不陌生&#xff0c;那就是“自动化测试框架”&#xff0c;而有些人也将Selenium、Appium这样的工具也称之为“自动化测试框架”&#xff0c;那么到底自动化测试框架如何理解呢&#xff1…...

【id:31】【20分】A. Point(类与构造)

题目描述 下面是一个平面上的点的类定义&#xff0c;请在类外实现它的所有方法&#xff0c;并生成点测试它。 输入 测试数据的组数 t 第一组测试数据点p1的x坐标 第一组测试数据点p1的y坐标 第一组测试数据点p2的x坐标 第一组测试数据点p2的y坐标 .......... 输出 输出…...

ANNA框架:构建AI原生应用的智能体开发指南

1. 项目概述&#xff1a;一个面向未来的AI原生应用框架最近在GitHub上闲逛&#xff0c;发现了一个让我眼前一亮的项目&#xff1a;ANNA。这个项目由开发者NikolaiGL发起&#xff0c;乍一看名字&#xff0c;你可能会联想到某个AI模型或者工具库&#xff0c;但深入研究后你会发现…...

原子化《清单革命》的庖丁解牛

它的本质是&#xff1a;承认人类大脑在 高负荷、高压力、高复杂度 环境下的 不可靠性 (Unreliability)&#xff0c;通过将 关键检查点 (Critical Checkpoints) 和 标准操作程序 (SOP) 外化为 静态数据结构 (Static Data Structure/List)&#xff0c;来弥补 工作记忆 (Working M…...

从warmup_csaw_2016看栈溢出利用的本质:绕过NX/ASLR?不,这次我们先学‘计算’

从warmup_csaw_2016看栈溢出利用的本质&#xff1a;计算的艺术 在二进制安全领域&#xff0c;栈溢出常被初学者视为"魔法攻击"——只需覆盖返回地址就能获得控制权。但当我们剥开NX/ASLR等现代保护机制的外衣&#xff0c;会发现精确计算才是漏洞利用的永恒核心。2016…...

基于STM32的太阳能热水器智能控制系统设计与实现

1. 项目概述&#xff1a;为什么用STM32做太阳能热水器&#xff1f;几年前&#xff0c;我接手了一个老家的太阳能热水器改造项目。那台老式设备&#xff0c;除了一个机械式的水温水位显示仪&#xff0c;几乎没有任何智能控制。夏天水温能飙到七八十度&#xff0c;烫得没法直接用…...

扬州尊客酒店用品厂:十一年用心,值得信赖

扎根扬州&#xff0c;十一年用心&#xff1a;一家把 “靠谱” 刻进骨子里的酒店用品厂在扬州生态科技新城&#xff0c;有这样一家企业&#xff1a;没有花哨噱头&#xff0c;不玩虚头宣传&#xff0c;只埋头做一件事 —— 把酒店客房里那些不起眼的一次性用品&#xff0c;做到让…...

ElevenLabs阿拉伯文语音在Qur’anic Arabic场景下韵律崩塌?20年古兰经语音工程团队验证的4层音节边界校准协议

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs阿拉伯文语音在Qur’anic Arabic场景下的韵律失效现象全景扫描 Qur’anic Arabic&#xff08;古兰经阿拉伯语&#xff09;具有高度规范化的诵读规则&#xff08;Tajwīd&#xff09;&#x…...

如何用Python自动化工具解放你的电商评价时间:3分钟完成30分钟任务

如何用Python自动化工具解放你的电商评价时间&#xff1a;3分钟完成30分钟任务 【免费下载链接】jd_AutoComment 自动评价,仅供交流学习之用 项目地址: https://gitcode.com/gh_mirrors/jd/jd_AutoComment 你知道吗&#xff1f;每次网购后写评价平均要花30分钟&#xff…...

终极R3nzSkin换肤工具:英雄联盟国服免费皮肤自定义完整指南

终极R3nzSkin换肤工具&#xff1a;英雄联盟国服免费皮肤自定义完整指南 【免费下载链接】R3nzSkin-For-China-Server Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-Server 你是否曾经羡慕别人拥有稀有皮肤…...

每日大赛间歇期通过Taotoken模型广场探索新模型特性

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 每日大赛间歇期通过Taotoken模型广场探索新模型特性 对于每日参与各类AI应用开发或创意大赛的选手而言&#xff0c;比赛间歇期并非…...

30ms低延迟投屏终极指南:用QtScrcpy实现专业级手游直播

30ms低延迟投屏终极指南&#xff1a;用QtScrcpy实现专业级手游直播 【免费下载链接】QtScrcpy Android实时投屏软件&#xff0c;此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScrcpy…...