Несколько экземпляров приложений в Cloud Foundry не отображаются на информационной панели Netflix Hystrix
Я настроил Netflix Eureka, Hystrix и Turbine на Cloud Foundry, разделенные на два приложения:
Приложение для мониторинга "mrc-service" включает в себя Eureka Server, Turbine и Hystrix Dashboard. Application.yml для этого приложения выглядит так:
---
spring:
profiles: cloud
eureka:
instance:
nonSecurePort: 80
hostname: ${vcap.application.uris[0]}
leaseRenewalIntervalInSeconds: 10
metadataMap:
instanceId: ${spring.application.name}:${vcap.application.instance_id:${spring.application.instance_id:${random.value}}}
client:
registerWithEureka: true
fetchRegistry: true
service-url:
defaultZone: https://mrc-service.myurl/eureka/
turbine:
aggregator:
clusterConfig: LOG-TEST
appConfig: log-test
Приложение для создания потоков Hystrix под названием "log-test" имеет несколько экземпляров в Cloud Foundry. Приложение является клиентом Eureka и предоставляет Hystrix Stream с использованием Spring Actuator. Здесь application.yml для приложения:
---
spring:
profiles: cloud
eureka:
instance:
nonSecurePort: 80
hostname: ${vcap.application.uris[0]}
metadataMap:
instanceId: ${spring.application.name}:${vcap.application.instance_id:${spring.application.instance_id:${random.value}}}
secure-port-enabled: true
client:
healthcheck:
enabled: true
service-url:
defaultZone: https://mrc-service.myurl/eureka/
Два экземпляра приложения log-test корректно регистрируются на сервере Eureka:
Но когда я начинаю следить за потоком турбины, на панели инструментов Hystrix отображается только один хост (как показано красной стрелкой) вместо двух:
Журнал Turbine корректно извлекает оба экземпляра, но затем сообщает, что работает только один хост:
2017-08-23T10:12:10.764+02:00 [APP/PROC/WEB/0] [OUT] 2017-08-23 08:12:10.764 INFO 19 --- [ Timer-0] o.s.c.n.turbine.EurekaInstanceDiscovery : Fetching instances for app: log-test
2017-08-23T10:12:10.764+02:00 [APP/PROC/WEB/0] [OUT] 2017-08-23 08:12:10.764 INFO 19 --- [ Timer-0] o.s.c.n.turbine.EurekaInstanceDiscovery : Received instance list for app: log-test, size=2
2017-08-23T10:12:10.764+02:00 [APP/PROC/WEB/0] [OUT] 2017-08-23 08:12:10.763 INFO 19 --- [ Timer-0] o.s.c.n.t.CommonsInstanceDiscovery : Fetching instance list for apps: [log-test]
2017-08-23T10:12:10.764+02:00 [APP/PROC/WEB/0] [OUT] 2017-08-23 08:12:10.764 INFO 19 --- [ Timer-0] c.n.t.discovery.InstanceObservable : Retrieved hosts from InstanceDiscovery: 2
2017-08-23T10:12:10.765+02:00 [APP/PROC/WEB/0] [OUT] 2017-08-23 08:12:10.764 INFO 19 --- [ Timer-0] c.n.t.discovery.InstanceObservable : Found hosts that have been previously terminated: 0
2017-08-23T10:12:10.765+02:00 [APP/PROC/WEB/0] [OUT] 2017-08-23 08:12:10.764 DEBUG 19 --- [ Timer-0] c.n.t.discovery.InstanceObservable : Retrieved hosts from InstanceDiscovery: [StatsInstance [hostname=log-test.myurl:80, cluster: LOG-TEST, isUp: true, attrs={securePort=443, fusedHostPort=log-test.myurl:443, instanceId=log-test:97d83c44-8b9e-44c4-56b4-742cef7bada0, port=80}], StatsInstance [hostname=log-test.myurl:80, cluster: LOG-TEST, isUp: true, attrs={securePort=443, fusedHostPort=log-test.myurl:443, instanceId=log-test:3d8359e4-a5c1-4aa0-5109-5b49a77a1f6f, port=80}]]
2017-08-23T10:12:10.765+02:00 [APP/PROC/WEB/0] [OUT] 2017-08-23 08:12:10.764 INFO 19 --- [ Timer-0] c.n.t.discovery.InstanceObservable : Hosts up:1, hosts down: 0
Поэтому мне интересно, действительно ли Turbine объединяет потоки Hystrix двух экземпляров. Турбине придется связываться с экземплярами, например, используя параметры заголовка Cloud Foundry, такие как X-CF-APP-INSTANCE. Не уверен, что это уже происходит.
Является ли описанный подход даже выполнимым на Cloud Foundry, или я должен вместо этого использовать Turbine Stream с RabbitMQ?
2 ответа
Я получил официальный ответ от системы отслеживания проблем Spring Cloud Netflix: для объединения данных Hystrix из нескольких экземпляров приложений в Cloud Foundry требуется Turbine Stream в сочетании с брокером (например, RabbitMQ).
Чтобы открыть Turbine в совокупности, это те же шаги, что и в Hystrix, но вы должны сообщить кластеру через Turbine: http://localhost:8989//turbine.stream?cluster=READ.
Откроется тот же экран, что и у Hystrix, но если у меня будет больше сервисов, они будут отображаться в совокупности.