Spring Cloud实战小贴士:turbine如何聚合设置了context-path的hystrix数据

之前在spring for all社区看到这样一个问题:当actuator端点设置了context-path之后,turbine如何聚合数据?首先,我们要知道actuator端点设置了context-path是什么意思?也就是说,此时spring boot actuator的端点都有了一个前缀,比如:

management.context-path=/xxx

如果设置了上面的参数,那个对于收集hystrix数据的端点将变为:/xxx/hystrix.stream,如果我们还是拿上一篇Spring Cloud构建微服务架构:Hystrix监控数据聚合【Dalston版】中构建你的turbine应用,那么将会看到如下错误:

INFO 7812 --- [        Timer-0] c.n.t.monitor.instance.InstanceMonitor   : Url for host: http://172.15.0.18:9020/hystrix.stream default
ERROR 7812 --- [InstanceMonitor] c.n.t.monitor.instance.InstanceMonitor : Could not initiate connection to host, giving up: [{"timestamp":1499941336284,"status":404,"error":"Not Found","message":"No message available","path":"/hystrix.stream"}]
WARN 7812 --- [InstanceMonitor] c.n.t.monitor.instance.InstanceMonitor : Stopping InstanceMonitor for: 172.15.0.18:9020 default

com.netflix.turbine.monitor.instance.InstanceMonitor$MisconfiguredHostException: [{"timestamp":1499941336284,"status":404,"error":"Not Found","message":"No message available","path":"/hystrix.stream"}]
at com.netflix.turbine.monitor.instance.InstanceMonitor.init(InstanceMonitor.java:318) ~[turbine-core-1.0.0.jar:na]
at com.netflix.turbine.monitor.instance.InstanceMonitor.access$100(InstanceMonitor.java:103) ~[turbine-core-1.0.0.jar:na]
at com.netflix.turbine.monitor.instance.InstanceMonitor$2.call(InstanceMonitor.java:235) [turbine-core-1.0.0.jar:na]
at com.netflix.turbine.monitor.instance.InstanceMonitor$2.call(InstanceMonitor.java:229) [turbine-core-1.0.0.jar:na]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_91]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_91]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_91]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_91]

从上述错误中我们可以知道,turbine在收集的时候由于访问的是/hystrix.stream,而此时收集端点却是/xxx/hystrix.stream,所以报了404错误。

那么我们要如何解决呢?通过之前的配置内容,我们可能找不到相关的配置信息,所以只能遍历一下源码,最后找到这个类:org.springframework.cloud.netflix.turbine.SpringClusterMonitor。它的具体内容如下:

public static InstanceUrlClosure ClusterConfigBasedUrlClosure = new InstanceUrlClosure() {

private final DynamicStringProperty defaultUrlClosureConfig = DynamicPropertyFactory
.getInstance().getStringProperty("turbine.instanceUrlSuffix",
"hystrix.stream");
private final DynamicBooleanProperty instanceInsertPort = DynamicPropertyFactory
.getInstance().getBooleanProperty("turbine.instanceInsertPort", true);

@Override
public String getUrlPath(Instance host) {
if (host.getCluster() == null) {
throw new RuntimeException(
"Host must have cluster name in order to use ClusterConfigBasedUrlClosure");
}

// find url
String key = "turbine.instanceUrlSuffix." + host.getCluster();
DynamicStringProperty urlClosureConfig = DynamicPropertyFactory.getInstance()
.getStringProperty(key, null);
String url = urlClosureConfig.get();
if (url == null) {
url = this.defaultUrlClosureConfig.get();
}
if (url == null) {
throw new RuntimeException("Config property: "
+ urlClosureConfig.getName() + " or "
+ this.defaultUrlClosureConfig.getName() + " must be set");
}

// find port and scheme
String port;
String scheme;
if (host.getAttributes().containsKey("securePort")) {
port = host.getAttributes().get("securePort");
scheme = "https";
} else {
port = host.getAttributes().get("port");
scheme = "http";
}
if (host.getAttributes().containsKey("fusedHostPort")) {
return String.format("%s://%s/%s", scheme, host.getAttributes().get("fusedHostPort"), url);
}

// determine if to insert port
String insertPortKey = "turbine.instanceInsertPort." + host.getCluster();
DynamicStringProperty insertPortProp = DynamicPropertyFactory.getInstance()
.getStringProperty(insertPortKey, null);
boolean insertPort;
if (insertPortProp.get() == null) {
insertPort = this.instanceInsertPort.get();
}
else {
insertPort = Boolean.parseBoolean(insertPortProp.get());
}

// format url with port
if (insertPort) {
if (url.startsWith("/")) {
url = url.substring(1);
}
if (port == null) {
throw new RuntimeException(
"Configured to use port, but port or securePort is not in host attributes");
}

return String.format("%s://%s:%s/%s", scheme, host.getHostname(), port, url);
}

//format url without port
return scheme + "://" + host.getHostname() + url;
}
};

从上述源码中,我们可以找到这个参数turbine.instanceUrlSuffix,由此该问题就迎刃而解了,我们只需要在turbine应用的配置文件中增加如下配置信息,就能正确的收集之前配置了management.context-path=/xxx的微服务的hystrix数据了。

turbine.instanceUrlSuffix=/xxx/hystrix.stream

相关阅读

  • Spring Cloud构建微服务架构:服务注册与发现(Eureka、Consul)
  • Spring Cloud构建微服务架构:服务消费者(基础)
  • Spring Cloud构建微服务架构:服务消费者(Ribbon)
  • Spring Cloud构建微服务架构:服务消费者(Feign)
  • Spring Cloud构建微服务架构:分布式配置中心
  • Spring Cloud构建微服务架构:服务容错保护(hystrix服务降级)
  • Spring Cloud构建微服务架构:服务容错保护(hystrix依赖隔离)
  • Spring Cloud构建微服务架构:服务容错保护(hystrix断路器)
  • Spring Cloud构建微服务架构:Hystrix监控面板
  • Spring Cloud构建微服务架构:Hystrix监控数据聚合
  • 更多Spring Cloud内容…

money.jpg

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

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

相关文章

prompt范式有了商业模式,卖提示词可以赚钱??

文 | 衡宇 发自 凹非寺源 | 量子位DALLE 2、GPT-3提示词在线交易平台,了解一下?最近,一家初创公司PromptBase,允许用户在该平台买卖提示词(Prompt),提示词售价为1.99美元。PromptBase将向卖家抽…

LintCode 795. 4种独特的路径(DFS)

1. 题目 一个机器人位于一个m*n的网格的左上角。 机器人可以在任何时间点移动任何方向,但是每个网格只能达到一次。机器人正试图到达网格的右下角。 有多少种可能的独特路径? 样例 1: 输入: 2 3 输出: 4样例 2: 输入: 3 3 输出: 122. 解题 暴力回溯即可 class …

GARFIELD@01-19-2005

i begot them before, and you got them now 转载于:https://www.cnblogs.com/rexhost/archive/2005/01/19/94132.html

SpringCloud中文社区转型Spring4All欢迎您的加入

相信关注我们Spring Cloud中文社区(bbs.springcloud.com.cn)的朋友们最近已经在最新的横幅中发现了一个全新的社区:spring4all.com,相信从名字大家也能猜到该域名寓意Spring For All,那么我们为什么要重新创建这样一个…

全世界都在说中国话?2022国际大数据竞赛首次以“中文”命题

8月10日, IKCEST第四届“一带一路”国际大数据竞赛暨第八届百度&西安交大大数据竞赛(以下简称“国际大数据竞赛”)正式启动,本届赛题聚焦“低资源语言机器翻译”行业难题,向全球开发者发出邀请。百度发布稀缺语种任…

昨天发烧了……

唉,真是天有不测风云啊……发烧原因不明……转载于:https://www.cnblogs.com/wonderow/archive/2005/01/20/94699.html

LeetCode 51. N皇后 / 52. N皇后 II(回溯)

1. 题目 n 皇后问题研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击。 上图为 8 皇后问题的一种解法。 给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。 每一种解法包含一个明确的 n 皇后问题的棋子放置方案&…

我的新书《Spring Cloud实战》预告

从去年6月开始编写《Spring Cloud构建微服务架构》系列博文开始,受到了不少同行的关注与支持。随后也开通了多个交流群、创建了相关的论坛(http://bbs.springcloud.cn),虽然Spring Cloud在国内变得越来越火热,但是这一…

GPT-3 泄露了我的真实姓名

文 | 天于刀刀世界上总有这么一群人,他们是高智商科技狂,是新时代技术热点的弄潮儿,更是充满神秘感潜藏在里世界默默注视着时代发展的极客。而 Hacker News 这一网站致力于提供最新国际威胁情报、黑客动向以及维基解密资讯,让我们…

Gmail的另类浏览法--RSS

RSS 眼下大行其道,虽然RSS在技术上没有什么最尖端、最高新的突破,不过是对信息的时序做了一些处理,但很恰当地调整了人们获取信息的方式,使得信息的获得变得集中、主动和异步。 集中:可供订阅的聚合一般都是某个主题相…

LintCode 1210. 升序子序列(DFS)

1. 题目 给定一个整数数组,找到所有不同的可能的升序子序列,一个升序子序列的长度至少应为2。 例1: 输入: [4,6,7,7] 输出: [[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6,7,7],[7,7]]例2: 输入: [65,21,-44,31,-8] 输出: [[-44,-8],[-44,31],[21,…

GPT3=魔鬼搜索引擎?从一个隐私血案说起...

世界上总有这么一群人,他们是高智商科技狂,是新时代技术热点的弄潮儿,更是充满神秘感潜藏在里世界默默注视着时代发展的极客。而 Hacker News 这一网站致力于提供最新国际威胁情报、黑客动向以及维基解密资讯,让我们得以一窥这个灰…

Spring Cloud构建微服务架构(五)服务网关

通过之前几篇Spring Cloud中几个核心组件的介绍,我们已经可以构建一个简略的(不够完善)微服务架构了。比如下图所示: 我们使用Spring Cloud Netflix中的Eureka实现了服务注册中心以及服务注册与发现;而服务间通过Ribbo…

去除任务栏的图标

这次我要对付的软件是一个比较好用的代理软件(我不知道这样文章要不要隐藏文件名称),算法大家已经分析很多次了,我就不再重复了. 我这里来讨论一个实际应用的问题:如果你想用别人的机器上网而又不想让他轻易的发现(好像这样的想法大家都有吧?).而这个软件在启动之后 会在任务栏…

LintCode 1353. 根节点到叶节点求和(DFS)

1. 题目 给定仅包含来自0-9的数字的二叉树,每个根到叶路径可以表示数字。 举个例子:root-to-leaf路径1-> 2-> 3,它代表数字123,找到所有根到叶的数的总和 样例1 输入: {1,2,3} 输出: 25 解释:1/ \2 3 路径 1->2 表示…

1 亿巨资开发的防疫 APP,两年多只找到 2 例确诊

源 | 观察者网2020 年 4 月,澳政府斥巨资打造防疫 APP“COVIDSafe”。两年多过去了,这款曾被寄予厚望、当作通向防疫成功“门票”的 APP 寿命将近,于当地时间 8 月 9 日宣布将在不久后停用。澳大利亚卫生部长巴特勒(Mark Butler&a…

Sql 实现自动添加行数标记

select IDENTITY(int,1,1) as NameID,* into #t from MissionAssignView select * from #t order by NameID drop table #t 转载于:https://www.cnblogs.com/jhtchina/archive/2005/03/09/115532.html

Spring Boot 2.x基础教程:使用JdbcTemplate访问MySQL数据库

在第2章节中,我们介绍了如何通过Spring Boot来实现HTTP接口,以及围绕HTTP接口相关的单元测试、文档生成等实用技能。但是,这些内容还不足以帮助我们构建一个动态应用的服务端程序。不论我们是要做App、小程序、还是传统的Web站点,…

程序员面试金典 - 面试题 03.01. 三合一(数组栈)

1. 题目 三合一。描述如何只用一个数组来实现三个栈。 你应该实现push(stackNum, value)、pop(stackNum)、isEmpty(stackNum)、peek(stackNum)方法。stackNum 表示栈下标,value 表示压入的值。 构造函数会传入一个stackSize参数,代表每个栈的大小。 …

谷歌:级联语言模型是通用推理系统的未来

文 | ZenMoore前言相信每个 NLPer 心中都有对 Reasoning 的一片期冀。当初笔者进入 NLP 的大门,就是相信:由于语言强大的表达能力以及语言模型强大的建模能力,Reasoning 一定就在不久的将来!可惜实际情况却是......[流泪]直到我看…