注意: 本文描述了基于JBoss Fuse的场景,但是它适用于任何能够运行Servlet Java的Java上下文,例如JBoss EAP,WildFly,Tomcat等。
我最近的工作之一是提供有关使用Nagios / OpsView监视JBoss Fuse ESB设置的指导。 尽管确实存在针对特定问题的更专业的解决方案( Red Hat JON的 Fuse插件),但是Nagios仍然是最分散的开源监视工具之一。
您不需要Nagios的专家即可了解本文,我绝对不是。 但是,如果您有任何建议要改进此解决方案,请告诉我。
Nagios是一个开源监视工具,它在插件的帮助下能够从不同类型的服务中收集许多指标,并在识别出特定值或特定模式(随时间变化的值)时通知您。 假设您指定对您而言重要的内容,它可用于监视从操作系统状态到自定义部署的应用程序的更模糊的值。
在我们的示例中,我们的自定义应用程序部署在JBoss Fuse ESB上 。
我们要监视的大多数指标与Apache Camel , Apache ActiveMQ和Apache CXF有关。这些项目在公开许多我们感兴趣的运行时信息方面已经做得非常出色。 例如,骆驼(Camel)告诉我们通过一个特定组件传递了多少消息,或者某些路由的状态如何。
这些项目用来公开这么多有价值的信息的技术是JMX。
Nagios借助外部插件支持JMX。
我们探索了以下列表:
- check_jmx通过RMI的JMX属性。
- check_http与椒
- 与Jolokia的 check_jmx4perl
check_jmx
我们发现这种方法存在一些问题:
1)为了允许RMI通信,网络层需要允许与特定端口的连接。
2)插件仅支持属性,不支持操作
3)建立JMX查询并不是特别用户友好,特别是如果您不是Java开发人员/开发人员
由于我们需要调用某些操作作为监视需求的一部分,因此我们不得不寻找其他替代方法。
与Jolokia一起检查
我们第一个替代想法是使用Jolokia。
Jolokia是一个Java库,它通过 基于JSON的REST api 通过HTTP公开JMX接口 。
要通过http实现它的魔力,只需调用一个http入口点,即Servlet。 我留给Jolokia官方说明来安装它,但是一旦安装好这些组件,便可以使用它的JMX桥接功能。
但我也和您分享一个小技巧 :我尚未手动安装Jolokia。 由于我们已经使用了超棒的hawt.io作为管理控制台,并且由于它利用了Jolokia,因此我们所需的一切都已经存在。
让我们探讨使用基于jolokia的解决方案的好处。
基于http,它显然有助于解决网络配置问题:
我仍然很难接受,但是根据我与许多客户的经验,企业网络配置的处理通常比预期的要复杂。 在抽象的纸本图上看似简单的事情就不再存在了,所以当您不了解有关网络拓扑的详细信息时,您只能看到的是端到端通信不起作用。 因此,依赖于流行的http协议绝对是一个吸引人的功能。
第二个好处是,与check_jmx不同,它支持JMX操作调用 。 如果您感兴趣的度量标准未显示为属性而是仅显示为操作,则此最后一个功能将变得很方便。 一个示例是操作:
osgi.core:type=bundleState,version=1.5/getState
对于界面的人体工程学,我个人认为它提供了非常直接的感觉。
请求可以很简单。 您最终可能会通过GET调用非常整洁的REST端点,类似于以下内容:
curl -u admin:admin http://172.17.42.1:8012/jolokia/read/java.lang:type=Memory/HeapMemoryUsage
但是,当您开始发送复杂的输入有效负载时,或者当您可以依赖POST和包含您的json有效负载的外部输入文件时,就可以使用该功能。 我建议您查看Jakub Korab的有用文章: http : //www.jakubkorab.net/2013/11/monitoring-activemq-via-http.html
要直接从Nagios使用Jolokia,我们可以使用模仿上卷行为的通用check_http插件,就像前面的示例一样。 唯一的问题是check_http不提供处理json字符串的行为,而json字符串是jolokia返回的结构。 您也许可以使用正则表达式和简单的值检查来解析输出,但是我们觉得我们缺少了一些东西。 而这里缺少的是下一个选项。
与Jolokia的check_jmx4perl
jmx4perl是一组Perl库和脚本,它们可以与jolokia公开的JMX对象进行通信。 与项目捆绑在一起的工具之一是Nagios插件:check_jmx4perl
不要被“ perl”关键字吓到。 我不写perl,但在阅读它时遇到了问题。 而且我仍然可以使用该工具。 该项目为您提供可执行脚本,您可以从命令行调用这些脚本来查询Jolokia公开的JMX服务,并且还提供与Nagios兼容的可执行文件。
使用此工具,您可以编写如下查询:
$ check_jmx4perl \
--user=admin \
--password=admin \
--url http://10.21.21.1:8012/jolokia \
--name "[MyService - CamelContext - WebService]" \
--mbean "org.apache.camel:context=mycontext/86-MyRoute.Request,name=\"log\",type=components" \
--attribute "State" \
--critical Stopped \
--warning !Started
OK - MyService - CamelContext - WebService] : 'Started' as expected | 'MyService - CamelContext - WebService]'=Started;!Started;Stopped
而且,您可以猜想阅读上一命令,Nagios支持非常即时,您可以指定要标识为代表警告状态或错误状态的值。
如果您熟悉Nagios,则知道要使用可执行文件,必须在Nagios配置中对其进行定义。
这是可能的宏的一些示例:
### check_jmx4 supports wildcards! ( you can use asterisk everywhere in the string names )
# Read JMX attributes without support for nested attributes
define command {
command_name check_jmx4perl_attribute_absolute
command_line /usr/local/bin/check_jmx4perl \
$ARG1$ \
--url $ARG2$ \
--mbean $ARG3$ \
--attribute $ARG4$ \
$ARG5$
}
# Check Bundle is Active
define command {
command_name check_jmx4perl_bundle_is_active
command_line /usr/local/bin/check_jmx4perl \
$ARG1$ \
--url $ARG2$ \
--warning \!ACTIVE \
--critical \!ACTIVE \
--mbean "osgi.core:type=bundleState,version=1.5" \
--operation "getState(long)" \
$ARG3$
}
在Nagios中定义了这些宏之后,就可以定义使用这些命令的实际监视调用。 就像是:
# Root service definition that presets some values and variables
define service {
use generic-service
name jolokia
register 0
host_name localhost
_agenturl http://172.17.42.1:8012/jolokia
_authentication --user=admin --password=admin
}
# Sample Bundle is Active
define service {
service_description Sample Bundle is Active
use jolokia
check_command check_jmx4perl_bundle_is_active\
!$_SERVICEAUTHENTICATION$ \
!$_SERVICEAGENTURL$ \
!74
}
如何测试呢?
尽管安装和配置Nagios并不是火箭科学,但这并不总是直接的活动 。 有时您会犯傻的错字,或者只是在错误的地方留下了空白,而没有任何效果。 尽管有种感觉,您可以在短时间内解决它,但它却变成了一种耗时的活动,使您无法从其他众多工作中分心。
也许您就像我一样:几天之内就能完成所有设置的事实并不意味着您可以精确记住如何(如果按月查询)。
出于所有这些原因,我决定对Docker感到一些乐趣。
Docker是一个很酷的新工具,可用于提供捆绑的应用程序堆栈 ,称为容器; 它们可以完全根据您的需要进行预配置。 我整理了一个Docker容器,该容器为您启动了Nagios实例,并提供了我在本文中讨论的所有插件,脚本和示例配置 。
如果您对Docker不感兴趣,您仍然可以在GitHub存储库中找到示例,并最终仍然阅读Docker文件,该文件最后给出了使用jmx4perl安装和配置Nagios所需的所有步骤。
由于我已经基于网络上已有的信息建立了自己的知识,因此,这是一小部分资源,这些资源可以帮助我编写本教程:
- http://www.jakubkorab.net/2013/11/monitoring-activemq-via-http.html
- http://search.cpan.org/~roland/jmx4perl-1.07/scripts/check_jmx4perl#Parameterized_checks
- http://labs.consol.de/lang/zh-CN/blog/jmx4perl/check_jmx4perl-einfache-servicedefinitionen/
翻译自: https://www.javacodegeeks.com/2014/02/monitoring-jboss-fuse-esb-with-nagios.html