向 Google 跟踪代码管理器发送数据时出现 400 错误请求

问题描述 投票:0回答:1

我已按照本指南设置 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}"
      }
    ],

主要容器:

{
    "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,它使用 Ec2 实例上的 docker 容器运行。 Snowbridge 从 Kinesis 数据流读取数据并将其转发到 GTM。

https://docs.snowplow.io/docs/destinations/forwarding-events/snowbridge/configuration/targets/http/google-tag-manager/

config.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)?

http amazon-ecs google-tag-manager http-status-code-400 snowplow
1个回答
0
投票

400 错误请求是当传入的 HTTP 请求没有“客户端”来声明它时,由 Google 跟踪代码管理器服务器应用程序生成的错误响应。

对 Server 容器的每个 HTTP 请求都需要一个 Client 来声明该请求,否则 Server 容器将响应 400 错误。

为了避免该错误,请确保您的服务器容器有一个客户端来声明您发送给它的传入请求。

有关客户端的更多信息:https://developers.google.com/tag-platform/tag-manager/server-side/intro#how_clients_work

© www.soinside.com 2019 - 2024. All rights reserved.