الوحدة 4 · بناء شيء حقيقي
المراقبة عبر CloudWatch والمراجعة بإطار Well-Architected
13 دقراءة 4 داملأ الفراغات
الدرس في لمحة
راقب Lantern في الإنتاج عبر مقاييس CloudWatch وسجلاته وإنذاراته، ثم راجع التصميم كله وفق ركائز Well-Architected الست مع وضع تحسين التكلفة نصب عينيك.
- 1المقاييس: ما الذي يحدث
- 2السجلات: لماذا حدث ذلك
- 3الإنذارات: أخبر إنسانًا
- 4مراجعة Well-Architected
- 5تحسين التكلفة كعادة
لا فيديو هنا، بل الشيء الحقيقي: درس مكتوب وأمثلة قابلة للتشغيل واختبار وتدريب.
أصبح Lantern يعمل في الإنتاج: الموقع على CloudFront، وتأكيدات الحضور على Lambda وDynamoDB، والفعاليات في RDS. على الخادم القديم، كانت “المراقبة” تعني أن يلاحظ أحد المتطوّعين أن الموقع متوقّف. يمنح هذا الدرس Lantern عيونًا، عبر Amazon CloudWatch، ثم يرجع خطوة إلى الوراء ليراجع التصميم كله باستخدام AWS Well-Architected Framework.
المقاييس: ما الذي يحدث
تنشر خدمات AWS المقاييس (metrics) إلى CloudWatch تلقائيًا. يعيش كل مقياس في namespace وله أبعاد (dimensions)، مثل AWS/Lambda مع FunctionName=lantern-rsvp. وهذه الحفنة هي الأهم بالنسبة إلى Lantern:
| الخدمة | المقياس | ما يخبرك به |
|---|---|---|
| Lambda | Errors وThrottles وDuration |
الإخفاقات، وبلوغ حدود السعة، والبطء |
| API Gateway | 5xx و4xx وLatency |
ما عاشه المستخدمون فعلًا |
| DynamoDB | ThrottledRequests |
الطلبات التي رفضها الجدول |
| CloudFront | 5xxErrorRate، وCacheHitRate (مقياس إضافي تفعّله بنفسك) |
صحة الحافة ومدى نجاح التخزين المؤقت |
السجلات: لماذا حدث ذلك
كل ما تكتبه دالة Lambda إلى stdout يصل إلى CloudWatch Logs، في مجموعة السجلات /aws/lambda/lantern-rsvp. حوّل صيغة سجلات الدالة إلى JSON في إعدادات التسجيل الخاصة بها، وسجّل كائنات بدلًا من جمل، وستستطيع الاستعلام عنها لاحقًا عبر CloudWatch Logs Insights:
fields @timestamp, level, message, eventId
| filter level = "ERROR"
| sort @timestamp desc
| limit 20aws logs put-retention-policy \
--log-group-name /aws/lambda/lantern-rsvp --retention-in-days 30الإنذارات: أخبر إنسانًا
المقياس الذي لا ينظر إليه أحد مجرد معلومة عابرة. الإنذار (alarm) يراقب مقياسًا واحدًا مقابل حدّ معيّن، ويغيّر حالته حين يُتجاوز الحد، فيرسل إشعارًا إلى topic في Amazon SNS يرسل بريدًا إلى القائمين على المشروع:
aws cloudwatch put-metric-alarm --alarm-name lantern-rsvp-errors \
--namespace AWS/Lambda --metric-name Errors \
--dimensions Name=FunctionName,Value=lantern-rsvp \
--statistic Sum --period 300 --evaluation-periods 1 \
--threshold 5 --comparison-operator GreaterThanOrEqualToThreshold \
--treat-missing-data notBreaching \
--alarm-actions arn:aws:sns:eu-west-1:111122223333:lantern-alertsخمسة أخطاء في خمس دقائق تستدعي أحدهم؛ أما ليلة خاملة، بلا بيانات على الإطلاق، فلا. يبدأ Lantern بثلاثة إنذارات: أخطاء Lambda، واستجابات 5xx من API Gateway، وحالات الـ throttling في DynamoDB. إنذارات أقل وذات معنى أفضل من إنذارات كثيرة مزعجة يتعلّم الناس تجاهلها.
مراجعة Well-Architected
AWS Well-Architected Framework قائمة AWS المرجعية لأسئلة التصميم، مجمّعة في ست ركائز (pillars). وتأخذك أداة AWS Well-Architected Tool المجانية في الـ console عبرها خطوة خطوة. إليك أول مراجعة لـ Lantern، بملاحظة واحدة لكل ركيزة:
| الركيزة | ملاحظة في Lantern | الإجراء |
|---|---|---|
| التميّز التشغيلي | عمليات النشر سلسلة من الأوامر اليدوية | اكتبها في سكربتات؛ ثم البنية التحتية ككود |
| الأمان | ما زال أحد المتطوّعين يستخدم مستخدم IAM | انقل الجميع إلى IAM Identity Center |
| الموثوقية | RDS بنمط Multi-AZ؛ وجدول تأكيدات الحضور بلا point-in-time recovery | فعّل PITR |
| كفاءة الأداء | دالة تأكيد الحضور بذاكرة 128 MB تستغرق 900 ms | جرّب 512 MB؛ غالبًا أسرع وبتكلفة مماثلة |
| تحسين التكلفة | instance الترحيل في EC2 خاملة منذ الانتقال | خذ snapshot ثم أنهِها |
| الاستدامة | الدالة تعمل على x86 | انتقل إلى arm64 (Graviton) |
تحسين التكلفة كعادة
التكلفة حاضرة في كل درس من هذه الدورة؛ وهي هنا قائمة مرجعية تطبّقها على كل حساب:
- احذف الخامل. الـ instances القديمة، والـ volumes غير المرفقة في EBS، وعناوين Elastic IP غير المستخدمة، وبوابات NAT المنسيّة.
- اضبط الحجم المناسب. استخدم المقاييس، لا التخمين، لاختيار أحجام الـ instances والدوال.
- استخدم نموذج التسعير الصحيح. Savings Plans للحد الأدنى الثابت، وSpot للعمل الدفعي القابل للمقاطعة، وserverless للعمل المتقطّع.
- دع البيانات تتقادم وتُحذف. قواعد دورة الحياة في S3 وفترات الاحتفاظ بالسجلات.
- أبقِ الزيارات محلية. نقاط النهاية من نوع gateway لـ S3 وDynamoDB؛ وCloudFront أمام كل ما هو عام.
- ضع الوسوم وانظر. ضع على كل مورد الوسم
project=lantern، وفعّله لتوزيع التكاليف، وافتح AWS Cost Explorer كل شهر. تنبيه الميزانية من الدرس الثالث شبكة أمان، لا خطة.
هذا هو الانتقال كله. انتقل Lantern من خادم واحد هشّ إلى مجموعة من القطع المُدارة، لكلٍّ منها مالك، وحدود صلاحيات، وإنذار، وسعر تستطيع تفسيره. أصبحت الآن تستطيع إعداد حساب بأمان، وقراءة سياسات IAM وكتابتها، واختيار الخدمات الأساسية الصحيحة، ونشر حمل عمل حقيقي وتشغيله، مع تصميم التكلفة والأمان من الأساس بدلًا من إلحاقهما في النهاية.
أهم النقاط
- يجمع CloudWatch المقاييس والسجلات والإنذارات لخدمات AWS تلقائيًا؛ وتكتب Lambda في مجموعة السجلات /aws/lambda/
. - يراقب الإنذار (alarm) مقياسًا واحدًا مقابل حدّ معيّن ويرسل إشعارًا إلى topic في Amazon SNS، الذي يرسل بريدًا إلى الأشخاص القادرين على التصرّف.
- مجموعات السجلات الجديدة تحتفظ بالبيانات إلى الأبد افتراضيًا، لذا اضبط فترة احتفاظ لكل مجموعة سجلات كي تضع سقفًا لتكاليف التخزين.
- لإطار Well-Architected ست ركائز، هي التميّز التشغيلي والأمان والموثوقية وكفاءة الأداء وتحسين التكلفة والاستدامة.
- تحسين التكلفة عادة قوامها حذف الموارد الخاملة، وضبط الأحجام المناسبة، واستخدام نموذج التسعير الصحيح، ووسم الموارد (tagging) كي ترى كم يكلّف كل شيء.