【问题标题】:Google Analytics Management API 500 Internal Server ErrorGoogle Analytics Management API 500 内部服务器错误
【发布时间】:2017-03-22 13:24:22
【问题描述】:

我有一个应用程序,它可以从管理和报告 API 获取几十个谷歌用户的谷歌分析元数据和统计信息。

在很长一段时间(几个月)内一切正常,但昨天晚上 21:00 UTC 左右,其中一个(用户)开始收到此错误:500、后端错误或有时是内部错误

他的管理 API 请求:
获取所有帐户响应为 200,其中包含 360 个项目
获取所有 WebProperties 响应为 200,包含 170 个项目
获取所有配置文件响应为 200,包含 1000 个项目
获取所有目标响应为 500 错误 [应该是 1000 项,但现在出错]

目前(超过 24 小时)仍然出现此错误。

顺便说一下,这个客户的报告 API 也可以正常工作(对于他的一个视图/个人资料)

我研究了什么:
我尝试不是为所有人请求目标,而是为一个特定帐户>特定属性>特定配置文件请求目标,并且 api 响应为 200 OK!在这种情况下!
所有配置文件的早期请求目标在很长一段时间内都运行良好!但不是今天。

【问题讨论】:

  • 如果您的所有帐户 ID 都出现一致的 500 错误,请提交并Bug report。请求详细信息和请求响应。
  • 我也收到了相同的目标响应,它开始于世界标准时间 12:00 之前的某个时间。 asp.net 商店在这里,我们使用的是 nuget 版本 1.16.0.582 中的 Google.Apis.Analytics.v3 包,但它看起来真的是在 google 端。
  • 马特,你!我在这里做了一个错误报告issuetracker.google.com/issues/36546357

标签: google-api google-analytics-api


【解决方案1】:

500 和 503 错误基本上是服务器加载错误。正在处理您的请求的服务器需要很长时间才能处理您的请求,因此它超时了。您需要记住,您不是唯一访问服务器的人。它很可能是另一个开发人员正在运行的东西,它减慢了您的请求并导致错误。

您应该实现exponential backoff 并再次尝试请求。

最重要的提示:不要在你与所有设置了 cron 作业的人竞争的时间运行。同样在美国西部午夜运行时,每个人的配额都重置了,这也不是访问服务器的好时机。

更新:

团队建议您在问题跟踪器here 上发布问题。管理 API 团队可以看看。从 Google Developer 控制台添加您的帐户信息。我会添加有问题的个人资料。将问题链接回此处,我会将其发送给他们。

如果您正在运行以下请求,我认为您应该停止这并不意味着返回大量数字。

analytics.Management.Goals.List("~all", "~all", "~all");

【讨论】:

  • DalmTo,当我遇到 500 或 503 时,我只重试一次,但对这个用户没有帮助(对其他人有帮助)。我会尝试更改我的代码以多次重试,我很快就会回到这里并提供有关结果的消息...我应该提醒您,这个问题持续 24 小时,甚至没有一个 200 响应!我对每个用户的更新周期是延迟 10 分钟(每小时 6 次)
  • 查看如何实现指数退避。但是,如果这是今天刚刚发生的事情,那么我会倾向于它是您的用户连接到的服务器上的中断。看起来今天有几次中断status.cloud.google.comstatus.cloud.google.com,但很难说它可以链接到哪个系统。如果添加退避没有帮助并且明天仍然无法正常工作,我可以联系团队,看看他们是否能检测到任何东西。
  • DalmTo,我已经在两个月前实施了指数退避。它一直都很好,现在对其他人也一样。
  • 这对我来说听起来像是停电。该单个用户的本地内容。这不会是我第一次看到这种情况。但是我可以发送一封电子邮件,但我们要过一段时间才能收到他们的消息,他们是美国西部。
  • 我收到了团队的回复。
【解决方案2】:

因此,我凭直觉找到了一个似乎可行的解决方案。 这会失败(非常简单):

var goalsList = analytics.Management.Goals.List("~all", "~all", "~all");
var goalsResult = goalsList.Execute();

这一切都让我想起了我在我们平台上遇到的一些问题。所以我试着限制我的目标要求。第一个是 accountId,所以我得到了我们所有的帐户,然后遍历它们,为每个帐户提取一组目标。

这似乎有效。

...
var accountIds = GetAccountIds(analytics); 
foreach (var a in accountIds)
{
     do
     {
         var goalsList = analytics.Management.Goals.List(a, "~all", "~all");
...

【讨论】:

  • 约瑟夫,你的例子真的可以工作,但在这种情况下,要求太多了!我的用户现在有 360 个帐户,Goals.List("~all", "~all", "~all") 我提出了一个请求,而不是每个 accountId 的 360 个请求。
  • ("~all", "~all", "~all") 对于大客户来说从来都不是一个好主意。
  • DalmTo,文档中没有这个想法,甚至没有一个字,但我会尝试将他的帐户分成两半,好吧......看起来不舒服,但我会尝试一下。
  • Felsher70,我理解你为什么认为发出这么多请求不是一个好主意,但谷歌似乎只是阻止了 Goals.List("~all", "~all", " 〜所有“)现在。我猜是因为有些工作太大了。我继承了我正在使用的代码库,或者我会在需要时尝试提取每个属性的目标。这对我有用,只需编写循环并让您的软件正常工作。我能够验证我正在获取所有数据。
【解决方案3】:

问题已由谷歌团队解决!谢谢!

【讨论】:

    猜你喜欢
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-19
    • 2016-01-10
    • 2016-08-07
    相关资源
    最近更新 更多