Skip to content

Instantly share code, notes, and snippets.

@malfet
Created March 21, 2023 16:20
Show Gist options
  • Save malfet/ef979f7a34ec0494abf95f95d3864774 to your computer and use it in GitHub Desktop.
Save malfet/ef979f7a34ec0494abf95f95d3864774 to your computer and use it in GitHub Desktop.
Query A100 AWS nodes CPU utilization
import boto3
import pandas as pd
from datetime import datetime, timedelta
from typing import Optional
cloudwatch = boto3.client("cloudwatch")
ec2 = boto3.resource("ec2")
def ec2_get_instances(filter_name, filter_value):
return ec2.instances.filter(Filters=[{'Name': filter_name,
'Values': [filter_value]}])
def ec2_instances_of_type(instance_type='t4g.2xlarge'):
return ec2_get_instances('instance-type', instance_type)
def get_instance_name(instance) -> Optional[str]:
if instance.tags is None:
return None
for tag in instance.tags:
if tag['Key'] == 'Name':
return tag['Value']
return None
def get_cpu_utilization(instance_id = "i-02e8329783a0e77b5",
period=4*3600,
delta=timedelta(days=7)):
now = datetime.now().replace(microsecond=0, second=0, minute=0)
response = cloudwatch.get_metric_statistics(
Namespace='AWS/EC2',
MetricName='CPUUtilization',
Dimensions=[
{
'Name': 'InstanceId',
'Value': instance_id,
},
],
StartTime=now - delta,
EndTime=now,
Period=period,
Statistics=[
'Average',
],
Unit='Percent'
)
return pd.DataFrame({"timestamp": [pd.to_datetime(x["Timestamp"]) for x in response["Datapoints"]],
f"percent-{instance_id}": [x["Average"] for x in response["Datapoints"]]}).sort_values("timestamp", ignore_index=True)
def main() -> None:
p24d_instances = ec2_instances_of_type("p4d.24xlarge")
combined = None
for instance in p24d_instances:
print(instance.id, get_instance_name(instance))
df = get_cpu_utilization(instance.id)
df.to_csv(f"a100-utilization-{instance.id}.csv")
combined = combined.merge(df,how="outer") if combined is not None else df
print(df)
combined.to_csv("a100-utilization-combined.csv")
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment