我正在研究如何监控和警报 Web 应用中的一些业务指标(页面浏览量、注册量等)。我们已经将 Nagios 和 Munin 用于各种服务器监控和警报情况,这就是我从那里开始的原因。
我可以为 Nagios 编写自定义插件来计算我们的统计数据/控制图并检查这些指标何时低于理想水平(警告和严重),但我还想知道这些指标何时高于预期水平(更多注册 - 我们做对了!)。
有没有办法在 Nagios 或 Munin 中创建自定义警报级别来适应这些积极警报,或者我应该寻找其他工具来解决这种情况?理想的工具是:
- 包括更多警报级别(严重、警告、正常、改善、激增)
- 允许我查看有关生成警报的报告的其他数据(指标的预期值和观察值)
- (很高兴)允许我绘制指标的历史记录,以便我在收到警报后能够直观地看到观察结果
答案1
许多 NAGIOS 插件已经完全满足您的需求,允许将 WARNING 和 CRITICAL 阈值指定为一个范围,当值超出(或可选地在)该范围时发出警报。例如,来自/usr/lib/nagios/plugins/check_procs -h
:
[...]
Usage:
check_procs -w <range> -c <range> [-m metric] [-s state] [-p ppid]
[-u user] [-r rss] [-z vsz] [-P %cpu] [-a argument-array]
[-C command] [-t timeout] [-v]
[...]
-w, --warning=RANGE
Generate warning state if metric is outside this range
-c, --critical=RANGE
Generate critical state if metric is outside this range
[...]
RANGEs are specified 'min:max' or 'min:' or ':max' (or 'max'). If
specified 'max:min', a warning status will be generated if the
count is inside the specified range
[...]
因此,此插件已经具有以下概念:“如果 X 大于 C 或小于 B,则存在问题;如果 X 小于 A 或大于 D,则灾难即将来临”(因为 A<B<C<D)。在我看来,这非常符合您的要求,并且无需重新设计 NAGIOS(其中大量嵌入了 OK/WARN/CRIT 概念)。
答案2
我使用 nagios 进行警报,使用 ganglia 进行指标收集。很多时候,我的工具会将数据发送到 ganglia(通过 gmetric),也会将警报发送到 nagios(通过 send_nsca,又称被动警报)。如果您正确编写了工具,它可以检测到从上一期到当前期的变化。例如,这样您就可以检测到某些指标的变化。此时的平均响应时间是否比上次高/低 X%?队列大小是否增加/减少了 X%?
我使用过 munin 一段时间,但它没有 ganglia 的粒度。此外,在 ganglia 中创建新指标就像调用 gmetric 一样简单。BAM,您有了一个新图表。我还发现在我们的指标图表上显示上次部署时间很有用(只是一条显示部署时间的垂直线)。这样您就可以更好地直观地看到发生了什么以及何时发生。