将指标从Telegraf传输到BigQuery

时间:2019-02-05 19:02:10

标签: google-bigquery telegraf

我想将指标从Telegraf发送到GCP的BigQuery。

我应该怎么做?有什么陷阱?

1 个答案:

答案 0 :(得分:3)

经过研究,我认为解决此问题的最佳方法是使用Google的DataFlow。这是一般的想法:

  1. 使用Telegraf的cloud_pubsub输出插件将json格式的指标发送到Google的pubsub服务
  2. 使用Google的数据流服务从pubsub提取并发送到Google的BigQuery
  3. 利润!

这似乎很容易,但是需要对这些工具有相当多的了解。这是您需要记住的一些事情:

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