2

我正在寻找一种方法来舍入telergaf 输出的值。温度、usage_idle、memory_usage 等等……到小数点后 14 位是非常巨大的。这对我来说太多了。它可以使我的一些测量值加倍。

我还没有找到一种容易做到的方法。

现在我在输出中有这个:

cpu,host=nuc usage_system=1.4107433532279232,usage_idle=95.06239826368747,usage_iowait=0.37981551817639264,usage_user=2.007596310360536

我想要这样:

cpu,host=nuc usage_system=1.4,usage_idle=95.0,usage_iowait=0.4,usage_user=2.0

我想您必须使用处理器,但是您如何以简单的方式做到这一点?starlark 只是为了取整一个值?

4

3 回答 3

2

抱歉,这有点旧线程,但我有同样的需要,并且没有找到任何内置的方法来做到这一点,因为即使 Starlarks 数学模块的舍入函数也只会舍入到整数。

我的方法非常相似。

对于我的大多数气象站数据,我想要小数点后的一位数精度,因为传感器没有比这更准确的方法了。

所以我选择了(在一个starlark例程中): v = float(int(v*10))/10

它似乎做了我需要的,应该在 0 案例中幸存下来。

于 2021-12-01T09:56:38.537 回答
0

我不太相信我的解决方案,但我确实喜欢这个......使用starlak处理器。

我还没有找到实现真正圆形功能的方法。

[[processors.starlark]]
  source = '''
def apply(metric):
  for k, v in metric.fields.items():
    if type(v) == 'float':
      f = metric.fields[k]
      if (int(f) != 0):
        metric.fields[k] = float(int(f) + float(int((f % int(f)) * 10) / 10))
      else:
        metric.fields[k] = float(int(f * 10) / 10)
  return metric
'''
于 2021-01-01T20:24:16.760 回答
0

你能说出你的局限在哪里吗?是消息大小还是 InfluxDB 上的存储?还是更倾向于展示数据?

即使你减少了电报中的小数,我相信 InfluxDB 仍然会存储一个 8 字节的浮点字段。因此,在这种情况下,您将没有任何优势。

https://medium.com/dataseries/analysis-of-the-storage-mechanism-in-influxdb-b84d686f3697#4e6e

于 2020-12-22T09:52:51.447 回答