如何通过DataFlow将像素跟踪参数提取到BigQuery表中?

时间:2019-08-20 11:57:35

标签: google-cloud-platform google-bigquery google-cloud-dataflow

我是GCP的初学者,正在尝试自定义此serverless pixel tracking architecture  来自GCP教程。

目标

除了App Engine和Compute Engine之外,其他所有内容的构建方式都相同。在我的示例中,我不需要它们。

我的目标是在之后保存像素跟踪参数

my.tracking-pixel.com/error?[参数]

使用PubSub上的专用错误主题进入BigQuery表。

现状

到日志记录的无服务器像素跟踪管道已启动并正在运行。之后,我创建了一个导出接收器,将像素跟踪中的数据发布到错误主题中。

然后,我按照教程指南from here创建了一个DataFlow实体来订阅我的错误主题,并将该主题中的消息提取到我的BigQuery表中。

我的示例表方案如下所示。它只接收类型为String的消息。

Field name   Type   Mode
msg          STRING NULLABLE

现在使用JSON格式发布消息非常容易

{
"msg":"hello world"
}

或通过使用Google控制台使用属性字段的发布消息页面。然后我的表就正确更新了。

提取尝试

现在,我想从跟踪中传递参数并将其吸收到我的表中。

我尝试了以下语法,但没有成功。

使用键值映射。

my.tracking-pixel.com/error?msg=hello

使用JSON格式。

my.tracking-pixel.com/error?{"msg":"hello"}

调试

在DataFlow中,我看到我的数据在检查 输入和输出集合:

  • ConvertMessageToTableRow / JsonToTableRow / JsonToTableRow.out0
  • WriteSuccessfulRecords / StreamingInserts / StreamingWriteTables / StreamingWrite.out1

此外,我发现BigQuery正在创建一个错误孪生表,用于记录错误代码。

这是我的有效载荷字符串

{httpRequest={cacheLookup=true, remoteIp=X, requestMethod=GET, requestSize=42, requestUrl=https://my.tracking-pixel.com/error?insertId=4&msg=new1234, responseSize=789, status=200, userAgent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36},
insertId=17ktmayg1nsocji, jsonPayload={@type=type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry, statusDetails=response_sent_by_backend},

logName=projects/tracking/logs/requests, 
receiveTimestamp=2019-08-20T08:39:25.712461786Z, 
resource={labels={backend_service_name=, forwarding_rule_name=lbl-collect-pixel-forwarding-rule, project_id=tracking, target_proxy_name=lbl-collect-pixel-target-proxy, url_map_name=lbl-collect-pixel, zone=global},
type=http_load_balancer}, 
severity=INFO, 
spanId=fa0cc3cdcb7e2592, 
timestamp=2019-08-20T08:39:24.922424036Z,
trace=projects/tracking/traces/b335b1acfa78ad5447500cdcda747aa1}

这是我的错误消息

{
  "errors" : [ {
    "debugInfo" : "",
    "location" : "logName",
    "message" : "no such field.",
    "reason" : "invalid"
  } ],
  "index" : 0
}

DataFlow试图在仅具有msg属性的表中添加logName属性。

现在,如何更改跟踪参数的提取尝试,以使DataFlow正确地将其解析为所需的消息格式并将其插入表格中?

谢谢您的帮助。

干杯, wiroot

0 个答案:

没有答案