Какая схема InfluxDB подходит для этих измерений?

У меня есть данные о состоянии моего сервера, собранные за эти годы: температура, скорость вращения вентиляторов, загрузка процессора, данные SMART. Они хранятся в базе данных SQLite в различных таблицах, каждая из которых специфична для каждого типа данных.

Я перехожу на InfluxDB для упрощения построения графиков (Grafana) и будущего расширения: данные будут включать значения с другого сервера, а также данные ИБП (напряжение, аккумулятор, ...).

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

Как мне подойти к проблеме и как разработать подходящую схему для временного ряда? что мне вставлять в теги и что в поля? следует ли использовать одну серию «измерений» или создавать несколько?

Это данные, с которых я начинаю:

CREATE TABLE "case_readings"(date, sensor_id INTEGER, sensor_name TEXT, Current_Reading)

CREATE TABLE cpu_load(date, load1 REAL, load2 REAL, load3 REAL)

CREATE TABLE smart_readings(date, disk_serial TEXT, disk_long_name TEXT, smart_id INTEGER, value)

Примеры реальных данных:

case_readings:
"1478897100"    "4"     "01-Inlet Ambient"  "20.0"
"1478897100"    "25"    "Power Supply 1"    "0x0"

cpu_load:
"1376003998"    "0.4"   "0.37"  "0.36"

smart_readings:
"1446075624"    "50026B732C022B93" "KINGSTON SV300S37A60G"  "194"   "26 (Min/Max 16/76)"
"1446075624"    "50026B732C022B93" "KINGSTON SV300S37A60G"  "195"   "0/174553172"
"1446075624"    "50026B732C022B93" "KINGSTON SV300S37A60G"  "196"   "0"
"1446075624"    "50026B732C022B93" "KINGSTON SV300S37A60G"  "230"   "100"

Это моя идея схемы InfluxDB. Я использую прописные буквы, чтобы указать фактическое значение и пробелы, только когда строка действительно содержит пробелы:

case_readings,server=SERVER_NAME,sensor_id=SENSOR_ID "sensor name"=CURRENT_READING DATE

cpu_readings,server=SERVER_NAME load1=LOAD1 load2=LOAD2 load3=LOAD3 DATE

smart_readings,server=SERVER_NAME,disk=SERIAL,disk="DISK LONG NAME" smart_id=VALUE DATE

person FarO    schedule 10.01.2017    source источник


Ответы (1)


Я нашел схему, используемую официальным плагином Telegraph для те же показания IPMI, которые у меня есть:

ipmi_sensor,server=10.20.2.203,unit=degrees_c,name=ambient_temp \
 status=1i,value=20 1458488465012559455

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

Используя этот пример в качестве примера, я понимаю, что тот, который я предложил для показаний ЦП, можно улучшить:

cpu,server=SERVER_NAME,name=load1 value=LOAD1 DATE
cpu,server=SERVER_NAME,name=load2 value=LOAD2 DATE
cpu,server=SERVER_NAME,name=load3 value=LOAD3 DATE

Однако я все еще рассматриваю тот, который предложил, без индексации отдельных значений:

cpu,server=SERVER_NAME load1=LOAD1 load2=LOAD2 load3=LOAD3 DATE

Для данных SMART мое предложение также не было оптимальным, поэтому я буду использовать:

smart_readings,server=SERVER_NAME,serial=SERIAL,name=DISK_LONG_NAME",\
 smart_id=SMART_ID,smart_description=SMART_DESCRIPTION \
 value=VALUE value_raw=VALUE_RAW DATE
person FarO    schedule 12.01.2017