我有关于多年来收集的服务器状态的数据:温度,风扇速度,CPU负载,SMART数据。它们存储在各种表下的SQLite数据库中,每个表都针对每种类型的数据。
我正在切换到InfluxDB以便更容易地绘图(Grafana)和未来扩展:数据将包括来自其他服务器的值以及UPS数据(电压,电池......)。
我阅读了有关schemas in InfluxDB的指南,但我仍然感到困惑,因为我对此主题没有经验。我发现another question有关架构建议但我不能将其应用于我的案例。
我应该如何处理问题以及如何为时间序列设计合适的架构?我应该在标签和字段中添加什么?我应该使用单个“测量”系列还是应该创建多个“测量”?
这些是我开始使用的数据:
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
答案 0 :(得分:0)
我发现官方电报plugin使用的模式与我有相同的IPMI读数:
ipmi_sensor,server=10.20.2.203,unit=degrees_c,name=ambient_temp \
status=1i,value=20 1458488465012559455
我会将旧数据转换为该格式,我将所有必需字段存储在旧的SQLite数据库中。我将修改插件以保存服务器的名称而不是IP,这在家里比名称本身更不稳定。我也可能会将时间戳的精度降低到简单的毫秒或秒。
以这个为例,我明白我提出的CPU读数可以改进:
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