在Graphite中存储Hystrix的几个月历史指标

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360552.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NYOJ-----最少乘法次数

最少乘法次数 时间限制&#xff1a;1000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;3描述给你一个非零整数&#xff0c;让你求这个数的n次方&#xff0c;每次相乘的结果可以在后面使用&#xff0c;求至少需要多少次乘。如24&#xff1a;2*222&#xff08;第一次乘&a…

php投票系统中各个文件的作用说明,PHP开发简单投票系统之投票页面功能模块(二)...

当完成前面的投票后&#xff0c;可以选择点击查看结果查看每个项目的总票数和所有项目的投票百分比。点击“查看结果”后程序会自动计算每个项目的票数和所占百分比。使用了隐藏表单属性隐藏域在页面中对于用户是不可见的&#xff0c;在表单中插入隐藏域的目的在于收集或发送信…

ref 和out 关键字

ref 和out 关键字 通过对CLR的学习&#xff0c;我们可以知道&#xff0c;CLR默认所有方法参数都是传值的。对于引用类型的对象&#xff0c;传递的是对象的引用&#xff08;指向对象的指针&#xff09;&#xff0c;被调用者拥有该对象的引用的拷贝&#xff0c;能够修改对象&…

php-cli下载,php-cli-color

一个简单的 PHP 命令行 cli 输出彩色的类库安装composer require wujunze/php-cli-color ~1.0使用getColoredString("Testing Colors class, this is purple string on yellow background.", "purple", "yellow") . PHP_EOL;echo $colors->ge…

您会后悔对Lambdas应用重载!

编写好的API很难。 非常辛苦。 如果您想让用户喜欢您的API&#xff0c;则必须考虑很多事情。 您必须在以下两者之间找到适当的平衡&#xff1a; 有用性 易用性 向后兼容 前向兼容性 之前&#xff0c;在我们的文章&#xff1a; 如何设计良好的常规API中&#xff0c;我们已经…

如何:优化Hive ZooKeeper Lock Manager实施

Hive一直使用ZooKeeper作为分布式锁定管理器来支持HiveServer2中的并发。 基于ZooKeeper的锁管理器在小型环境中运行良好。 但是&#xff0c;随着越来越多的用户从HiveServer迁移到HiveServer2并开始创建大量并发会话&#xff0c;可能会出现问题。 主要问题是Hiveserver2和ZooK…

《图解HTTP》第1章 了解Web及网络基础

《图解HTTP》第1章 了解Web及网络基础 1. 使用 HTTP 协议访问 Web1.1 网络基础 TCP/IP1.2 TCP/IP 协议族1.2.1 TCP/IP 的分层管理 1. 使用 HTTP 协议访问 Web Web 使用一种名为 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09; 的协议作为…

JBoss Forge NetBeans集成–入门

JBoss Forge是构建基于Maven的Java EE项目的最快方法。 因此&#xff0c;它已经具有了令人敬畏的功能&#xff0c;使您作为开发人员的生活更加轻松。 在大多数情况下&#xff0c;使用Forge的人们可能会对创建Web应用程序感兴趣。 有很多入门Forge基础的方法。 您可以查看quick…

SQL语法的重要知识点总结

好几年没写SQL语句了。现在到了新的team&#xff0c;需要用到数据库。作为QA的话时常需要使用客户端工具连接到数据库中找寻或修改数据。这么长时间没使用&#xff0c;一些SQL的使用技巧都忘得差不多了。晚上看了一些资料&#xff0c;花了1个多小时又捡起了曾经的知识。现在总结…

您需要了解的有关默认方法的所有信息

因此&#xff0c;默认方法是……昨天的新闻&#xff0c;对不对&#xff1f; 是的&#xff0c;但是使用一年后&#xff0c;积累了很多事实&#xff0c;我想将这些事实收集在一个地方&#xff0c;供刚开始使用它们的开发人员使用。 甚至有经验的人都可以找到他们不知道的一两个细…

php 在函数里打开链接,JavaScript中打开链接的几种方法介绍

如何使用JavaScript打开链接&#xff1f;本篇文章我们就来看看使用JavaScript打开链接的几种方法介绍。我们先来看一段代码使用Javascript实现打开链接&#xff0c;需要在location.href中替换要打开的链接的URL。location.href http://www.php.cn/blog.html;通过上述代码我们可…

三代基因组测序技术原理简介

考虑到cnblog不适合基因组领域这种类型的文章&#xff0c; 最终&#xff0c;我自己开通了公众号&#xff1a;碱基矿工&#xff0c;欢迎感兴趣的同学关注&#xff01; 也可以关注我的知乎&#xff1a;https://www.zhihu.com/people/yellowtree/activities 2018年1月修改&#x…

Java并发教程–锁定:显式锁定

1.简介 在许多情况下&#xff0c;使用隐式锁定就足够了。 有时&#xff0c;我们将需要更复杂的功能。 在这种情况下&#xff0c; java.util.concurrent.locks包为我们提供了锁定对象。 当涉及到内存同步时&#xff0c;这些锁的内部机制与隐式锁相同。 区别在于显式锁提供了其他…

lda php,主题模型︱几款新主题模型——SentenceLDA、CopulaLDA、TWE简析与实现

[导读]百度最近开源了一个新的关于主题模型的项目。文档主题推断工具、语义匹配计算工具以及基于工业级语料训练的三种主题模型&#xff1a;LatentDirichlet Allocation(LDA)、SentenceLDA 和Topical Word Embedding(TWE)。一、Familia简介帮Familia&#xff0c;打个小广告~ F…

最短路径问题matlab作图,[MATLAB基础] matlab最短路径的输出问题,用了递归,但程序出错了,请大虾指点...

matlab最短路径的输出问题,用了递归,但程序出错了,请大虾指点 程序如下function shortestpath(w,p,q)c->;l;f;tsize(w);mt(1,1);azeros(m,m);vw;for k1:mfor i1:mfor j1:mb[w(i,j),w(i,k)w(k,j)];w(i,j)min(b);if w(i,j)~v(i,j)a(i,j)k;%a(i,j)10*a(i,j)k;vw;endendendendw;…

快速浏览JAX-RS请求与方法匹配

在本文中&#xff0c;我们来看一下JAX-RS中与资源方法匹配的HTTP请求 。 它是JAX-RS的最基本功能之一。 通常&#xff0c;使用JAX-RS API的开发人员不会接触&#xff08;或真正不需要知道&#xff09; 匹配过程的细节&#xff0c;请放心&#xff0c;由于我们的RESTful&#xff…

$stat php,php stat函数怎么用

php stat函数用于返回关于文件的信息&#xff0c;其语法是fstat(file)&#xff0c;参数file必需&#xff0c;指规定要检查的文件。php stat函数怎么用&#xff1f;定义和用法stat() 函数返回关于文件的信息。语法fstat(file)参数file必需。规定要检查的文件。说明获取由 file 指…

Apache Cassandra和低延迟应用程序

介绍 多年来&#xff0c; Grid Dynamics拥有许多与NoSQL相关的项目&#xff0c;尤其是Apache Cassandra。 在这篇文章中&#xff0c;我们要讨论一个给我们带来挑战的项目&#xff0c;而我们在该项目中试图回答的问题今天也仍然适用。 数字营销和在线广告在2012年很受欢迎&…

Java十大简单性能优化

关于“ web scale ”这个流行词有很多炒作&#xff0c;人们花了很多时间来重新组织他们的应用程序体系结构&#xff0c;以使其系统“规模化”。 但是什么是扩展&#xff0c;我们如何确保可以扩展&#xff1f; 缩放的不同方面 上面提到的炒作主要是关于扩展负载 &#xff0c;即…

php在苹果手机上传不了图片大小,ThinkPHP后台上传图片无默认尺寸解决方法

原标题&#xff1a;ThinkPHP后台上传图片无默认尺寸解决方法随着网站移动端的日益普及&#xff0c;对后台数据的兼容性要求也越来越高。后台数据涵盖范围不断扩大的同时&#xff0c;使得程序处理能力也必须逐步提高。使用ThinkPHP进行长沙网站开发时&#xff0c;后台kindeditor…