在Graphite中存储Hystrix的几个月历史指标
Hystrix的殺手級功能之一是低延遲,數(shù)據(jù)密集型且美觀的儀表板 :
即使這只是Hystrix實際操作的副作用(斷路器,線程池,超時等),它也往往是最令人印象深刻的功能。 為了使其工作,您必須包括hystrix-metrics-event-stream依賴項:
<dependency><groupId>com.netflix.hystrix</groupId><artifactId>hystrix-metrics-event-stream</artifactId><version>1.4.0-RC6</version> </dependency>并注冊內(nèi)置的servlet,例如在嵌入式Jetty中:
import org.eclipse.jetty.server.Server; import org.eclipse.jetty.servlet.ServletContextHandler; import org.eclipse.jetty.servlet.ServletHolder;//...Server server = new Server(8090); ServletContextHandler context = new ServletContextHandler(ServletContextHandler.NO_SESSIONS); server.setHandler(context); final HystrixMetricsStreamServlet servlet = new HystrixMetricsStreamServlet(); final ServletHolder holder = new ServletHolder(servlet); context.addServlet(holder, "/hystrix.stream"); server.start();當(dāng)然,如果您已經(jīng)有一個Web應(yīng)用程序,則要簡單得多。 這是Spring Boot中的一個示例:
@Bean public ServletRegistrationBean servletRegistrationBean() {return new ServletRegistrationBean(new HystrixMetricsStreamServlet(), "/hystrix.stream"); }從現(xiàn)在開始,您的應(yīng)用程序?qū)⒁訨SON格式流式傳輸實時指標(biāo),可以使用開源儀表板輕松使用它,該儀表板幾乎完全用JavaScript編寫:
$ git clone git@github.com:Netflix/Hystrix.git $ cd Hystrix $ ./gradlew :hystrix-dashboard:jettyRun幾秒鐘后,您可以瀏覽到localhost:7979并指向/hystrix.stream servlet。 假設(shè)您的應(yīng)用程序是集群的,則很可能會將Turbine添加到聚會中。
如果您使用的是Hystrix,您已經(jīng)了解了所有這些。 但是,我最常被問到的問題之一是: 為什么這些指標(biāo)這么短 ? 的確,如果您查看上面的儀表板,度量值將通過滑動窗口(從10秒到1分鐘)進(jìn)行匯總。 如果您收到有關(guān)生產(chǎn)中某些情況的自動電子郵件通知,經(jīng)歷了短暫的緩慢運行或聽到了客戶的性能問題,則有關(guān)此事件的相關(guān)統(tǒng)計信息可能已經(jīng)丟失–或隨后被普遍不穩(wěn)定所掩蓋。
這實際上是設(shè)計使然–您不能同時擁有低延遲,接近實時的統(tǒng)計數(shù)據(jù),而且統(tǒng)計數(shù)據(jù)也很持久,即使沒有幾個月就可以瀏覽數(shù)天。 但是您不需要兩個用于短期指標(biāo)和長期趨勢的監(jiān)視系統(tǒng)。 相反,您可以直接使用Hystrix指標(biāo)提供Graphite 。 幾乎沒有代碼,到處都是膠水。
將指標(biāo)發(fā)布到Dropwizard指標(biāo)
事實證明,所有構(gòu)建塊均可用并且已準(zhǔn)備就緒,您只需連接它們即可。 Hystrix指標(biāo)不僅限于發(fā)布servlet,您還可以插入其他使用者,例如Dropwizard指標(biāo) :
<dependency><groupId>com.netflix.hystrix</groupId><artifactId>hystrix-codahale-metrics-publisher</artifactId><version>1.4.0-RC6</version><exclusions><exclusion><groupId>com.codahale.metrics</groupId><artifactId>metrics-core</artifactId></exclusion></exclusions> </dependency> <dependency><groupId>io.dropwizard.metrics</groupId><artifactId>metrics-core</artifactId><version>3.1.0</version> </dependency>您必須顯式連接這兩個庫,我使用Spring Boot進(jìn)行編排,請注意, MetricRegistry 由Boot自動創(chuàng)建 :
@Bean HystrixMetricsPublisher hystrixMetricsPublisher(MetricRegistry metricRegistry) {HystrixCodaHaleMetricsPublisher publisher = new HystrixCodaHaleMetricsPublisher(metricRegistry);HystrixPlugins.getInstance().registerMetricsPublisher(publisher);return publisher; }Hystrix在發(fā)布Dropwizard指標(biāo)時,我們可以將這些指標(biāo)重定向到SLF4J,JMX或Graphite!
石墨和格拉法納
我們還需要一個依賴項:
<dependency><groupId>io.dropwizard.metrics</groupId><artifactId>metrics-graphite</artifactId><version>3.1.0</version> </dependency>這使metrics庫可以將數(shù)據(jù)直接發(fā)布到Graphite,而又需要一點點膠水:
@Bean public GraphiteReporter graphiteReporter(MetricRegistry metricRegistry) {final GraphiteReporter reporter = GraphiteReporter.forRegistry(metricRegistry).build(graphite());reporter.start(1, TimeUnit.SECONDS);return reporter; }@Bean GraphiteSender graphite() {return new Graphite(new InetSocketAddress("localhost", 2003)); }顯然,您想調(diào)整Graphite地址。 設(shè)置Graphite和Grafana很麻煩,幸運的是有一個Docker鏡像 :
$ docker run -d \-p 8070:80 -p 2003:2003 -p 8125:8125/udp -p 8126:8126 \--name grafana-dashboard \choopooly/grafana_graphite如果一切設(shè)置正確,請直接進(jìn)入localhost:8070并使用一些儀表板。 這是我的:
新的可能性
內(nèi)置的Hystrix儀表板反應(yīng)靈敏且實用。 然而,擁有數(shù)天,數(shù)周甚至數(shù)月的統(tǒng)計信息可以提供很多可能性。 內(nèi)置儀表板無法實現(xiàn)的功能選擇,您可以使用Graphite / Grafana輕松設(shè)置:
- 月的統(tǒng)計資料(顯然),相比秒
- 標(biāo)準(zhǔn)儀表板中忽略的指標(biāo),例如較低的百分位數(shù),總計數(shù)器等。
- 某些指標(biāo)的完整歷史記錄,而不是即時值(例如,線程池利用率)
- 能夠在單個圖表上比較看似無關(guān)的指標(biāo),例如,幾個不同的命令延遲與線程池隊列大小的比較–全部具有完整的歷史記錄
- 深入研究–查看幾周或放大到幾分鐘
示例可以在前面的屏幕截圖中找到。 這完全取決于您的用例,但除非您的系統(tǒng)著火了,否則您可以在事件發(fā)生幾小時或幾周后檢查的長期統(tǒng)計數(shù)據(jù)可能比內(nèi)置儀表板更有用。
* Hystrix指標(biāo)發(fā)布者中有一個小錯誤 ,將在1.4.0-RC7中修復(fù)
**上述功能可在我們的微紅外開源項目中直接使用
翻譯自: https://www.javacodegeeks.com/2015/02/storing-months-historical-metrics-hystrix-graphite.html
總結(jié)
以上是生活随笔為你收集整理的在Graphite中存储Hystrix的几个月历史指标的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一网通账户是什么?
- 下一篇: 使用Google Guice消除实例之间