Как округлить выходные значения в telegraf?

#influxdb #telegraf #influxdb-2 #telegraf-plugins #starlark

#influxdb #telegraf #influxdb-2 #telegraf-плагины #starlark

Вопрос:

Я ищу способ округлить значения, выводимые из telergaf. Temperature, 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 просто для округления значения?

Ответ №1:

Извините, это немного старая тема, но у меня была такая же потребность, и я не нашел встроенного способа сделать это, учитывая, что даже функция округления математического модуля Starlarks будет округляться только до целых чисел.

Мой подход был очень похож.

Я хотел получить однозначную точность после запятой для большинства данных моей метеостанции, поскольку датчики не могут быть более точными, чем это.

Итак, я пошел с (внутри процедуры starlark): v = float(int(v * 10)) / 10

Казалось, что он делает то, что мне нужно, и должен выдержать случай 0.

Ответ №2:

Можете ли вы сказать, в чем заключается ваше ограничение? Это размер сообщения или, скорее, хранилище в InfluxDB? Или это скорее при представлении данных?

Даже если вы уменьшите десятичные дроби в telegraf, я полагаю, что InfluxDB все равно сохранит поле с плавающей запятой размером 8 байт. Так что в этом случае у вас не будет никаких преимуществ.

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

Комментарии:

1. На самом деле у меня нет никаких ограничений. Моя главная потребность — уменьшить полезную нагрузку. Ограничение мер только теми, которые я использую, уже значительно снизило нагрузку на мою сеть и загрузку процессора моих MQTTs. Я подумал, почему бы не пойти дальше, округляя значения.

Ответ №3:

Я не очень уверен в своем решении, но мне это понравилось… Использование процессора 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
'''