Skip to content

Commit e69640d

Browse files
pushing changes
1 parent b204621 commit e69640d

File tree

2 files changed

+85
-0
lines changed

2 files changed

+85
-0
lines changed

commands/devops/ec2_metrics.py

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import click
2+
import boto3
3+
import sys
4+
from pathlib import Path
5+
from botocore.exceptions import NoCredentialsError, PartialCredentialsError
6+
from datetime import datetime, timedelta
7+
8+
# Get current script directory
9+
currentdir = Path(__file__).resolve().parent
10+
# Get parent directory
11+
parentdir = currentdir.parent
12+
# Add parent directory to sys.path
13+
sys.path.insert(0, str(parentdir))
14+
15+
# import logger after specifying root/parent path
16+
import logger
17+
18+
# ====================
19+
20+
import boto3
21+
from datetime import datetime, timedelta, timezone
22+
23+
# Initialize AWS clients
24+
ec2 = boto3.client("ec2")
25+
cloudwatch = boto3.client("cloudwatch")
26+
27+
# Get all running EC2 instances
28+
response = ec2.describe_instances(Filters=[{"Name": "instance-state-name", "Values": ["terminated"]}])
29+
30+
# Extract instance IDs
31+
instances = []
32+
for reservation in response["Reservations"]:
33+
for instance in reservation["Instances"]:
34+
instances.append(instance["InstanceId"])
35+
36+
# Function to get CloudWatch metrics
37+
def get_metric(instance_id, metric_name, namespace="AWS/EC2", statistic="Average"):
38+
response = cloudwatch.get_metric_statistics(
39+
Namespace=namespace,
40+
MetricName=metric_name,
41+
Dimensions=[{"Name": "InstanceId", "Value": instance_id}],
42+
StartTime=datetime.now(timezone.utc) - timedelta(minutes=30), # Increased time window
43+
EndTime=datetime.now(timezone.utc),
44+
Period=300, # 5-minute intervals
45+
Statistics=[statistic]
46+
)
47+
datapoints = response.get("Datapoints", [])
48+
return datapoints[-1][statistic] if datapoints else "No Data"
49+
50+
# Fetch and print metrics for each instance
51+
for instance_id in instances:
52+
cpu_utilization = get_metric(instance_id, "CPUUtilization")
53+
disk_read_bytes = get_metric(instance_id, "DiskReadBytes")
54+
disk_write_bytes = get_metric(instance_id, "DiskWriteBytes")
55+
network_in = get_metric(instance_id, "NetworkIn")
56+
network_out = get_metric(instance_id, "NetworkOut")
57+
status_check = get_metric(instance_id, "StatusCheckFailed")
58+
59+
print(f"Instance: {instance_id}")
60+
print(f" CPU Utilization: {cpu_utilization}%")
61+
print(f" Disk Read (Bytes): {disk_read_bytes}")
62+
print(f" Disk Write (Bytes): {disk_write_bytes}")
63+
print(f" Network In (Bytes): {network_in}")
64+
print(f" Network Out (Bytes): {network_out}")
65+
print(f" Instance Status Check Failed: {status_check}")
66+
print("-" * 40)
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import boto3
2+
3+
# Create an EC2 resource
4+
ec2 = boto3.client("ec2")
5+
6+
# Retrieve running instances
7+
response = ec2.describe_instances(Filters=[{"Name": "instance-state-name", "Values": ["running"]}])
8+
9+
# Extract instance IDs
10+
instances = []
11+
# Iterates over each reservation block.
12+
for reservation in response["Reservations"]:
13+
# Iterates over each instance inside a reservation.
14+
for instance in reservation["Instances"]:
15+
# adds the Instance ID to the instances list.
16+
instances.append(instance["InstanceId"])
17+
18+
# Print the active instance IDs
19+
print("Running Instances:", instances)

0 commit comments

Comments
 (0)