Sensu 替代方案(?)在服务器上定义警报阈值(而不是监控客户端)

Sensu 替代方案(?)在服务器上定义警报阈值(而不是监控客户端)

问题/TLDR;

是否有 Sensu 替代品(即基于 RabbitMQ 的操作系统监控代理/服务器),它在中央监控服务器上定义其警报阈值,而不是在受监控的客户端服务器上定义(就像 Sensu 和 Nagios 那样)?

需要 RabbitMQ,所以恐怕没有 Zabbix 等。

背景:

我有一个大型环境(Windows 和 RHEL),其中无法安装编排工具(Puppet 等),因此安装的服务数量应保持在最低限度。

我正在研究是否可以开发一个单一代理来收集系统信息、中继日志(到 Logstash)并报告资源消耗情况。它会将所有这些值推送到 RabbitMQ,然后 Logstash 可以订阅日志,监控服务可以订阅资源指标(并从中创建警报),CMDB 系统可以订阅系统信息等。

但是,我只想接收有关资源消耗的信息并在监控服务器上创建警报,而不必更改每台服务器上的阈值来更改警报阈值。

我不可能是唯一一个认为这样的代理有用的人......

澄清:

如果服务器Sensu 监控磁盘不足时,Sensu 代理会检查磁盘空间,将其与该服务器上定义的 CRITICAL 阈值进行比较,如果超过阈值,则通过 RabbitMQ 向中央监控服务器发送 CRITICAL 警报。要更改阈值而无需 Puppet 或类似工具,则需要登录服务器(对吗?)

我的方式像这样工作是当监控代理检查其磁盘空间时,它只需通过 RabbitMQ 将可用磁盘量(或已用磁盘量和总量等)发送到中央服务器,然后中央服务器将该值与中央服务器上定义的阈值进行比较,并在必要时发送警报。

如果需要更改阈值,则可以在中央服务器上进行更改,或者可以比较来自多个服务器的多个值以创建警报。

这是我使用 Sensu 时遇到的主要问题,尽管我理解选择与 Nagios 兼容的决定。

如果不需要中央服务器 -> 监控服务器流量,那也是更好的选择。我想可以做一个临时解决方案,让中央服务器将阈值发送给代理,然后代理将其作为“本地”运行。环境的网络使这变得异常棘手。

谢谢大家提出的想法!

答案1

使用开源组件,我会使用以下组件(如果您确实需要通过 RabbitMQ 发送指标):

  1. 使用收集在客户端使用其AMQP 插件
  2. 使用来自 RabbitMQ 的消息graphite-amqp-工具并将它们发送到石墨

现在您有了 Graphite 中的指标,您可以查询它来了解您的资源消耗情况。在我的 $WORK 环境中,我们检查了哪些查询 Graphite,并在 Nagios 服务器上设置了警报阈值。但是现在您有了 Graphite(它有一个用于查询的 http 接口,可以返回图形、json、csv 和纯文本结果),只要它可以查询 Graphite,您就可以构建/使用任何东西。

答案2

阈值可以在sensu监控服务器端定义,参见第9页http://samples.leanpub.com/sensumonitoringandmetrics-sample.pdf(但请确保 safe_mode=false,如果服务器上的客户端定义与客户端上的定义不完全匹配,请参阅第 12 页)

答案3

如果我理解正确的话,你只需要将数据推送到 RabbitMQ。那么主题不是关于如何将报告的数据推送到 RabbitMQ 吗?

也许您可以使用以下几个选项:

  • 无代理监控 - 你可以使用旧的(好的)snmp 并解析其数据服务器。有很多工具可以做到这一点,然后你可以将其转发到你想要的任何地方。

  • 基于代理的监控 - 例如,您可以使用 cfengine 检查承诺(从中央服务器提取)或者仅报告文件系统的状态,然后您可以解析其数据。

答案4

是的,这正是 dataloop.io 正在做的事情。与 Sensu 一样,它使用基于队列的架构来获取实时指标和进行简单配置,但警报可以在服务器端配置,而不仅仅是在 Nagios/Sensu 等脚本中配置。

Sensu 还要求您安装其他东西(如 Graphite)才能获取图表,因此设置起来不是很容易。

相关内容