美文网首页框架建设收集
Spring Boot Admin实现服务监控

Spring Boot Admin实现服务监控

作者: SMTC | 来源:发表于2019-05-23 17:20 被阅读103次

    Spring Boot Admin简介

    SBA 全称 Spring Boot Admin Spring Boot Admin是一个开源社区项目,用于管理和监控SpringBoot应用程序。 应用程序作为Spring Boot Admin Client向为Spring Boot Admin Server注册(通过HTTP)或使用SpringCloud注册中心(例如Eureka,Consul)发现。 UI是的AngularJs应用程序,展示Spring Boot Admin Client的Actuator端点上的一些监控。常见的功能或者监控如下:

    • 显示健康状况
    • 显示详细信息,例如
    • JVM和内存指标
    • micrometer.io指标
    • 数据源指标
    • 缓存指标
    • 显示构建信息编号
    • 关注并下载日志文件
    • 查看jvm系统和环境属性
    • 查看Spring Boot配置属性
    • 支持Spring Cloud的postable / env-和/ refresh-endpoint
    • 轻松的日志级管理
      与JMX-beans交互
    • 查看线程转储
    • 查看http跟踪
    • 查看auditevents
    • 查看http-endpoints
    • 查看计划任务
    • 查看和删除活动会话(使用spring-session)
    • 查看Flyway / Liquibase数据库迁移
    • 下载heapdump
    • 状态变更通知(通过电子邮件,Slack,Hipchat,......)
    • 状态更改的事件日志(非持久性)

    SBA结合eureka实现服务监控以及邮件通知

    搭建eureka集群服务

    首先搭建注册中心
    eureka server HA服务,至少启动2个服务。

    • pom.xml中添加以下依赖:
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
                <version>2.1.1.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
    
    • 启动类:
    /**
     * @author sl
     */
    @EnableEurekaServer
    @SpringBootApplication
    public class EurekaServerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(EurekaServerApplication.class, args);
        }
    
    }
    
    • 配置文件(根据实际场景调整)
    # server (eureka 默认端口为:8761)
    server.port=8761
    # 服务名
    spring.application.name=eureka-server
    # 是否注册到eureka(eureka本身是不需要再注册到自己的)
    eureka.client.register-with-eureka=false
    # 是否从eureka获取注册信息
    eureka.client.fetch-registry=false
    # eureka服务器的地址
    eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/
    #服务失效时间,Eureka多长时间没收到服务的renew操作,就剔除该服务,默认90秒
    eureka.instance.leaseExpirationDurationInSeconds=90
    #eureka server清理无效节点的时间间隔,默认60000毫秒,即60秒
    eureka.server.evictionIntervalTimerInMs=20000
    # 自我保护模式(缺省为打开)
    eureka.server.enable-self-preservation=false
    # 续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)
    eureka.server.eviction-interval-timer-in-ms=20000
    #logback配置
    logging.path=./logs
    logging.file=eureka-server.log
    logging.level.root=info
    

    由于在开发环境下很容易出现自我保护机制,推荐开发环境关闭eureka自我保护机制

    镜像配置一台端口为8762 eureka服务,此处省略


    搭建spring boot admin server服务,即监控程序

    pom添加如下依赖

           <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-mail</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
                <version>2.1.1.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>de.codecentric</groupId>
                <artifactId>spring-boot-admin-starter-server</artifactId>
                <version>2.1.3</version>
            </dependency>
    
    • 启动类:
    /**
     * @author sl
     */
    @SpringBootApplication
    @EnableAdminServer
    @EnableDiscoveryClient
    public class UnionAdminApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(UnionAdminApplication.class, args);
        }
    
    }
    
    • 配置文件:
    spring.application.name=admin-server
    server.port=43200
    #eureka config
    eureka.instance.health-check-url-path=/actuator/health
    eureka.client.registry-fetch-interval-seconds=5
    eureka.client.service-url.defaultZone=http://192.168.94.44:8761/eureka
    # 是否注册到eureka(eureka本身是不需要再注册到自己的)
    eureka.client.register-with-eureka=false
    ##############################日志配置#############################
    logging.path=./logs
    logging.file=admin.log
    logging.level.root=info
    
    #邮件配置
    spring.mail.host=smtp.qq.com
    spring.mail.username=****@qq.com
    spring.mail.password=*****
    spring.mail.properties.mail.smtp.auth=true
    spring.mail.properties.mail.smtp.starttls.enable=true
    spring.mail.properties.mail.smtp.starttls.required=true
    # 发送给谁
    spring.boot.admin.notify.mail.to=***@**.com,***@**.com
    # 是谁发送出去的
    spring.boot.admin.notify.mail.from=***@qq.com
    

    应用服务接入

    由于受到公司框架制约应用sprngboot版本无法升级到2.0.X,因此admin client 采用1.5.x版本

    可以使用Spring Boot Admin 2.x监视Spring Boot 1.5.x应用程序。旧的Spring Boot Admin Client能够在较新的服务器上注册。由于API稍有更改,因此您需要在旧客户端上设置以下属性:
    重新配置Spring Boot Admin Client 1.5.x的api路径:
    application.yml

    spring.boot.admin.api-path: instances**
    

    由于一些执行器端点随Spring Boot 2发布而改变,因此并非所有选>项都可用(例如/metrics端点); 对于某些端点,我们提供传统转换>器。

    • pom.xml添加如下依赖
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
                <version>1.4.6.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
            <dependency>
                <groupId>de.codecentric</groupId>
                <artifactId>spring-boot-admin-starter-client</artifactId>
                <version>1.5.7</version>
            </dependency>
    
    
    • 启动类:
    /**
     * @author sl
     */
    @EnableTransactionManagement
    @SpringBootApplication(scanBasePackages = {"com.demo.ai.aidrg"},
            exclude = {DataSourceAutoConfiguration.class})
    public class AidrgApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(AidrgApplication.class, args);
        }
    
        @RestController
        public static class EchoTest {
    
            @GetMapping("/")
            public Result<String> echo() {
                return Results.success("AidrgApplication");
            }
    
        }
    
    }
    
    • 配置文件:
    #eureka配置
    eureka.instance.prefer-ip-address=true
    eureka.client.register-with-eureka=true
    eureka.client.fetch-registry=true
    eureka.client.service-url.defaultZone=http://192.168.94.44:8761/eureka/
    eureka.client.registryFetchIntervalSeconds=15
    eureka.instance.leaseRenewalIntervalInSeconds=10
    
    #监控
    management.endpoint.health.show-details=ALWAYS
    management.endpoints.jmx.exposure.exclude=*
    management.endpoints.web.exposure.include=*
    spring.boot.admin.api-path=instances
    management.security.enabled=false
    management.context-path=/actuator
    

    效果

    注册中心中可以看到注册的服务


    image.png
    • 监控平台


      image.png
    image.png image.png image.png

    相关文章

      网友评论

        本文标题:Spring Boot Admin实现服务监控

        本文链接:https://www.haomeiwen.com/subject/clhjzqtx.html