用kapacitor-influxdata丰富您的数据

我们不时会看到来自社区的请求,询问基于某个业务周期(例如典型的工作日)或细分为轮班周期的InfluxDB。 考虑以下请求: 我如何汇总8月份整个月份的数据,仅针对工作时间,即周一至周五上午8点到下午5点? InfluxQL目前不具备任何基于时间的过滤功能。 我们仅限于:


那么我们如何实现这一点呢? 所提供的Telegraf插件通常只发送时间戳值,并且除了与所配置的插件相关联的度量和标签之外,还能够发送一些静态标签。 解决方案是使用Kapacitor作为“预处理器”,用一个代表您希望查询的时间段的计算值来“修饰”或丰富您的数据。


数据库增量同步

出于本文的目的,我们正在运行Telegraf、InfluxDB和Kapacitor,但是在一个成熟的环境中,它们将在不同的主机上运行。

第一步是将Telegraf配置为写入Kapacitor,而不是直接写入InfluxDB。 在文件的这一部分,有三个关键设置需要考虑:


URLs参数必须指向端口9092 (Kapacitor的默认监听端口),而不是端口8086。 数据库参数应该指向一个不存在的数据库(您可以忽略Telegraf关于找不到数据库的警告)。 该参数应设置为或您先前在实例中创建的特定保留策略。

警告:保留设置为(默认)与不同,后者是在初始化InfluxDB时指定为默认保留策略。

中的所有其他设置可以为您的实例正常配置。

下一步是创建一个TICKscript来处理来自Telegraf的数据。 在这个例子中,我们感兴趣的是创建一个标签,如果数据点在我们上面描述的工作时间,这个标签将包含一个真或假的值。


在这个TICKscript中,我们是从我们上面在文件中配置的不存在的数据库中流式传输的。 节点的方法只需要数据库与之匹配。 然后,我们将控制传递给一个节点,该节点将评估该点是否已经到达我们设计的窗口。 在这种情况下,我们利用这里描述的、和函数来评估“时间”值。

条件的第一部分评估星期几是否在星期一(1)和星期五(5)之间。 条件的第二部分评估小时值,注意考虑到我们希望在17小时(下午5点)停止。 为此,我们将小时乘以100,并将函数的结果与结束时间1700进行比较。 如果该值在此范围内,节点将返回true,作为名为。 然而,由于我们想查询这个值,我们应该将它作为一个标记,所以我们链接一个方法来将这个值更改为一个名为。

重要的:该节点将从流中删除所有其他字段和标记,因此我们希望指定从流中保留这些值。

此时,我们有一个字段和一个名为的标记,它包含节点的输出。 我们应该通过调用指定要通过方法删除的字段的节点,从流中过滤掉它。

最后,我们将流中的控制传递给一个节点,该节点指定要写入的目标数据库和保留策略。 我们为这个例子添加了一个名为。 所有其他数据,如测量名称,都是通过,只需要提供新的信息。 在这种情况下,我们将写入数据库和保留策略。

一旦您创建了TICKscript(如下所述),我们必须告诉Kapacitor我们想要运行它。 在本例中,我们将使用Kapacitor命令行界面来配置任务。


此命令将称为监听写入的流类型的任务定义为数据库名称和保留策略名称,这是在上面的Telegraf中配置的。 成功创建任务后,我们需要启用它以供Kapacitor处理。


要显示状态,我们可以要求Kapacitor列出当前任务:



一旦数据开始通过Kapacitor流入InfluxDB,您就可以将条件添加到我们指定的第一个查询中:


一旦数据开始通过Kapacitor流入InfluxDB,您就可以将条件添加到我们指定的第一个查询中:
此方法可用于添加其他类型的数据,从而可能无需创建自定义Telegraf插件来满足您的业务需求。

你可能感兴趣的:(数据库,java,python,大数据,mysql)