运行应用程序引擎灵活实例的总CPU使用率

时间:2018-04-13 08:04:59

标签: google-app-engine stackdriver app-engine-flexible

我需要根据App Engine Flexible服务的当前CPU利用率在外部系统中做出决策。我可以在Google云端控制台中看到我需要在仪表板图表中使用的确切值/指标,但我没有看到直接,简单的方法从gcloud命令获取此信息。

我还需要知道运行实例的数量,但我想我可以使用gcloud app instances list -s default来获取默认服务中运行实例的列表,然后我可以使用行数方法来获取这个信息很容易。我打算创建一个python函数,它返回一个像(instance_count, cpu_utilization)

这样的元组

如果有人能指导我以 easy 方式获取此功能,我将不胜感激。我目前正在探索StackDriver Monitoring服务以获取相同的信息,但截至目前,它对我来说看起来非常复杂。

1 个答案:

答案 0 :(得分:1)

正如您所说,您可以使用gcloud app instances list -s default命令获取正在运行的实例列表。要检索CPU利用率,请查看此Python Client for Stackdriver Monitoring。列出可用的度量标准类型:

from google.cloud import monitoring
client = monitoring.Client()
for descriptor in client.list_metric_descriptors():
   print(descriptor.type)

度量标准描述符的描述为here。要在过去五分钟内显示GCE实例的利用率:

metric = 'compute.googleapis.com/instance/cpu/utilization'
query = client.query(metric, minutes=5)
print(query.as_dataframe())

在安装之前,不要忘记将google-cloud-monitoring==0.28.1添加到“requirements.txt”。

检查本地运行的代码:

import logging

from flask import Flask
from google.cloud import monitoring as mon

app = Flask(__name__)

@app.route('/')
def list_metric_descriptors():
    """Return all metric descriptors"""
    # Instantiate client 
    client = mon.Client()

    for descriptor in client.list_metric_descriptors():
        print(descriptor.type)
    return descriptor.type

@app.route('/CPU')
def cpuUtilization():
    """Return CPU utilization"""
    client = mon.Client()
    metric = 'compute.googleapis.com/instance/cpu/utilization'
    query = client.query(metric, minutes=5)
    print(type(query.as_dataframe()))    
    print(query.as_dataframe())    
    data=str(query.as_dataframe())
    return data

@app.errorhandler(500)
def server_error(e):
    logging.exception('An error occurred during a request.')
    return """
    An internal error occurred: <pre>{}</pre>
    See logs for full stacktrace.
    """.format(e), 500


if __name__ == '__main__':
    # This is used when running locally. Gunicorn is used to run the
    # application on Google App Engine. See entrypoint in app.yaml.
    app.run(host='127.0.0.1', port=8080, debug=True)