我使用RRDTool在各种图表上绘制了大量数据,偶尔会得到未知数据点,特别是如果更新RRD的计算机处于脱机状态,这是完全可以预料到的。
很酷,但是,当发生这种情况时,我希望有一条漂亮的大红线(对于每一个未知的,所以它让图形的观众非常清楚这些点的价值不是0
,而是UNKNOWN
。
有没有简单/优雅的方法来实现这一目标?
答案 0 :(得分:1)
优雅的方法是检查加载是否包含任何合理的值。如果没有为您为此目的创建的DS添加1。
因此,对于Robin数据库,添加值为0或1的新DS
DS:somestatus1:GAUGE:600:U:U
然后,如果您的主DS不可用,则开始向此DS添加0或1
在绘制图表的最后:
DEF:somestatus1=$RRD_FILE:somestatus1:AVERAGE \
CDEF:my_status_cdef=somestatus1,1,0,IF \
TICK:my_status_cdef#e0ffe0:1.0:"Device was ON\n" \
每个TICK将根据需要在图表上绘制100%高度的垂直条
另一种选择是创建条件CDEF,如果主DS为无,则创建TICK。
答案 1 :(得分:1)
这是有效的:
我将CDEF
与现有数据源(DS)一起使用,而不必创建新的DS。
我在RRDTool图表部分添加了以下两行
'CDEF:up=a1,0,*,0,EQ,0,1,IF' \
'TICK:up#DB0865:1.0' \
CDEF
计算:
a1 * 0
然后将其结果与0进行比较。如果它们相等,则将“up”设置为“0”,否则将“up”设置为“1”。
他们不平等的唯一时间是,如果“a1”未知。
因此,当图表中存在间隙(无数据)时,它将具有深紫色/粉红色(#DB0865
)的100%垂直条(TICK)
尽管RRDTool site上的文档表明DS可以添加到现有的RRD中,但它实际上不能(根据Tobi Oetiker的说法)。所以我使用上面的方法来避免丢失我在使用新DS创建新rrd时已经拥有的所有数据。
答案 2 :(得分:0)
此方法在“离线”时绘制区域。 .TagWith(GetCallerName())
检查public static string GetCallerName([CallerMemberName] string caller = null)
{
return caller;
}
度量值是否为CDEF
(未知),如果为load
,则返回UN
,乘以1
以得出最高的图。
INF