IMPORTANT: This documentation is no longer updated. Refer to Elastic's version policy and the latest documentation.

使用数学函数

edit

前面两节您学会了如何创建和自定义 Timelion 可视化控件。这一节带您领略 Timelion 数学函数的风采。我们继续使用 Metricbeat 数据来创建基于网络上下行链路数据的新的 Timelion 可视化控件。您可以先添加一个新的 Timelion 可视化控件。

在菜单的顶层,点击 Add 添加第二个控件。添加到当前工作表的时候,您可以注意到查询输入框会被替换成默认的 .es(*) 表达式。因为这个查询是和您当前选中的控件相关联的。

timelion math01

 

为了便于追踪网络上下行流量,您的第一个表达式将会计算 system.network.in.bytes 下行数据的最大值。在 Timelion 查询框输入如下表达式:

.es(index=metricbeat*, timefield=@timestamp, metric=max:system.network.in.bytes)
timelion math02

 

监控网络流量对于评估网络速率来说是非常有价值的。derivative() 函数就可以用来做这种随着时间而变化的数据。我们可以简单的将该函数添加至表达式的末尾。使用如下表达式来更新您的控件:

.es(index=metricbeat*, timefield=@timestamp, metric=max:system.network.in.bytes).derivative()
timelion math03

 

针对上行数据,您需要添加类似的指标 system.network.out.bytes 。因为上行数据是从您的设备发出去的,一般我们用负数来表达这一指标。.multiply() 函数将会利用一个数来乘以一个序列的数据。结果也将是一个序列或者一个链表的序列数据。例如,您可以使用 .multiply(-1) 来将上行线路转换成负数。使用如下表达式来更新您的控件:

.es(index=metricbeat*, timefield=@timestamp, metric=max:system.network.in.bytes).derivative(), .es(index=metricbeat*, timefield=@timestamp, metric=max:system.network.out.bytes).derivative().multiply(-1)
timelion math04

 

为了使该可视化控件可读性更强,可以将数据单位从 bytes 转换为 megabytes(MB)。Timelion 有一个 .divide() 函数可以使用。该函数接收和 .multiply() 类似的数据参数,会利用整个序列的数据来除以定义好的参数。使用如下表达式来更新您的控件:

.es(index=metricbeat*, timefield=@timestamp, metric=max:system.network.in.bytes).derivative().divide(1048576), .es(index=metricbeat*, timefield=@timestamp, metric=max:system.network.out.bytes).derivative().multiply(-1).divide(1048576)
timelion math05

 

我们可以利用前面章节学过的样式定制函数 .title().label().color().lines().legend() 将我们的控件变的更美观。使用如下表达式来更新您的控件:

.es(index=metricbeat*, timefield=@timestamp, metric=max:system.network.in.bytes).derivative().divide(1048576).lines(fill=2, width=1).color(green).label("Inbound traffic").title("Network traffic (MB/s)"), .es(index=metricbeat*, timefield=@timestamp, metric=max:system.network.out.bytes).derivative().multiply(-1).divide(1048576).lines(fill=2, width=1).color(blue).label("Outbound traffic").legend(columns=2, position=nw)
timelion math06

 

保存所有的修改继续学习下一节关于条件逻辑和趋势跟踪的内容。