Hystrix的杀手级功能之一是低延迟,数据密集型且美观的仪表板 :

即使这只是Hystrix实际操作的副作用(断路器,线程池,超时等),它也往往是最令人印象深刻的功能。 为了使其工作,您必须包括hystrix-metrics-event-stream依赖项:

<dependency><groupId>com.netflix.hystrix</groupId><artifactId>hystrix-metrics-event-stream</artifactId><version>1.4.0-RC6</version>
</dependency>

并注册内置的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();

当然,如果您已经有一个Web应用程序,则要简单得多。 这是Spring Boot中的一个示例:

@Bean
public ServletRegistrationBean servletRegistrationBean() {return new ServletRegistrationBean(new HystrixMetricsStreamServlet(), "/hystrix.stream");
}

从现在开始,您的应用程序将以JSON格式流式传输实时指标,可以使用开源仪表板轻松使用它,该仪表板几乎完全用JavaScript编写:

$ git clone git@github.com:Netflix/Hystrix.git
$ cd Hystrix
$ ./gradlew :hystrix-dashboard:jettyRun

几秒钟后,您可以浏览到localhost:7979并指向/hystrix.stream servlet。 假设您的应用程序是集群的,则很可能会将Turbine添加到聚会中。

如果您使用的是Hystrix,您已经了解了所有这些。 但是,我最常被问到的问题之一是: 为什么这些指标这么短 ? 的确,如果您查看上面的仪表板,度量值将通过滑动窗口(从10秒到1分钟)进行汇总。 如果您收到有关生产中某些情况的自动电子邮件通知,经历了短暂的缓慢运行或听到了客户的性能问题,则有关此事件的相关统计信息可能已经丢失–或随后被普遍不稳定所掩盖。

这实际上是设计使然–您不能同时拥有低延迟,接近实时的统计数据,而且统计数据也很持久,即使没有几个月就可以浏览数天。 但是您不需要两个用于短期指标和长期趋势的监视系统。 相反,您可以直接使用Hystrix指标提供Graphite 。 几乎没有代码,到处都是胶水。

将指标发布到Dropwizard指标

事实证明,所有构建块均可用并且已准备就绪,您只需连接它们即可。 Hystrix指标不仅限于发布servlet,您还可以插入其他使用者,例如Dropwizard指标 :

<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进行编排,请注意, MetricRegistry 由Boot自动创建 :

@Bean
HystrixMetricsPublisher hystrixMetricsPublisher(MetricRegistry metricRegistry) {HystrixCodaHaleMetricsPublisher publisher = new HystrixCodaHaleMetricsPublisher(metricRegistry);HystrixPlugins.getInstance().registerMetricsPublisher(publisher);return publisher;
}

Hystrix在发布Dropwizard指标时,我们可以将这些指标重定向到SLF4J,JMX或Graphite!

石墨和格拉法纳

我们还需要一个依赖项:

<dependency><groupId>io.dropwizard.metrics</groupId><artifactId>metrics-graphite</artifactId><version>3.1.0</version>
</dependency>

这使metrics库可以将数据直接发布到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));
}

显然,您想调整Graphite地址。 设置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

如果一切设置正确,请直接进入localhost:8070并使用一些仪表板。 这是我的:

新的可能性

内置的Hystrix仪表板反应灵敏且实用。 然而,拥有数天,数周甚至数月的统计信息可以提供很多可能性。 内置仪表板无法实现的功能选择,您可以使用Graphite / Grafana轻松设置:

  • 月的统计资料(显然),相比秒
  • 标准仪表板中忽略的指标,例如较低的百分位数,总计数器等。
  • 某些指标的完整历史记录,而不是即时值(例如,线程池利用率)
  • 能够在单个图表上比较看似无关的指标,例如,几个不同的命令延迟与线程池队列大小的比较–全部具有完整的历史记录
  • 深入研究–查看几周或放大到几分钟

示例可以在前面的屏幕截图中找到。 这完全取决于您的用例,但除非您的系统着火了,否则您可以在事件发生几小时或几周后检查的长期统计数据可能比内置仪表板更有用。

* Hystrix指标发布者中有一个小错误 ,将在1.4.0-RC7中修复
**上述功能可在我们的微红外开源项目中直接使用

翻译自: https://www.javacodegeeks.com/2015/02/storing-months-historical-metrics-hystrix-graphite.html

在Graphite中存储Hystrix的几个月历史指标相关推荐

  1. k8s中graphite_在Graphite中存储Hystrix的几个月历史指标

    k8s中graphite Hystrix的杀手级功能之一是低延迟,数据密集和美观的仪表板 : 即使这只是Hystrix实际操作的副作用(断路器,线程池,超时等),它也往往是最令人印象深刻的功能. 为了 ...

  2. php多表存储,php – MySql在一个单元格中存储另一个表的多个引用并选择它?

    我有两张桌子 table: people id name goods_owned 1 john 1,4,3 2 Mike 2,5 3 Sam 1,5,2 4 Andy 5,3,4 – table go ...

  3. python获取数据库用户名密码_在数据库中存储用户和密码

    我正在创建一个用户+密码的软件.认证后,用户可以访问一些半公共服务,但也可以加密一些只有用户才能访问的文件.在 用户必须按原样存储,如有可能,无需修改.在auth之后,只要软件还在运行,用户和密码都会 ...

  4. 服务器根目录文件配置文件,在文档根目录中存储安装和配置文件

    在文档根目录中存储安装和配置文件 wanboot-cgi 程序在 WAN Boot 安装过程中传输以下文件. wanboot 程序 WAN Boot 最小根文件系统 定制 JumpStart 文件 S ...

  5. android studio数据库存储数据,如何使用API​​ 23在android studio中的数据库中存储数据?...

    大多数时候我不会发布任何内容,因为我可以在其他帖子中找到我需要的所有内容,但是现在我已经有几天了,您如何在数据库中存储任何内容?这是我的Java代码如何使用API​​ 23在android studi ...

  6. 研究揭示大脑在工作记忆中存储信息的神经机制

    来源:中国科学院脑科学与智能技术卓越创新中心(神经科学研究所) 3月5日,<神经元>期刊在线发表了题为<无颗粒岛叶皮层瞬时性神经元活动调控学习新任务时的工作记忆存储>的研究论文 ...

  7. js html保存json,如何在json文件中存储jQuery或javascript变量?

    我可以知道有没有机会将jquery变量保存在json文件中?提前致谢.如何在json文件中存储jQuery或javascript变量? 我: var image='/test/test.png'; 我 ...

  8. vuex-along解决vuex中存储的数据在页面刷新之后失去的问题

    vuex-along解决vuex中存储的数据在页面刷新之后失去的问题 参考文章: (1)vuex-along解决vuex中存储的数据在页面刷新之后失去的问题 (2)https://www.cnblog ...

  9. 在DB中存储图像-是或否?

    因此,我正在使用一个将图像大量存储在数据库中的应用程序. 您对此有何看法? 我更喜欢将位置存储在文件系统中,而不是直接将其存储在数据库中. 您认为优点/缺点是什么? #1楼 我尚未见任何人提及的一件事 ...

最新文章

  1. python最新排名_最新编程语言排名:JS位列第一 Python超Java
  2. android keyboard用法,react-native-android-keyboard-adjust 最新使用方法 0.63
  3. 在CentOS上配置Percona XtraDB集群(Percona XtraDB Cluster)
  4. Laravel Facades的实现原理
  5. 从初级程序员逆袭为技术大牛,你需要懂这 10 项技术!
  6. HALCON 20.11:深度学习笔记(10)---分类
  7. 电脑未安装任何音频设备解决办法
  8. 90后,为什么我建议你不要老是加班?
  9. Excel引用函数(1):FORMULATEXT,取得单元格公式内容
  10. win10下sticky notes(便笺)数据存放地址、数据备份及恢复
  11. 优漫动游:带你了解UI图片比例技巧
  12. springboot 简单的扫码登录 demo
  13. mmseg底层代码分析及修改
  14. GMT对应的SimpleDateFormat
  15. 前端程序员忙里偷闲入门一波SpringBoot
  16. uploadlabs--文件上传靶场-第一关
  17. 关于代码家(干货集中营)共享知识点汇总系列——App
  18. 贵州古老歌舞开启悉尼农历节
  19. springboot毕设项目:网上图书商城q3ulr(java+VUE+Mybatis+Maven+Mysql)
  20. Idea快捷键大全(Windows)保存起来,用着就来看看。。

热门文章

  1. AVL树双旋转+图解
  2. python binascii array('c')_详解Python中的array数组模块相关使用
  3. 配置phython环境
  4. java path 注解_@PathVariable注解的使用和@Requestparam
  5. nbiot开发需要掌握什么_学习软件开发需要准备什么?
  6. python嵌套列表字典_python中嵌套列表转为字典
  7. vue 字典_【开源】基于Vue的前端组件库HeyUI
  8. (转-这篇文章非常棒) Thread的中断机制(interrupt)
  9. 基于springboot2.5.5自建启动器starter制品库
  10. jdk类加载器执行步骤_[JDK 11] jcmd中的类加载器层次结构详细信息