ඔබේ EC2 සර්වර් එකේ CPUUtilization ග්රාෆ් එක 1%‑3% අතර දිගු කාලයක් පෙන්වනවා නම්, බොහෝ වෙලාවට "ඉඩකඩ" කියලා හිතනවා. නමුත් ඒ තොරතුරට පමණක් බලාගෙන තීරණය ගන්නා වරදක් ගණනාවක් ඇත. CloudWatch හි 5‑මිනිත්තු සාමාන්යගත කිරීම, පසුබැසීමේ ඒජන්ට්, හෝ අඩු CPU භාවිතයක් ඇති වැඩ බහුලව සිදුවන අවස්ථා නිසා CPU එක පමණක් මත පදනම්ව ඉඩකඩ බව තීරණය කිරීම වැරදි විය හැක.
ඇයි CPUUtilization එක පමණක් ප්රමාණවත් නොවේ?
- දත්ත තීක්ෂණය (Granularity): සාමාන්ය CloudWatch මට්ටම 5‑මිනිත්තු වේලාවක්, ඒ නිසා කෙටි කාලීන වැඩ බහුලව සිදුවුවත් ඒවා සාමාන්යගත කරයි.
- පසුබැසීමේ ක්රියාකාරකම්: Config management agents, log shippers, container runtimes වැනි ක්රියාකාරකම් CPU එකට සුළු ප්රතිඵලයක් දක්වයි, එය මනුෂ්ය වැඩ නොවුණත් CPU 0 නොවේ.
- වැඩ භාරය ආකෘතිය: DB connection pool, idle web server sockets, lock‑wait වැනි අවස්ථා CPU‑වලින් අඩු පමණක් පෙන්වයි, නමුත් සම්පත් තවමත් භාවිතයේ පවතී.
ඒ නිසා, CPU සහ Network I/O එකතු කරමින් දෙකම එකසේ ඉඩකඩ බව පරීක්ෂා කිරීම වඩා විශ්වාසදායකයි. පහත සඳහන් Python ස්ක්රිප්ට් එක එම අදහස ප්රකාශ කරයි.
දෙකකාරී ඉඩකඩ පරීක්ෂණය – උදාහරණ ස්ක්රිප්ට්
```python import boto3 from datetime import datetime, timedelta cw = boto3.client("cloudwatch") INSTANCE_ID = "i-0123456789abcdef0" LOOKBACK_HOURS = 24 PERIOD = 300 # 5‑minute def get_metric(metric_name, stat="Average"): end = datetime.utcnow() start = end - timedelta(hours=LOOKBACK_HOURS) resp = cw.get_metric_statistics( Namespace="AWS/EC2", MetricName=metric_name, Dimensions=[{"Name": "InstanceId", "Value": INSTANCE_ID}], StartTime=start, EndTime=end, Period=PERIOD, Statistics=[stat], ) return sorted(resp["Datapoints"], key=lambda d: d["Timestamp"]) cpu = get_metric("CPUUtilization") net_in = get_metric("NetworkIn", stat="Sum") net_out = get_metric("NetworkOut", stat="Sum") CPU_THRESHOLD = 2.0 # % NET_THRESHOLD = 50000 # bytes per 5‑minute window idle_windows = 0 for c, nin, nout in zip(cpu, net_in, net_out): low_cpu = c["Average"] < CPU_THRESHOLD low_net = (nin["Sum"] + nout["Sum"]) < NET_THRESHOLD if low_cpu and low_net: idle_windows += 1 total_windows = len(cpu) idle_hours = idle_windows * PERIOD / 3600 print(f"{idle_windows}/{total_windows} five‑minute windows idle on both signals") print(f"roughly {idle_hours:.1f} of {LOOKBACK_HOURS} hours below threshold") ```
මෙම ස්ක්රිප්ට් එක ඔබේ EC2 instance එකේ CPU හා Network traffic දෙකම විශ්ලේෂණය කර, දෙකම නියමිත සීමාවට අඩු නම් ඒ කාලය "ඉඩකඩ" ලෙස ගණන් කරයි. ප්රතිඵලය 24‑පැය කාලය තුළ කොපමණ වේලාව ඉඩකඩ බව දැක්වෙනු ඇත.
ශ්රී ලංකාවට ඇති වැදගත්කම
ශ්රී ලංකාවේ තාක්ෂණික සමාගම්, විශ්වවිද්යාල සිසුන්, සහ ස්වයං රැකියා කරුවන් සඳහා මේ පියවරේ වටිනාකම විශාලයි.
- වියදම් ඉතිරි කිරීම: Cloud සේවා ගාස්තු බොහෝවිට CPU භාවිතය පමණක් නොව, අඛණ්ඩ Network traffic මතද පදනම් වේ. නිවැරදි ඉඩකඩ මැනීමෙන් අත්යවශ්ය නොවන instance‑වලට shutdown හෝ right‑size කිරීමෙන් සෑම මාසයක්ම ආරක්ෂිතව රු. ලක්ෂ ගණනක් ඉතිරි කළ හැක.
- ඉගෙනුම් අවස්ථා: සිසුන්ට AWS CloudWatch, Boto3, Python යන තාක්ෂණික කුසලතා ප්රායෝගිකව අත්හදා බැලීමට, මොන තොරතුරු එකට එකතු කළ යුතුදැයි ඉගෙන ගැනීමට මෙය හොඳ උදාහරණයක්.
- ව්යාපාරික තීරණ ගත කිරීම: මැනුම් දත්ත මත පදනම්ව capacity planning, DevOps automation, සහ CI/CD pipelines වලදී ඉඩකඩ instance‑වල ස්වයංක්රීයව නඩත්තු කිරීමේ සැලසුම් සකස් කළ හැක.
ඉතා සරල Python කේතයක් භාවිතා කරමින්, ඔබේ EC2 පරිසරයේ ඉඩකඩ කාලය නිරවද්යව අගය කර, අධික වියදමෙන් මුදල් බේරා ගත හැක.
අදම මෙම ස්ක්රිප්ට් එක ඔබේ සංවිධානයේ අත්හදා බලන්න; ඔබේ සර්වර් පරිපාලනය තවත් තාරකාවක් වශයෙන් පවත්වන්න.