经过研究,我认为解决此问题的最佳方法是使用Google的DataFlow。这是一般的想法:
- 使用Telegraf的cloud_pubsub输出插件将json格式的指标发送到Google的pubsub服务
- 使用Google的数据流服务从pubsub提取并发送到Google的BigQuery
- 利润!
这似乎很容易,但是需要对这些工具有相当多的了解。这是您需要记住的一些事情:
- 首先确定指标的外观-并为它们创建匹配的架构。 BigQuery是基于架构的,您必须进行高级定义,否则将数据加载失败。我发现为我的Telegraf客户端定义一个附加的“文件”输出对于准确查看我将要传递到BiqQuery的json指标很有帮助。请注意,您还可以使用Telegraf的measurement_filter
删除/编辑指标
- 使用Telegraf的cloud_pubsub插件。当我写这个答案(2月19日)时,它非常新,仅包含在Master分支中。我相信它适用于Telegraf版本1.10。
- 创建一个pubsub主题,一个BigQuery表(带有一个模式)和Google存储桶-您将需要所有三个项目来创建一个DataFlow项目。您还需要在GCP中生成的凭据文件,然后将Telegraf客户端指向。
- 完成后,在GCP中创建一个DataFlow项目。这些一旦创建便无法编辑,而且令人讨厌的是,无法删除(但可以将其停止)。因此,您可能最终会创建多个项目,直到正确为止。我发现几乎所做的所有事情都需要一个新项目(例如,删除并重新创建一个具有相同名称的BigQuery表需要一个新项目)。
- 如果您看到数据流中的错误,则应该能够从DataFlow日志子窗口中复杂的堆栈跟踪中确定这是否是架构问题。您的指标必须与方案完全匹配,否则它将不会加载到表格中。
- 我无法以influx格式加载指标,但被告知应该可行。我使用了“ json”格式,并且行得通。
- 如果您嵌套了json字段{“ person”:{“ first-name”:“ john”,等等}},请在BigQuery模式中将嵌套字段定义为RECORD类型,并在其中嵌套字段。除非您已经知道BigQuery,否则它不是很明显。
- 我发现在GCP控制台中编辑BigQuery模式非常有限-特别是对于嵌套的json字段。我不得不从头开始重新创建它几次,因为UI不允许在初始表配置后编辑嵌套字段。