使用 InfluxDB 与 GitHub Actions 实现GitOps、CI/CD 和数据转换

导航到

GitHub Actions 是一种强大的方式,可以为任何源代码仓库添加自动化。当您将这种能力与 InfluxDB 相结合时,您将获得一个惊人的组合,允许您自动化数据生成、管理 GitOps 工作流程以及更多。

本文将突出一些使用 InfluxDB 和 GitHub Actions 的有趣方式。

介绍 InfluxDB GitHub Action

我最近一直在尝试 GitHub Actions,并注意到市场上缺少一个与 InfluxDB 一起工作的动作。因此,我决定解决这个问题,并创建了一个任何人都可以使用的新的 InfluxDB Action。这个过程非常简单,创建新动作的文档也很丰富。

InfluxDB GitHub Action

在项目的 readme 文件中有一些如何设置的示例。您可以为 InfluxDB 配置特定版本,或者使用关键词“latest”或“nightly”始终获取新版本(不推荐用于生产)。动作将下载 InfluxDB 和 InfluxDB CLI 工具包,解压并将其移动到您的路径中,然后启动并配置 InfluxDB(除非您告诉它不要这么做)。从那里开始,您可以运行任何您通常运行的 influx 命令。

因此,我们已经有一个正在运行的 InfluxDB 实例,但我们能做什么呢?实际上,我们可以做很多事情。

GitOps 集成

我之前写过如何使用 InfluxDB 模板设置 GitOps 工作流程的博客文章,但有了这个 GitHub Action,它变得更加简单。我已经将那篇博客文章中的 GitHub action 配置 版本更新,以使用新的 InfluxDB Action。

GitOps integrations

对于这些 GitOps 流程,我不需要运行本地 InfluxDB 实例,因为我所做的一切都是使用 CLI 工具将资源部署到 InfluxDB Cloud,因此我在第 28 行设置了 influxdb_start: false。它将 influx 命令移动到路径中,这样我就可以像通常那样使用它。

InfluxDB Action还可以通过验证您对InfluxDB模板文件的修改是否有效,来帮助您在GitOps工作流程中。我们通过社区模板存储库内部进行此操作,在该存储库中,所有对模板的更改都会通过加载本地InfluxDB实例并安装模板进行验证。如果模板安装无误,则假定它是正确的,并且测试通过。您可以在我们的社区模板存储库中查看。

verify-templates

数据验证和转换

最近,我一直在尝试使用GitHub的Flat Data项目GitHub的Flat Data项目,并寻找将其用于项目和演示的方法。简而言之,GitHub Flat Data允许您快速配置GitHub操作,以定期将公共数据源提取到您的GitHub存储库中。他们使用的示例是比特币数据。

因此,我更新了InfluxDB数据示例存储库,并开始加载我过去使用的一些公共数据流,即NOAA国家浮标数据中心数据USGS地震数据

loading data to InfluxDB Data Examples repository

接下来,我创建了一些后处理脚本来将数据文件转换为InfluxDB可轻松使用的格式。对于浮标数据,我添加了活跃站点信息并将其转换为CSV文件,而对于地震数据,我直接将其转换为行协议

现在,我已经有了这些定期更新且格式适合InfluxDB读取的数据流,我开始尝试使用GitHub操作进行数据转换。

首先,我获取了CSV文件,并使用InfluxDB命令行界面(CLI)解析并生成数据的行协议版本。以下是将CSV数据转换为行协议的命令。

/usr/local/bin/influx write dryrun -f $GITHUB_WORKSPACE/noaa-ndbc-data/latest-observations.csv --format csv --header "#constant measurement,ndbc" --header "#datatype double,double,double,double,double,double,long,double,double,double,double,double,double,double,tag,double,double,double,tag,tag,tag,tag,string,string,string,string,dateTime:number" > $GITHUB_WORKSPACE/noaa-ndbc-data/latest-observations.lp

我在这里使用dryrun命令将行协议数据输出到文件。有关更多信息,请参阅我们的文档和关于如何使用InfluxDB命令行工具解析CSV数据的示例。

行协议数据很有用,但我没有看到任何Flux功能可以直接读取它,因此我想将其转换为Flux的注释CSV格式,以便我可以利用csv.from(url: ""功能将数据拉入我的InfluxDB Cloud账户。

完成此操作的最快方法是直接将数据摄入后台运行的InfluxDB OSS实例中,然后再将其查询回自己的文件。

/usr/local/bin/influx write -f $GITHUB_WORKSPACE/noaa-ndbc-data/latest-observations.lp -b dummy
          /usr/local/bin/influx query "from(bucket: \"dummy\") |> range(start: -1y) |> drop(columns: [\"_start\",\"_stop\"])" --raw > $GITHUB_WORKSPACE/noaa-ndbc-data/latest-observations-annotated.csv

这里1y(一年)的范围只是一个假的范围,因为我知道这些数据都很新。

现在,有了这个注释CSV文件,使用以下查询将数据拉入我的InfluxDB Cloud账户非常容易

import "experimental/csv"
csv.from(url: "https://raw.githubusercontent.com/influxdata/influxdb2-sample-data/master/noaa-ndbc-data/latest-observations-annotated.csv")
  |> filter(fn: (r) => r._field == "dewpoint_temp_degc")

并且使用地图图类型可视化

Earthquake Data

我为USGS地震数据做了类似的事情。

现在,您也可以在新的样本数据库中使用这些数据。

结论

GitHub操作是自动化项目CI/CD管道的强大方式,但它也可以用于自动化数据收集和转换。我们在内部以各种方式使用它,并且我们很乐意了解您是如何使用它的。

请加入我们的社区Slack频道,并告诉我们您的想法!