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

导航至

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

这篇文章将重点介绍使用 InfluxDB 和 GitHub Actions 的一些有趣方式。

介绍 InfluxDB GitHub Action

最近我一直在玩 GitHub Actions,并注意到市场上缺少一个用于 InfluxDB 的 Action。因此,我决定弥补这一点,创建一个新的 InfluxDB Action,供任何人使用。这个过程非常简单,并且创建新 action 的文档非常完善。

InfluxDB GitHub Action

readme 中有一些关于如何设置的示例。您可以配置 InfluxDB 的特定版本,或者使用关键字“latest”或“nightly”来始终获取新版本(不建议用于生产环境)。该 action 将下载 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 设置为 false。它将 influx 命令移动到路径中,以便我可以像往常一样使用它。

InfluxDB Action 在您的 GitOps 工作流程中可以提供的另一种帮助是通过验证您对 InfluxDB 模板 文件所做的更改是否有效。我们在内部使用 Community Templates 仓库来做到这一点,其中对模板的所有更改都通过加载本地 InfluxDB 实例并安装模板来验证。如果模板安装没有问题,则假定它是正确的,并且测试通过。在我们的 Community Templates 仓库 中查看它。

verify-templates

数据验证和转换

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

因此,我更新了 InfluxDB Data Examples 仓库,并开始加载我过去使用过的一些公共数据流,即 NOAA National Buoy Data Center 数据USGS Earthquake 数据

loading data to InfluxDB Data Examples repository

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

现在我已经定期更新这些数据源,并且格式易于 InfluxDB 读取,我开始尝试使用 GitHub action 进行一些数据转换。

首先,我抓取了 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 的 Annotated 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(一年)范围只是一个虚假范围,因为我知道这些数据都是非常新的。

现在,有了这个 annotated 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 地震数据做了类似的事情。

现在,您也可以使用新的 Sample Data 库 在您的 InfluxDB Cloud 实例中使用这些数据。

结论

GitHub Actions 是一种强大的方式,可以为您的项目自动化 CI/CD 管道,但它也可以用于自动化数据收集和转换。我们在内部以多种方式使用它,我们很乐意听到您如何使用它。

请加入我们的 Community Slack 频道,让我们知道您的想法!