我们正在实施新的集中监控解决方案(Zenoss)。使用SNMP和JMX可以很容易地将服务器,网络和Java程序整合在一起。
但是,问题是,在大型异构(Solaris x86,RHEL Linux,Windows)环境中监视和管理自定义C ++应用程序的最佳实践是什么?
我看到的可能性是:
- 网络SNMP
- 优点
- 每个服务器上的单个中央守护程序
- 知名标准
- 轻松集成到监控解决方案中
- 我们已经在服务器上运行了Net SNMP守护程序
- 复杂的实现(MIB,Net SNMP库)
- 为C ++开发人员介绍的新技术
- 优点
- 每个服务器上的单个中央守护程序
- 知名标准
- 未知集成到监视解决方案中(我知道它们可以基于文本发出警报,但是在发送遥测信息(如内存使用率,队列深度,线程容量等)时效果如何?
- 简单的实现
- 可能的整合问题
- C ++开发人员的一些新技术
- 如果我们切换监视供应商,可能会出现移植问题
- 可能涉及提出临时通信协议(或使用RFC5424结构化数据;我不知道Zenoss是否在没有自定义Zenpack编码的情况下支持该协议)
- 优点
- Java和C ++的一致管理接口
- 知名标准
- 轻松集成到监控解决方案中
- 有点简单的实现(我们今天已经出于其他目的执行了此操作)
- 复杂性(JNI,本机C ++和Java之间的转换层,基本上编写两次管理代码)
- 可能的稳定性问题
- 在每个进程中都需要一个JVM,使用更多的内存
- JMX是C ++开发人员的新技术
- 每个进程都有自己的JMX端口(我们在每台计算机上运行很多进程)
- 优点
- 每个服务器上的单个中央守护程序
- Java和C ++的一致管理接口
- 知名标准
- 轻松集成到监控解决方案中
- 复杂性(基本上写两次管理代码)
- 需要找到或编写这样的守护程序
- 在JMX守护程序和C ++进程之间需要协议
- JMX是C ++开发人员的新技术
- 优点
- Java和C ++的一致管理接口
- 知名标准
- 轻松集成到监控解决方案中
- 在共享JVM模式下运行时,每台服务器上的单个中央守护程序
- 有点简单的实现(需要代码生成)
- 复杂性(代码生成,需要GUI和几轮调整才能生成代理代码)
- 可能的JNI稳定性问题
- 在每个进程中都需要一个JVM,使用更多的内存(在嵌入式模式下)
- 不支持Solaris x86(交易中断器)
- 即使它确实支持Solaris x86,也可能存在编译器兼容性问题(我们在Solaris上使用STLPort和Forte的奇怪组合
- 在嵌入式模式下运行时,每个进程都有其自己的JMX端口(我们在每台计算机上运行很多进程)
- 可能会排除用于非C ++进程的共享JMX服务器(?)
我缺少一些合理的标准化,简单的解决方案吗?
如果没有其他合理的解决方案,那么这些解决方案中的哪些通常用于自定义C ++程序?
我的直觉是,Net SNMP是人们执行此操作的方式,但是在做出决定之前,我需要其他人的意见和经验。