一、官方文档阅读

服务启动后,可以通过/health和hystrix.stream查看效果,实际上,访问上述两个地址,会出现404,这是因为spring boot版本的问题,

我在这里使用的springboot的版本是:

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
</parent>

使用的spring cloud的版本是

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>

这里,需要在movie服务的配置文件中,增加:

management:
endpoints:
web:
exposure:
include: ["health","info"]

并且在启动类中,增加:

    @Bean
public ServletRegistrationBean getServlet() {
HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
registrationBean.setLoadOnStartup(1);
registrationBean.addUrlMappings("/actuator/hystrix.stream");
registrationBean.setName("HystrixMetricsStreamServlet");
return registrationBean;
}

这样设置后,可以开放对地址地址的访问,具体开放参数,可以查看springboot的文档:

https://docs.spring.io/spring-boot/docs/2.1.4.RELEASE/reference/htmlsingle/#boot-features-security-actuator

当中有很具体的说明。

二、实践

启动user,eureka,movie服务,

访问movie服务:http://localhost:8010/actuator/hystrix.stream

在未发生实际请求时,会一直ping:ping:

当我们访问服务,请求user服务后,

就会一直刷日志,这个日志很难截图,因此,hystrix提供了一个图形化界面,供我们进行查看,分析。

首先,在pom文件中,增加相应的依赖:

        <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>

在启动类上 增加注解:@EnableHystrixDashboard ,启动项目,并访问如下地址:http://localhost:8010/hystrix

在上面的文本框中,填入hystrix.stream,然后设置一个标题,如下:

点击monittor stream ,

然后访问服务,查看数据变化,

实际上,一个真实的项目,有很多个微服务,这种监控单点的实例,其实是没有作用的。

查看单个实例的Hystrix数据在系统整体运行状况方面不是很有用。 Turbine是一个应用程序,它将所有相关的/hystrix.stream端点聚合到一个组合的/turbine.stream中,以便在Hystrix仪表板中使用。 个别实例位于尤里卡。 运行Turbine需要使用@EnableTurbine注释来注释主类(例如,使用spring-cloud-starter-netflix-turbine来设置类路径)。 Turbine 1 wiki中所有记录的配置属性均适用。 唯一的区别是turbine.instanceUrlSuffix不需要前置端口,因为除非turbine.instanceInsertPort = false,否则会自动处理。

默认情况下,Turbine通过在Eureka中查找其hostName和端口条目,然后将/hystrix.stream附加到其上来查找已注册实例上的/hystrix.stream端点。 如果实例的元数据包含management.port,则使用它来代替/hystrix.stream端点的端口值。 默认情况下,名为management.port的元数据条目等于management.port配置属性。 可以通过以下配置覆盖它:

eureka:
instance:
metadata-map:
management.port: ${management.port:8081}

通过这个配置呢,可以修改hystrix.stream的端口,

spring cloud 提供了turbine,下面我们先搭建一个turbine server

turbine是从eureka上获取节点数据的,因此,turbine也需要注册到eureka上,首先,引入相应的依赖:

        <dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-turbine</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

在启动类上,增加如下的注解:

@EnableTurbine

如果名称是默认值,则可以省略cluster参数。 cluster参数必须与turbine.aggregator.clusterConfig中的条目匹配。 从尤里卡返回的值是大写的。 因此,如果有一个名为Customers的应用程序在Eureka注册,则以下示例有效:

我们在配置文件中,增加类似的配置:

 spring:
application:
name: microservice-hystrix-turbine
server:
port: 8031 eureka:
client:
serviceUrl:
defaultZone: http://user:password123@192.168.1.114:8761/eureka
instance:
prefer-ip-address: true
instance-id: ${spring.application.name}:${spring.application.instance_id:${server.port}} turbine:
aggregator:
clusterConfig: MICROSERVICE-CONSUMER-MOVIE-FEGIN-WITH-HYSTRIX
appConfig: microservice-consumer-movie-fegin-with-hystrix

启动eureka,user,dasdboard,movie服务

访问:http://localhost:8031/turbine.stream?cluster=MICROSERVICE-CONSUMER-MOVIE-FEGIN-WITH-HYSTRIX

就能看到打印的结果,

下载把地址,放入仪表盘,dasdboard

下面访问movie服务,查看访问结果

这个监控,有一定的延时,我们再次启动一个movie服务,相同的服务名称,

然后再次查看仪表盘,可以查看到两个节点的监控都有了,但是后起的那个监控,会延迟一段时间,才会被仪表盘监控到

下面看一下turbine是如何监控多个不同的服务的

修改turbine的配置文件:

turbine:
aggregator:
clusterConfig: default
appConfig: microservice-consumer-movie-fegin-with-hystrix,microservice-consumer-movie
clusterNameExpression: "'default'"

这样,使用了一个“默认”的集群,现在直接访问turbine的http://localhost:8031/turbine.stream

就能看到以下数据:

下面将turbine的地址填入dasdboard,

通过浏览器,分别请求另外两个数据,查看仪表盘结果

就可以发现,仪表盘监控了两个项目。

默认情况下,trubine在注册的实例上查找/hystrix.stream端点,方法是在Eureka中查找其homePageUrl 条目。然后将/hystrix.stream附加

从零开始学spring cloud(十一) -------- hystrix监控的更多相关文章

  1. 从零开始学spring cloud(十) -------- hystrix简单代码示例

    一.官网文档阅读 较低级别的服务中的服务故障可能导致级联故障一直到用户. 当对特定服务的调用超过circuitBreaker.requestVolumeThreshold(默认值:20个请求)且失败百 ...

  2. 从零开始学spring cloud(七) -------- Spring Cloud OpenFegin

    一.OpenFegin 介绍 Feign是一个声明性的Web服务客户端. 它使编写Web服务客户端变得更容易. 要使用Feign,请创建一个界面并对其进行注释. 它具有可插入的注释支持,包括Feign ...

  3. 从零开始学spring cloud(六) -------- Ribbon

    一.Ribbon介绍 Ribbon就是客户端侧负责均衡实现的一种方式,那么Ribbon是什么呢? Ribbon是Netflix发布的云中间层服务开源项目,其主要功能是提供客户端侧负载均衡算法.Ribb ...

  4. 从零开始学spring cloud(五) -------- 将服务注册到Eureka上

    一.开发前准备工作: 官方文档地址:https://cloud.spring.io/spring-cloud-static/spring-cloud-netflix/2.1.0.RELEASE/mul ...

  5. 从零开始学spring cloud(四) -------- 基础项目搭建

    1.创建一个spring cloud项目 1.1.使用工具创建--idea 点击creat new project,选择spring initializr 点击next,选择下一步 填入自己的Grou ...

  6. 从零开始学spring cloud(九) -------- 超时机制,断路器模式介绍

    目前存在的问题: 现在我们假设一下,服务提供者响应非常缓慢,那么消费者对提供者的请求就会被强制等待,直到服务返回.在高负载场景下,如果不做任何处理,这种问题很可能造成所有处理用户请求的线程都被耗竭,而 ...

  7. 从零开始学spring cloud(八) -------- Eureka 高可用机制

    一.Eureka高可用机制介绍 Eureka服务器没有后端存储,但注册表中的服务实例都必须发送心跳以使其注册保持最新(因此可以在内存中完成). 客户端还有一个Eureka注册的内存缓存(因此,他们不必 ...

  8. 从零开始学spring cloud(三) -------- Eureka简介

    1.服务发现组件:Eureka Eureka的开源文档介绍地址:https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance What is Eu ...

  9. 从零开始学spring cloud(一) -------- spring cloud 简介

    1.微服务简介 1.1.单体架构 一个归档包(例如war格式)包含了应用所有功能的应用程序,我们通常称之为单体应用.架构单体应用的方法论,我们称之为单体应用架构. 缺点:1. 复杂性高以笔者经手的一个 ...

随机推荐

  1. source insight 中文乱码解决方法

    options->preferences -> Files-> default encoding: 选择 GB2312 CP:936

  2. C3D视频特征提取

    一.部署 1. 先把项目Clone下来 git clone https://github.com/jfzhang95/pytorch-video-recognition.git 2. 安装环境: Py ...

  3. Centos7修改默认网卡名(改为eth0)以及网卡启动报错RTNETLINK answers: File exists处理

    安装好centos7版本的系统后,发现默认的网卡名字有点怪,为了便于管理,可以手动修改.下面对centos7版本下网卡重命名操作做一记录:1)编辑网卡信息[root@linux-node2~]# cd ...

  4. Pandas之Dataframe叠加,排序,统计,重新设置索引

    Pandas之Dataframe索引,排序,统计,重新设置索引 一:叠加 import pandas as pd a_list = [df1,df2,df3] add_data = pd.concat ...

  5. linux Ubuntu 16.04安装 postgresql

    两次的重装系统安装数据库折磨的死去活来. 安装步骤: 1,运行  sudo apt-get update     --这个用来查找数据源 2 ,运行  apt install postgresql  ...

  6. shell脚本三——正则表达式

    shell函数:shell中允许将一组命令集合或语句形成一段可用代码,这些代码块称为shell函数.给这段代码起个名字称为函数名,后续可以直接调用该段代码. 格式:fun() { 命令 } Shell ...

  7. [Vue warn]: Duplicate keys detected: '1'. This may cause an update error

    今天遇到这个问题,遇到这个问题多数因为:key值的问题 第一种情况(key重复) <div class="name-list" v-for="(item,index ...

  8. net.sf.json

    JSONObject package com.itlwc.test;         import net.sf.json.JSONArray;    import net.sf.json.JSONO ...

  9. C#拷贝一个库的表到另外一个库中(的四种方式)

    1.该方法 基本不能用于实际开发中 ,仅供学习参考 public string Copy() { //要复制的表名 string table = "AAAAA"; //构造连接字符 ...

  10. [持续交付实践] Jenkins 中国用户大会参会见闻

    前言 上周日在上海召开了Jenkins中国用户大会(Jenkins User Confluence China),这应该是Jenkins在中国第一次举办吧.Jenkins的创始人Kohsuke Kaw ...