在使用Spring Boot Admin进行监控时,如果被监控的服务没有加context-path的话是不会有任何问题的,一旦服务加了context-path的配置,监控就会失败。

下图是正常情况的显示:

我们给被监控的服务增加一个context-path:

server.servlet.context-path=/yinjihuan

当被监控的服务增加了context-path之后,这边就会报异常了,如下图:

原因是什么呢?

这是因为加了context-path后actuator的访问路径都发生变化了,默认的路径都访问不到,拿不到数据导致的。

如何解决呢?

大家看上面贴的图片,右上角显示了健康状态监测的地址:

http://192.168.31.244:8083/
http://192.168.31.244:8083/actuator
http://192.168.31.244:8083/actuator/health

在没加context-path之前,就是这个地址去访问的,加了之后访问的时候就要把context-path给加上,也就是变成了下面的信息:

http://192.168.31.244:8083/yinjihuan
http://192.168.31.244:8083/yinjihuan/actuator
http://192.168.31.244:8083/yinjihuan/actuator/health

关键是如何去修改这个地址啊,我们想想看,Spring Boot Admin只是一个展示平台,本身是不存储信息的,我们用的是整合了Eureka的方式,所以信息都是从Eureka过来的,查看下Eureka中服务的信息就知道了。

通过eureka部署的地址+/eureka/apps/服务名称查看,如下图:

可以看到在instance下面有homePageUrl,statusPageUrl,healthCheckUrl的值是没加上context-path的,于是我把这三个值改过来:

eureka.instance.home-page-url-path=${server.servlet.context-path}
eureka.instance.health-check-url-path=${server.servlet.context-path}/actuator/health
eureka.instance.status-page-url-path=${server.servlet.context-path}/actuator/info

然后发现确实不报错了,显示如下:

问题是还有很多的监控信息不见了,现在只有一个Metadata和Health信息,还是没有完全改好。

这个时候就两种方式了,要么通过源码的方式去解决问题,要么直接细读官方文档,我看了下文档,找到了一个配置:

大概意思是将这个路径追加到服务URL中,用于访问端点信息,这个配置是需要增加到服务的metadata中的,如下:

eureka.instance.metadata-map.management.context-path=${server.servlet.context-path}/actuator

加了这句之后数据就能全部出来了,问题到此全部解决。

还有一种方式就是通过源码的方式来解决,给大家提供点思路,当报错的时候,我们可以抓包,看页面是从哪个地址获取的数据,比如:

主要是applications这个地址,可以看到重要的信息是endpoints里面的数据,这些端点信息和对应的url就是最终显示的数据来源,当加了context-path之后这些地址还是之前的,所以获取不到数据,那么为什么需要配置management.context-path就可以解决呢?

大家可以一步步跟进去看源码,我直接告诉大家这块的代码在哪里

de.codecentric.boot.admin.server.services.endpoints.QueryIndexEndpointStrategy.detectEndpoints(Instance)

这个方法里面:

这边就是获取所有Endpoints的方法,instance.getRegistration().getManagementUrl()就是我们需要改正确的地址,只有这个地址正确了才能获取到正确的Endpoints信息。

欢迎加入我的知识星球,一起交流技术,免费学习猿天地的课程(http://cxytiandi.com/course)

PS:目前星球中正在星主的带领下组队学习Sentinel,等你哦!

Spring Boot Admin2.X监控的服务context-path问题的更多相关文章

  1. 微服务监控之三:Prometheus + Grafana Spring Boot 应用可视化监控

    一.Springboot增加Prometheus 1.Spring Boot 应用暴露监控指标,添加如下依赖 <dependency> <groupId>org.springf ...

  2. Spring boot学习1 构建微服务:Spring boot 入门篇

    Spring boot学习1 构建微服务:Spring boot 入门篇 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...

  3. SpringBoot实战(十)之使用Spring Boot Actuator构建RESTful Web服务

    一.导入依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http ...

  4. Spring boot 零配置开发微服务

    2018年12月29日星期六 体验Spring boot 零配置开发微服务 1.为什么要用Spring  boot? 1.1 简单方便.配置少.整合了大多数框架 1.2 适用于微服务搭建,搭建的微服务 ...

  5. spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法

    spring boot / cloud (十四) 微服务间远程服务调用的认证和鉴权的思考和设计,以及restFul风格的url匹配拦截方法 前言 本篇接着<spring boot / cloud ...

  6. spring boot / cloud (二十) 相同服务,发布不同版本,支撑并行的业务需求

    spring boot / cloud (二十) 相同服务,发布不同版本,支撑并行的业务需求 有半年多没有更新了,按照常规剧本,应该会说项目很忙,工作很忙,没空更新,吧啦吧啦,相关的话吧, 但是细想想 ...

  7. Spring Boot 和 Docker 实现微服务部署

    Spring boot 开发轻巧的微服务提供了便利,Docker 的发展又极大的方便了微服务的部署.这篇文章介绍一下如果借助 maven 来快速的生成微服务的镜像以及快速启动服务. 其实将 Sprin ...

  8. Spring Boot 是 Spring 的一套快速配置脚手架,可以基于Spring Boot 快速开发单个微服务

    Spring Boot 是 Spring 的一套快速配置脚手架,可以基于Spring Boot 快速开发单个微服务,Spring Cloud是一个基于Spring Boot实现的云应用开发工具:Spr ...

  9. 拒绝黑盒应用-Spring Boot 应用可视化监控

    图文简介 逻辑关系 效果演示 快速开始 1.Spring Boot 应用暴露监控指标[版本 1.5.7.RELEASE] 首先,添加依赖如下依赖: <dependency> <gro ...

随机推荐

  1. 移动端rem布局,用户调整手机字体大小或浏览器字体大小后导致页面布局出错问题

    一.用户修改手机字体设置大小,影响App里打开的web页面. 手机字体设置大小,影响App的页面.Android的可以通过webview配置webview.getSettings().setTextZ ...

  2. 全链路跟踪TraceId

    数据库主键:标示唯一一条数据,譬如唯一商品,唯一订单 全局事务ID:实现分布式事务一致性的必备良药 请求ID:requestId,seesionId,标示一个请求或者一次会话的生命周期 身份证ID:代 ...

  3. fatal error compiling: tools.jar not found

    在Eclipse中使用Maven提供的Install(打包)命令插件的时候报错[Fatal error compiling: tools.jar not found]. 报错的原因 报错的原因从错误信 ...

  4. centos systemd占用大量内存

    不知道为什么,我用vmware做测试用,而且是mini版本,没装什么应用,就是php开发环境,lnmp. 在开发时,内存和swap都爆满,composer包无法安装. 网上搜到解决方法: system ...

  5. java 学习 进阶之 一 (线程基础)

    一.线程安全 线程安全的概念:当多个线程访问某一个类(对象或方法)时.这个类始终都能表现出正确的行为那么这个类(对象或方法)就是线程安全的. synchronized:可以在任何对象及方法上加锁,而加 ...

  6. CTF必备技能丨Linux Pwn入门教程——stack canary与绕过的思路

    Linux Pwn入门教程系列分享如约而至,本套课程是作者依据i春秋Pwn入门课程中的技术分类,并结合近几年赛事中出现的题目和文章整理出一份相对完整的Linux Pwn教程. 教程仅针对i386/am ...

  7. Qt固定窗口大小

    指定大小 this->setMaximumSize(250, 250); 默认大小 this->setMaximumSize(this->width(), this->heig ...

  8. 对于不返回任何键列信息的 SelectCommand,不支持 DeleteCommand 的动态 SQL 生成

    VS新增操作数据库出现如下报错. 原因是数据库表未添加主键 MySQL: CREATE TABLE Customer (SID integer, Last_Name ), First_Name ), ...

  9. 【LeetCode】寻找两个有序数组的中位数

    给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2  ...

  10. 如何在Etherscan.io 部署ETH以太坊智能合约 如何在15分钟内创建你的加密货币

    一.概述 ETH 网络这里就不介绍了,这篇文章主要记录在以太坊主网和测试网络部署一个智能合约,也就是如何发币. 二.部署合约需要的生产工具      准备工具前,建议大家准备个VPN,因为会访问国外网 ...