【问题标题】:Amazon EC2 Cloudwatch python plugin boto not returning metricsAmazon EC2 Cloudwatch python插件boto不返回指标
【发布时间】:2015-02-15 02:56:43
【问题描述】:

我正在使用 python 的 boto 插件来查询 Amazon 的 CloudWatch EC2。我正在尝试获取各个主机的指标。我首先构建一个我想要查询的主机和指标列表,然后进行查询。我严格按照文档进行操作,但我不确定为什么使用 ElastiCache 我没有收到任何数据返回,但我有另一个针对 ELB 的脚本,它返回查询的数据就好了。

我正在查询的集群没有返回数据。如果我只是返回为每个我验证过的主机记录的所有指标的列表,那么每个集群都有数据。因此,我已将其缩小到我的查询或模块的问题。

每个集群节点返回的统计信息都是空白的,并且没有给出错误。

[] GetMisses ctlive-master

[] CmdGet ctlive-master

[] CPUUtilization ctlive-master

[] CmdSet ctlive-master

import boto.ec2.cloudwatch
import datetime
import os
import subprocess

end = datetime.datetime.utcnow()
start = end - datetime.timedelta(minutes=5)
period = 300

conn = boto.ec2.cloudwatch.connect_to_region("us-east-1",)

metrics = conn.list_metrics()

metric_list = [ 'GetMisses',
                'CmdGet',
                'CPUUtilization',
                'CmdSet']

instance_list = {}

for metric in metrics:
    try: 
        instance_list[metric.dimensions['DBInstanceIdentifier'][0]] = {'Name': metric.dimensions['DBInstanceIdentifier'][0]}
    except:
        continue

for instance in instance_list:
    for metric in metric_list:
        instance = str(instance)
        metric_return = conn.get_metric_statistics(period, start,end,metric,'AWS/ElastiCache','Sum',dimensions={'CacheClusterId':instance})
        print metric_return, metric, instance 

亚马逊开发工具包链接 http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/elasticache-metricscollected.html

boto SDK

http://boto.readthedocs.org/en/latest/cloudwatch_tut.html

【问题讨论】:

  • 我的问题不清楚吗?或者没有人有答案。

标签: python amazon-web-services amazon-ec2 boto


【解决方案1】:

这是问题的答案。当您尝试查询 ElastiCache 时,您还需要包含 CacheNodeId。

{'CacheClusterId':cluster_name,'CacheNodeId':cluster_id})

def get_metric(cluster_name, cluster_id, metric, warning, critical):
    end = datetime.datetime.utcnow()
    start = end - datetime.timedelta(minutes=5)
    period = 300

    conn = boto.ec2.cloudwatch.connect_to_region("us-east-1")    

    if 'CPU' in metric:
        CPU = conn.get_metric_statistics(period, start, end, 'CPUUtilization','AWS/ElastiCache', 'Average', dimensions={'CacheClusterId':cluster_name,'CacheNodeId':cluster_id})

        if CPU[0]['Average'] < warning:
            print ('CPU Utilization for host %s is within limits|cpu_usage=%s' % (cluster_name, CPU[0]['Average']))
            sys.exit(0)
        if CPU[0]['Average'] >= warning and CPU[0]['Average'] < critical:
            print ('CPU Utilization for host %s is within the warning range|cpu_usage=%s' % (cluster_name, CPU[0]['Average']))
            sys.exit(1)
        if CPU[0]['Average'] >= critical:
            print ('CPU Utilization for host %s is within the critical range|cpu_usage=%s' % (cluster_name, CPU[0]['Average']))
            sys.exit(2)

    elif 'Misses' in metric:
        GetMisses = conn.get_metric_statistics(period, start, end, 'GetMisses','AWS/ElastiCache', 'Sum', dimensions={'CacheClusterId':cluster_name,'CacheNodeId':cluster_id})
        if GetMisses[0]['Sum'] < warning:
            print ('GetMisses for host %s is within limits|command_misses=%s' % (cluster_name, GetMisses[0]['Sum']))
            sys.exit(0)
        if GetMisses[0]['Sum'] >= warning and GetMisses[0]['Sum'] < critical:
            print ('GetMisses for host %s is within the warning range|command_misses=%s' % (cluster_name, GetMisses[0]['Sum']))
            sys.exit(1)
        if GetMisses[0]['Sum'] >= critical:
            print ('GetMisses for host %s is within the critical range|command_misses=%s' % (cluster_name, GetMisses[0]['Sum']))
            sys.exit(2)

    elif 'Set' in metric:
        CmdSet = conn.get_metric_statistics(period, start, end, 'CmdSet','AWS/ElastiCache', 'Sum', dimensions={'CacheClusterId':cluster_name,'CacheNodeId':cluster_id})
        if CmdSet[0]['Sum'] < warning:
            print ('CmdSet for host %s is within limits|command_set=%s;' % (cluster_name, CmdSet[0]['Sum']))
            sys.exit(0)
        if CmdSet[0]['Sum'] >= warning and CmdSet[0]['Sum'] < critical:
            print ('CmdSet for host %s is within the warning range|command_set=%s;' % (cluster_name, CmdSet[0]['Sum']))
            sys.exit(1)
        if CmdSet[0]['Sum'] >= critical:
            print ('CmdSet for host %s is within the critical range|command_set=%s;' % (cluster_name, CmdSet[0]['Sum']))
            sys.exit(2)

    elif 'Get' in metric:
        CmdGet = conn.get_metric_statistics(period, start, end, 'CmdGet','AWS/ElastiCache', 'Sum', dimensions={'CacheClusterId':cluster_name,'CacheNodeId':cluster_id})
        if CmdGet[0]['Sum'] < warning:
            print ('CmdGet for host %s is within limits|command_get=%s;' % (cluster_name, CmdGet[0]['Sum']))
            sys.exit(0)
        if CmdGet[0]['Sum'] >= warning and CmdGet[0]['Sum'] < critical:
            print ('CmdGet for host %s is within the warning range|command_get=%s;' % (cluster_name, CmdGet[0]['Sum']))
            sys.exit(1)
        if CmdGet[0]['Sum'] >= critical:
            print ('CmdGet for host %s is within the critical range|command_get=%s;' % (cluster_name, CmdGet[0]['Sum']))
            sys.exit(2)

def main():

    parser=argparse.ArgumentParser(description="Amazon ElastiCache Metrics")
    parser.add_argument('-W',action="store",dest="warning",type=float,required=True)
    parser.add_argument('-C',action="store",dest="critical",type=float,required=True)
    parser.add_argument('-M',action="store",dest="metric",type=str,required=True)
    parser.add_argument('-H',action="store",dest="host",type=str,required=True)
    parser.add_argument('-I',action="store",dest="host_id",type=str,required=True)
    args=parser.parse_args()
    get_metric(args.host, args.host_id, args.metric, args.warning, args.critical)
    #CPU, Misses, Set,Get

if __name__ == "__main__":
  main()                            

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-21
    • 2013-02-03
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 2022-07-14
    相关资源
    最近更新 更多