是否可以通过 API 调用来获取我 运行 的 App Engine 实例数?

Is there an API call I can make to get the number of App Engine Instances I'm running?

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

具有讽刺意味的是,我在 Google 网络搜索中搜索如何在 Google App Engine 中执行某些操作,但每次都得到最糟糕的结果: Google App Engine 文档页面。

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

google.appengine.api.modules.modules.get_num_instances(module=None, version=None)source

Return the number of instances that are set for the given module version.

仅对固定模块有效,自动缩放模块会报错。以后可能会支持自动缩放模块。

https://cloud.google.com/appengine/docs/python/refdocs/google.appengine.api.modules.modules

顺便说一下,您还可以从 StackDriver 进行监控,它具有总实例的指标

您还应该能够使用最近发布的 GA App Engine Admin API 来解决这个问题。 admin API 的好处在于它适用于标准和灵活: https://cloud.google.com/appengine/docs/admin-api/

这是 returns 给定 service/version 的所有实例的端点:

https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1/apps.services.versions.instances/list

根据您使用的语言,通常有一个 "Google API client" + 语言库形式的很好的包装器。

希望对您有所帮助!

如果您正在尝试收集统计信息,您可能希望使用 Stackdriver Monitoring API 来收集 Google 已经汇总的时间序列值。

特别是 App Engine Metrics is here 的列表。例如,system/instance_count 是指示 App Engine 实例数量的指标 运行。

我讨厌 SO 问题只得到部分答案,所以这里有一个完整的工作示例。如果您将它粘贴到您的交互式控制台,它应该适合您。 (不要忘记将 versionsId 设置为您的默认应用程序版本。如果您知道我如何使用默认版本,请 post 发表评论。'default', '*', 'any', 等都不是 da workie.)

通过反复试验严格实现:

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)