EduFlow
أساسيات AWS السحابية
⁦0%⁩

الوحدة 4 · بناء شيء حقيقي

المراقبة عبر CloudWatch والمراجعة بإطار Well-Architected

13 دقراءة 4 داملأ الفراغات

الدرس في لمحة

راقب Lantern في الإنتاج عبر مقاييس CloudWatch وسجلاته وإنذاراته، ثم راجع التصميم كله وفق ركائز Well-Architected الست مع وضع تحسين التكلفة نصب عينيك.

  1. 1المقاييس: ما الذي يحدث
  2. 2السجلات: لماذا حدث ذلك
  3. 3الإنذارات: أخبر إنسانًا
  4. 4مراجعة Well-Architected
  5. 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:

Text
fields @timestamp, level, message, eventId
| filter level = "ERROR"
| sort @timestamp desc
| limit 20
Terminal
aws logs put-retention-policy \
  --log-group-name /aws/lambda/lantern-rsvp --retention-in-days 30

الإنذارات: أخبر إنسانًا

المقياس الذي لا ينظر إليه أحد مجرد معلومة عابرة. الإنذار (alarm) يراقب مقياسًا واحدًا مقابل حدّ معيّن، ويغيّر حالته حين يُتجاوز الحد، فيرسل إشعارًا إلى topic في Amazon SNS يرسل بريدًا إلى القائمين على المشروع:

Terminal
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)

تحسين التكلفة كعادة

التكلفة حاضرة في كل درس من هذه الدورة؛ وهي هنا قائمة مرجعية تطبّقها على كل حساب:

  1. احذف الخامل. الـ instances القديمة، والـ volumes غير المرفقة في EBS، وعناوين Elastic IP غير المستخدمة، وبوابات NAT المنسيّة.
  2. اضبط الحجم المناسب. استخدم المقاييس، لا التخمين، لاختيار أحجام الـ instances والدوال.
  3. استخدم نموذج التسعير الصحيح. Savings Plans للحد الأدنى الثابت، وSpot للعمل الدفعي القابل للمقاطعة، وserverless للعمل المتقطّع.
  4. دع البيانات تتقادم وتُحذف. قواعد دورة الحياة في S3 وفترات الاحتفاظ بالسجلات.
  5. أبقِ الزيارات محلية. نقاط النهاية من نوع gateway لـ S3 وDynamoDB؛ وCloudFront أمام كل ما هو عام.
  6. ضع الوسوم وانظر. ضع على كل مورد الوسم project=lantern، وفعّله لتوزيع التكاليف، وافتح AWS Cost Explorer كل شهر. تنبيه الميزانية من الدرس الثالث شبكة أمان، لا خطة.

هذا هو الانتقال كله. انتقل Lantern من خادم واحد هشّ إلى مجموعة من القطع المُدارة، لكلٍّ منها مالك، وحدود صلاحيات، وإنذار، وسعر تستطيع تفسيره. أصبحت الآن تستطيع إعداد حساب بأمان، وقراءة سياسات IAM وكتابتها، واختيار الخدمات الأساسية الصحيحة، ونشر حمل عمل حقيقي وتشغيله، مع تصميم التكلفة والأمان من الأساس بدلًا من إلحاقهما في النهاية.

أهم النقاط

  • يجمع CloudWatch المقاييس والسجلات والإنذارات لخدمات AWS تلقائيًا؛ وتكتب Lambda في مجموعة السجلات /aws/lambda/.
  • يراقب الإنذار (alarm) مقياسًا واحدًا مقابل حدّ معيّن ويرسل إشعارًا إلى topic في Amazon SNS، الذي يرسل بريدًا إلى الأشخاص القادرين على التصرّف.
  • مجموعات السجلات الجديدة تحتفظ بالبيانات إلى الأبد افتراضيًا، لذا اضبط فترة احتفاظ لكل مجموعة سجلات كي تضع سقفًا لتكاليف التخزين.
  • لإطار Well-Architected ست ركائز، هي التميّز التشغيلي والأمان والموثوقية وكفاءة الأداء وتحسين التكلفة والاستدامة.
  • تحسين التكلفة عادة قوامها حذف الموارد الخاملة، وضبط الأحجام المناسبة، واستخدام نموذج التسعير الصحيح، ووسم الموارد (tagging) كي ترى كم يكلّف كل شيء.

قراءات إضافية

تحقّق من فهمك

4 أسئلة

السؤال 1 من 4

يريد القائمون على Lantern أن يعلموا بإخفاقات تأكيد الحضور قبل أن يشتكي المستخدمون. ماذا يجب أن يضبطوا؟

السؤال 2 من 4

بعد ستة أشهر، أصبح CloudWatch بندًا كبيرًا على نحو مفاجئ في فاتورة Lantern. أيّ تغيير يساعد على الأرجح؟

السؤال 3 من 4

في مراجعة Well-Architected، إلى أيّ ركيزة تنتمي بشكل أساسي الملاحظة «ما زالت instance الترحيل القديمة في EC2 تعمل، بعد ثلاثة أسابيع من الانتقال»؟

السؤال 4 من 4

لماذا توسم كل موارد Lantern بالوسم project=lantern ويُفعَّل ذلك الوسم لتوزيع التكاليف؟

تدريب

املأ الفراغات

ضع سقفًا للسجلات، واربط الإنذار

أكمل أمرين من قائمة إطلاق Lantern. الخطوة 1 تضبط فترة احتفاظ مدتها 30 يومًا لمجموعة سجلات دالة تأكيد الحضور. الخطوة 2 تنشئ إنذارًا على مقياس Lambda الذي يعدّ الاستدعاءات الفاشلة، وترسل الإشعارات إلى الـ topic المسمّى lantern-alerts في خدمة الإشعارات التي ترسل بريدًا إلى القائمين على المشروع.

# 1. Keep the RSVP function's logs for 30 days, then let them expire aws logs \ --log-group-name /aws/lambda/lantern-rsvp --retention-in-days 30 # 2. Email the maintainers when the function errors 5+ times in 5 minutes aws cloudwatch --alarm-name lantern-rsvp-errors \ --namespace AWS/Lambda --metric-name \ --dimensions Name=FunctionName,Value=lantern-rsvp \ --statistic Sum --period 300 --evaluation-periods 1 \ --threshold 5 --comparison-operator GreaterThanOrEqualToThreshold \ --alarm-actions arn:aws::eu-west-1:111122223333:lantern-alerts