springCloud - 第12篇 - 服务监控 Hystrix 面板

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。

前面有用过 Hystrix 熔断,在多服务运行时。可以通过 Hystrix 的监控面板来实时观察各个服务的运行健康、效率和请求量等。

首先从《Spring Cloud微服务实战》作者的博客中借用一图:

此图出自:http://blog.didispace.com/spring-cloud-starter-dalston-5-1/

这图是怎么来的呢? 下面一步一步来实现。 

1. 新建一个 springboot 工程 hystrix-dashboard,实现 hystrix 的监控面板。( 工程详细新建方式在前面几篇博客中均有说明 )

1.1 工程结构:

 1.2  pom 依赖:

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com</groupId><artifactId>hystrix-dashboard</artifactId><version>0.0.1-SNAPSHOT</version><name>hystrix-dashboard</name><description>服务监控-面板</description><properties><java.version>1.8</java.version></properties><parent><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-parent</artifactId><version>Dalston.SR1</version><relativePath /></parent><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-hystrix</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-hystrix-dashboard</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

1.3 application.properties :

# 端口
server.port= 8888# 工程名
spring.application.name= hystrix-dashboard# 修改 Hystrix 默认超时时间
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds= 2000 

1.4 主启动类:

package com.hystrixdashboard;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;// 开启监控面板
@EnableHystrixDashboard@SpringBootApplication
public class HystrixDashboardApplication {public static void main(String[] args) {SpringApplication.run(HystrixDashboardApplication.class, args);}}

此时,启动工程,浏览器访问:http://localhost:8888/hystrix.stream

面板主页面已经有了,但是无任何实际监控信息。要查看具体内容需在第一个输入框中输入监控对象 相关服务的 URL。

如页面上提示的信息所示:有 3 种 URL 方式可以查看监控内容。

前 2 者都是监控集群服务时要输入的 UR,最后一种为监控单个应用服务的 URL :

默认集群 :http://turbine-hostname:port/turbine.stream 指定集群:http://turbine-hostname:port/turbine.stream?cluster=[clusterName]指定单个服务:http://hystrix-app:port/hystrix.stream

2. 改造已有工程 ribbon ,把其服务纳入 Hystrix 的监控中。

2.1 pom 中加入依赖,开启 hystrix 监控:

        <!-- 开启 hystrix 监控 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-hystrix</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>

此时 ribbon 完整 pom 依赖为:

<?xml version="1.0" encoding="UTF-8"?>
<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>com.ribbon</groupId><artifactId>service-ribbon</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>service-ribbon</name><description>服务消费 ribbon 方式</description><parent><groupId>com.base</groupId><artifactId>base-config</artifactId><version>0.0.1-SNAPSHOT</version></parent><dependencies><!-- 开启 hystrix 监控 -->      <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!--熔断器--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-ribbon</artifactId></dependency></dependencies><repositories><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository></repositories></project>

2.2 确认启动类有注解: Hystrix @EnableHystrix,以 开启断路器。同时加上以下代码,以保证 Hystrix 映射正常运行:

@Beanpublic ServletRegistrationBean hystrixMetricsStreamServlet() {ServletRegistrationBean registration = new ServletRegistrationBean(new HystrixMetricsStreamServlet());registration.addUrlMappings("/hystrix.stream");return registration;}

此时 ribbon 完整启动类为:

package com.ribbon.serviceribbon;import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;@SpringBootApplication// 开启断路器: Hystrix
@EnableHystrix// 标明自已为服务
@EnableDiscoveryClient
public class ServiceRibbonApplication {public static void main(String[] args) {SpringApplication.run(ServiceRibbonApplication.class, args);}/*** 向 ioc 注入 bean : restTemplate;* 注解 @LoadBalanced :此 bean 开启负载均衡。* @return*/@Bean@LoadBalancedRestTemplate restTemplate() {return new RestTemplate();}@Beanpublic ServletRegistrationBean hystrixMetricsStreamServlet() {ServletRegistrationBean registration = new ServletRegistrationBean(new HystrixMetricsStreamServlet());registration.addUrlMappings("/hystrix.stream");return registration;}
}

2.3  配置文件 application.properties 中增加: management.endpoints.web.exposure.include= hystrix.stream,以配置 actuator 的 endpoint,完整配置为:

# 注册中心 - 端口: 1234、工程名: eureka (见 eureka 工程中配置)。
eureka.client.serviceUrl.defaultZone= http://localhost:1234/eureka/# 端口
server.port= 8701# 工程名
spring.application.name= ribbon# 也可配置为'*'
management.endpoints.web.exposure.include= hystrix.stream

3.依次启动工程:注册中心 eureka 、服务应用 ribbon 、监控面板 hystrix 、服务应用 seeParam 。

关于 ribbon 和 seeParam 详见文章:springCloud - 第5篇 - 断路器 Hystrix ( Feign 、Ribbon )

3.1 注册中心可见 ,2 个服务都已注册:

3.2  此时查看单个服务 ribbon 的运行状况,在 Hystrix 界面第一个输入框中输入: http://localhost:8701/hystrix.stream

可以看到 :

3.3  当 seeParam 工程运行正常时,熔断未触发,此时 ribbon 服务也运行正常。

多次刷新请求 http://localhost:8701/seeParam?param=99 ,这样才会在 hystrix 中有统计数据,2分钟内请求如下:

如文初说明,线条的高低起伏变化表示请求量。

而圆球则主要表示2层意思:

1.圆球的颜色可能变化为:绿色、黄色、橙色、红色,分别对应服务的健康程度,绿色健康程度最高,红色最差。2.球体大小变化:圆越大则代表请求量越大,同理,圆越小则代表请求量越小。

3.4 停掉工程 seeParam 服务时,熔断触发,此时 ribbon 服务运行正常,但请求seeParam 失败。

多次刷新请求 http://localhost:8701/seeParam?param=99 ,这时2分钟内,在 hystrix 中统计数据如下:

如上图 红框中所示,seeParam 工程服务请求超时率为 100% 。

到此单个服务的监控就实现了。

PS:遇到报错:

com.sun.jersey.api.client.ClientHandlerException:java.net.ConnectException: Connection refused: connect

解决方式:(其实文中 已经有解决方法了)在被监控服务 ribbon 中加上 2 点:

1) 配置文件:

# 也可配置为'*'
management.endpoints.web.exposure.include= hystrix.stream

2)启动类:

   @Beanpublic ServletRegistrationBean hystrixMetricsStreamServlet() {ServletRegistrationBean registration = new ServletRegistrationBean(new HystrixMetricsStreamServlet());registration.addUrlMappings("/hystrix.stream");return registration;}

此解决方法出自: https://blog.csdn.net/WYA1993/article/details/82419131

-------------------------------------------------------------

下一篇: springCloud - 第13篇 - 服务监控 集群模式 Hystrix-turbine

源码见:

https://gitee.com/FJ_WoMenDeShiJie/springcloud-seeParam

https://gitee.com/FJ_WoMenDeShiJie/springcloud-ribbon

https://gitee.com/FJ_WoMenDeShiJie/springcloud-hystrix-dashboard

-------------------------------------------------------------

PS:这个系列不定时更新,只是个人的学习分享,

内容全程参考书目:

《Spring Cloud 与 Docker 微服务架构空实战 》、

《Spring Cloud 微服务实战》及此书作者博客:http://blog.didispace.com/spring-cloud-learning/

《深入理解 Spring Cloud 与微服务构建》及此书作者博客:https://blog.csdn.net/forezp/article/details/70148833

----------------------------------------------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/447565.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

专访Google数据科学家彭晨:大数据成为潮流走近各行各业!

摘要&#xff1a;在“2014中美大数据研讨会”开始之前&#xff0c;CSDN采访了谷歌公司数据科学家彭晨&#xff0c;他表示之所以“大数据”火&#xff0c;是因为人类第一次可以精确的、系统的、实时的、全方位的、永久的获取、记录、分析、并保存海量的数据。 端午节后6月6日&a…

解决:ClassNotFoundException: com.netflix.hystrix.contrib.javanica.aop.aspectj.HystrixCommandAspect

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 场景&#xff0c;springcloud 学习工程中&#xff0c;把 feign 和 ribbon 工程 作为应用服务&#xff0c;纳入 hystrix-turbine 服务…

解决:com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused:

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 场景&#xff1a;启动一个需要注册到 eureka 注册中心的服务 seeParam 报错&#xff1a; com.sun.jersey.api.client.ClientHandle…

springCloud - 第13篇 - 服务监控 集群模式 Hystrix-turbine

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 在springcloud 体系中&#xff0c;可以用 hystrix-dashboard 实时监控服务的运行状态。上一文记录了单实例的监控&#xff0c;现在实…

解决:Error response from daemon: Cannot restart container xxx: driver failed programming external

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 我的情况&#xff1a;个人站点访问不了&#xff0c;重启了阿里云ECS服务器后&#xff0c;发现服务器 80端口不通&#xff0c;于是重启…

专访许鹏:谈C程序员修养及大型项目源码阅读与学习

摘要&#xff1a;阅读源码是开源项目最好的学习方式&#xff0c;然而真正的执行起来却并不容易。这里我们为大家分享许鹏的源码阅读经验、C程序员的修养以及Spark和Storm源码走读博文。 对许鹏的第一印象来源于其Bolg的粗读&#xff0c;最早时候更准确说应该是博文的粗略统计—…

解决:mysql 连接报错 Authentication plugin ‘caching_sha2_password‘cannot be loaded

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Navicat连接linux上的mysql时报如下错误&#xff1a; 错误原因&#xff1a; 即从mysql5.7版本之后&#xff0c;默认采用了caching_sha2_…

【历史回顾】Linux发展一览

我们周围到处都有Linux的身影&#xff0c;在家中、公司里、大学、实验室&#xff0c;太空空间站。现在的Linux已经从一个个人爱好发展成了一场计算机革命。在这篇文章里&#xff0c;我们向你展示最完整的Linux 23年来发展的历史年表。我们周围到处都有Linux的身影&#xff0c;在…

专访联想谢政维:功耗和价格是天蝎项目最大障碍!

摘要&#xff1a;与国外OpenStack和OCP&#xff08;开放计算项目&#xff09;频频见诸报端不同&#xff0c;中国的天蝎计划看起来神神秘秘&#xff0c;今天专访联想谢政维&#xff0c;他帮我们解密了目前天蝎项目的一些基本情况&#xff0c;以及他对未来天蝎发展的观点。 服务…

解决:Chrome 插件安装时提示 程序包无效:“CRX_HEADER_INVALID“

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 今天在添加谷歌插件的时候&#xff0c;却发现谷歌浏览器显示 程序包无效&#xff1a;"CRX_HEADER_INVALID"&#xff0c;现整理…

65种GPU性能测试,AMD开源驱动领先!

摘要&#xff1a;近日&#xff0c;Phoronix测试了65 种不同的GPU使用开源驱动的OpenGL性能&#xff0c;测试的GPU型号包括Intel HD Graphics、AMD Radeon、AMD FirePro和NVIDIA GeForce系列。结果显示&#xff0c;相比之下&#xff0c;AMD开源驱动领先于NVIDIA。 【编者按】20…

指尖上的艺术——如何运用代码发挥无限创意

摘要&#xff1a;计算机为我们的生活带来了不计其数的变化&#xff0c;现在&#xff0c;我们不妨也把它与艺术结合起来&#xff0c;去从机器的角度来为生活增添活力与色彩&#xff0c;开拓一个无限可能的艺术创作新境界。 写在前面 生成的艺术&#xff0c;指尖上的艺术&#…

解决:XXX类存在 却报错 Unkonwn class:‘XXX‘ 、@Autoeired 注入失败

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 我的情况如图&#xff0c;有一个CuxxxxManager 类明明是就在本工程中的&#xff0c;我想注入到对应 Service 中&#xff0c;却直接报…

精益设计:“纸上谈兵”的说服力

摘要&#xff1a;当你和团队通宵达旦地输出大量完整而精美的方案时&#xff0c;可客户却根本不买帐。这究竟是沟通出了问题&#xff0c;还是我们犯了错&#xff1f;如何提高设计效率、提升沟通及如何设计出更好的用户体验是每个互联网从业者都值得关注的问题。 【编者按】此前…

如何兼职创业并避免风险

大多数人开始创建第一家公司时&#xff0c;仍然有一份正常工作。 这是有道理的&#xff1a;你不需要贷款&#xff0c;并且你并不需要资金。如果你“失败”了&#xff0c;你失去仅仅是时间&#xff0c;但考虑到你得到的乐趣&#xff0c;经历&#xff0c;以及一切你已经学会的东西…

8款最受欢迎的HTML5/CSS3应用及代码

新的一周开始&#xff0c;小编也将继续为大家分享精彩的HTML5应用&#xff0c;还有CSS3和jQuery方面的东西。今天给大家带来的是8款最受欢迎的HTML5/CSS3应用及代码&#xff0c;一起来看看吧。 1、基于HTML5 Canvas的图表插件Chart.js chart.js是一款基于HTML5 Canvas的图表插…

超负荷写代码 = 慢性自杀

本文是html5tricks原创翻译&#xff0c;转载请看清文末的转载要求&#xff0c;谢谢合作&#xff01; 也许你会认为我是个故弄玄虚的标题党&#xff0c;不过我需要澄清一下。首先&#xff0c;这是真的&#xff0c;超负荷写代码的确意味着慢性自杀。然后问题就来了&#xff0c;“…

程序员必须知道的10大基础实用算法及其讲解

算法一&#xff1a;快速排序算法 快速排序是由东尼霍尔所发展的一种排序算法。在平均状况下&#xff0c;排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较&#xff0c;但这种状况并不常见。事实上&#xff0c;快速排序通常明显比其他Ο(n log n) 算法更快&a…

Git远程操作详解

摘要&#xff1a;Git是目前最流行的版本管理系统&#xff0c;学会Git几乎成了开发者的必备技能。本文详细介绍5个Git命令&#xff0c;它们的概念和用法&#xff0c;理解了这些内容&#xff0c;你就会完全掌握Git远程操作。 【编者按】Git是一个分布式版本控制&#xff0f;软件…

深入理解 AMQP 协议

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 PS&#xff1a;更多详情见 AMQP主页 &#xff1a;http://www.amqp.org/ 。 一、AMQP 是什么 AMQP&#xff08;Advanced Message Queuing…