微服务笔记⑦——监控中心HystrixDashbord和配置中心Spring-Cloud-Config的使用(Finchley版)

Hystrix Dashbord

Hystrix Metrics Stream的使用

Hystrix Metrics Stream可以监听当前项目中调用微服务的情况。

Hystrix(注意是单纯的Hystrix) 提供了对于微服务调用状态的监控(信息), 但是,需要结合spring-boot-actuator模块一起使用。

在已经引入Hystrix的项目中引入下面的依赖

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-actuator</artifactId> 
</dependency>

在这里插入图片描述
需要注意的是, 在Spring Finchley 版本以前访问路径是/hystrix.stream,如果是Finchley 的话还得在yml里面加入下面的配置

management: 
  endpoints: 
    web: 
      exposure: 
        include: '*'

这里的配置是因为spring Boot 2.0.x以后的Actuator 只暴露了info 和health 2个端点,这里我们把所有端点开放。

然后访问/actuator/hystrix.stream便可以看见微服务调用的状态信息。

这里会发现没有任何信息
在这里插入图片描述
我们来调用几个接口看看
在这里插入图片描述
这些密密麻麻的,就是我们的微服务监控的信息, 但是, 这种json格式的字符串, 难免会让人不太好阅读, 所以, 这时候需要借助HystrixDashbord将这些json数据可视化成我们能接收的图表信息。

HystrixDashbord项目的启动

Dashbord 翻译一下的意思是 仪表盘, 顾名思义, hystrix监控信息的仪表盘, 那这个仪表盘到底是什么样子呢? 以及怎么来使用呢?

我们需要重新创建一个项目,负责查看这些监听到的信息。

  • 引入依赖
<dependency> 
    <groupId>org.springframework.cloud</groupId> 
    <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId> 
</dependency>
  • @EnableHystrixDashboard注解

在spring boot启动类上面加入注解@EnableHystrixDashboard
在这里插入图片描述

  • 访问/hystrix

启动项目后访问/hystrix能看见一个类似tomcat的首页
在这里插入图片描述
在中间这个输入框中,填入需要监控的微服务的监控地址,也就是/actuator/hystrix.stream,比如上面的http://localhost:4001/actuator/hystrix.stream,点击按钮Monitor Stream,就会跳转到仪表盘页面
在这里插入图片描述

Hystrix仪表盘解释

在这里插入图片描述

  • 实心圆:共有两种含义。它通过颜色的变化代表了实例的健康程度,它的健康度从绿色因为失败会变成红色。
    在这里插入图片描述
    在这里插入图片描述
    同时该实心圆除了颜色的变化之外,它的大小也会根据实例的请求流量发生变化,流量越大该实心圆就越大。
    所以通过该实心圆的展示,就可以在大量的实例中快速的发现故障实例和高压力实例。
  • 曲线:用来记录2分钟内流量的相对变化,可以通过它来观察到流量的上升和下降趋势。

Spring-Cloud-Config

概述

我们既然要做项目, 那么就少不了配置,传统的项目还好,但是我们微服务项目, 每个微服务就要做独立的配置, 这样难免有点复杂, 所以, config项目出现了,它就是为了解决这个问题, 把你所有的微服务配置通过某个平台。

比如 github, gitlib 或者其他的git仓库进行集中化管理(当然,也可以放在本地)。

可能这样讲有点抽象,我们来看一张图
在这里插入图片描述

config的使用

怎么配置这个confi呢? 我们刚刚说过 由一个config server 来管理所有的配置文件, 那么我们现在新建一个config server项目。

  • 引入依赖
<dependency> 
    <groupId>org.springframework.cloud</groupId> 
    <artifactId>spring-cloud-config-server</artifactId> 
</dependency>
  • @EnableConfigServer注解

在这里插入图片描述

  • yml配置
server: 
  port: 8080 
spring: 
  application: 
    name: test 
 
  cloud: 
    config: 
      server: 
        git: 
          uri: https://github.com/513667225/my-spring-cloud-config.git #配置文件在github上的地址 
 #         search-paths: foo,bar*  #Configserver会在 Git仓库根目录、 foo子目录,以及所有以 bar开始的子目录中查找配置文件。 
#          clone-on-start: true  #启动时就clone仓库到本地,默认是在配置被首次请求时,config server才会clone git仓库 
        #native: 
          #search-locations: classpath:/config #若配置中心在本地,本地的地址 
  • 启动项目

这里我在github上有一些配置文件
在这里插入图片描述
我们来看看test-config的内容
在这里插入图片描述
启动项目后, 我们可以通过名字来读取里面的配置信息,直接访问http://localhost:8082/test-config.yml,这里访问的是最上面的配置
在这里插入图片描述
在这里插入图片描述
那我们要获取dev环境/或者test环境下的配置呢?通过-隔开即可。我们现在来访问 test-config-dev
在这里插入图片描述
同理如果要访问test环境下的配置, 改为test即可
在这里插入图片描述

  • 访问规则

其实,config访问配置文件,是需要一个具体的访问规则的, 那么这个访问规则到底是什么呢? 我们可以在官网找到:

/{application}/{profile}[/{label}] 
/{application}-{profile}.yml 
/{label}/{application}-{profile}.yml 
/{application}-{profile}.properties 
/{label}/{application}-{profile}.properties
  • application:就是配置文件的名字
  • profile:就是对应的环境
  • label:就是不同的分支

在这里插入图片描述
由这个规则可见, 我们刚刚使用的是第二种规则。

  • 查找子目录

config默认是从根目录查找的,所以如果配置文件放在根目录下的文件夹下那么是访问不到的,如下面这个foo文件夹下的test-config12.yml文件
在这里插入图片描述
所以我们可以配置search-paths属性,这样就可以读取到子文件夹下配置文件了
在这里插入图片描述

  • 文件类型转换

而且对于yml和properties类型config可以完美转换, 也就是说你存的是yml但是可以读取为properties类型的反过来也是如此
在这里插入图片描述

客户端从config上获取配置

刚刚给大家简单演示了一下config 以及怎么读取配置, 不过实际开发中,更多的不是我们人为去获取,而是由微服务从config上加载配置,那么,怎么来加载呢?

首先,我们需要在我们的微服务加入一个依赖声明他是config的客户端

<dependency> 
    <groupId>org.springframework.cloud</groupId> 
    <artifactId>spring-cloud-starter-config</artifactId> 
</dependency>

需要注意的是,这个依赖不包括spring -boot依赖, 也就是说, 假设你这个项目要当作spring boot来启动的话, 还得依赖spring boot。

启动类不需要做改动, 标准的spring boot启动类即可,需要注意的是yml文件。

以前我们对于spring boot的配置 是在application.yml里面配置的,现在从config上读取配置的话,还得需要一个bootstrap.yml配置文件。

spring cloud有一个“引导上下文"的概念,这是主应用程序的父上下文。引导上下文负责从配置服务器加载配置属性,以及解密外部配置文件中的属性。和主应用程序加载application.(yml或 properties)中的属性不同,引导上下文加载(bootstrap.)中的属性。配置在 bootstrap.*中的属性有更高的优先级,因此默认情况下它们不能被本地配置。

那么我们application.yml配置文件里面 只需要做一些简单的配置就可以了

spring:
  application:
    name: test-config

重点在于bootstrap.yml

spring: 
  cloud: 
    config: 
      name: test-config #这是我们要读取的配置文件名 对应获取规则的{application} 
      profile: dev   #这个是要获取的环境 对应的便是{profile} 
      label: master #这个就是获取的节点 对应的是{label} 
      uri: http://localhost:8080/ #这就是我们config server的一个地址

那么他就会获取到我们刚刚看到的那个配置

server:
  port: 8201

spring:
  profiles: dev
  application:
    name: test-cloud-dev-2.0

我们来测试一下 看看他会不会使用这个8201端口启动
在这里插入图片描述
这里 我们查看启动信息,能发现他现在使用的是我们从config server上读取到的配置。

spring cloud config高可用

config 高可用可以通过很多种方式, 比如说搭建一个nginx
在这里插入图片描述
或者config server注册到eureka上,client端也注册到eureka上,则已经实现高可用。不过这样也只有eureka中注册的服务能够使用这些配置信息。

  • 依赖引入
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  • application.yml
server:
  port: 8082
spring:
  application:
    name: config

  cloud:
    config:
      server:
        git:
          uri: https://github.com/513667225/my-spring-cloud-config.git #配置文件在github上的地址
          search-paths: foo,bar*  #Configserver会在 Git仓库根目录、 foo子目录,以及所有以 bar开始的子目录中查找配置文件。
          clone-on-start: true  #启动时就clone仓库到本地,默认是在配置被首次请求时,config server才会clone git仓库
          #native:
          #search-locations: classpath:/config #若配置中心在本地,本地的地址

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:3000/eureka/,http://eureka3001.com:3001/eureka,http://eureka3002.com:3002/eureka  #eureka服务端提供的注册地址 参考服务端配置的这个路径
  instance:

    instance-id: config-1 #此实例注册到eureka服务端的唯一的实例ID
    prefer-ip-address: true #是否显示IP地址
    leaseRenewalIntervalInSeconds: 10 #eureka客户需要多长时间发送心跳给eureka服务器,表明它仍然活着,默认为30 秒 (与下面配置的单位都是秒)
    leaseExpirationDurationInSeconds: 30 #Eureka服务器在接收到实例的最后一次发出的心跳后,需要等待多久才可以将此实例删除,默认为90秒

除了id不一样,集群中所有的config服务配置都一样
在这里插入图片描述

  • 启动类
@SpringBootApplication
@EnableConfigServer
@EnableEurekaClient
public class ConfigStart1 {
    public static void main(String[] args) {
        SpringApplication.run(ConfigStart1.class);
    }
}
  • 客户端读取配置

还需要注意的点就是当config server都注册完之后,client的配置文件bootstrap.yml进行以下改动

spring: 
  cloud: 
    config: 
      name: test-config 
      profile: dev 
      label: master 
      discovery: 
        enabled: true 				#支持eureka
        service-id: test-config 	#服务名
eureka: 
  client: 
    serviceUrl: 
      defaultZone: http://localhost:3000/eureka/	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值