如何使用命令行获取EC2内存利用率(aws cli)

时间:2018-12-14 09:08:05

标签: amazon-web-services amazon-ec2 aws-cli

我正在尝试使用aws cli获取EC2内存利用率,但我发现EC2MemoryUtilization无法用作指标。我在ec2实例中安装了cloudwatch代理,并为mem_used_percent创建了一个仪表板。

现在,我想以编程方式消耗已使用的内存数据点。我可以找到CPUUtilization,但找不到任何有关内存利用率的信息。

在这方面的任何帮助都是有帮助的。谢谢!

1 个答案:

答案 0 :(得分:0)

此python脚本将系统内存指标推送到自定义名称空间中的cloudwatch。在crontab中安排脚本以每1分钟或5分钟执行一次,以绘制相对于时间的系统内存指标。确保分配给虚拟机的IAM角色具有足够的特权,可将指标数据放入cloudwatch。

#!/usr/bin/env python
import psutil
import requests
import json
import os
import boto3

get_memory = psutil.virtual_memory()
free_memory = get_memory.free/(1024*1024*1024)
print "Free Memory: ", free_memory, "GB"


headers = {'content-type': 'application/json'}
req = requests.get(url='http://169.254.169.254/latest/meta-data/iam/security-credentials/cloudwatch_access', headers=headers)
res = json.loads(req.text)

AccessKeyId = res['AccessKeyId']
SecretAccessKey = res['SecretAccessKey']
Token = res['Token']
Region = "ap-south-1"

os.environ["AWS_ACCESS_KEY_ID"] = AccessKeyId
os.environ["AWS_SECRET_ACCESS_KEY"] = SecretAccessKey
os.environ["AWS_SESSION_TOKEN"] = Token
os.environ["AWS_DEFAULT_REGION"] = Region

namespace = 'mynamespace'
dimension_name = 'my_dimension_name'
dimension_value = 'my_dimension_value'

cloudwatch = boto3.client('cloudwatch')
cloudwatch.put_metric_data(
  MetricData=[
    {
      'MetricName': 'Free Memory',
      'Dimensions': [
        {
          'Name': dimension_name,
          'Value': dimension_value
        },
      ],
      'Unit': 'Gigabytes',
      'Value': free_memory
    },
  ],
  Namespace=namespace
)