2014-12-16 3 views
1

파이썬에 boto 플러그인을 사용하여 Amazon CloudWatch EC2를 쿼리합니다. 개별 호스트에 대한 메트릭을 얻으려고합니다. 우선 쿼리 할 호스트 및 메트릭 목록을 작성하고 쿼리를 작성합니다. 내가 percisely 설명서를 따르고 있는데 ElastiCache를 사용하여 반환 된 데이터가없는 이유를 모르겠지만 ELB에 대한 또 다른 스크립트가 있으며 쿼리 된 데이터를 반환합니다.Amazon EC2 Cloudwatch python 플러그인 boto not metrics

내가 쿼리하는 클러스터에 대해 반환 된 데이터가 없습니다. 방금 확인한 모든 호스트에 대해 모든 메트릭 목록이 반환되면 각 클러스터에 대한 데이터가 있습니다. 따라서 필자는 쿼리 나 모듈에 문제가있는 부분을 좁혔습니다.

반환 된 통계는 모든 클러스터 노드에서 완전히 비어 있으며 오류가 발생하지 않습니다.

[] GetMisses ctlive 마스터

[] CmdGet ctlive 마스터

[] CPUUtilization의 ctlive 마스터

[] CmdSet ctlive 마스터

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 

아마존 SDK 링크 http://docs.aws.amazon.com/AmazonCloudWatch/latest/DeveloperGuide/elasticache-metricscollected.html

의 BOTO SDK

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

+0

내 질문은 명확하지 않다? 아니면 누구도 대답을하지 못합니다. –

답변

0

이 질문에 대한 대답입니다. 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()        
관련 문제