提问人:x89 提问时间:11/13/2023 更新时间:11/15/2023 访问量:49
向 Google 跟踪代码管理器发送数据时出现 400 错误请求
400 Bad Request while sending data to Google Tag Manager
问:
我已经按照本指南设置了 GTM 服务器端:https://aws-solutions-library-samples.github.io/advertising-marketing/using-google-tag-manager-for-server-side-website-analytics-on-aws.html
现在我有两个链接可以访问我的 GTM 服务器:
主服务器端容器 (analytics.example.com)
预览服务器容器 (preview-analytics.example.com)
我在aws_ecs_task_definition设置中使用了这些参数:
预览容器:
container_definitions = <<TASK_DEFINITION
[
{
"name": "preview",
"image": "gcr.io/cloud-tagging-10302018/gtm-cloud-image",
"environment": [
{
"name": "PORT",
"value": "80"
},
{
"name": "RUN_AS_PREVIEW_SERVER",
"value": "true"
},
{
"name": "CONTAINER_CONFIG",
"value": "${var.CONTAINER_CONFIG}"
}
],
PrimaryContainer:
{
"name": "primary",
"image": "gcr.io/cloud-tagging-10302018/gtm-cloud-image",
"environment": [
{
"name": "PORT",
"value": "80"
},
{
"name": "PREVIEW_SERVER_URL",
"value": "${var.PREVIEW_SERVER_URL}"
},
{
"name": "CONTAINER_CONFIG",
"value": "${var.CONTAINER_CONFIG}"
}
]
现在,我正在尝试使用 Snowbridge 将数据发送到 GTM,Snowbridge 使用 Ec2 实例上的 docker 容器运行。Snowbridge 从 Kinesis 数据流中读取数据并将其转发到 GTM。
配置.hcl.tmpl
source {
use "kinesis" {
stream_name = "${stream_name}"
region = "${region}"
app_name = "${app_name}"
role_arn = "${role_arn}"
read_throttle_delay_ms = 500
# Maximum concurrent goroutines (lightweight threads) for message processing (default: 50)
concurrent_writes = 50
}
}
target {
use "http" {
url = "https://analytics.xx/com.snowplowanalytics.snowplow/enriched"
request_timeout_in_seconds = 60
content_type = "application/json"
# this line is optional, in case you want to send events to GTM Preview Mode
headers = "{\"x-gtm-server-preview\": \"AAAAAAAXXXX==\"}"
}
}
transform {
use "spEnrichedToJson" {}
}
这按预期工作,我能够在预览模式下看到传入的数据。据我了解,数据仍在发送到原始模式,但在启用此选项时,它只是被转发到预览模式。
删除可选标头(即 x-gtm-server-preview 参数)后,我在发送数据时会在 Cloudwatch 上收到错误:
level=warning msg="Retrying func (attempts: 2): target.Write: Error sending http requests: 1 error occurred:\n\t* Got response status: 400 Bad Request\n\n"
我还在此处将 PreviewContainer 的环境变量更改为 false:
{
"name": "RUN_AS_PREVIEW_SERVER",
"value": "true"
},
似乎我能够将数据发送到预览模式,但不能。可能的原因是什么?
错误是来自源 (snowbridge) 还是目标 (gtm)?
答:
400 错误请求是 Google 跟踪代码管理器服务器应用在传入的 HTTP 请求没有“客户端”来声明该请求时生成的错误响应。
对服务器容器的每个 HTTP 请求都需要一个客户端来声明该请求,否则服务器容器将以 400 错误进行响应。
若要避免此错误,请确保服务器容器具有声明要发送到它的传入请求的客户端。
有关客户的更多信息:https://developers.google.com/tag-platform/tag-manager/server-side/intro#how_clients_work
评论