SpringCloud之断路器监控(Hystrix Dashboard) |第六章 -yellowcong
2018-03-16 17:27
1081 查看
在微服务中,必须保证高可用性,防止程序出错导致网络阻塞,出现了断路器模型。断路器的状况反应了一个程序的可用性和健壮性,它是一个重要指标。Hystrix Dashboard是作为断路器状态的一个组件,提供了数据监控和友好的图形化界面。(ps:短路监控一般是搭建在Feign或ribbon上)。搭建一个断路监控的步骤:1、配置pom.xml文件,添加依赖;2、配置application.yml;3、配置启动器,添加注解
下面是完整的pom.xml配置
下载下来后,是下面这种格式的数据,这种数据格式比较的多,而且我们基本上也分析不出啥
解决的方法是,访问http://yellowcong.com:8762/hystrix,输入要分析的路径,设定延时和名称(这 两个都可以不写)
测试点击分析后,一顿刷新 ,可以看到实时的分析结果,访问的次数逐渐上涨。
下面是管网的图例说明,
导致这个问题,是由于刚刚我设定的时候,数据 源设定的错误
http://http://yellowcong.com:8762/hystrix.stream
后来排查发现,是由于
@EnableHystrix和
@EnableHystrixDashboard;4、启动eureka服务,然后再启动短路 监控系统。
代码地址
https://gitee.com/yellowcong/springcloud/tree/master/chapter6
目录结构
架构
我这个架构,直接监控ribbon里面的访问情况。节点 | 服务 | 项目名 |
---|---|---|
yellowcong.com:8761 | eureka注册服务 | eureka-server |
yellowcong.com:8762 | 提供服务与断路监控 | eureka-hystrix-dashboard |
断路器监控搭建(Hystrix Dashboard)
搭建一个断路监控的步骤:1、配置pom.xml文件,添加依赖;2、配置application.yml;3、配置启动器,添加注解@EnableHystrix和
@EnableHystrixDashboard;4、启动eureka服务,然后再启动短路 监控系统。
1、配置pom.xml
由于spring-cloud-starter-eureka-server的依赖包中,存在
servlet-api,导致tomcat服务器启动失败,我们需要将这个
servlet-api依赖包去除掉,这样服务器,才可以正常启动
<!--eureka server --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> <version>1.3.0.RELEASE</version><!--$NO-MVN-MAN-VER$--> <exclusions> <exclusion> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> </exclusion> </exclusions> </dependency> <!-- 添加断路器的监控系统 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId> <version>1.3.0.RELEASE</version><!--$NO-MVN-MAN-VER$--> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> <version>1.3.0.RELEASE</version><!--$NO-MVN-MAN-VER$--> </dependency>
下面是完整的pom.xml配置
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion>
<groupId>yellowcong.com</groupId>
<artifactId>cas-client-springboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>cas-client-springboot</name>
<url>http://maven.apache.org</url>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<!-- 引用父类依赖 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--eureka server --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> <version>1.3.0.RELEASE</version><!--$NO-MVN-MAN-VER$--> <exclusions> <exclusion> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> </exclusion> </exclusions> </dependency> <!-- 添加断路器的监控系统 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix-dashboard</artifactId> <version>1.3.0.RELEASE</version><!--$NO-MVN-MAN-VER$--> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> <version>1.3.0.RELEASE</version><!--$NO-MVN-MAN-VER$--> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- 添加spring的插件, 就可以直接通过 mvn spring-boot:run 运行了 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.4.RELEASE</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
2、配置application.yml
这个里面配置了注册中心,本服务的端口,以服务的名称。#配置eureka 的注册中心 eureka: client: serviceUrl: defaultZone: http://yellowcong.com:8761/eureka/ # 注册服务的端口 server: port: 8762 #配置当前服务的名称 spring: application: name: service-hystrix-dashboard
3、配置启动器
添加注解@EnableHystrix和
@EnableHystrixDashboard,来启用 短路和短路监控器,直接在主函数中,就添加了一个短路监控,通过注解
@HystrixCommand(fallbackMethod = "error"),来表示如果出现熔断操作,执行error方法。
package com.yellowcong.main; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.netflix.hystrix.EnableHystrix; import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; /** * @author yellowcong */ @SpringBootApplication // @EnableEurekaClient 表示这个是一个client @EnableEurekaClient // @RestController 相当于配置了 当于@ResponseBody + @Controller合在一起的作用。 // 这样就不能返回视图解析了 @RestController //开启断路器 @EnableHystrix @EnableHystrixDashboard public class ConfigMain { public static void main(String[] args) { SpringApplication.run(ConfigMain.class, args); } //注入配置文件(application.yml)的值 @Value("${server.port}") String port; /** * 创建日期:2018年3月16日<br/> * 创建用户:yellowcong<br/> * 功能描述:一个简单的springmvc 的请求 * @param name 用户传递进来的参数 * @return */ @HystrixCommand(fallbackMethod = "error") @RequestMapping(value="/hi/{name}",method=RequestMethod.GET) public String home(@PathVariable String name) { return "hi " + name + ",i am (eureka client1) from port:" + port; } public String error(String name ){ return name+" has error 404"; } }
4、启动服务测试
我们可以直接访问:http://yellowcong.com:8762/hystrix.stream 来查看那这个返回的数据信息。下载下来后,是下面这种格式的数据,这种数据格式比较的多,而且我们基本上也分析不出啥
解决的方法是,访问http://yellowcong.com:8762/hystrix,输入要分析的路径,设定延时和名称(这 两个都可以不写)
测试点击分析后,一顿刷新 ,可以看到实时的分析结果,访问的次数逐渐上涨。
访问效果
下面是管网的图例说明,
常见问题
1、Unable to connect to Command Metric Stream.
导致这个问题,是由于刚刚我设定的时候,数据 源设定的错误
http://http://yellowcong.com:8762/hystrix.stream
2、Unable to start embedded Tomcat
出现了不能启动tomcat的错误,这个错误的原因,多半是由于maven的依赖出了问题。org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:137) ~[spring-boot-1.5.10.RELEASE.jar:1.5.10.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:537) ~[spring-context-4.3.14.RELEASE.jar:4.3.14.RELEASE] at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.5.10.RELEASE.jar:1.5.10.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) [spring-boot-1.5.10.RELEASE.jar:1.5.10.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) [spring-boot-1.5.10.RELEASE.jar:1.5.10.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) [spring-boot-1.5.10.RELEASE.jar:1.5.10.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) [spring-boot-1.5.10.RELEASE.jar:1.5.10.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) [spring-boot-1.5.10.RELEASE.jar:1.5.10.RELEASE] at com.yellowcong.ConfigMain.main(ConfigMain.java:17) [classes/:na]
后来排查发现,是由于
spring-cloud-starter-eureka-server中的servlet-api 包捣鬼,我们把他排除掉,不到入,即可解决问题了。
<!--eureka server --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> <version>1.3.0.RELEASE</version><!--$NO-MVN-MAN-VER$--> <exclusions> <exclusion> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> </exclusion> </exclusions> </dependency>
相关文章推荐
- Spring Cloud 入门教程(八): 断路器指标数据监控Hystrix Dashboard 和 Turbine
- Spring Cloud Learning | 第七篇:断路器监控仪表盘(Hystrix Dashboard)
- SpringCloud之断路器监控(Hystrix Dashboard)(九)
- SpringCloud之断路器监控(Hystrix Dashboard)(九)
- SpringCloud 学习 | 第八篇: 断路器监控使用(Hystrix Dashboard)
- springcloud(五):熔断监控Hystrix Dashboard和Turbine
- springcloud(五):熔断监控Hystrix Dashboard和Turbine
- springcloud(五):熔断监控Hystrix Dashboard和Turbine
- SpringCloud之Ribbon和Feign断路器支持(Hystrix)|第四章-yellowcong
- SpringCloud 教程 (六)断路器聚合监控(Hystrix Turbine)
- SPRINGCLOUD-熔断监控HYSTRIX DASHBOARD和TURBINE
- Spring Boot + Spring Cloud 构建微服务系统(五):熔断监控面板(Hystrix Dashboard)
- spring cloud-添加Hystrix Dashboard监控到系统中
- SpringCloud (十) Hystrix Dashboard单体监控、集群监控、与消息代理结合
- springcloud(五):熔断监控Hystrix Dashboard和Turbine 2017/05/18
- SpringCloud之断路器聚合监控Spring Cloud Hystrix Turbine实例
- SpringCloud之断路器聚合监控(Hystrix Turbine)
- spring cloud-添加Hystrix Dashboard监控到系统中
- springcloud实战之8 断路器-仪表盘-单例监控(Hystrix)