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

架构篇–系统监控–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 beanGET
configprops显示所有 @ConfigurationProperties 的配置属性列表GET
threaddump显示线程活动的快照GET
env显示应用的环境变量GET
healthcheck显示应用程序的健康指标,这些值由HealthIndicator的实现类提供。常见取值:UP / DOWN / UNKNOWN / OUT_OF_SERVICEGET
info显示应用的信息,可使用 info.* 属性自定义info端点公开的数据GET
mappings显示所有的URL路径GET
metrics显示应用的度量标准信息GET
shutdown关闭应用(默认情况下不启用,如需启用,需设置endpoints.shutdown.enabled=truePOST
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"));
    }

    @ReadOperation
    public Map<String, Person> getAll() {
        return people;
    }

    @ReadOperation
    public Person getPerson(@Selector String person) {
        return this.people.get(person);
    }

    @WriteOperation
    public 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

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值