{"id":"l-aws-4-3","courseId":"aws-cloud-foundations","lang":"ar","kind":"lesson","summary":"راقب Lantern في الإنتاج عبر مقاييس CloudWatch وسجلاته وإنذاراته، ثم راجع التصميم كله وفق ركائز Well-Architected الست مع وضع تحسين التكلفة نصب عينيك.","html":"<p>أصبح Lantern يعمل في الإنتاج: الموقع على CloudFront، وتأكيدات الحضور على Lambda وDynamoDB، والفعاليات في RDS. على الخادم القديم، كانت “المراقبة” تعني أن يلاحظ أحد المتطوّعين أن الموقع متوقّف. يمنح هذا الدرس Lantern عيونًا، عبر <strong>Amazon CloudWatch</strong>، ثم يرجع خطوة إلى الوراء ليراجع التصميم كله باستخدام <strong>AWS Well-Architected Framework</strong>.</p>\n<h2 id=\"sec-1\" tabindex=\"-1\">المقاييس: ما الذي يحدث</h2>\n<p>تنشر خدمات AWS <strong>المقاييس (metrics)</strong> إلى CloudWatch تلقائيًا. يعيش كل مقياس في namespace وله أبعاد (dimensions)، مثل <code dir=\"ltr\">AWS/Lambda</code> مع <code dir=\"ltr\">FunctionName=lantern-rsvp</code>. وهذه الحفنة هي الأهم بالنسبة إلى Lantern:</p>\n<div class=\"table-wrap\" role=\"region\" aria-label=\"جدول قابل للتمرير\" tabindex=\"0\"><table><thead>\n<tr>\n<th>الخدمة</th>\n<th>المقياس</th>\n<th>ما يخبرك به</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Lambda</td>\n<td><code dir=\"ltr\">Errors</code> و<code dir=\"ltr\">Throttles</code> و<code dir=\"ltr\">Duration</code></td>\n<td>الإخفاقات، وبلوغ حدود السعة، والبطء</td>\n</tr>\n<tr>\n<td>API Gateway</td>\n<td><code dir=\"ltr\">5xx</code> و<code dir=\"ltr\">4xx</code> و<code dir=\"ltr\">Latency</code></td>\n<td>ما عاشه المستخدمون فعلًا</td>\n</tr>\n<tr>\n<td>DynamoDB</td>\n<td><code dir=\"ltr\">ThrottledRequests</code></td>\n<td>الطلبات التي رفضها الجدول</td>\n</tr>\n<tr>\n<td>CloudFront</td>\n<td><code dir=\"ltr\">5xxErrorRate</code>، و<code dir=\"ltr\">CacheHitRate</code> (مقياس إضافي تفعّله بنفسك)</td>\n<td>صحة الحافة ومدى نجاح التخزين المؤقت</td>\n</tr>\n</tbody>\n</table></div><h2 id=\"sec-2\" tabindex=\"-1\">السجلات: لماذا حدث ذلك</h2>\n<p>كل ما تكتبه دالة Lambda إلى stdout يصل إلى <strong>CloudWatch Logs</strong>، في مجموعة السجلات <code dir=\"ltr\">/aws/lambda/lantern-rsvp</code>. حوّل صيغة سجلات الدالة إلى JSON في إعدادات التسجيل الخاصة بها، وسجّل كائنات بدلًا من جمل، وستستطيع الاستعلام عنها لاحقًا عبر <strong>CloudWatch Logs Insights</strong>:</p>\n<div class=\"code-block\" dir=\"ltr\" data-lang=\"text\" data-index=\"0\"><div class=\"code-head\"><span class=\"code-title\">Text</span><span class=\"code-actions\"><button type=\"button\" class=\"code-btn\" data-action=\"copy\" aria-label=\"نسخ الكود\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg><span>نسخ</span></button></span></div><pre class=\"shiki\" tabindex=\"0\"><code>fields @timestamp, level, message, eventId\n| filter level = &quot;ERROR&quot;\n| sort @timestamp desc\n| limit 20</code></pre></div>\n<aside class=\"callout callout-mistake\" role=\"note\"><p class=\"callout-title\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><path d=\"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\"/><path d=\"M12 9v4\"/><path d=\"M12 17h.01\"/></svg><span><span class=\"callout-kind\">خطأ شائع</span><span class=\"callout-sep\" aria-hidden=\"true\"> · </span>سجلات لا تنتهي صلاحيتها أبدًا</span></p>\n<p>مجموعات السجلات الجديدة تحتفظ بكل شيء إلى الأبد، وتدفع مقابل كل غيغابايت يُستوعب ويُخزَّن. اضبط فترة احتفاظ لكل مجموعة سجلات في يوم ظهورها، ولا تسجّل محتوى الطلبات كاملًا أبدًا: فهو يضخّم الفاتورة ويضع الأسماء وعناوين البريد في أماكن لم تحسب سياسة الخصوصية الخاصة بك حسابها.</p>\n</aside>\n<div class=\"code-block\" dir=\"ltr\" data-lang=\"bash\" data-index=\"1\"><div class=\"code-head\"><span class=\"code-title\">Terminal</span><span class=\"code-actions\"><button type=\"button\" class=\"code-btn\" data-action=\"copy\" aria-label=\"نسخ الكود\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg><span>نسخ</span></button></span></div><pre class=\"shiki\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#953800;--shiki-dark:#FFA657\">aws</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> logs</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> put-retention-policy</span><span style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\</span></span>\n<span class=\"line\"><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --log-group-name</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> /aws/lambda/lantern-rsvp</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --retention-in-days</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> 30</span></span></code></pre></div>\n<h2 id=\"sec-3\" tabindex=\"-1\">الإنذارات: أخبر إنسانًا</h2>\n<p>المقياس الذي لا ينظر إليه أحد مجرد معلومة عابرة. <strong>الإنذار (alarm)</strong> يراقب مقياسًا واحدًا مقابل حدّ معيّن، ويغيّر حالته حين يُتجاوز الحد، فيرسل إشعارًا إلى topic في <strong>Amazon SNS</strong> يرسل بريدًا إلى القائمين على المشروع:</p>\n<div class=\"code-block\" dir=\"ltr\" data-lang=\"bash\" data-index=\"2\"><div class=\"code-head\"><span class=\"code-title\">Terminal</span><span class=\"code-actions\"><button type=\"button\" class=\"code-btn\" data-action=\"copy\" aria-label=\"نسخ الكود\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg><span>نسخ</span></button></span></div><pre class=\"shiki\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color:#953800;--shiki-dark:#FFA657\">aws</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> cloudwatch</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> put-metric-alarm</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --alarm-name</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> lantern-rsvp-errors</span><span style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\</span></span>\n<span class=\"line\"><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --namespace</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> AWS/Lambda</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --metric-name</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> Errors</span><span style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\</span></span>\n<span class=\"line\"><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --dimensions</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> Name=FunctionName,Value=lantern-rsvp</span><span style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\</span></span>\n<span class=\"line\"><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --statistic</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> Sum</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --period</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> 300</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --evaluation-periods</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> 1</span><span style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\</span></span>\n<span class=\"line\"><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --threshold</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> 5</span><span style=\"color:#0550AE;--shiki-dark:#79C0FF\"> --comparison-operator</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> GreaterThanOrEqualToThreshold</span><span style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\</span></span>\n<span class=\"line\"><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --treat-missing-data</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> notBreaching</span><span style=\"color:#CF222E;--shiki-dark:#FF7B72\"> \\</span></span>\n<span class=\"line\"><span style=\"color:#0550AE;--shiki-dark:#79C0FF\">  --alarm-actions</span><span style=\"color:#0A3069;--shiki-dark:#A5D6FF\"> arn:aws:sns:eu-west-1:111122223333:lantern-alerts</span></span></code></pre></div>\n<p>خمسة أخطاء في خمس دقائق تستدعي أحدهم؛ أما ليلة خاملة، بلا بيانات على الإطلاق، فلا. يبدأ Lantern بثلاثة إنذارات: أخطاء Lambda، واستجابات 5xx من API Gateway، وحالات الـ throttling في DynamoDB. إنذارات أقل وذات معنى أفضل من إنذارات كثيرة مزعجة يتعلّم الناس تجاهلها.</p>\n<h2 id=\"sec-4\" tabindex=\"-1\">مراجعة Well-Architected</h2>\n<p><strong>AWS Well-Architected Framework</strong> قائمة AWS المرجعية لأسئلة التصميم، مجمّعة في ست <strong>ركائز (pillars)</strong>. وتأخذك أداة <strong>AWS Well-Architected Tool</strong> المجانية في الـ console عبرها خطوة خطوة. إليك أول مراجعة لـ Lantern، بملاحظة واحدة لكل ركيزة:</p>\n<div class=\"table-wrap\" role=\"region\" aria-label=\"جدول قابل للتمرير\" tabindex=\"0\"><table><thead>\n<tr>\n<th>الركيزة</th>\n<th>ملاحظة في Lantern</th>\n<th>الإجراء</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>التميّز التشغيلي</td>\n<td>عمليات النشر سلسلة من الأوامر اليدوية</td>\n<td>اكتبها في سكربتات؛ ثم البنية التحتية ككود</td>\n</tr>\n<tr>\n<td>الأمان</td>\n<td>ما زال أحد المتطوّعين يستخدم مستخدم IAM</td>\n<td>انقل الجميع إلى IAM Identity Center</td>\n</tr>\n<tr>\n<td>الموثوقية</td>\n<td>RDS بنمط Multi-AZ؛ وجدول تأكيدات الحضور بلا point-in-time recovery</td>\n<td>فعّل PITR</td>\n</tr>\n<tr>\n<td>كفاءة الأداء</td>\n<td>دالة تأكيد الحضور بذاكرة 128 MB تستغرق 900 ms</td>\n<td>جرّب 512 MB؛ غالبًا أسرع وبتكلفة مماثلة</td>\n</tr>\n<tr>\n<td>تحسين التكلفة</td>\n<td>instance الترحيل في EC2 خاملة منذ الانتقال</td>\n<td>خذ snapshot ثم أنهِها</td>\n</tr>\n<tr>\n<td>الاستدامة</td>\n<td>الدالة تعمل على x86</td>\n<td>انتقل إلى <code dir=\"ltr\">arm64</code> (Graviton)</td>\n</tr>\n</tbody>\n</table></div><h2 id=\"sec-5\" tabindex=\"-1\">تحسين التكلفة كعادة</h2>\n<p>التكلفة حاضرة في كل درس من هذه الدورة؛ وهي هنا قائمة مرجعية تطبّقها على كل حساب:</p>\n<ol>\n<li><strong>احذف الخامل.</strong> الـ instances القديمة، والـ volumes غير المرفقة في EBS، وعناوين Elastic IP غير المستخدمة، وبوابات NAT المنسيّة.</li>\n<li><strong>اضبط الحجم المناسب.</strong> استخدم المقاييس، لا التخمين، لاختيار أحجام الـ instances والدوال.</li>\n<li><strong>استخدم نموذج التسعير الصحيح.</strong> Savings Plans للحد الأدنى الثابت، وSpot للعمل الدفعي القابل للمقاطعة، وserverless للعمل المتقطّع.</li>\n<li><strong>دع البيانات تتقادم وتُحذف.</strong> قواعد دورة الحياة في S3 وفترات الاحتفاظ بالسجلات.</li>\n<li><strong>أبقِ الزيارات محلية.</strong> نقاط النهاية من نوع gateway لـ S3 وDynamoDB؛ وCloudFront أمام كل ما هو عام.</li>\n<li><strong>ضع الوسوم وانظر.</strong> ضع على كل مورد الوسم <code dir=\"ltr\">project=lantern</code>، وفعّله لتوزيع التكاليف، وافتح <strong>AWS Cost Explorer</strong> كل شهر. تنبيه الميزانية من الدرس الثالث شبكة أمان، لا خطة.</li>\n</ol>\n<aside class=\"callout callout-why\" role=\"note\"><p class=\"callout-title\"><svg class=\"icon \" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\" focusable=\"false\"><circle cx=\"12\" cy=\"12\" r=\"10\"/><circle cx=\"12\" cy=\"12\" r=\"6\"/><circle cx=\"12\" cy=\"12\" r=\"2\"/></svg><span><span class=\"callout-kind\">لماذا يهمّ هذا</span><span class=\"callout-sep\" aria-hidden=\"true\"> · </span>المراجعة لا تنتهي أبدًا</span></p>\n<p>Well-Architected ليس شهادة تحصل عليها مرة واحدة. يكرّر القائمون على Lantern المراجعة كل ستة أشهر، أو بعد أي تغيير كبير، لأن الجواب الصحيح لـ 500 تأكيد حضور أسبوعيًا ليس الجواب الصحيح لـ 50,000.</p>\n</aside>\n<p>هذا هو الانتقال كله. انتقل Lantern من خادم واحد هشّ إلى مجموعة من القطع المُدارة، لكلٍّ منها مالك، وحدود صلاحيات، وإنذار، وسعر تستطيع تفسيره. أصبحت الآن تستطيع إعداد حساب بأمان، وقراءة سياسات IAM وكتابتها، واختيار الخدمات الأساسية الصحيحة، ونشر حمل عمل حقيقي وتشغيله، مع تصميم التكلفة والأمان من الأساس بدلًا من إلحاقهما في النهاية.</p>\n","toc":[{"id":"sec-1","text":"المقاييس: ما الذي يحدث","level":2},{"id":"sec-2","text":"السجلات: لماذا حدث ذلك","level":2},{"id":"sec-3","text":"الإنذارات: أخبر إنسانًا","level":2},{"id":"sec-4","text":"مراجعة Well-Architected","level":2},{"id":"sec-5","text":"تحسين التكلفة كعادة","level":2}],"takeaways":["يجمع CloudWatch المقاييس والسجلات والإنذارات لخدمات AWS تلقائيًا؛ وتكتب Lambda في مجموعة السجلات /aws/lambda/<function-name>.","يراقب الإنذار (alarm) مقياسًا واحدًا مقابل حدّ معيّن ويرسل إشعارًا إلى topic في Amazon SNS، الذي يرسل بريدًا إلى الأشخاص القادرين على التصرّف.","مجموعات السجلات الجديدة تحتفظ بالبيانات إلى الأبد افتراضيًا، لذا اضبط فترة احتفاظ لكل مجموعة سجلات كي تضع سقفًا لتكاليف التخزين.","لإطار Well-Architected ست ركائز، هي التميّز التشغيلي والأمان والموثوقية وكفاءة الأداء وتحسين التكلفة والاستدامة.","تحسين التكلفة عادة قوامها حذف الموارد الخاملة، وضبط الأحجام المناسبة، واستخدام نموذج التسعير الصحيح، ووسم الموارد (tagging) كي ترى كم يكلّف كل شيء."],"further":[{"title":"What is Amazon CloudWatch?","url":"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html"},{"title":"Using Amazon CloudWatch alarms","url":"https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html"},{"title":"Analyzing log data with CloudWatch Logs Insights","url":"https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html"},{"title":"AWS Well-Architected Framework","url":"https://docs.aws.amazon.com/wellarchitected/latest/framework/welcome.html"}],"quiz":[{"q":"<p>يريد القائمون على Lantern أن يعلموا بإخفاقات تأكيد الحضور قبل أن يشتكي المستخدمون. ماذا يجب أن يضبطوا؟</p>","options":[{"text":"لوحة معلومات في CloudWatch يتفقّدها أحدهم كل يوم جمعة.","why":"لوحات المعلومات جيدة للاستطلاع، لكن لا أحد يراقبها في التاسعة مساءً ليلة المهرجان."},{"text":"مجموعة سجلات بفترة احتفاظ أطول.","why":"الاحتفاظ بالسجلات مدة أطول يساعد في التحقيق لاحقًا. لكنه لا يخبر أحدًا بأن شيئًا ما يفشل الآن."},{"text":"تنبيه في AWS Budgets على خدمة Lambda.","why":"الميزانية تتتبّع الإنفاق، لا الأخطاء. وقد تفشل دالة معطوبة بتكلفة زهيدة لأيام."},{"text":"إنذار في CloudWatch على المقياس <code dir=\"ltr\">Errors</code> الخاص بالدالة يرسل إشعارًا إلى topic في SNS عليه بريد القائمين على المشروع.","why":"صحيح. الإنذار يحوّل المقياس إلى إشعار، فتصل قفزة في الأخطاء إلى شخص ما خلال دقائق."}],"answer":3},{"q":"<p>بعد ستة أشهر، أصبح CloudWatch بندًا كبيرًا على نحو مفاجئ في فاتورة Lantern. أيّ تغيير يساعد على الأرجح؟</p>","options":[{"text":"اضبط فترة احتفاظ لمجموعات السجلات وتوقّف عن تسجيل محتوى الطلبات كاملًا.","why":"صحيح. مجموعات السجلات لا تحذف البيانات أبدًا افتراضيًا، والاستيعاب (ingestion) والتخزين يُحتسبان لكل غيغابايت."},{"text":"أوقف مقاييس Lambda الافتراضية.","why":"مقاييس Lambda القياسية تُنشر تلقائيًا، وليست ما يضخّم الفاتورة."},{"text":"احذف الإنذارات، لأن كل واحد منها يكلّف مالًا.","why":"للإنذارات تكلفة شهرية صغيرة وهي تلتقط مشكلات حقيقية. إزالتها توفّر القليل وتُفقدك الرؤية."}],"answer":0},{"q":"<p>في مراجعة Well-Architected، إلى أيّ ركيزة تنتمي بشكل أساسي الملاحظة «ما زالت instance الترحيل القديمة في EC2 تعمل، بعد ثلاثة أسابيع من الانتقال»؟</p>","options":[{"text":"كفاءة الأداء (Performance efficiency)","why":"لا شيء بطيء؛ الـ instance ببساطة غير مطلوبة. كفاءة الأداء تتعلّق باستخدام الموارد بفعالية لتناسب الحمل."},{"text":"الموثوقية (Reliability)","why":"الخادم الخامل لا يؤثّر في قدرة الموقع على التعافي من الأعطال."},{"text":"التميّز التشغيلي (Operational excellence)","why":"كانت العمليات الأفضل ستلتقطها، لكن الأثر المباشر مال يُنفق بلا مقابل."},{"text":"تحسين التكلفة (Cost optimization)","why":"صحيح. دفع ثمن موارد خاملة هو المثال النموذجي على ملاحظات التكلفة، والإصلاح هو أخذ snapshot لما تحتاجه ثم إنهاء الـ instance."}],"answer":3},{"q":"<p>لماذا توسم كل موارد Lantern بالوسم <code dir=\"ltr\">project=lantern</code> ويُفعَّل ذلك الوسم لتوزيع التكاليف؟</p>","options":[{"text":"كي يستطيع Cost Explorer تفصيل الفاتورة حسب المشروع، فترى كم يكلّف Lantern بمعزل عن أي شيء آخر في الحساب.","why":"صحيح. تصبح وسوم توزيع التكاليف المفعّلة بُعدًا في Cost Explorer وفي الميزانيات."},{"text":"الموارد الموسومة تحصل على خصم.","why":"الوسوم لا تؤثّر في السعر. إنها تصف الموارد كي تستطيع تجميعها وترشيحها والتحكّم فيها."},{"text":"تحذف AWS الموارد غير الموسومة بعد 30 يومًا.","why":"لا تحذف AWS مواردك أبدًا بسبب غياب الوسوم. الموارد غير الموسومة يصعب فقط نسبتها إلى أصحابها."}],"answer":0}],"exercise":{"kind":"fill","language":"bash","template":"# 1. Keep the RSVP function's logs for 30 days, then let them expire\naws logs {{0}} \\\n  --log-group-name /aws/lambda/lantern-rsvp --retention-in-days 30\n\n# 2. Email the maintainers when the function errors 5+ times in 5 minutes\naws cloudwatch {{1}} --alarm-name lantern-rsvp-errors \\\n  --namespace AWS/Lambda --metric-name {{2}} \\\n  --dimensions Name=FunctionName,Value=lantern-rsvp \\\n  --statistic Sum --period 300 --evaluation-periods 1 \\\n  --threshold 5 --comparison-operator GreaterThanOrEqualToThreshold \\\n  --alarm-actions arn:aws:{{3}}:eu-west-1:111122223333:lantern-alerts","blanks":[{"answers":["put-retention-policy"]},{"answers":["put-metric-alarm"]},{"answers":["Errors"]},{"answers":["sns"]}],"title":"ضع سقفًا للسجلات، واربط الإنذار","prompt":"<p>أكمل أمرين من قائمة إطلاق Lantern. الخطوة 1 تضبط فترة احتفاظ مدتها 30 يومًا لمجموعة سجلات دالة تأكيد الحضور. الخطوة 2 تنشئ إنذارًا على مقياس Lambda الذي يعدّ الاستدعاءات الفاشلة، وترسل الإشعارات إلى الـ topic المسمّى <code dir=\"ltr\">lantern-alerts</code> في خدمة الإشعارات التي ترسل بريدًا إلى القائمين على المشروع.</p>\n","hints":["يبدأ الأمران الفرعيان كلاهما بـ <code dir=\"ltr\">put-</code>: أحدهما يضبط سياسة احتفاظ، والآخر إنذار مقياس.","مقياس Lambda للاستدعاءات الفاشلة اسم بصيغة الجمع يبدأ بحرف كبير.","تشير إجراءات الإنذار إلى topic في Amazon Simple Notification Service؛ انظر إلى جزء الخدمة في الـ ARN."],"explanation":"<p>يضبط <code dir=\"ltr\">aws logs put-retention-policy</code> المدة التي يحتفظ فيها CloudWatch Logs ببيانات مجموعة السجلات؛ ومن دونه لا تنتهي صلاحية السجلات أبدًا ويظل التخزين يكبر على الفاتورة. وينشئ <code dir=\"ltr\">aws cloudwatch put-metric-alarm</code> إنذارًا أو يحدّثه. المقياس <code dir=\"ltr\">Errors</code> في الـ namespace المسمّى <code dir=\"ltr\">AWS/Lambda</code> يعدّ الاستدعاءات التي انتهت بخطأ، وجمعه على فترة 300 ثانية يعطي عدد الأخطاء في كل خمس دقائق. وإجراء الإنذار هو ARN لـ topic في Amazon SNS (<code dir=\"ltr\">arn:aws:sns:...</code>)؛ ويتلقّى المشتركون في ذلك الـ topic، مثل عناوين بريد القائمين على المشروع، الإشعار حين يتغيّر الإنذار إلى حالة ALARM.</p>\n","checkLabels":{}},"words":648,"readMinutes":4}