在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,一经查实,立即删除!

相关文章

html和php文件怎么连接,html页面跟php文件连接的方法

html页面跟php文件连接的方法发布时间&#xff1a;2020-09-25 11:11:05来源&#xff1a;亿速云阅读&#xff1a;115作者&#xff1a;小新小编给大家分享一下html页面跟php文件连接的方法&#xff0c;相信大部分人都还不怎么了解&#xff0c;因此分享这篇文章给大家参考一下&…

java定义一个course类,求指教定义一个学生类 ,大学生小学生,定义一个选课接口...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼interface XC{abstract String CourseName();abstract String CourseID();}abstract class Student{protected String Name;protected String Ban;protected String Sex;public Student(){}public Student(String Name,String Ban,…

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

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

在Java 7或更早版本中使用Java 8 Lambda表达式

我认为没有人会拒绝Java 8引入的Lambda表达式的有用性。但是&#xff0c;许多项目都停留在Java 7甚至旧版本上。 升级可能既耗时又昂贵。 如果第三方组件与Java 8不兼容&#xff0c;则可能根本无法升级。 除此之外&#xff0c;整个Android平台都停留在Java 6和7上。 尽管如此…

php获得昨天零时的时间戳,php 获取时间今天明天昨天时间戳

echo "今天:".date("Y-m-d")."";echo "昨天:".date("Y-m-d",strtotime("-1 day")), "";echo "明天:".date("Y-m-d",strtotime("1 day")). "";echo "一周…

Zend Debugger 配置

到官网 http://www.zend.com/en/products/studio/downloads 下载 windows 版 Studio Web Debugger打开下载得到的压缩包&#xff0c;里面有一些文件夹列表&#xff08;4_3_x_comp &#xff0c; 4_4_x_comp &#xff0c; 5_0_x_comp &#xff0c; 5_2_x_comp &#xff0c; 5_2_x…

JavaFX技巧17:带有AnchorPane的动画工作台布局

最近&#xff0c;我不得不为应用程序实现一个布局&#xff0c;其中可以根据用户是否登录来隐藏或通过滑入/滑出动画显示或显示菜单区域和状态区域。 以下视频显示了实际的布局&#xff1a; 在过去&#xff0c;我可能会使用自定义控件和自定义布局代码来实现这种行为&#xff0…

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

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

使用Spring Boot对REST URL进行集成测试

我们正在构建一个具有REST接口的Spring Boot应用程序&#xff0c;并且在某个时候我们想测试我们的REST接口&#xff0c;并在可能的情况下将此测试与常规单元测试集成。 一种方法是Autowire我们的REST控制器&#xff0c;并使用它来调用我们的端点。 但是&#xff0c;这不会完全融…

php最常用方法,php 常用方法

/*** 返回token参数* 参数 result 需要先urldecode*/function getToken($result) {$result urldecode ( $result ); // URL转码$Arr explode ( &, $result ); // 根据 & 符号拆分$temp array (); // 临时存放拆分的数组$myArray array (); // 待签名的数组// 循环构…

使用Google Guice消除实例之间的歧义

如果接口有多个实现&#xff0c;则Google guice提供了一种精巧的方法来选择目标实现。 我的示例基于Josh Long &#xff08; starbuxman &#xff09;的出色文章&#xff0c;内容涉及Spring提供的类似机制。 因此&#xff0c;请考虑一个名为MarketPlace的接口&#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…

删除递归建立的文件

使用php的eclipse导入项目时不小心导致文件夹创建出现了恐怖的递归&#xff0c;创建了一个超级长的文件夹。删除时出现无法删除&#xff0c;指定的文件名无效或太长&#xff0c;资源管理器&#xff0c;或者命令行下del都用了&#xff0c;还是搞不定。曾尝试着一个个的改文件名并…

您会后悔对Lambdas应用重载!

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

java 匿名对象有引用,封闭对象的引用通过匿名类java进行转义

我在实践中阅读Java并发性,下面的例子来自于此.我的问题是这个参考逃脱是什么意思&#xff1f;会有什么问题&#xff1f; .这个引用是如何从doSomething(e)中逃脱的.public class ThisEscape {public ThisEscape(EventSource source) {source.registerListener(new EventListen…

7.25第一次组队赛

Problem A UVA 11877 The Coco-Cola Store 直接输出n/2 1 #include <stdio.h>2 int main()3 {4 int n;5 while(~scanf("%d",&n) && n)6 {7 printf("%d\n",n/2);8 }9 return 0; 10 } 也可以模拟 1 #include <stdio.h>2 int main()…

如何:优化Hive ZooKeeper Lock Manager实施

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

java 类之间转换,java中类对象之间的类型转换

类似于基本数据类型之间的强制类型转换。存在继承关系的父类对象和子类对象之间也可以在一定条件之下相互转换。这种转换需要遵守以下原则&#xff1a;1.子类对象可以被视为是其父类的一个对象2.父类对象不能被当作是某一个子类的对象。3.如果一个方法的形式参数定义的是父类对…

重载和重写以及重写的权限问题

简单说重载是发生在一个类中 重写是发生在子父类中的继承情况中 重载Overloading 方法重载是让类以统一的方式处理不同类型数据的一种手段。具有同名函数同时存在&#xff0c;具有不同参数类型/个数。重载overloading是一个类中多态兴的一种表现。 java的方法重载&#xff0c;就…