架构篇–系统监控–spring-boot2.0.X 系统原生信息监控,SQL信息监控,cpu温度监控报警,cup磁盘内存使用率监控报警,自定义端点监控以及子节点获取,加工原生端点,系统异常邮件通知,ui界面spring-boot-admin2.0集成等等内容

@author Simon

监控是系统中的一个重要组成部分,没有监控的系统是不允许被上线的。

监控是为了防患于未然,将错误扼杀在摇篮。系统报警设置阈值,一旦接触危险,马上通知所有人。错误信息记录,将错误直接暴露在眼前,不必要浪费人力物力去大面积测试寻找,合理化控制了日志输出,减少运维工程师的负担,也方便开发工程师定位解决错误。
这就是监控,先求生存,而后谋发展,保证系统万无一失,这才是监控的作用。

有关具体的监控内容请看下图:

Actuator项目为测试demo,非工程化项目,功能基础,结构简单,仅仅为测试监控内容实现,考察技术难度编写,前后端传值为json形式,restful标准接口。

本项目使用2.0.2.RELEASE,请注意使用2.0.0之前的版本不会匹配。springboot推出2.0版本的actuator模块产生很大改变。

重点上代码:自己撸(项目源码)

https://github.com/shimingda/spring-boot-author.git

依赖模块

springboot依赖

1. spring-boot-starter-parent
2. spring-boot-starter
3. spring-boot-starter-actuator
4. spring-boot-starter-data-jpa
5. spring-boot-starter-web
6. spring-boot-starter-test
7. spring-boot-starter-security
8. spring-context-support

其他依赖

1. com.alibaba
2. jolokia-core
3. org.hsqldb
4. mysql-connector-java

application.yml

#项目路径和端口
server.servlet.context-path=/ds
server.port=9999
#监控配置
management.server.port=8888
#开启全部端点
management.endpoints.web.exposure.include=*
#health
management.endpoints.web.path-mapping.health=healthcheck
management.endpoint.health.show-details=always
management.health.db.enabled=true
management.health.diskspace.enabled=true
management.health.defaults.enabled=true
#配置详情信息
info.app.encoding=UTF-8
info.app.java.source=1.8
info.app.java.target=1.8
#数据库连接
spring.datasource.url=jdbc:mysql://localhost:3306/db_ebuy?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#数据库参数配置
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
spring.datasource.maxWait=60000
spring.datasource.timeBetweenEvictionRunsMillis=60000
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 'x'
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
spring.datasource.filters=stat,wall,log4j
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

actuator 提供的端点信息

监控检查url: http://localhost:8888/ + 端点

端点 描述 HTTP 方法
auditevents 显示通用的监控信息 GET
beans 显示应用程序上下文所有的Spring bean GET
configprops 显示所有 @ConfigurationProperties 的配置属性列表 GET
threaddump 显示线程活动的快照 GET
env 显示应用的环境变量 GET
healthcheck 显示应用程序的健康指标,这些值由HealthIndicator的实现类提供。常见取值:UP / DOWN / UNKNOWN / OUT_OF_SERVICE GET
info 显示应用的信息,可使用 info.* 属性自定义info端点公开的数据 GET
mappings 显示所有的URL路径 GET
metrics 显示应用的度量标准信息 GET
shutdown 关闭应用(默认情况下不启用,如需启用,需设置endpoints.shutdown.enabled=true POST
sessions 程序sessions的信息 GET
conditions 显示配置的条件和原因 GET
httptrace 显示http追踪信息 GET
loggers 显示修饰和配置的日志 GET
scheduledtasks 显示程序中预定的任务 GET

实时查看性能状态

访问方式

http://localhost:8888/actuator/metrics + { name }

性能查询

springboot 原生集成的信息查看内容

##############################################################################
# 1、http信息http.client.requests
http.server.requests# 2、jvm信息
jvm.gc.pause
jvm.gc.max.data.size
jvm.gc.live.data.size
jvm.gc.memory.promoted
jvm.gc.memory.allocated     jvm.memory.used
jvm.memory.max
jvm.memory.committed    jvm.threads.daemon
jvm.threads.live
jvm.threads.peak    jvm.classes.loaded
jvm.classes.unloaded    jvm.buffer.count
jvm.buffer.memory.used
jvm.buffer.total.capacity   # 3、process信息
process.uptime
process.start.time  # 4、系统信息
system.cpu.count
system.cpu.usage
system.load.average.1m# 5、tomcat信息
#cache
tomcat.cache.hit
tomcat.cache.access     #session
tomcat.sessions.active.current
tomcat.sessions.active.max
tomcat.sessions.rejected
tomcat.sessions.expired
tomcat.sessions.created
#global
tomcat.global.request.max
tomcat.global.request
tomcat.global.sent
tomcat.global.received
tomcat.global.error
#servlet
tomcat.servlet.error
tomcat.servlet.request.max
tomcat.servlet.request
#threads
tomcat.threads.current
tomcat.threads.busy
tomcat.threads.config.max   #logback
logback.events

druid实时信息监控

Druid是Java语言中最好的数据库连接池。

Druid能够提供强大的监控和扩展功能。

访问地址

http://localhost:9999/ds/druid/login.html

账号:admin

密码:admin

资源引入

 <dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>${druid-version}</version></dependency>

自定义监控端点

工程化项目需要对自身项目进行监控,本demo是对功能信息考察


import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.boot.actuate.endpoint.annotation.Selector;
import org.springframework.boot.actuate.endpoint.annotation.WriteOperation;
import org.springframework.stereotype.Component;/*** * @author Simon* @version 2018年5月25日* 自定义端点*/
@Endpoint(id = "get-time")
@Component
public class GetTime {private final Map<String,Object> message =(Map<String, Object>) new HashMap();private GetTime(){this.message.put("当前时间", new Date());this.message.put("我是", "Simon");this.message.put("111", "222");} @ReadOperation  public  Map<String,Object> getAll() {  return message;  } @ReadOperation  public  Map<String,Object> getOne(@Selector String name) {  Object value=message.get(name);Map<String,Object> message2=  new HashMap<String,Object>();return message2;  } @WriteOperation  public void updatePerson(@Selector String name) {  this.message.put(name, name);  }
}

访问地址

http://localhost:8888/actuator/metrics/get-time

import java.util.*;import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.boot.actuate.endpoint.annotation.Selector;
import org.springframework.boot.actuate.endpoint.annotation.WriteOperation;
import org.springframework.boot.actuate.endpoint.web.EndpointMapping;
import org.springframework.boot.actuate.endpoint.web.EndpointMediaTypes;
import org.springframework.boot.actuate.endpoint.web.ExposableWebEndpoint;
import org.springframework.boot.actuate.endpoint.web.annotation.WebEndpoint;
import org.springframework.boot.actuate.web.mappings.MappingDescriptionProvider;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
import org.springframework.web.cors.CorsConfiguration;/*** * @author Simon* @version 2018年5月25日** 自定义监视端点*/
@Endpoint(id = "person")
@Component
public class PersonEndpoint {private final Map<String, Person> people = new HashMap<>();PersonEndpoint() {this.people.put("Simon", new Person("Michael Simon"));this.people.put("Alan", new Person("Rowena Alan"));this.people.put("Bryant", new Person("Barry Bryant"));}@ReadOperationpublic Map<String, Person> getAll() {return people;}@ReadOperationpublic Person getPerson(@Selector String person) {return this.people.get(person);}@WriteOperationpublic void updatePerson(@Selector String name, String person) {this.people.put(name, new Person(person));}}

访问地址

http://localhost:8888/actuator/person/ignored?person=mike

ui界面spring-boot-admin2.0集成

创建新maven项目monitoring-server作为监控的服务端

pom.xml

     <!--服务端监控--><dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-server</artifactId><version>2.0.0</version></dependency><dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-server-ui</artifactId><version>2.0.0</version></dependency><!-- 在管理界面中与 JMX-beans 进行交互所需要被依赖的 JAR --><dependency><groupId>org.jolokia</groupId><artifactId>jolokia-core</artifactId></dependency><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>

application.properties

server.port=8080
#设置监控的名称
spring.application.name=monitor-server

启动项


import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Configuration;/*** @author Simon* @create 2018-10-11 14:26* @desc**/
@Configuration
@EnableAutoConfiguration
@EnableAdminServer
public class MainApplication {public static void main(String[] args) {SpringApplication.run(MainApplication.class, args);}
}

完成服务端配置

编写要监控的服务项目author

pom.xml

     <!--监控客户端--><dependency><groupId>de.codecentric</groupId><artifactId>spring-boot-admin-starter-client</artifactId><version>2.0.0</version></dependency>

application.properties

#开启全部端点
management.endpoints.web.exposure.include=*
#配置服务器
spring.boot.admin.client.url=http://localhost:8080

完成配置,先运行monitoring-server,再运行author
在浏览器上执行http://localhost:8080/#/wallboard

成功

详细项目源码在github上

地址为 https://github.com/shimingda/spring-boot-author.git

架构篇--系统监控--spring-boot2.0.X 系统原生信息监控,SQL信息监控,cpu温度监控报警,cup磁盘内存使用率监控报警,自定义端点监控以及子节点获取,系统异常邮件通知相关推荐

  1. Mongodb网页管理工具,基于Spring Boot2.0,前端采用layerUI实现

    源码:https://github.com/a870439570/Mongodb-WeAdmin 项目介绍 Mongodb网页管理工具,基于Spring Boot2.0,前端采用layerUI实现. ...

  2. Spring Boot2.0+中,自定义配置类扩展springMVC的功能

    在spring boot1.0+,我们可以使用WebMvcConfigurerAdapter来扩展springMVC的功能,其中自定义的拦截器并不会拦截静态资源(js.css等). @Configur ...

  3. Springboot 系列(十七)迅速使用 Spring Boot Admin 监控你的 Spring Boot 程序,支持异常邮件通知

    点赞再看,动力无限.Hello world : ) 微信搜「 程序猿阿朗 」. 本文 Github.com/niumoo/JavaNotes 和 未读代码博客 已经收录,有很多知识点和系列文章. 1. ...

  4. spring boot2.0整合富文本编辑器summernote

    summernote对上传图片,以及对图片大小细节,删除图片移除服务器资源等处理的比较完美. 整合过程,summernote的官网https://summernote.org/getting-star ...

  5. spring boot2.0配置log4j2 发布到生成环境 报内存溢出异常 解决方案

    由于SpringBoot自带logging,但我们又偏偏不想用,这时导入log4j2(抽的),在测试环境与本地没问题,一发布到线上就启动不起来,并报出栈溢出,需要在pom做如下配置: <depe ...

  6. Spring Boot2.0之整合Redis

    需要的maven依赖 jar包,是对Jedis的封装 maven依赖: <project xmlns="http://maven.apache.org/POM/4.0.0" ...

  7. Spring Boot2.0之 整合Redis集群

    项目目录结构: pom: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:// ...

  8. Spring Boot2.0 JPA 实现分页(简单查询分页、复杂查询分页)

    一.简单分页(只有一个查询条件) 在Repository层将查询语句的返回值类型设置为为Page类型,查询参数中加入Pageable pageable,如: @Repository public in ...

  9. Spring Boot2.0之 原理—创建内置Tomcat容器

    前面所述的https://www.cnblogs.com/toov5/p/9823728.html 中的第一条先不赘述了,就是玩了maven 重点介绍后两条 首先内置Tomcat: SpringBoo ...

  10. 构建第一个Spring Boot2.0应用之集成dubbo上---环境搭建(九)

    一.环境: Windows: IDE:IntelliJ IDEA 2017.1.1 JDK:1.8.0_161 Maven:3.3.9 springboot:2.0.2.RELEASE Linux(C ...

最新文章

  1. 计算首站到末站最小费用
  2. 08_clickhouse主键/索引的工作机制(MergeTree的稀疏索引、索引的生成过程、索引的查询),数据标记的工作机制(数据存储、数据标记、数据查询、数据查询示例)(学习笔记)
  3. Web自动化测试理论知识
  4. Oh no no no i'm a rocket man
  5. word字体放大后只显示一半_太实用了!5个Word冷门技巧!第3个你肯定不知道!...
  6. 深入理解android 博客,深入理解Android中ViewGroup
  7. 传感器_磁编码器安装方法之见解
  8. R语言---ggplot图片边缘空白设置和ggplot映射的shape值多余6个
  9. C++ Primer 第5版 练习5.14
  10. ASO秘籍:教你如何学会积分墙优化套路
  11. 2021毓英中学高考成绩查询,泉州知名中学2020高考成绩喜报大集合(7.26更新)
  12. 1383: 手机短号 (多实例)
  13. 2.1 八边形绘制
  14. 真实案例:网站遭遇DOS攻击
  15. 矿业迷局:当减半行情遭遇疫情 |链捕手
  16. VARIANT 类型说明
  17. mysql重新初始化
  18. 数据结构|连通图、完全图、无向图、有向图的边数计算问题
  19. c++ 基类和派生类的虚函数表是否为同一个
  20. Qt事例: QScrollArea滚动区域

热门文章

  1. java函数命名规范_java命名规范
  2. 16个超牛逼的HTML5和JavaScript特效
  3. D3D11 法线贴图(凹凸贴图)
  4. 安装sqlserver 2017安装 需要安装oracle JRE7 更新 51(64位)或更高版本(已解决)
  5. 各个版本的IIS之间的区别 IIS1 ~ IIS6
  6. 高数+信号与系统的公式大全,文末附赠有数字信号处理的复习资料哦
  7. 163邮箱服务器连接错误 请重试,163邮箱无法连接服务器
  8. Lena——计算机视觉中的女神被人忽视的部分
  9. Echarts地图,省市区县,行政代码及地图坐标
  10. 一些鼠标指针图案大全和美化 20+