在InfluxDB数据到达之前对其进行过滤

时间:2018-08-27 16:17:28

标签: influxdb telegraf telegraf-plugins

伙计们, 我将通过Telegraf通过MQTT获得的温度信息存储到RapsberyyPI InfluxDB上的信息中,存储了7天。可视化温度时看到的结果是,我得到的温度值介于-200到+200之间,这似乎是随机的。因此,大多数时候我都能得到正确的价值。只是想知道是否有一种方法可以告诉telegraf只接受介于-30和+40之间的值,以便在将它们插入到Influx DB中之前可以过滤这些值。有任何想法吗? 数据的来源是c 从在我的Rapsi上运行的aRTL_433嗅探器中删除,并以JSON格式发送。看起来数据并不总是像我需要的那样准确。

2 个答案:

答案 0 :(得分:2)

您可以尝试创建一个仅接受您范围内的值的连续查询。为此,您需要在数据库中进行两次测量,我将其称为raw_temp和temp。也许像这样:

    CREATE CONTINUOUS QUERY "temp_filter" ON "my_db"
    RESAMPLE EVERY 30s FOR 30s
    BEGIN
    SELECT "temperature" INTO "temp" from "raw_temp" where "temperature" > -40 and 
    "temperature" < 40 GROUP BY *
    END

然后创建一个连续查询,以删除raw_temp中早于一个小时的任何内容。或者,您可以安装Kapacitor,这使得进行数据操作非常容易。

答案 1 :(得分:0)

使用kapacitor解决此问题。

首先创建一个具有短保留策略的数据库来存储原始数据。 第二步,创建 tick DSL脚本以获取所需内容,然后将其写回到新数据库中,例如

batch
   |query('''
       ...
   ''')
       .period(5m)
       .every(5m)
       .groupBy(time(1m))
    |influxDBOut()
        .database('some_database')
        .retentionPolicy('autogen')
        .measurement('some_measurement')