最近线上项目上的比较多,而之前并没有使用微服务的架构,所以监控就是一个大问题,经常需要登陆服务器进行操作,突然想到使用springbootadmin去做一个简易的服务监控,期间也走了很多弯路 ,这里做一下记录。


首先架构分析:

1、spring-boot-eureka:注册中心,被监控的服务以及admin-server都需要注册到eureka

2、spring-boot-admin-server:监控服务端

3、被监控服务

之前没有想清楚忽略了eureka的作用,所以浪费了一些时间,不得不说菜的一批。

这里是用的是spring-cloud的F版的release版本。以及spring-boot-admin2.1.3


eureka配置:

这里我们只需要一个非常简单的eureka注册中心就可以了。

如何创建一个spring-cloud-eureka工程这里就不赘述了,网上这样的资源太多啦,直接说配置吧。

spring.application.name=eureka-server
server.port=8001

eureka.instance.hostname=localhost
eureka.client.register-with-eureka=false  #是否注册到eureka
eureka.client.fetch-registry=false

启动访问:http://localhost:8001

admin-server配置:

gradle依赖:

plugins {
    id 'org.springframework.boot' version '2.1.3.RELEASE'
    id 'java'
}

apply plugin: 'io.spring.dependency-management'

group = 'com.str'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
    mavenCentral()
}

ext {
    set('springBootAdminVersion', '2.1.3')
    set('springCloudVersion', 'Finchley.RELEASE')
}

dependencies {
    implementation 'de.codecentric:spring-boot-admin-starter-server'
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    // https://mvnrepository.com/artifact/de.codecentric/spring-boot-admin-server-ui
    compile group: 'de.codecentric', name: 'spring-boot-admin-server-ui', version: '2.1.3'

}

dependencyManagement {
    imports {
        mavenBom "de.codecentric:spring-boot-admin-dependencies:${springBootAdminVersion}"
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}

配置文件:


spring.application.name=admin-server
eureka.client.service-url.defaultZone= http://54.223.207.217:8001/eureka/

server.port= 8000

启动访问:http://localhost:8000

 

如上所示已经可以看到自己作为一个服务已经显示在面板上了。

被监控服务配置:

gradle依赖:

    compile('org.springframework.boot:spring-boot-starter-actuator')
    // https://mvnrepository.com/artifact/de.codecentric/spring-boot-admin-starter-client
    compile group: 'de.codecentric', name: 'spring-boot-admin-starter-client', version: '2.1.3'
    // https://mvnrepository.com/artifact/org.jolokia/jolokia-core
    compile group: 'org.jolokia', name: 'jolokia-core', version: '1.6.0'
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'


    testCompile('org.springframework.boot:spring-boot-starter-test')
    testCompile('com.jayway.jsonpath:json-path')
……
dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}

配置文件:

spring.application.name: xxxx
eureka.client.service-url.defaultZone=http://54.223.207.217:8001/eureka/
management.endpoints.web.exposure.include=refresh,health,info  #暴漏端口
management.endpoint.health.show-details= ALWAYS

此时启动服务,再次访问localhost:8001会发现该服务已经在面板中显示,但是如果你的服务中使用了security做权限认证管理,那么应用状态会编程down,点击Journal会看到log显示detail为401为认证。这是因为security拦截了监控服务器发出的请求,而这些请求都是以actuator为前缀的,知道了这一点,我们就可以通过配置security请求白名单来实现这个需求。

httpSecurity.antMatchers("/actuator/*").permitAll()

这个问题当初也困扰了我很久。


其他细节:

1、如果你的eureka和admin-server在服务器上,本地启动服务时,监控服务状态为offline,journal显示detail为unkownhostException,这个在服务上线了之后就好了。

2、在我第一次部署eureka到服务器时,导致我的阿里云服务器cpu直接卡死了(还好是测试服务器),后来觉得可能是分配的jvm控件太小了(-xms10m -xmx200m),我调整为-xms512m -xmx512m之后就没问题了。希望大家也注意下,注册中心给的空间不要太小。

3、以上是本人实践所得,如果有问题请大家留言一起探讨,菜鸡给你喊666。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐