Grafana或Influx数据库中是否有实现的方法可以帮助检测数据集中的异常值,如果可能的话,删除或至少避免从使用此数据集的仪表板中显示它们;我使用百分位数,但这似乎并没有隐藏大量异常值。
感谢。
答案 0 :(得分:5)
Grafana旨在显示数据,虽然它可能有一些工具来实现异常检测和消除,但它不是清理数据的正确位置。
InfluxDB用于存储数据,也不是用于清理数据的东西。但是,InfluxQL有一堆数学函数可供查询数据时使用;你可以下采样,得到均值等等。你可以看看这里是否有你需要的东西https://docs.influxdata.com/influxdb/v1.4/query_language/functions/
编辑:不要将InfluxQL与IFQL混淆,后者也代表Influx查询语言 https://github.com/influxdata/ifql
在InfluxDB中有一个称为连续查询的东西,它定期运行并将结果保存在指定的测量中(可能相同,覆盖或添加新字段)。此方法可用于清理数据,以便以后查询和显示更简单。 https://docs.influxdata.com/influxdb/v1.4/query_language/continuous_queries/
使用InfluxDB进行数据处理的优先方法是使用Kapacitor,它是TICK堆栈的一部分(Telegraf,InfluxDB,Chornograf,Kapacitor),并与InfluxDB很好地集成,可以实时或分批处理数据并保存回到InfluxDB。但是Kapacitor可能对简单的东西来说太过分了。先看看Influxql的数学函数。 https://www.influxdata.com/time-series-platform/kapacitor/
答案 1 :(得分:1)
如果您不想使用Kapacitor和/或CQ,Meta Queries Plugin for Grafana中的移动平均线可能有助于平滑数据峰值。
答案 2 :(得分:0)
如果您事先知道特定指标的可接受值范围,则可以在查询的field_key
部分中按值(在InfluxDB术语中为field_value
和WHERE
)指定过滤器
Grafana在“文本编辑”和“可视”模式下也支持此功能。这并不明显,因为Grafana仅在WHERE
自动完成下拉菜单中建议标签名称和值,但是您也可以键入field_key
Enter ,然后选择一个{{1 }},然后输入数字<
作为高于/低于此阈值的阈值,所有数字将作为异常值被过滤掉。
例如,假设您有一个系列报告互联网连接的延迟,并且假设200ms以上的值是传感器的异常值或错误值。
您可以使用以下查询过滤掉错误的值。在“文本编辑”模式下:
X
在可视模式下:
这里SELECT mean("value") FROM "ms" WHERE ("entity_id" = 'speedtest_ping' AND "value" < 200) AND time >= now() - 2d GROUP BY time(5m), "entity_id" fill(none)
是field_key
,但是您可以按测量中存在的任何字段进行过滤。
我注意到,当在可视和文本编辑模式之间切换时,为了让Grafana保留过滤器,您必须在括号内指定该过滤器,例如如上:"value"