Amazon CloudWatch सोप्या भाषेत: Metrics, Namespaces, Alarms आणि SNS Email Alerts
How to Set Up a CloudWatch CPU Alarm with SNS in AWS मध्ये आपण email पाठवणारा एक CPU alarm बघितला. हा chapter त्याच्या पुढचा आहे. आधी एक खरी गोष्ट. मग metric म्हणजे काय, metrics कुठे ठेवले जातात (namespaces), AWS ते किती वेळाने गोळा करतं (basic vs detailed monitoring), आणि alarm चं प्रत्येक setting: state, period, threshold, evaluation periods आणि missing data. शेवटी SNS email असलेला alarm आधी console मधून आणि मग AWS CLI ने बनवायचा.
या chapter मध्ये तुम्ही काय शिकाल
- CloudWatch म्हणजे काय, एका sale-day च्या गोष्टीतून
- Metric, namespace, dimension आणि statistic सोप्या शब्दांत
- Basic (5 min) vs detailed (1 min) monitoring, आणि RAM व disk साठी agent का लागतो
- Alarm states OK, ALARM, INSUFFICIENT_DATA
- Period, threshold, evaluation periods, datapoints to alarm, missing data
- पूर्ण lab: SNS topic, email, alarm, test, cleanup
1. Sale च्या दिवसाची गोष्ट
रात्रीचे 12 वाजलेत. Flipkart Big Billion Days सारखा मोठा sale सुरू होतो. एकाच मिनिटात लाखो लोक app उघडतात.
Web servers busy होतात. CPU 20% वरून 95% वर जातो. Pages slow होतात. काही users ना errors दिसतात.
Team ला लगेच तीन उत्तरं हवी असतात: काय होतंय? (numbers), कोणाला कळायला हवं? (alerts) आणि का झालं? (logs). CloudWatch हे तिन्ही एकाच ठिकाणी देतं.
2. Amazon CloudWatch म्हणजे काय?
हे का लागतं?
50 servers रात्रभर कोणीही बघत बसू शकत नाही. आपल्यासाठी लक्ष ठेवणारं आणि काही चुकलं तरच ओरडणारं tool हवं.
हे काय आहे?
Amazon CloudWatch ही AWS ची monitoring service आहे. गाडीचा dashboard समजा. तो speed दाखवतो (metrics), warning light लावतो (alarms) आणि प्रवासाची नोंद ठेवतो (logs).
| भाग | काय करतो | उदाहरण |
|---|---|---|
| Metrics | वेळेनुसार numbers | CPUUtilization = 72% |
| Alarms | एक metric बघून action घेतो | CPU > 80% 10 min → email |
| Logs | Apps आणि servers च्या text lines | nginx access.log |
| Dashboards | एकाच screen वर graphs | 3 servers चा CPU एकत्र |
| Events (EventBridge) | बदलावर किंवा वेळेवर react | सकाळी 9 ला EC2 start |
3. Metrics, namespaces, dimensions आणि statistics
हे का लागतं?
AWS हजारो numbers गोळा करतं. नावं आणि folders नसतील तर हवा तो number कधीच सापडणार नाही.
हे काय आहे?
- Metric: पुन्हा पुन्हा मोजलेला एक number. उदा.
CPUUtilization. - Datapoint: वेळेसोबत एक value. उदा. 10:05 ला 72%.
- Namespace: एका service च्या metrics चा folder. उदा.
AWS/EC2,AWS/EBS,CWAgent. - Dimension: कोणत्या गोष्टीचा number ते सांगणारं label. उदा.
InstanceId=i-0abc123. - Statistic: अनेक datapoints एकत्र कसे करायचे. Average, Maximum, Minimum, Sum, SampleCount, किंवा p99 सारखा percentile.
उदाहरण: "AWS/EC2 मधला InstanceId=i-0abc123 चा CPUUtilization, 5 minutes चा Average." हे एक वाक्य graph वरची एक line ओळखतं.
| Namespace | उपयोगी metrics | कुठून येतात |
|---|---|---|
| AWS/EC2 | CPUUtilization, NetworkIn, NetworkOut, StatusCheckFailed | EC2, free |
| AWS/EBS | VolumeReadOps, VolumeQueueLength, BurstBalance | EBS |
| AWS/ApplicationELB | RequestCount, TargetResponseTime, HTTPCode_Target_5XX_Count | ALB |
| AWS/RDS | CPUUtilization, FreeStorageSpace, DatabaseConnections | RDS |
| CWAgent | mem_used_percent, disk_used_percent | Server वरचा CloudWatch agent |
Ravindra Bagale's Tip
Average मुळे spikes लपतात. एक server 100% आणि तीन 10% वर असतील तर average 32% येतो. "कुठे आग लागलीये का?" अशा alarms साठी Maximum पण बघा.
4. Basic vs detailed monitoring
हे का लागतं?
Sale मध्ये CPU 2 minutes मध्ये उडी मारू शकतो. दर 5 minutes ला एकच number मिळत असेल तर problem उशिरा दिसतो.
हे काय आहे?
| Basic monitoring | Detailed monitoring | |
|---|---|---|
| किती वेळाने | दर 5 minutes | दर 1 minute |
| खर्च | Free | प्रत्येक metric साठी पैसे |
| चालू | By default | प्रत्येक instance वर enable करायचं |
| कशासाठी | Labs, शांत servers | Production, Auto Scaling, sales |
EC2 ला काय दिसत नाही: RAM आणि disk-space usage. AWS तुमचा server बाहेरून बघतं (doctor नाडी बघतो तसं). Operating system च्या आत डोकावू शकत नाही. mem_used_percent आणि disk_used_percent साठी CloudWatch agent install करावा लागतो. ते अनेक EC2 Instances चे Logs CloudWatch Logs मध्ये कसे पाठवायचे मध्ये आहे.
कसं करायचं (step by step)
- EC2 → Instances उघडा आणि तुमचा instance select करा.
- Actions → Monitor and troubleshoot → Manage detailed monitoring वर click करा.
- Enable tick करा आणि Confirm करा.
- किंवा CLI ने:
aws ec2 monitor-instances --instance-ids i-0abc1234567890def
# expected: "Monitoring": {"State": "pending"} then "enabled"
5. Alarm states, period, threshold आणि evaluation
हे का लागतं?
रात्री 3 वाजता graph काही कामाचा नाही, कारण कोणी बघत नाही. Alarm आपल्यासाठी बघतो. पण चुकीचा alarm एकतर प्रत्येक छोट्या spike ला वाजतो (लोक दुर्लक्ष करायला लागतात) किंवा खूप उशिरा वाजतो. खालचं प्रत्येक setting हेच control करतं.
हे काय आहे?
| State | अर्थ | उदाहरण |
|---|---|---|
| OK | Metric safe line च्या आत आहे | CPU 40% |
| ALARM | Metric पुरेसा वेळ line च्या पलीकडे गेला | CPU 90%, 10 min |
| INSUFFICIENT_DATA | निर्णय घ्यायला data पुरेसा नाही | Instance नुकताच start झाला किंवा stop आहे |
| Setting | सोपा अर्थ | ही value का |
|---|---|---|
| Period | एका time box ची लांबी | Basic monitoring ला 300 s; 60 s फक्त detailed चालू असेल तर, नाहीतर boxes रिकामे राहतात |
| Statistic | एका box चा एक number कसा होतो | Load साठी Average, status checks साठी Maximum |
| Threshold | ती line | 80% मुळे 100% च्या आधी जागा राहते |
| Evaluation periods (N) | किती शेवटचे boxes बघायचे | 5 min चे 3 boxes = 15 min window |
| Datapoints to alarm (M) | त्या N पैकी किती वाईट हवेत | 3 पैकी 2 मुळे एक छोटा spike दुर्लक्षित होतो |
| Missing data | रिकामा box म्हणजे काय | missing (default), notBreaching, breaching किंवा ignore |
उदाहरण 1 (सोपं): period 300, threshold 80, 1 of 1. Value 85. → 5 minutes नंतर ALARM.
उदाहरण 2: period 300, 3 of 3. Values 85, 70, 90. → OK च राहतो, कारण मधला box ठीक आहे.
उदाहरण 3: period 300, 2 of 3. Values 85, 70, 90. → ALARM, कारण 2 boxes 80 च्या वर आहेत.
उदाहरण 4 (missing data): stop केलेला server CPU पाठवत नाही. "missing" ठेवलं तर alarm INSUFFICIENT_DATA मध्ये जातो. "notBreaching" ठेवलं तर OK राहतो. "Server शांत झाला तर सांग" अशा heartbeat alarm साठी "breaching" निवडा.
6. SNS: alarm लोकांपर्यंत कसा पोहोचतो
हे का लागतं?
Alarm ला कळतं काहीतरी चुकलंय, पण तो स्वतः email पाठवू शकत नाही. त्याला messenger लागतो.
हे काय आहे?
Amazon SNS (Simple Notification Service) हा तो messenger. तुम्ही एक topic बनवता (WhatsApp group सारखा). लोक email किंवा SMS ने subscribe करतात. Alarm एकदा post करतो; SNS सगळ्यांना पोहोचवतं.
Ravindra Bagale's Tip
Email subscription "Pending confirmation" मध्येच राहतं जोपर्यंत ती व्यक्ती AWS च्या email मधल्या link वर click करत नाही. तोपर्यंत alarm mail येत नाही. Spam folder पण बघा.
7. Lab: SNS email सह CPU alarm (console आणि CLI)
तुम्हाला एक running EC2 instance (Amazon Linux 2023, t2.micro किंवा t3.micro) आणि तुमचा email लागेल. Region: Asia Pacific (Mumbai) ap-south-1.
Part A: SNS topic आणि email
- SNS console → Topics → Create topic उघडा.
- Type: Standard. का: email ला Standard लागतो; FIFO topics email पाठवत नाहीत.
- Name:
ops-alerts. Create topic करा. - Create subscription करा. Protocol: Email. Endpoint: तुमचा email. Create subscription करा.
- Mailbox उघडा, "AWS Notification - Subscription Confirmation" शोधा, Confirm subscription वर click करा.
- Verify: subscription status Confirmed दिसायला हवं.
Part B: alarm
- CloudWatch → Alarms → All alarms → Create alarm उघडा.
- Select metric → EC2 → Per-Instance Metrics. Instance ID search करा, CPUUtilization tick करा, Select metric करा.
- Statistic: Average. Period: 5 minutes. का: basic monitoring दर 5 minutes ला एक value पाठवतं.
- Threshold type: Static. CPUUtilization Greater than
70. Lab मध्ये 70 का: stress test ने सहज गाठता येतं. - Additional configuration उघडा. Datapoints to alarm:
1out of1. Missing data: Treat missing data as missing. - Next. Alarm state trigger: In alarm. Existing SNS topic:
ops-alerts. - पुन्हा Add notification, OK आणि तोच topic निवडा. का: problem सुटल्याचं पण कळायला हवं.
- Next. Name:
web1-cpu-high. Description:CPU above 70% on web1. Next → Create alarm. - Verify: alarm आधी Insufficient data, मग 5-10 minutes मध्ये OK दिसतो.
Part C: alarm वाजवा
- Instance मध्ये SSH करा.
- Stress tool install करा:
sudo dnf install -y stress-ng
stress-ng --cpu 0 --timeout 900s &
top # expected: stress-ng near 100% CPU; press q to quit
- 5-10 minutes थांबा. Verify: alarm लाल In alarm होतो आणि "ALARM: web1-cpu-high" email येतो.
pkill stress-ngने test थांबवा. Verify: 5-10 minutes नंतर "OK" email येतो.
Part D: हेच AWS CLI ने
TOPIC=$(aws sns create-topic --name ops-alerts --query TopicArn --output text)
aws sns subscribe --topic-arn $TOPIC --protocol email --notification-endpoint you@example.com
# confirm the email, then:
aws cloudwatch put-metric-alarm --alarm-name web1-cpu-high \
--namespace AWS/EC2 --metric-name CPUUtilization \
--dimensions Name=InstanceId,Value=i-0abc1234567890def \
--statistic Average --period 300 --threshold 70 \
--comparison-operator GreaterThanThreshold \
--evaluation-periods 1 --datapoints-to-alarm 1 \
--treat-missing-data missing \
--alarm-actions $TOPIC --ok-actions $TOPIC
aws cloudwatch describe-alarms --alarm-names web1-cpu-high --query 'MetricAlarms[0].StateValue'
# expected: "INSUFFICIENT_DATA" at first, later "OK"
aws cloudwatch set-alarm-state --alarm-name web1-cpu-high --state-value ALARM --state-reason "test"
# expected: an ALARM email within a minute (the next real check sets the state back)
Part E: cleanup
- CloudWatch → Alarms →
web1-cpu-highselect → Actions → Delete. - SNS → Topics →
ops-alerts→ Delete (delete metype करा). - Test instance stop किंवा terminate करा. का: running instance चं billing चालूच राहतं.
aws cloudwatch delete-alarms --alarm-names web1-cpu-high
aws sns delete-topic --topic-arn $TOPIC
8. वेगवेगळ्या stacks साठी alarms
हीच कल्पना कोणत्याही app ला लागू होते. फक्त metric बदलतो.
| Stack | कोणत्या metric वर alarm | साधारण threshold |
|---|---|---|
| nginx / Apache behind ALB | AWS/ApplicationELB HTTPCode_Target_5XX_Count | 5 min मध्ये Sum > 10 |
| Node.js / Python Flask | AWS/ApplicationELB TargetResponseTime | p90 > 1 s |
| Java Spring Boot (JVM heap) | CWAgent mem_used_percent | 15 min > 85% |
| .NET on Windows | CWAgent Memory % Committed Bytes In Use | > 85% |
| PHP / WordPress | AWS/EC2 CPUUtilization | 10 min > 80% |
| MySQL on RDS | AWS/RDS FreeStorageSpace | < 2 GB |
| Go API | AWS/ApplicationELB HealthyHostCount | < 2 |
9. Interview questions
प्र. Basic आणि detailed monitoring मध्ये फरक काय?
Basic दर 5 minutes ला EC2 metrics free पाठवतं. Detailed दर 1 minute ला पाठवतं आणि paid आहे.
प्र. EC2 चा memory usage default ने CloudWatch मध्ये का दिसत नाही?
AWS instance ला फक्त hypervisor च्या बाजूने बघतं. Memory OS च्या आत असते, म्हणून CloudWatch agent लागतो.
प्र. "2 out of 3 datapoints" म्हणजे काय?
शेवटचे 3 periods बघायचे; त्यातले किमान 2 threshold पार गेले तर ALARM.
प्र. Alarm च्या तीन states सांगा.
OK, ALARM आणि INSUFFICIENT_DATA.
घरी करून बघा
- तुमच्या instance वर NetworkOut alarm बनवा, threshold 5 minutes ला 50,000,000 bytes, आणि मोठी file download करून trigger करा.
- CPU alarm 3 पैकी 2 datapoints वर बदला आणि आता वाजायला किती वेळ लागतो ते लिहा.
- झाल्यावर सगळं delete करा.
थोडक्यात सांगायचं तर
- CloudWatch = metrics + alarms + logs + dashboards.
- Metric namespace मध्ये राहतो आणि dimensions ने निवडला जातो.
- Basic = 5 min free, detailed = 1 min paid; RAM आणि disk साठी agent.
- शेवटच्या N पैकी M periods threshold पार गेले की alarm ALARM मध्ये जातो.
- SNS alarm email वर पोहोचवतं; subscription confirm करायला हवं.
सराव Tasks
Thane Housing Society हा ठाणे मधला रिअल इस्टेट व्यवसाय आहे. Mahesh Patwardhan त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे INR मध्ये मोजले जातात आणि AWS resources ap-south-1 Region मध्ये चालतात. खालच्या tasks मध्ये तुम्ही या lesson मध्ये शिकलेलं वापरून त्यांची खरी कामं करता. सगळी नावं, account IDs, IP addresses व numbers सरावासाठी काल्पनिक आहेत.
0 / 11
सोपं Namespace मधले metrics दाखवा
का: Service साठी AWS कोणते metrics गोळा करतो ते पाहा.
काय करायचं: AWS/EC2 namespace मधले metrics दाखवा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
सोपं SNS topic बनवा
का: Topic म्हणजे channel: एकदा publish, सगळ्या subscribers ना मिळतं.
काय करायचं: thanehousing-alerts topic बनवा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
सोपं Firing alarms दाखवा
का: Incident मध्ये आधी ALARM state मधले alarms पाहा.
काय करायचं: फक्त ALARM state असलेले alarms describe करा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
सोपं Instance reboot करा
का: Reboot मध्ये disks व IPs तेच राहतात, stop/start ने public IP बदलू शकतो.
काय करायचं: i-03bcb34b002211a2b instance reboot करा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
सोपं एका topic वर publish
का: Alerting app ला फक्त publish लागतं.
काय करायचं: फक्त arn:aws:sns:ap-south-1:122007437873:thanehousing-alerts वर sns:Publish allow करा.
- { "Version": "2012-10-17", "Statement": [ ... ] } ने सुरू करा.
- प्रत्येक statement मध्ये Effect, Action व Resource लिहा.
- Task ला लागेल तेवढंच द्या (least privilege).
- Double quotes व commas नीट वापरा. Check answer दाबा.
मध्यम Custom metric publish करा
का: Custom metrics ने business numbers वर graph व alarm करता येतो.
काय करायचं: Namespace ThaneHousingSociety/Shop मध्ये OrdersPlaced metric value 21 सह publish करा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
मध्यम Email subscribe करा
का: Email subscribers नी messages मिळण्याआधी confirm link दाबावी लागते.
काय करायचं: ops@thanehousing.in ला email ने arn:aws:sns:ap-south-1:122007437873:thanehousing-alerts वर subscribe करा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
मध्यम Target health तपासा
का: Targets unhealthy असल्यास site 502/503 errors दाखवते.
काय करायचं: arn:aws:elasticloadbalancing:ap-south-1:122007437873:targetgroup/thanehousing-tg/6d0ecf831eec9f09 मधल्या targets चं health दाखवा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
मध्यम Kubernetes LoadBalancer Service
का: LoadBalancer Service ला AWS load balancer मिळतो.
काय करायचं: app: web select करणारी LoadBalancer Service, port 80 → targetPort 8080.
- Task मधल्या top-level keys पासून सुरू करा.
- Child keys 2 spaces ने indent करा (tabs नकोत).
- प्रत्येक property मध्ये task मधली value भरा.
- Check answer दाबा. Keys चा क्रम महत्त्वाचा नाही.
अवघड CPU alarm बनवा
का: Alarm metric पाहतो व users ला कळण्याआधी तुम्हाला कळवतो.
काय करायचं: thanehousing-cpu-high alarm बनवा: AWS/EC2 CPUUtilization, 300 seconds चा Average, 1 evaluation period, GreaterThanThreshold 80, InstanceId=i-03bcb34b002211a2b साठी, arn:aws:sns:ap-south-1:122007437873:thanehousing-alerts ला notify.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
अवघड Alarm ने instance auto-recover करा
का: System check fail झाल्यास recover action instance healthy hardware वर हलवतो.
काय करायचं: thanehousing-recover alarm बनवा: AWS/EC2 StatusCheckFailed_System, 60 s चा Maximum, 2 periods, GreaterThanOrEqualToThreshold 1, InstanceId=i-03bcb34b002211a2b, action arn:aws:automate:ap-south-1:ec2:recover.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
उजळणी, तुलना आणि मुलाखत cards
हा lesson काही मिनिटांत revise करा. Cards phone वर save करा किंवा PNG download करा. प्रत्येक card वरचा QR हा lesson उघडतो.












अजून cards: Ravi Sir's Cards.