是否可以通过API调用来获取应用程序引擎实例I';我在跑步?

是否可以通过API调用来获取应用程序引擎实例I';我在跑步?,api,google-app-engine,instances,Api,Google App Engine,Instances,这是一个非常简单的问题,真的。我想向datadog报告正在运行的实例的数量,以及我的一些其他统计数据 具有讽刺意味的是,我在谷歌网页搜索中搜索如何在谷歌应用程序引擎中做一些事情,每次都会得到最糟糕的结果:谷歌应用程序引擎文档页面 我同意很难找到,我能找到的最接近的就是这个 google.appengine.api.modules.modules.get_num_instances(module=None, version=None)source 返回为给定模块设置的实例数 版本 这仅对固定模块

这是一个非常简单的问题,真的。我想向datadog报告正在运行的实例的数量,以及我的一些其他统计数据


具有讽刺意味的是,我在谷歌网页搜索中搜索如何在谷歌应用程序引擎中做一些事情,每次都会得到最糟糕的结果:谷歌应用程序引擎文档页面

我同意很难找到,我能找到的最接近的就是这个

google.appengine.api.modules.modules.get_num_instances(module=None, version=None)source
返回为给定模块设置的实例数 版本

这仅对固定模块有效,对于自动缩放的模块将引发错误。将来可能支持自动缩放模块


顺便说一句,您还可以从StackDriver进行监控,它具有总实例的度量,您还应该能够使用最近发布的应用程序引擎管理API来解决这个问题。admin API的优点在于,它既适用于标准应用程序,也适用于灵活应用程序:

以下是返回给定服务/版本的所有实例的端点:

根据您使用的语言,通常会有一个“GoogleAPI客户端”+语言库形式的很好的包装器


希望这有帮助

如果您试图收集统计数据,您可能希望使用来收集Google已经聚合的timeseries值


特别是,这一名单。例如,
system/instance\u count
是指示应用程序引擎正在运行的实例数的指标。

我讨厌这样的情况,因为问题最终只能得到部分答案,所以这里有一个完整的工作示例。如果您将其粘贴到交互式控制台中,它应该适合您。(别忘了将
versionsId
设置为您的默认应用程序版本。如果您知道如何让它使用默认版本,请发表评论。'default'、'*'、'any'等。都没有da工作。)

通过反复试验严格实现:

import httplib2
import logging
import time
import webapp2

from google.appengine.api.app_identity import app_identity
from googleapiclient.discovery import build
from oauth2client.client import GoogleCredentials

credentials = GoogleCredentials.get_application_default()
service =  build('appengine', 'v1', credentials=credentials)
appsId = app_identity.get_application_id()
version_list = service.apps().services().versions().list(
        servicesId='default', appsId=appsId).execute()

for version in version_list['versions']:
    if not version['id'].startswith('ah-builtin'):
        rpc_result = service.apps().services().versions().instances().list(
                versionsId=version['id'], servicesId='default',
                appsId=appsId).execute()

        if rpc_result:
            instance_list = rpc_result['instances']
        else:
            instance_list = []
        print version['id'], len(instance_list)

啊。在“AppsId”下,他们有一个例子,“apps/myapp/services/default/versions/v1”。他们实际的意思是,他们希望您的应用程序名称位于该字段中,“默认”(或者,如果您在应用程序下部署了其他服务,则为该服务的名称),而应用程序的服务版本位于第三个字段中。文档也没有提到您需要哪些权限。不过,您将在“权限被拒绝”响应中看到这一点。非常典型的云服务草率的文档风格。很高兴听到你能够解决这个问题。我们将查看文档更新。谢谢!我刚刚发布了一个完整的工作代码示例,但是如果我能弄清楚如何获得所有版本的所有实例的列表,甚至只是默认版本,我会被诅咒的。我最近注意到“默认”版本的概念似乎已经从管理控制台中消失了。发生这种情况时,可能别名也消失了?从技术上讲,从来没有“默认”版本(至少据我所知)。不过有一个默认的“服务”。要获取所有版本的所有实例,您需要从版本列表API开始:)我们使用这些API在云SDK中构建
gcloud应用程序版本列表
gcloud应用程序实例列表
。默认版本的剩余部分仍然存在(例如,类似于默认版本的URL是os.Enviro中的一个键。)作为一个功能请求:我可以在实例列表api调用中为versionsID或servicesID使用“*”,并返回相应的列表。(以及api页面上的相关文档)