Influxdb、Grafana检测并去除异常值

Influxdb,Grafana Detect and remove outliers

Grafana 或 Influx 数据库中是否有一种实施方法可以帮助检测数据集中的异常值,并在可能的情况下删除或至少避免在使用该数据集的仪表板上显示它们;我使用了百分位数,但这似乎并没有隐藏大量异常值。

谢谢。

Grafana 是用来显示数据的,虽然它可能有一些工具来实现异常值检测和消除,但它不是清理数据的正确位置。

InfluxDB 是用来存储数据的,也不是用来清理数据的。然而,influxQL 有一堆数学函数,你可以在查询数据时使用它们;您可以缩减采样,获取平均值等。您可以在这里查看是否有任何东西满足您的需求 https://docs.influxdata.com/influxdb/v1.4/query_language/functions/

编辑:不要将 InfluxQL 与 IFQL 混淆,IFQL 也代表 Influx 查询语言 https://github.com/influxdata/ifql

EDIT2:IFQL 现在称为 FluxInfluxData’s new functional data scripting language designed for querying, analyzing, and acting on data,是一种更 flexible/powerful 的语言比 InfluxQL。

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/

如果您不想使用 Kapacitor and/or CQ,Meta Queries Plugin for Grafana 中的移动平均值可能有助于平滑数据峰值。

如果您事先知道特定指标可接受的值范围,您可以在 WHERE 部分按值指定过滤器(InfluxDB 术语中的 field_keyfield_value)查询。

Grafana 在“文本编辑”和“可视化”模式下也支持这一点。这并不明显,因为 Grafana 仅在 WHERE 自动完成下拉菜单中建议标签名称和值,但您也可以键入 field_key Enter,然后选择一个运算符,例如< 并键入数字 X 作为阈值 above/below,所有数字都将作为异常值被过滤掉。

例如,假设您有一个系列报告您的互联网连接延迟,我们假设超过 200 毫秒的任何值都是传感器的异常值或错误值。

您可以使用以下查询过滤掉错误值。在“文本编辑”模式下:

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"value",但您可以按测量值中存在的任何字段进行过滤。

我注意到,当您在可视化和文本编辑模式之间切换时,Grafana 要保留您的过滤器,您必须在括号内指定它,例如如上:WHERE ("entity_id" = 'speedtest_ping' AND "value" < 200)