使用条件逻辑和趋势追踪编辑

这一节您将学会如何使用条件逻辑修改时间序列数据和创建移动平均趋势。这样可以非常方便的发现随着时间推移的异常数据。

为了便于本节内容的学习,我们可以基于 Metricbeat 数据利用可视化控件监控内存消耗情况。可以使用如下表达式在图表中呈现 system.memory.actual.used.bytes 的最大值。

.es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes')
images/timelion-conditional01.png

 

我们为内存使用总量创建两个阈值。例如您的告警阈值是12.5GB,严重告警阈值是15GB。当内存使用总量超过其中任何一个,序列图将会在阈值点后用不同的颜色展示。

注意

如果上述阈值相对您的机器过高或过低,可以自行调节。

您可以使用 Timelion 的条件逻辑配置这两个阈值。可以使用 if() 去比较每个点的值和某个数值的大小,如果数值超过阈值则使用不同的样式,如果未超过阈值,则使用默认样式。Timelion 提供以下六种比较操作:

eq

等于

ne

不等于

lt

小于

lte

小于等于

gt

大于

gte

大于等于

因为有两个阈值,我们需要配置两种不同的样式。使用 gt 操作符和 .color('#FFCC11') 函数将高于告警阈值的标记为黄色,用 .color('red') 函数将严重告警标记为红色。在 Timelion 查询框里面输入以下表达式来配置条件逻辑和阈值类型:

.es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes'), .es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes').if(gt,12500000000,.es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes'),null).label('warning').color('#FFCC11'), .es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes').if(gt,15000000000,.es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes'),null).label('severe').color('red')
images/timelion-conditional02.png

 

参考 I have but one .condition() 博文查看更多关于 Timelion 的用法。

现在我们有阈值控制可以轻松的识别错误数据,接下我们创建一个新的时序图来呈现真正的趋势。Timelion 的 mvavg() 方法可以方便的计算给定时间窗口的移动平均值。这对于分析有很多噪音数据的时序图非常有帮助。这里,您可以使用 .mvavg(10) 创建有10个数据点的移动平均窗口。使用如下表达式创建最大内存使用量的移动平均趋势。

.es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes'), .es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes').if(gt,12500000000,.es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes'),null).label('warning').color('#FFCC11'), .es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes').if(gt,15000000000,.es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes'),null).label('severe').color('red'), .es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes').mvavg(10)
images/timelion-conditional03.png

 

现在我们有了阈值控制和移动平均,我们来利用上一节描述过的 .color().line().title().legend() 方法来丰富我们的图表以便于更好的查看:

.es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes').label('max memory').title('Memory consumption over time'), .es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes').if(gt,12500000000,.es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes'),null).label('warning').color('#FFCC11').lines(width=5), .es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes').if(gt,15000000000,.es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes'),null).label('severe').color('red').lines(width=5), .es(index=metricbeat-*, timefield='@timestamp', metric='max:system.memory.actual.used.bytes').mvavg(10).label('mvavg').lines(width=2).color(#5E5E5E).legend(columns=4, position=nw)
images/timelion-conditional04.png

 

保存您的 Timelion 工作表,继续学习下一章节将这些工作表添加到您的仪表板上。