我有一种我收集了大量SNMP数据并通过rrdtool存储的情况。(使用OpenNM)
我的目标是在过去六个月内确定数百台服务器中没有内存使用率超过一定量的服务器。(例如64个演出)
我的计划是编写一个bash脚本来提取和处理rrdtool的数据,但不确定如何开始。这似乎是一项足够普遍的任务,我认为我应该在这里询问是否有人有任何想法。
谢谢!
rrdtool术语:
- rrd:rrdtool数据库文件
- DS:数据源。测量的变量之一
- RRA:Roundrobin档案。合并存档在RRD文件中定义
- CF:合并因子。最大,最小,平均,最后。RRA如何合并 数据
- DP:数据点。在合并之前存储在RRD中的数据样本
- CDP:合并数据点。RRA中的一个数据点,该数据点对应于使用该RRA的CF合并的一个或多个DP。
我建议这样做两个部分。
首先,在每个ds的时间段内提取值的最大值。如果创建具有最大CF和适当粒度(例如1天)的RRA,则可以大大简化此步骤。您的工作方式将取决于您是否有一个带有许多DS的RRD或每个DS的RRD;但是,您需要使用rrdtool xport
而不是rrdtool fetch
检索数据,以便为每个DS获得一个单个数据值。RRDTOOOL的xport
功能将使您能够进一步合并1cdp == 1天RRA获得单个CDP;通过将"步骤"设置为6个月来执行此操作,并迫使您的DEF使用最大CF。我们使用1天的RRA而不是6个月的原因是,以便我们可以在任何日期进行计算,而不仅仅是每6个月一次。
假设您的文件是 data1.rrd
,其中包含一个主机host1
的单个DS dsname
:
rrdtool xport --end now --start "end - 6 months" --step 15552000 --maxrows 1
DEF:x=data1.rrd:dsname:MAX
XPORT:x:host1
接下来,您将需要阈值和过滤这些阈值,以获取最大值低于阈值的DS列表。这将是bash
中的一个简单过程,不应该对您征税!