代码之家  ›  专栏  ›  技术社区  ›  FuzzyAmi

从telegraf到bigquery的运输度量

  •  0
  • FuzzyAmi  · 技术社区  · 6 年前

    我想把数据从telegraf发送到gcp的bigquery。

    我该怎么做?有哪些陷阱?

    1 回复  |  直到 6 年前
        1
  •  3
  •   FuzzyAmi    6 年前

    经过研究,我认为解决这个问题的最好方法是使用google的数据流。总的来说:

    1. 使用Telegraf's cloud_pubsub 输出插件将json格式的度量发送到google的pubsub服务
    2. 使用google的数据流服务从pubsub接收并发送到google的bigquery
    3. 利润!

    这看起来很简单,但需要对这些工具有相当多的了解。以下是一些你需要记住的事情:

    1. 首先找出你的指标是什么样的,然后为它们创建一个匹配的模式。bigquery是基于模式的,您必须在advanced中定义它,否则将无法将数据加载到中。我发现,为telegraf客户机定义一个额外的“文件”输出有助于准确地了解我要发送到biqquery中的json度量。注意,您也可以使用telegraf的 measurement_filter
    2. 使用telegraf的cloud_pubsub插件。在我写这个答案的时候(2月19日),它是非常新的,而且只包含在主分支中。我相信它是为Telegraf 1.10版设计的。
    3. 创建一个pubsub主题、一个bigquery表(带有一个模式)和google存储桶-您将需要所有三个项来创建一个数据流项目。您还需要一个在gcp中生成的凭证文件,然后将telegraf客户机指向。
    4. 完成后,在gcp中创建一个数据流项目。这些文件一旦创建就无法编辑,令人恼火的是,它们无法删除(但可以停止)。所以你可能最终会创建多个项目,直到你做对为止。我发现几乎所有我做的事情都需要一个新项目(例如,删除并重新创建同名的bigquery表需要一个新项目)。
    5. 如果您在dataflow中看到错误,那么应该能够从dataflow的logs子窗口中的卷积堆栈跟踪中确定这是否是架构问题。您的度量必须与方案完全匹配,否则将不会加载到表中。
    6. 我无法以inflix格式加载度量,但我被告知这应该是可能的。我使用了‘json’格式,这很有效。
    7. 如果您有嵌套的json字段{“person”:{“first name”:“john”等},请在bigquery模式中将嵌套字段定义为记录类型,并在其中定义嵌套字段。这不是很明显,除非你已经知道bigquery。
    8. 我发现在gcp控制台中编辑bigquery模式非常有限,特别是对于嵌套的json字段。我不得不从头开始重新创建它几次,因为ui不允许在初始表配置之后编辑嵌套字段。