之前在spring for all社区看到这样一个问题:当actuator端点设置了context-path之后,turbine如何聚合数据?首先,我们要知道actuator端点设置了context-path是什么意思?也就是说,此时spring boot actuator的端点都有了一个前缀,比如:
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]
@Override public String getUrlPath(Instance host){ if (host.getCluster() == null) { thrownew RuntimeException( "Host must have cluster name in order to use ClusterConfigBasedUrlClosure"); }
// 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) { thrownew RuntimeException( "Configured to use port, but port or securePort is not in host attributes"); }