用RHQ监视怪物-程序员宅基地

技术标签: python  java  编程语言  数据库  大数据  

传统的RHQ设置假定计算机上存在代理和代理插件(在RHQ中为“平台”)。 然后,插件与托管资源(例如,AS7服务器)进行通信; 向其询问指标值或运行操作(例如“重新启动”)。 本文在JBoss Developer FrameworkTicket Monster应用程序示例中展示了一种监视应用程序的替代方法。 JDF徽标RHQ徽标

插件和托管资源之间的通信协议取决于该资源的功能。 如果资源是Java进程,则通常使用JMX。 对于JBoss AS 7,我们使用基于HTTP协议的DMR。 对于
其他种类的资源,如果是数据库,也可以是文件访问或jdbc。 下图显示了此设置。

RHQ经典设置

代理插件与托管资源进行对话并从中获取指标。 代理从多个资源中收集指标,然后将其批量发送到RHQ服务器,在该服务器中对其进行存储,处理以进行警报,并可以在UI中查看或通过CLI和REST-api检索。

延伸

上面的场景当然不限于基础结构,还可以用于监视内部的应用程序,例如AS7。 您可以编写一个使用基础连接与资源进行对话并从那里收集统计信息的插件(如果您是基于jmx或as7插件构建的,则不一定需要编写Java代码)。 这也意味着您需要在应用程序中添加钩子,以导出度量标准并使其在管理模型(经典jre中的MBean-Server; AS7中的DMR模型)中可用,以便插件可以检索它们。

从应用程序推送

监视应用程序数据的另一种方法是使应用程序将数据直接推送到RHQ服务器。 在这种情况下,您仍然需要一个插件描述符来定义RHQ服务器中的元数据(存在哪些类型的资源和指标,指标具有哪些单位等)。 在这种情况下,您只需要定义描述符,而无需为插件编写Java代码。 这是通过从No-op插件继承而来的 。 除此之外,您还可以将该描述符部署为无jar插件 。 下图显示了设置:

来自TicketMonster的RHQ

在这种情况下,您仍然可以在平台上使用带有插件的代理,但这不是必需的(但建议用于基本的基础结构监视)。 在服务器端,我们部署ticket-monster插件描述符 。 TicketMonster应用程序已得到增强,可以将每个预订作为两个度量指标(用于售出的机票总数和预订的总价)推送到RHQ服务器( BookingService .createBooking())。

@Stateless
public class BookingService extends BaseEntityService<Booking> {

    @Inject
    private RhqClient rhqClient;

    public Response createBooking(BookingRequest bookingRequest) {
    […]
        // Persist the booking, including cascaded relationships
        booking.setPerformance(performance);
        booking.setCancellationCode("abc");
        getEntityManager().persist(booking);
        newBookingEvent.fire(booking);
        rhqClient.reportBooking(booking);
        return Response.ok().entity(booking)
           .type(MediaType.APPLICATION_JSON_TYPE).build();

该推送通过与RHQ服务器的REST-api的http连接进行,该连接在RhqClient单例bean中定义。 在此RhqClient bean中,我们在启动时读取rhq.properties文件,以确定是否应该有任何报告以及如何访问服务器。 如果启用了报告,我们将尝试找到正在运行的平台,如果RHQ服务器不知道该平台,请创建该平台。 在平台之上,我们创建TicketMonster实例。 这是安全的,可以多次执行,就像创建平台一样–我正在寻找一个现有的平台,在该平台上,代理可能已经监视了诸如cpu使用率或磁盘使用率之类的基本数据。 指标的报告如下所示:

@Asynchronous
  public void reportBooking(Booking booking) {

    if (reportTo && initialized) {
      List<Metric> metrics = new ArrayList<Metric>(2);

      Metric m = new Metric("tickets", 
           System.currentTimeMillis(), 
           (double) booking.getTickets().size());
      metrics.add(m);

      m = new Metric("price", 
           System.currentTimeMillis(), 
          (double) booking.getTotalTicketPrice());
           metrics.add(m);

      sendMetrics(metrics, ticketMonsterServerId);
   }
 }

基本上,我们构造两个Metric对象,然后将它们发送到RHQ-Server。 第二个参数是RHQ服务器中TicketMonster服务器资源的资源ID,这是我们从上面提到的创建请求中获得的。 与传统设置不同的是,在RHQ内部的MeasurementData对象始终具有关联的所谓的计划ID,在上述情况下,我们传递的是部署描述符中出现的度量标准名称,然后让RHQ服务器对计划ID进行排序。

<metric property="tickets"  dataType="measurement" 
       displayType="summary" description="Total number tickets sold"/>
    <metric property="price" 
       displayType="summary" description="Total selling price"/>

瞧瞧这是从TicketMonster内部的Bot创建的销售情况:

Bildschirmfoto 2013 01 23 um 11 16 23

RHQ-UI中的预订

显示间隔已设置为“过去12分钟”。 如果您看到酒吧,则表示在12分钟/ 60个时隙= 12秒的时间段内,有多个预订。 在这种情况下,条形图显示最大值和最小值,而里面的小圆点显示平均值(通过Rest-Api,仍然可以查看最近7天的各个值)。

我为什么要这样做?

这里的问题当然是为什么我要将业务指标发送到通常用于基础结构监视的RHQ服务器? 因为我们可以! 认真地,这样的业务指标也能够指出问题。 例如,如果机票预订单的数量异常多或少,这也可能会引起关注并发出警报。 举一个电子商店的例子,该商店出售电子产品,碰巧有人打错字并提供笔记本电脑,通常售价为1300欧元,现在的售价为130欧元。 该消息通过社交网络Swift传播,销售额比正常数字增长了三倍。 在这里,监控笔记本电脑的销售数量可能会有所帮助。 另一个原因是RHQ及其用户概念允许设置特殊用户,这些用户只能(读取)TicketMonster资源,而不能访问RHQ内部的其他资源。 这样,可以使业务人员可以通过监视票证销售来访问度量。
图片
在左侧,您会看到平台'snert'下方的资源树,其中包含所有资源,例如'rhqadmin'用户看到的。 在右侧,您将以用户身份看到树,该树仅具有查看TicketMonster服务器(')的权限。

待办事项

以上是启动此概念的概念证明。 还有一些事情要做:

  • 为表演创建子资源并单独报告其预订
  • 定期报告TicketMonster服务器的可用性
  • 更好地分离仍然存在于RhqClient类中的内部代码
  • 将以上内容合并到TicketMonster propper中-当前它位于我的私人github存储库中
  • 确定如何更好地处理暂时不可用的RHQ服务器
  • 当一个类或字段为此有一些特殊注释时,请让Forge自动创建“发送度量/…”代码。 对于创建新项目(例如案例中的表演)也是如此。

如果要尝试,则需要最新的RHQ主副本-即将发布的RHQ 4.6版本将在RHQ端进行一些必要的更改。 RHQ 4.6 beta还没有它们。

参考: 监控与地区总部的怪物从我们JCG伙伴的Heiko鲁普在有些事情要记住博客。

翻译自: https://www.javacodegeeks.com/2013/04/monitoring-the-monster-with-rhq.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/danpob13624/article/details/106778712

智能推荐

collection集合总结_集合collection下面集合类特点总结-程序员宅基地

文章浏览阅读145次。Collectionlist 有序 带索引,通过索引就能够精确查找元素,元素 可以重复增加:add(element) add(index,element):方便摘要删除:remove(element) remove(index)修改:set(index.element)查询:get(index)|-Vector 也是一个可增长的数组结构,同步的,查询速度慢,增删速度更慢|--Ar..._集合collection下面集合类特点总结

Android端图像处理方法总结_图像处理安卓-程序员宅基地

文章浏览阅读6.7k次。Android端图像处理方法在Android机中进行图像处理,常用的方式有两种: 一种是单纯使用JAVA语言进行图形处理,相当于你将C或者C++编写的图像处理方法,又重新用JAVA编写了一遍。这种开发方法需要你在opencv官网,首先下载好Opencv的Android的版本,然后将它配置到你的项目中,这样你进行图像处理时就可以直接调用一些现成的方法,比如灰度化、边缘化处理、图..._图像处理安卓

JDK 11 最新 JEP 提案:计划支持 TLS 1.3-程序员宅基地

文章浏览阅读183次。(点击上方公众号,可快速关注)转自:开源中国JDK 11 最近有什么消息?我们不妨来看一下它的进展情况,包括最新的 JEP 提案。Java 的新版本发布计划意味着总会有一..._tls1.3需要jdk

<二>Material主题的使用_material这个主题-程序员宅基地

文章浏览阅读1.2k次。http://developer.android.com/training/material/theme.htmlMaterial主题带来的效果体现在以下几个方面:System widgets that let you set their color palette(调色板)系统控件(部件)的触屏反馈动画Activity跳转动画可以在app中对color palet_material这个主题

el-upload手动控制上传多文件校验和文件删除_el-upload handleremove-程序员宅基地

文章浏览阅读1.1w次,点赞8次,收藏21次。之前写过一篇关于el-upload单文件自定义上传文章:axios+elementui的upload使用http-request自定义文件上传_Suk_阿硕的博客-程序员宅基地_http-request自定义文件上传<!-- 关于组件的部分属性: action:上传的地址,和axios没关系,elementui自己发请求 :show-file-list:是否显示上传的文件列表 :on-success:上传成功的回调 :on-error:上传失败的回调 :before-upload:上传之前的回调,可._el-upload handleremove

linuxTab键命令补全安装_linux可以把命令tab出来需要安装哪个-程序员宅基地

文章浏览阅读2.6k次。安装Tab键#安装tab命令补全[root@Mikrotik ~]# yum -y install epel-release yum-plugin-fastestmirror bash-completion#立即生效命令[root@Mikrotik ~]# source /etc/profile.d/bash_completion.sh _linux可以把命令tab出来需要安装哪个

随便推点

一人一猫旅行记之Intent传递数据原理_怎么确定intent里被put了哪些数学-程序员宅基地

文章浏览阅读1.8k次。安卓提供了Intent机制来实现应用间的通信,可以在Activity之间、Service、BroadCast中传递数据。提起Intent,我们最熟悉的可能就是在启动Activity的时候携带数据,使用非常简单:Intent intent = new Intent(MainActivity.this,SecondActivity.class);intent.putExtra("param1","我是参数1");startActivity(intent);在新的Activity,也就是Activity_怎么确定intent里被put了哪些数学

浙大数据结构习题笔记:04-树4 是否同一棵二叉搜索树(25 分)_04-二叉搜索树1 是否同一棵二叉搜索树 (20 分) 给定一个插入序列就可以唯一确定一-程序员宅基地

文章浏览阅读930次。04-树4 是否同一棵二叉搜索树(25 分)给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。输入格式:输入包含若干组测试数据。每组数据的第1行给出两个正整数N (≤10)和L,分别是每个序列插入元素的个数和需要检查的序列个数。第2行给出N个以空格分隔的正整数,作为初始插入序列。最后_04-二叉搜索树1 是否同一棵二叉搜索树 (20 分) 给定一个插入序列就可以唯一确定一

Josh 的复习总结之数字信号处理(Part 5——部分 FFT 蝶形图)_fft蝶形图-程序员宅基地

文章浏览阅读8.2k次,点赞14次,收藏82次。本文主要总结了常用的 4 点、8 点和 16 点FFT的蝶形图的画法。对于 4 点 FFT,包含了基-2 按频时间/频率抽取、分裂基-2/4 按频率抽取、基-4 按频率抽取的蝶形图的画法;对于 8 点 FFT,包含了基-2 按频时间/频率抽取、分裂基-2/4 按频率抽取的蝶形图的画法;对于 16 点 FFT,包含了基-2 按频时间/频率抽取、分裂基-2/4 按时间/频率抽取、基-4 按频率抽取的蝶形图的画法。_fft蝶形图

Cookie Domain设置错误引发的单点登录死循环问题_document.cookie设置domain不生效-程序员宅基地

文章浏览阅读1k次。问题现象在业务系统B登录之后,打开B系统的一个内嵌iframe页面page1,page1需要访问业务系统A/create接口,屏幕出现一片白色,跟踪chrome network发现请求截图如下:可以发现,浏览器在不断的访问A/create接口,然后访问passport/serviceLogin接口,然后访问A/sts接口,然后再次访问A/create,再次访问passport/serviceLogin,再次访问A/sts,陷入死循环.单点登录流程图上方流程图是梳理了单点登录代码拦截器_document.cookie设置domain不生效

原子类compareAndSet方法-程序员宅基地

文章浏览阅读755次。compareAndSet() returns true if the current value equals the expected value v, and thus the value was updated to v + 1.In your first version, if both threads get the same initial value then one will ..._compareandset 原子

session 超时的时间设置-程序员宅基地

文章浏览阅读394次。为单个Web应用 配置超时时间可以在web.xml中使用元素,如[xhtml] view plaincopy 15 ... 这个时候的“15”单位是分钟!如果在配置Servlet是指定初始化参数决定超时时间,例如下:[xhtml] view plainc..._securecart session 超时时间

推荐文章

热门文章

相关标签