从零开始学spring cloud(十一) -------- hystrix监控
一、官方文档阅读
服务启动后,可以通过/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监控的更多相关文章
- 从零开始学spring cloud(十) -------- hystrix简单代码示例
一.官网文档阅读 较低级别的服务中的服务故障可能导致级联故障一直到用户. 当对特定服务的调用超过circuitBreaker.requestVolumeThreshold(默认值:20个请求)且失败百 ...
- 从零开始学spring cloud(七) -------- Spring Cloud OpenFegin
一.OpenFegin 介绍 Feign是一个声明性的Web服务客户端. 它使编写Web服务客户端变得更容易. 要使用Feign,请创建一个界面并对其进行注释. 它具有可插入的注释支持,包括Feign ...
- 从零开始学spring cloud(六) -------- Ribbon
一.Ribbon介绍 Ribbon就是客户端侧负责均衡实现的一种方式,那么Ribbon是什么呢? Ribbon是Netflix发布的云中间层服务开源项目,其主要功能是提供客户端侧负载均衡算法.Ribb ...
- 从零开始学spring cloud(五) -------- 将服务注册到Eureka上
一.开发前准备工作: 官方文档地址:https://cloud.spring.io/spring-cloud-static/spring-cloud-netflix/2.1.0.RELEASE/mul ...
- 从零开始学spring cloud(四) -------- 基础项目搭建
1.创建一个spring cloud项目 1.1.使用工具创建--idea 点击creat new project,选择spring initializr 点击next,选择下一步 填入自己的Grou ...
- 从零开始学spring cloud(九) -------- 超时机制,断路器模式介绍
目前存在的问题: 现在我们假设一下,服务提供者响应非常缓慢,那么消费者对提供者的请求就会被强制等待,直到服务返回.在高负载场景下,如果不做任何处理,这种问题很可能造成所有处理用户请求的线程都被耗竭,而 ...
- 从零开始学spring cloud(八) -------- Eureka 高可用机制
一.Eureka高可用机制介绍 Eureka服务器没有后端存储,但注册表中的服务实例都必须发送心跳以使其注册保持最新(因此可以在内存中完成). 客户端还有一个Eureka注册的内存缓存(因此,他们不必 ...
- 从零开始学spring cloud(三) -------- Eureka简介
1.服务发现组件:Eureka Eureka的开源文档介绍地址:https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance What is Eu ...
- 从零开始学spring cloud(一) -------- spring cloud 简介
1.微服务简介 1.1.单体架构 一个归档包(例如war格式)包含了应用所有功能的应用程序,我们通常称之为单体应用.架构单体应用的方法论,我们称之为单体应用架构. 缺点:1. 复杂性高以笔者经手的一个 ...
随机推荐
- source insight 中文乱码解决方法
options->preferences -> Files-> default encoding: 选择 GB2312 CP:936
- C3D视频特征提取
一.部署 1. 先把项目Clone下来 git clone https://github.com/jfzhang95/pytorch-video-recognition.git 2. 安装环境: Py ...
- Centos7修改默认网卡名(改为eth0)以及网卡启动报错RTNETLINK answers: File exists处理
安装好centos7版本的系统后,发现默认的网卡名字有点怪,为了便于管理,可以手动修改.下面对centos7版本下网卡重命名操作做一记录:1)编辑网卡信息[root@linux-node2~]# cd ...
- Pandas之Dataframe叠加,排序,统计,重新设置索引
Pandas之Dataframe索引,排序,统计,重新设置索引 一:叠加 import pandas as pd a_list = [df1,df2,df3] add_data = pd.concat ...
- linux Ubuntu 16.04安装 postgresql
两次的重装系统安装数据库折磨的死去活来. 安装步骤: 1,运行 sudo apt-get update --这个用来查找数据源 2 ,运行 apt install postgresql ...
- shell脚本三——正则表达式
shell函数:shell中允许将一组命令集合或语句形成一段可用代码,这些代码块称为shell函数.给这段代码起个名字称为函数名,后续可以直接调用该段代码. 格式:fun() { 命令 } Shell ...
- [Vue warn]: Duplicate keys detected: '1'. This may cause an update error
今天遇到这个问题,遇到这个问题多数因为:key值的问题 第一种情况(key重复) <div class="name-list" v-for="(item,index ...
- net.sf.json
JSONObject package com.itlwc.test; import net.sf.json.JSONArray; import net.sf.json.JSONO ...
- C#拷贝一个库的表到另外一个库中(的四种方式)
1.该方法 基本不能用于实际开发中 ,仅供学习参考 public string Copy() { //要复制的表名 string table = "AAAAA"; //构造连接字符 ...
- [持续交付实践] Jenkins 中国用户大会参会见闻
前言 上周日在上海召开了Jenkins中国用户大会(Jenkins User Confluence China),这应该是Jenkins在中国第一次举办吧.Jenkins的创始人Kohsuke Kaw ...