应用监控

简介

Spring Boot提供了运行时的应用监控和管理的功能。我们可以通过http、JMX、SSH协议来进行操作。审计、健康及指标信息将会自动得到。

Endpoints

列举一些主要的endpoints :
这里写图片描述

敏感信息访问限制

根据上面表格,鉴权为false的,表示不敏感,可以随意访问,否则就是做了一些保护,不能随意访问。

endpoints.mappings.sensitive=false

这样需要对每一个都设置,比较麻烦。敏感方法默认是需要用户拥有ACTUATOR角色,因此,也可以设置关闭安全限制:

management.security.enabled=false

http

我们可以通过http实现对应用的监控和管理,在pom.xml中增加下面依赖:

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

测试端点:

这里写图片描述
其他的端点大家自己测试吧!!

shutdown
shutdown端点默认是关闭的,我们可以在application.properties中开启:

endpoints.shutdown.enabled=true

shutdown端点不支持GET提交,用POST方式访问http://localhost:8080/shutdown;
这里写图片描述
控制台效果:
这里写图片描述

定制端点

定制端点一般通过endpoints+端点名+属性名来设置,每段之间用.隔开。
1:修改端点

endpoints.beans.id=mybeans

此时访问地址变为http://localhost:8080/mybeans;
2:开启端点

endpoints.shutdown.enabled=true

3:关闭端点

endpoints.beans.enabled=false

关闭端点后访问404:
这里写图片描述
4:只开启所需端点
若只开启所需端点的话,我们可以通过关闭所有的端点,然后再开启所需端点来实现:

endpoints.enabled=false
endpoints.beans.enabled=true   //只开启beans端点,访问其它端点皆为404

5:定制端点访问路径

management.context-path=/manage

此时访问路径就为:http://localhost:8080/manage/env;
6:定制端点访问端口
当我们基于安全的考虑,不暴露端点的端口到外部时,就需要应用本身的业务端口和端点所用的端口使用不同的端口:

management.port=8081

此时访问路径就为:http://localhost:8081/env;
7:关闭http端点

management.port=-1

此时访问所有端点皆为404;

自定义端点

当Spring Boot提供的端点不能满足我们特殊的需求,而我们又需要对特殊的应用状态进行监控的时候,就需要自定义一个端点:
StatusService.java

@Service
public class StatusService {  //此类无任何特别,仅为改变status的值private String status;public String getStatus() {return status;}public void setStatus(String status) {this.status = status;}
}

StatusEndPoint.java

//通过@ConfigurationProperties的设置,我们可以在application.properties中通过endpoints.status配置我们的端点
@ConfigurationProperties(prefix = "endpoints.status", ignoreUnknownFields = false)
//继承AbstractEndpoint类,它是Endpoint接口的抽象实现,当前类一定要重写invoke方法
public class StatusEndPoint extends AbstractEndpoint<String> implements ApplicationContextAware{//实现ApplicationContextAware接口可以让当前类对Spring容器的资源有意识,即可访问容器的资源ApplicationContext context;public StatusEndPoint() {super("status");}@Overridepublic String invoke() { //重写invoke方法,返回我们要监控的内容StatusService statusService = context.getBean(StatusService.class);return "The Current Status  is :"+statusService.getStatus();}@Overridepublic void setApplicationContext(ApplicationContext arg0) throws BeansException {this.context = arg0;}
}

DemoApplication.java

@SpringBootApplication
@RestController
public class DemoApplication {@AutowiredStatusService statusService;public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}//注册端点的Bean@Beanpublic Endpoint<String> status() {Endpoint<String> status =  new StatusEndPoint();return status;}//改变status的状态@RequestMapping("/change")public String changeStatus(String status){statusService.setStatus(status);return "OK";}
}

访问:http://localhost:8080/status
这里写图片描述
访问:http://localhost:8080/change?status=running,改变status的值:
这里写图片描述
再次访问:http://localhost:8080/status
这里写图片描述

自定义HealthIndicator

Health 信息是从 ApplicationContext 中所有的 HealthIndicator 的 Bean 中收集的, Spring Boot 内置了一些 HealthIndicator。
这里写图片描述
定制自己的HealthIndicator只需要一个实现HealthIndicator接口的类,并注册为Bean即可:
StatusHealth.java

@Component
public class StatusHealth implements HealthIndicator {//实现HealthIndicator接口,并重写health方法@AutowiredStatusService statusService;@Overridepublic Health health() {String status = statusService.getStatus();if(status == null||!status.equals("running")){return Health.down().withDetail("Error", "Not Running").build(); //当status的值为非running时构造失败}return Health.up().build(); //其余情况运行成功}}

运行测试:
访问:http://localhost:8080/health
这里写图片描述
修改status的值为running,访问:http://localhost:8080/change?status=running
这里写图片描述
再次访问:http://localhost:8080/health
这里写图片描述

JMX

我们也可以通过JMX对应用进行监控和管理;
在控制台调用java内置的jconsole来实现JMX监控:
这里写图片描述
打开jconsole页面,选择当前程序的进程:
这里写图片描述
监控内存、线程、CPU占用率等:
这里写图片描述
在MBean标签的org.springframework.boot域下可对我们的程序进行监控和管理:
这里写图片描述

参考书籍:Spring Boot实战
以上只是学习所做的笔记,以供日后参考!!!

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

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

相关文章

应用监控以及告警实现

前言 一个Java应用 可以不优秀&#xff0c;但是一定不能没有监控方案。否则极大影响排查线上问题的效 以及系统故障的及时告警 。试想 核心应用挂了一个 但是没有配置告警 理想情况几个小时 被自己人发现了 但是万一自己人也没看到或者没关注 那难道让服务一直挂下去么 &#…

十四、应用监控(1)

本章概要 监控端点配置&#xff08;开启端点&#xff0c;暴露端点&#xff0c;端点保护&#xff0c;端点响应缓存&#xff0c;路径映射&#xff0c;CORS支持&#xff0c;健康信息&#xff0c;应用信息&#xff09; 当一个Spring Boot 项目运行时&#xff0c;开发者需要对 Spr…

一篇文章讲透线上应用监控

“线上服务停了&#xff0c;要重启一下”&#xff1f;久经职场做研发的程序员&#xff0c;视线会逐渐转移到线上应用的运行状态。设想一下&#xff0c;如果你在半夜两点正在酣眠美梦时&#xff0c;微信群里突然炸开锅&#xff1a;“服务停了&#xff0c;先重启。。。”&#xf…

如何设置时间倒计时

开发工具与关键技术&#xff1a;Visual Studio 2015、SQL Server 2014 作者&#xff1a;黄世豪 撰写时间&#xff1a;2019年01月31号相信很多小伙伴在做项目时会遇到过要用到时间倒计时的效果&#xff0c;下面我们来实现一下如何将自己设置的时间来让其进行时间倒计。 jsp调用…

js倒计时读秒

1.需求及分析 最近,接到一个接收手机验证码的功能&#xff0c;大体就是设置一个定时器&#xff0c;在每次执行的时候将秒数&#xff0c;逐个减去1&#xff0c;小于0的时候&#xff0c;清除定时器&#xff0c;然后完善一下功能&#xff0c;例如&#xff0c;加上一下状态的变化&…

C#实现倒计时的功能

软件界面&#xff1a; 软代码&#xff1a; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;na…

android studio高考倒计时,高考倒计时app排行榜

编辑推荐 时间管理倒计时 v1.3.0 大小&#xff1a;13.7MB 更新时间&#xff1a;21-04-14 下载 时间管理倒计时&#xff0c;一款专为小伙伴打造的手机时间规划工具&#xff0c;为小伙伴提供更强大的规划服务&#xff0c;在这里小伙伴可以自由规划自己的时间&#xff0c;为小伙伴…

VS2015+C#实现倒计时小程序

最近疫情严重&#xff0c;在家呆着也是呆着&#xff0c;于是就想学一下上位机的编写&#xff0c;权衡利弊之后&#xff0c;选择了C#语言&#xff0c;原因是据说它写出来的上位机比较小&#xff0c;不占内存。开发环境就用VS吧&#xff0c;用的人挺多的。好了&#xff0c;进入正…

C#之一个倒计时小应用程序的实现

只能开始计时&#xff0c;不能停止计时 代码&#xff1a; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.W…

易语言编写倒计时小程序

本人为编程爱好者&#xff0c;非专业人员。 最近工作中需要用到编写倒计时软件&#xff0c;故有此篇。 软件功能&#xff1a; 1.时间倒计时 2.倒计时会有一个透明放大的标签显示时间 3.各窗口可隐藏 以下为软件运行界面&#xff1a; 代码&#xff1a; .版本 2 .支持库 she…

DIY蓝牙小音响

PRE 我个人是比较喜欢手工做一些小东西&#xff0c;但是由于知识限制&#xff0c;我无法去制作一些复杂的东西&#xff0c;如果是一些简单的小玩具&#xff0c;如果我有能力做&#xff0c;我还是很乐意去做的。前段时间正好在看音响&#xff0c;我最后入手了一个便宜的EDIFIER…

树莓派系列二(语音识别)

树莓派的基本概念和安装系统在系列文章一中介绍了.这篇准备介绍一下语音识别. 一直想研究一下语音识别,用来做家庭物联网的控制入口,未来也许就是这样,讯飞的叮咚音响可以连接京东的物联平台,苹果的homekit平台,华为的平台暂时落后的有点多... 国内语音识别领域,我个人比较欣…

毕业设计 基于单片机的智能音响设计与实现 -物联网 嵌入式 stm32

文章目录 0 前言1 简介2 主要器件3 实现效果4 设计原理4.1 PAJ7620U2模块4.2 HC-05蓝牙模块4.3 JQ8900语音模块 5 部分核心代码6 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到…

两台电脑共享一个音响方法

两台电脑共享一个音响方法 由于某种原因&#xff0c;需要两个电脑使用同一个扬声器&#xff0c;现分享一种简单的方案 原理&#xff1a;通过主机的音频输入功能&#xff0c;将另一台电脑的音频接收过来并播放。 连线如下&#xff1a; PC2作为主设备&#xff0c;正常连接音响…

Spring IOC DI - 整合MyBatis

Spring IOC目录 主要内容Spring 框架介绍Spring 框架的优势(对比以前项目的缺点)Spring 框架引入历史发展框架学习三要素Spring 模块介绍 Spring IoC/DI - 引入IoC/DI 概念辨析使用IoC/DI的好处IoC/DI具体应用场景 Spring IoC/DI - 代码实现环境准备Spring 框架环境搭建创建Mav…

Spring框架——IOC、DI

本篇博客主要介绍Java中的IOC和DI&#xff0c;以及在String框架中的应用。首先&#xff0c;我们将对IOC和DI进行概念介绍&#xff0c;然后讲解它们的关系及在String框架中的应用&#xff0c;最后通过一个实例来展示它们的具体用法。 IOC和DI的概念介绍 IOC&#xff08;Invers…

叮咚!你点的Spring套餐来了!

儒猿技术团队最新出品&#xff1a; 《Spring顶尖高手进阶&#xff1a;互联网教育系统项目实战》 长按扫描下方二维码了解&#xff1a; 课程背景 在技术日新月异的今天&#xff0c;Spring作为Java主流开发框架&#xff0c;出道十多年仍然稳坐C位&#xff0c;经久不衰&#xff0c…

乐鑫Esp32学习之旅 17 全网首发,esp32 sdk直连京东微联·小京鱼·IoT开放平台,实现叮咚音响语音智能控制。

本系列博客学习由非官方人员 半颗心脏 潜心所力所写&#xff0c;仅仅做个人技术交流分享&#xff0c;不做任何商业用途。如有不对之处&#xff0c;请留言&#xff0c;本人及时更改。 1、 爬坑学习新旅程&#xff0c;虚拟机搭建esp32开发环境&#xff0c;打印 “Hellow World”。…

计时器setTimeout()函数、setInterval()函数

文章目录 &#x1f412;个人主页&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a;&#x1f3c5;计时器setTimeout&#xff08;函数名&#xff0c;延迟时间&#xff09;结束计时器setTimeout &#x1f3c5;计时器setInterval&#xff08;函数名&#xff0c;延迟时间&a…