Hystrix Dashboard中proxyStreamAll
这几天学习spring cloud,配置Hystrix Dashboard的时候出现了Unable to connect to Command Metric Stream.
问题。
说明一下环境架构。Eureka server和Eureka Server Provider若干,Server Consumer里引入了Ribbon和Hystrix用以调用Server Provider的服务。那么再启用一个Hystrix Dashboard服务,我这里把端口号设置为9002,它就可以用来监控Server Consumer。
假设Server Consumer的地址是http://localhost:9000/,那么Hystrix Dashboard里填入的监控地址就应该是http://localhost:9000/actuator/hystrix.stream。
首先测试一下http://localhost:9000/actuator/hystrix.stream。如果没有出现一连串的ping,那要么Server Consumer少引入actuator包了,要么忘加注解了。网上能搜到改正答案,这里不细说。
出现一连串的ping,加之访问一个@HystrixCommand标注的方法,会出现一大串data。到这一步,Server Consumer已经没有问题了。
接下来,在Hystrix Dashboard面板中填入上述地址,我出现了Unable to connect to Command Metric Stream.
。
看看log:
ashboardConfiguration$ProxyStreamServlet : Origin parameter: http://localhost:9000/actuator/hystrix.stream is not in the allowed list of proxy host names. If it should be allowed add it to hystrix.dashboard.proxyStreamAllowList.
上网搜了一圈说的都是404问题,和我的情况不符。其实log说的已经很明白了,要把监控地址加入proxyStreamAllowList。
proxyStreamAllowList这个属性在【HystrixDashboardProperties.java】中,而在【HystrixDashboardConfiguration.java】的ProxyStreamServlet#doGet中会用到它,也就是log报错的地方。
if (!isAllowedToProxy(proxyUrlString)) {
log.warn("Origin parameter: " + origin
+ " is not in the allowed list of proxy host names. If it "
+ "should be allowed add it to hystrix.dashboard.proxyStreamAllowList.");
return;
}
关键就在isAllowedToProxy,发现它会取出proxyStreamAllowList元素和host匹配。如果我们没有设置proxyStreamAllowList,那么proxyStreamAllowList为空,就会出现标题上的问题。
最后,我在META-INF下的设置文件里找到了答案。原来proxyStreamAllowList这个东西是个配置项。
截屏2020-08-13下午9.55.43.png
接下来就很简单了,HystrixDashboard工程加入配置。
hystrix:
dashboard:
proxy-stream-allow-list: "localhost"
久违的面板它出来了。
截屏2020-08-13下午10.00.29.png