spring cloud图形化dashboard是如何实现指标的收集展示的
spring cloud图形化dashboard是如何实现指标的收集展示的
1、dashboard图形化界面入口
http://localhost:10000/hystrix.stream
说明:端口是由配置文件server.port=10000来指定的,可以修改。
打开后可以看到如下的界面
输入需要监控的集群,然后点击Monitor Stream按钮,进行集群监控
这边假设输入
http://localhost:10000/turbine.stream?cluster=default
可以看到下面的界面
注:如果看到的是空白页面,需要访问一下开启了@HystrixCommand注解的rest方法,本文中有两个方法,hello、hellosleep方法。
@GetMapping("/hello")
@HystrixCommand(fallbackMethod = "helloFallback")
public String hello() {
return "provide hello world";
}
@GetMapping("/hellosleep")
@HystrixCommand(fallbackMethod = "helloexFallback")
public String hellosleep() throws InterruptedException {
int i = 2000;
TimeUnit.MILLISECONDS.sleep(i);
return "provide hellosleep world!";
}
2、dashboard是如何实现监控数据的获取的。
我们通过浏览器工具打开网络监控,或者使用F12快捷键查看监控的url。
如下:
url:
http://localhost:10000/proxy.stream?origin=http%3A%2F%2Flocalhost%3A10000%2Fturbine.stream%3Fcluster%3Ddefault
我们看到,它是通过proxy.stream来获取数据,有一个origin参数,就是前面我们输入的想要监控的那个url地址,即【http://localhost:10000/turbine.stream?cluster=default】。proxy.stream其实对应的是一个servlet。
查看源码:
HystrixDashboardConfiguration可以看到它有一个内部类ProxyStreamServlet就是用来处理这个url的。
关键源码如下:
这个servlet其实就是通过origin来获取数据,如果我们直接访问origin所对应的地址,可以看到如下的数据,像流一样源源不断的打印出来。
图形化的界面其实就是从这个servlet获取数据,并展示的
3、servlet怎么把流数据返回
httpget = new HttpGet(proxyUrl);
HttpClient client = ProxyConnectionManager.httpClient;
HttpResponse httpResponse = client.execute(httpget);
int statusCode = httpResponse.getStatusLine().getStatusCode();
if (statusCode == HttpStatus.SC_OK) {
is = httpResponse.getEntity().getContent();
//省略代码...
OutputStream os = response.getOutputStream();
int b = -1;
while ((b = is.read()) != -1) {
try {
os.write(b);
if (b == 10 /** flush buffer on line feed */
) {
os.flush();
}
}
catch (Exception ex) {
//省略代码...
}
}
}
servlet其实就是通过url去获取响应结果,然后不断的输出到前台页面。
4、前台界面怎么展示不断响应回来的流数据呢
这边主要用到了HTML5的一个对象EventSource,可以获取到这个数据。
注意: EventSource不支持IE浏览器,这边使用谷歌浏览器
我们还是通过浏览器工具,查看图形化界面的使用到js脚本。
如下:
EventSource对象可以对url进行监听,并注册响应函数。这里不进行展开,有兴趣的同学可以详细的阅读里面的脚本。
5、总结
turbine收集的数据是一种json格式的数据,而且像流一样不断输出。所以我们需要借助图形化工具来展示。而图形化工具的数据订阅我们通过上面的分析已经知道,其实他就是通过servlet来访问turbine的链接来获取数据并展现的。
spring cloud图形化dashboard是如何实现指标的收集展示的的更多相关文章
- 微服务架构之spring cloud hystrix&hystrix dashboard
在前面介绍spring cloud feign中我们已经使用过hystrix,只是没有介绍,spring cloud hystrix在spring cloud中起到保护微服务的作用,不会让发生的异常无 ...
- spring cloud: Hystrix(七):Hystrix的断容器监控dashboard
Hystrix的断容器监控dashboard. dashboard是用来监控Hystrix的断容器监控的,图形化dashboard是如何实现指标的收集展示的. dashboard 本地端口8730 项 ...
- 微服务架构集大成者—Spring Cloud (转载)
软件是有生命的,你做出来的架构决定了这个软件它这一生是坎坷还是幸福. 本文不是讲解如何使用Spring Cloud的教程,而是探讨Spring Cloud是什么,以及它诞生的背景和意义. 1 背景 2 ...
- Spring Cloud Alibaba | Sentinel:分布式系统的流量防卫兵基础实战
Spring Cloud Alibaba | Sentinel:分布式系统的流量防卫兵基础实战 Springboot: 2.1.8.RELEASE SpringCloud: Greenwich.SR2 ...
- Spring Cloud Alibaba | Sentinel:分布式系统的流量防卫兵动态限流规则
Spring Cloud Alibaba | Sentinel:分布式系统的流量防卫兵动态限流规则 前面几篇文章较为详细的介绍了Sentinel的使用姿势,还没看过的小伙伴可以访问以下链接查看: &l ...
- Spring Cloud微服务Sentinel+Apollo限流、熔断实战总结
在Spring Cloud微服务体系中,由于限流熔断组件Hystrix开源版本不在维护,因此国内不少有类似需求的公司已经将眼光转向阿里开源的Sentinel框架.而以下要介绍的正是作者最近两个月的真实 ...
- Spring Cloud微服务限流之Sentinel+Apollo生产实践
Sentinel概述 在基于Spring Cloud构建的微服务体系中,服务之间的调用链路会随着系统的演进变得越来越长,这无疑会增加了整个系统的不可靠因素.在并发流量比较高的情况下,由于网络调用之间存 ...
- Spring Cloud Alibaba基础教程:Sentinel使用Apollo存储规则
上一篇我们介绍了如何通过Nacos的配置功能来存储限流规则.Apollo是国内用户非常多的配置中心,所以,今天我们继续说说Spring Cloud Alibaba Sentinel中如何将流控规则存储 ...
- Spring Cloud Alibaba基础教程:Sentinel使用Nacos存储规则
通过上一篇<使用Sentinel实现接口限流>的介绍,相信大家对Sentinel已经有了初步的认识.在Spring Cloud Alibaba的整合封装之下,接口限流这件事情可以非常轻易的 ...
随机推荐
- 来了解一下Ajax是什么?Ajax的原理?Ajax与传统Web比较?Ajax的优缺点?Ajax的Post与Get比较
一.什么是Ajax Ajax(Asynchronous Java and XML的缩写)是一种异步请求数据的web开发技术,对于改善用户的体验和页面性能很有帮助.简单地说,在不需要重新刷新页面的情况下 ...
- UVA12995 Farey Sequence
UVA12995 Farey Sequence 欧拉函数 同仪仗队那题几乎相同,本质都是求欧拉函数的和 #include<cstdio> #define N 1000000 ],i,j,t ...
- 01: tornado基础篇
目录:Tornado其他篇 01: tornado基础篇 02: tornado进阶篇 03: 自定义异步非阻塞tornado框架 04: 打开tornado源码剖析处理过程 目录: 1.1 Torn ...
- 20145335郝昊《网络攻防》Exp7 网络欺诈技术防范
20145335郝昊<网络攻防>Exp7 网络欺诈技术防范 实验内容 本次实践本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法. 简单应用SET工具建立冒名网站. ...
- payload
payload就是协议报文中的有效载荷所占报文的百分比,用报文中去除协议的长度/报文总长度,协议设计的时候需要考虑到有效载荷所占的比重,避免出现payload很小的情况,比如TCP在设计的时候,就考虑 ...
- CRC32是什么?
CRC32:CRC本身是“冗余校验码”的意思,CRC32则表示会产生一个32bit(8位十六进制数)的校验值.由于CRC32产生校验值时源数据块的每一个bit(位)都参与了计算,所以数据块中即使只有一 ...
- CEF之CefSettings设置日志等级
CefSettings结构体允许定义全局的CEF配置,经常用到的配置项如下: single_process 设置为true时,Browser和Renderer使用一个进程.此项也可以通过命令行参数“s ...
- git分支 远程协作
创建文件mkdir ### cd ### git init 初始化 git config global user.name “username” git config global user.emia ...
- 【Apache】的运营之道
1.“一个修修补补”的服务? 大家可能听说过 Apache 是一个双关语 “a patchy Web server”,意思为一个修修补补的 web 服务,即通过一系列的补丁做的服务.但是这并不是 Ap ...
- 51NOD 1133 不重叠的线段
1133 不重叠的线段 X轴上有N条线段,每条线段有1个起点S和终点E.最多能够选出多少条互不重叠的线段.(注:起点或终点重叠,不算重叠). 例如:[1 5][2 3][3 6],可以选[2 ...