宣布 Kapacitor,一个开源流式和批量时间序列处理器

导航至

今天,我们很高兴宣布 Kapacitor,一个用 Go 编写的开源时间序列数据处理引擎。Kapacitor 使您能够

  • 根据复杂和动态的标准触发警报,
  • 在当前和历史数据上运行 ETL 作业,
  • 并实时或批量处理数据。

如需简单的演练,请查看此快速视频,或继续阅读。

什么是 Kapacitor

如果您迫不及待,立即开始!

Kapacitor 是一个独立的程序,用于处理时间序列数据。数据可以流式传输或以计划的批次形式通过任意数量的输入(包括 InfluxDB)发送到 Kapacitor。Kapacitor 甚至可以订阅接收发送到 InfluxDB 集群的所有数据。

目前,Kapacitor 可以使用 InfluxDB 查询语言中可用的相同函数(即 sum、min、max、stddev 等)处理您的数据。我们计划很快添加更多功能,即:更多聚合函数、自定义用户定义函数和异常检测。

你们中的许多人一直在要求像 Kapacitor 这样的工具,我们已经尽力满足这一需求。通过此版本,我们正在寻求关于 Kapacitor 如何满足您的需求以及我们可以做些什么来改进它的早期反馈。我们也希望 Kapacitor 能够与第三方应用程序集成。如果您已经有了一些想法,请查看指南,了解如何为 Kapacitor 贡献您自己的自定义输出连接器。输出连接器允许您将转换后的数据和警报流式传输到其他数据存储或第三方 API。

如何使用 Kapacitor?

Kapacitor 运行通过名为 TICKscript 的 DSL 定义的任务。TICKscript 定义了 Kapacitor 中处理什么数据以及如何处理数据。下面的 TICKscript 是 Kapacitor 中的一个 Hello World 任务,它会在 CPU 使用率过高时触发警报。

stream
    .from().measurement('cpu')
    .alert()
        .crit(lambda: "value" > 80.0)
        .log('/tmp/high_cpu.log')

使用这个简单的脚本,您就可以启动并运行,并可以根据 CPU 使用率触发警报。

为了更完整的示例,假设您是一名游戏开发人员,需要为观众构建一个顶级玩家得分仪表板。使用 Kapacitor,您可以定义一个任务,该任务将完成维护每个游戏的最新玩家得分集的繁重工作。您只需将得分更新发送到 Kapacitor,并将仪表板配置为从 Kapacitor 拉取其数据。下面的 TICKscript 获取每个玩家的最新得分,然后计算每个游戏的前五名玩家。

stream
    // Select data from the 'scores' stream
    .from().measurement('scores')
    // Get the most recent score for each player per game
    .groupBy('game', 'player')
    .window()
        .period(10s)
        .every(1s)
        .align()
    .mapReduce(influxql.last('value'))
    // Calculate the top 5 scores per game
    .groupBy('game')
    .mapReduce(influxql.top(5, 'last', 'player'))
    // Expose those scores over the HTTP API at the 'top_scores' endpoint.
    // Now the leaderboard can just request the top scores from Kapacitor
    // and always get the most recent results.
    .httpOut('top_scores')

请参阅此处关于此特定示例如何工作的完整说明。

入门指南将引导您完成使用 Kapacitor 的第一步。请告诉我们您的想法!使用邮件列表或提交问题,或者更好的是在github上提交 PR。