system health

MicroProfile Health API是一种非常基本的API,它基于一个或多个Health Probe报告您的服务状态。 在某些服务器或群集控制器需要决定是否以及何时重新启动实例的情况下,这非常有用。

在应用程序中使用MicroProfile Health API就像实现一个(或多个) org.eclipse.microprofile.health.HealthCheck并使用@Health注释类一样@Health

HealthCheck接口具有您应该实现的一种方法,即HealthCheckResponse call()

因此,您可以确定在调用此方法时,实例是否正常。

您的回复( HealthCheckResponse )包含:

  • 从其他探针识别此探针的名称
  • UPDOWN标志,以指示状态。
  • 您想要在键值对中包含的任何其他元数据。

一个基本的例子。

假设我们有一个使用数据库的应用程序,并且如果与数据库的连接断开(或非常慢),则应报告此应用程序不正常:

@Health@ApplicationScopedpublic class MembershipHealthCheck implements HealthCheck {@Inject private DataSource datasource;@Overridepublic HealthCheckResponse call() {HealthCheckResponseBuilder responseBuilder = HealthCheckResponse.named("membership");try {Connection connection = datasource.getConnection();boolean isValid = connection.isValid(timeout);DatabaseMetaData metaData = connection.getMetaData();responseBuilder = responseBuilder.withData("databaseProductName", metaData.getDatabaseProductName()).withData("databaseProductVersion", metaData.getDatabaseProductVersion()).withData("driverName", metaData.getDriverName()).withData("driverVersion", metaData.getDriverVersion()).withData("isValid", isValid);return responseBuilder.state(isValid).build();} catch(SQLException  e) {log.log(Level.SEVERE, null, e);responseBuilder = responseBuilder.withData("exceptionMessage", e.getMessage());return responseBuilder.down().build();}}}

(见完整的例子在这里 )

在上面的示例中,健康状况探针名称为“ membership”,如果可以在一定时间内建立与数据库的连接,则报告UP 。 它还包括数据库的一些元数据字段。

/健康。

如果浏览到服务器上的/health ,您将看到来自所有探测的汇总响应以及服务器的总状态(“启动”或“关闭”)。

{"outcome":"UP","checks":[{"name":"membership","state":"UP","data":{"databaseProductVersion":"5.5.5-10.1.35-MariaDB","databaseProductName":"MySQL","driverVersion":"mysql-connector-java-8.0.11 (Revision: 6d4eaa273bc181b4cf1c8ad0821a2227f116fedf)","isValid":"true","driverName":"MySQL Connector/J"}}]}

如果数据库出现故障:

{"outcome":"DOWN","checks":[{"name":"membership","state":"DOWN","data":{"exceptionMessage":"No operations allowed after connection closed."}}]}

使用MicroProfile配置创建可重复使用的探针。

您的任何应用程序都可以重复使用某些运行状况探针,并且可以使用Microprofile Config API外部化设置。 例如,如果我们希望运行状况探针检查系统负载,则可以外部化系统负载应该在哪个阶段开始报告下来。

@Health@ApplicationScopedpublic class SystemLoadHealthCheck implements HealthCheck {@Inject @ConfigProperty(name = "health.systemload.max", defaultValue = "0.7")private double max;@Overridepublic HealthCheckResponse call() {OperatingSystemMXBean operatingSystemMXBean = ManagementFactory.getOperatingSystemMXBean();String arch = operatingSystemMXBean.getArch();String name = operatingSystemMXBean.getName();String version = operatingSystemMXBean.getVersion();int availableProcessors = operatingSystemMXBean.getAvailableProcessors();double systemLoadAverage = operatingSystemMXBean.getSystemLoadAverage();double systemLoadAveragePerProcessors = systemLoadAverage / availableProcessors;HealthCheckResponseBuilder responseBuilder = HealthCheckResponse.named("system-load").withData("name", name).withData("arch", arch).withData("version", version).withData("processors", availableProcessors).withData("loadAverage", String.valueOf(systemLoadAverage)).withData("loadAverage per processor", String.valueOf(systemLoadAveragePerProcessors)).withData("loadAverage max", String.valueOf(max));if(systemLoadAverage>0){boolean status = systemLoadAveragePerProcessors < max;return responseBuilder.state(status).build();}else{// Load average not availablereturn responseBuilder.up().build();}}}

(见完整的例子在这里 )

在上面,我们现在可以通过更改health.systemload.max配置值将默认的0.7系统负载覆盖为我们自己的值。

其他示例可能包括:

  • 堆内存
  • 非堆内存
  • 线程数

在项目中使用它

您可以在项目中使用以上所有内容,因为它们可以在maven Central和github中使用 :

在您的pom.xml

<dependency><groupId>com.github.phillip-kruger.microprofile-extensions</groupId><artifactId>health-ext</artifactId><version>1.0.9</version></dependency>

/health的合计结果如下所示:

{"outcome":"UP","checks":[{"name":"system-load","state":"UP","data":{"name":"Linux","arch":"amd64","processors":"8","loadAverage":"2.03","version":"4.18.1-arch1-1-ARCH","loadAverage max":"0.7","loadAverage per processor":"0.25375"}},{"name":"membership","state":"UP","data":{"databaseProductVersion":"5.5.5-10.1.35-MariaDB","databaseProductName":"MySQL","driverVersion":"mysql-connector-java-8.0.11 (Revision: 6d4eaa273bc181b4cf1c8ad0821a2227f116fedf)","isValid":"true","driverName":"MySQL Connector/J"}},{"name":"non-heap-memory","state":"UP","data":{"max %":"0.9","max":"-1","used":"132792064"}},{"name":"threads","state":"UP","data":{"max thread count":"-1","daemon thread count":"86","monitor deadlocked thread count":"0","thread count":"134","deadlocked thread count":"0","started thread count":"138","peak thread count":"136"}},{"name":"heap-memory","state":"UP","data":{"max %":"0.9","max":"14995161088","used":"207556800"}}]}

翻译自: https://www.javacodegeeks.com/2018/08/reusable-microprofile-health-probes.html

system health

system health_可重复使用的MicroProfile Health探针相关推荐

  1. 可重复使用的MicroProfile Health探针

    MicroProfile Health API是一个非常基本的API,它基于一个或多个Health Probe报告您的服务状态. 这在某些服务器或群集控制器需要决定是否以及何时重新启动实例的情况下非常 ...

  2. spring health_为什么Spring的Health会再次向下,向下,向上,向上,向上和向下?...

    spring health 为什么 我们新JavaScript客户端应用程序会定期调用Grails后端的/health端点,以确定离线状态. 事情开始变得"​​有趣". 我们免费获 ...

  3. Requirements of an SAP system administrator

    Requirements of an SAP system administrator Have a "proper" attitude Protect and safeguard ...

  4. hidl 原理分析_一个 health service 不生效问题引出的一点知识

    从 Android P 开始,Google 开始推荐厂家再定制一个 health .前不久遇到一个定制 health 中的信息未成功反应到 Framework 的问题,在分析解决问题的过程中,学习到了 ...

  5. 使用wildfly部署项目

    WildFly部署项目 一.下载 在浏览器地址栏输入https://www.wildfly.org/,打开WildFly官网,点击other versions选择版本,因为开发环境是jdk1.8,部署 ...

  6. java基本数据类型与封装类 示例_Java零基础系列教程10Java抽象与封装

    配套视频教程 软件出现的目的 用计算机的语言描述现实世界 用计算机解决现实世界的问题 为什么使用面向对象 世界由对象组成 面向对象的思想 描述 面向对象的世界 符合人类思维习惯 从现实中抽象出类分三步 ...

  7. OpenShift - 用CodeReady开发云原生应用(1)- 将可执行Quarkus应用部署到OpenShift

    <OpenShift 4.x HOL教程汇总> 文章目录 创建CodeReady项目 Live Coding 打包Java应用 编译成可执行应用 配置服务健康检查 向OpenShift部署 ...

  8. 曙光天阔服务器文档,曙光天阔服务器远程控制手册(附件).doc

    远程管理操作指南 6.1引言 本文档介绍曙光天阔服务器的IPMI远程管理和远程KVM(KVM over IP).虚拟媒体(Virtual media)功能的使用方法. IPMI是一种用于硬件级别的标准 ...

  9. CSP201609-3(炉石传说)(Java 100分)(只有78行代码)

    问题描述 <炉石传说:魔兽英雄传>(Hearthstone: Heroes of Warcraft,简称炉石传说)是暴雪娱乐开发的一款集换式卡牌游戏(如下图所示).游戏在一个战斗棋盘上进行 ...

最新文章

  1. AMD:浏览器中的模块规范
  2. BootStrap2学习日记16---选项卡内容
  3. 【Java报错】Greenplum数据库报错 Value can not be converted to requested type 问题解决(踩坑分享)
  4. java项目打镜像_docker通过dockerfile打java项目镜像
  5. oracle零碎要点---ip地址问题,服务问题,系统默认密码问题
  6. windows server2012在已有.net4.5框架的基础上安装.net3.5的方法
  7. C#利用word2007插件实现word转pdf
  8. 2022最新酷盒iApp源码V7.8版+内置超多功能
  9. web前端 html+css+javascript网页设计实例 企业网站制作
  10. 【电力电子技术AC-DC】单相桥式晶闸管整流电路(阻性/阻感性负载)simulink仿真
  11. MyBatis下载和使用
  12. 华为手机怎样恢复Android,华为手机恢复出厂设置的教程和方法
  13. war压缩命令_宝塔面板linux版解压WAR文件时,如何解压的三种方法介绍
  14. vue项目中我的收货地址功能做法(添加地址、编辑地址、删除地址、默认地址、省市区三级联动)
  15. 2022年下半年软件设计师下午真题及答案解析
  16. 软件开发工具【十】 之 调试程序
  17. Android源码目录简介
  18. 数据库系统概论 (王珊.第五版)第七章数据库设计习题答案
  19. 编程将一个整数分解成一个质因数的连乘积,并打印在屏幕上
  20. iOS应用内跳转到手机淘宝天猫

热门文章

  1. 2020牛客国庆集训派对day3 Points
  2. YbtOJ-变量观测【鸽笼原理】
  3. P3327-[SDOI2015]约数个数和【莫比乌斯反演】
  4. CF7D-Palindrome Degree【字符串hash,dp】
  5. jzoj1274-游历的路线【分层图,SPFA】
  6. POJ2482-Stars in Your Window【线段树,扫描线,离散化】
  7. ssl2344P2835-刻录光盘【Floyd,联通块数,图论】
  8. AtCoder Beginner Contest 172总结
  9. 初一模拟赛总结(2019.6.15)
  10. 【Floyed】【最短路】商店选址问题(ssl 1760)