이 질문에 대한 대답입니다. 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()
내 질문은 명확하지 않다? 아니면 누구도 대답을하지 못합니다. –