如何对不同标记和可能缺少的值的non_negative_derivative求和?

时间:2019-07-31 07:37:06

标签: grafana influxdb influxql

我有以下使用情况。来自不同服务器的iptables计数器存储在influxdb表中。我的目标是基于这些计数器以位/秒为单位可视化流量图。我还希望能够处理以下情况:给定服务器上的telegraf实例可能停止/重新启动,因此给定服务器上的样本可能会丢失,但是iptables计数器不会重置,并且在此期间仍会在服务器上增加。最后但并非最不重要的一点是,某些列仅来自给定服务器。每60秒从给定服务器上运行的telegraf收集一次数据。

这是表格数据:

  

从xtables中选择(8 * non_negative_derivative(“ class:http:local:out:bytes”))作为http,(8 * non_negative_derivative(“ class:p3hit:in:bytes”))作为x2中的p2p,其中host =〜/ ^ exmh- /和时间> = 1564394279563ms和时间<= 1564394642693ms按主机分组

name: xtables
tags: host=exmh-a
time                http p2p
----                ---- ---
1564394340000000000      1038037408.1333333
1564394400000000000      1080546471.4666667
1564394460000000000      1171599072.4
1564394520000000000      1079397346.6666667
1564394580000000000      1202226452.5333333
1564394640000000000      1338852115.7333333

name: xtables
tags: host=exmh-http
time                http               p2p
----                ----               ---
1564394340000000000 1664832943.0666666 
1564394400000000000 1613622968.5333333 
1564394460000000000 1671066106.6666667 
1564394580000000000 1701544141.4       
1564394640000000000 1684389083.7333333

请注意,exmh-a服务器中缺少http,exmh-http服务器中缺少了p2p,并且exmh-http服务器中没有时间1564394520000000000的条目,因为telegraf在那重新启动了。

因此,我尝试对Internet列,http和p2p列求和,并以一张图的形式展示它们。因此,我正在使用嵌套的select语句。

  

选择sum(http)作为HTTP,sum(p2p)作为P2P,从(select(8 * non_negative_derivative(“ class:http:local:out:bytes”))中选择为http,(8 * non_negative_derivative(“ class:p3hit :in:bytes”))作为xtables中的p2p,其中host =〜/ ^ exmh- /并且time> = 1564394279563ms和time <= 1564394642693ms按主机分组)其中time> = 1564394279563ms和time <= 1564394642693ms按time(1s)组填写(无)

name: xtables
time                HTTP               P2P
----                ----               ---
1564394340000000000 1664832943.0666666 1038037408.1333333
1564394400000000000 1613622968.5333333 1080546471.4666667
1564394460000000000 1671066106.6666667 1171599072.4
1564394520000000000                    1079397346.6666667
1564394580000000000 1701544141.4       1202226452.5333333
1564394640000000000 1684389083.7333333 1338852115.7333333

这里没有什么要注意的,我不确定为什么要这样工作。

  1. 我需要使用相同的值对“ time> =…和time <=”进行分割,否则它将返回到目前为止的所有时间戳。我希望外部选择仅对内部选择返回的数据起作用,但是可能我误解了内部的工作原理是什么?
  2. “时间分组”需要为1秒而不是60秒,而内部查询结果仅需60秒一次。这可能是因为默认情况下的non_negative_derivative是每1秒的速率?同样,每1s的分组给了我很多真实值之间的空值,我使用fill(none)跳过了它们。 这对我来说是最奇怪的事情。我想在单个grafana图上呈现HTTP,P2P和总计(HTTP + P2P)。但是,缺少1564394520000000000的HTTP值使HTTP和Total可以在此时从图形中删除。 Grafana功能“空为零”无济于事,因为此时总和变为零,这是不正确的。 因此,我尝试在最内部的查询中填充零,如下所示:
  

选择sum(http)作为HTTP,sum(p2p)作为P2P,从(select(8non_negative_derivative(“ class:http:local:out:bytes”))中选择为http,(8non_negative_derivative(“ class:p3hit:in:bytes ”))作为xtables中的p2p,其中host =〜/ ^ exmh- /并且时间> = 1564394279563ms和时间<= 1564394642693ms按主机填充(0)分组,其中时间> = 1564394279563ms和时间<= 1564394642693ms按时间(1s)分组填写(无)

name: xtables
time                HTTP               P2P
----                ----               ---
1564394340000000000 0                  1038037408.1333333
1564394400000000000 0                  1080546471.4666667
1564394460000000000 0                  1171599072.4
1564394520000000000 0                  1079397346.6666667
1564394580000000000 0                  1202226452.5333333
1564394640000000000 0                  1338852115.7333333
1564394340000000000 1664832943.0666666 0
1564394400000000000 1613622968.5333333 0
1564394460000000000 1671066106.6666667 0
1564394580000000000 1701544141.4       0
1564394640000000000 1684389083.7333333 0

我不明白为什么fill(0)会使每个时间点的值翻倍。外部总和+按时间分组是否应该导致对给定时间点的所有值求和?

所以总结一下我的问题: 1.为什么需要外部“时间> = 1564394279563ms和时间<= 1564394642693ms”来限制返回的值(似乎已受内部此类子句限制)? 2.为什么即使每60秒设置一次内部选择的实际值,“按时间分组(60s)”仍会导致错误的结果? 3.为什么在内部选择中添加“ fill(0)”会导致完整查询中出现双精度值?有办法避免这种行为吗?

0 个答案:

没有答案