كيفية استخدام AWS Logs Insights لاستعلام مقاييس لوحة المعلومات من سجلات خدمات AWS

تسجل كل خدمة AWS معالجتها في ملفات منظمة ضمن مجموعات سجل CloudWatch. عادةً ما يتم تسمية مجموعات السجل باسم الخدمة نفسها لتسهيل التعرف عليها. تتم كتابة رسائل نظام الخدمة أو معلومات الحالة العامة في ملفات السجل هذه بشكل افتراضي.
ومع ذلك ، يمكنك إضافة معلومات رسالة سجل مخصصة فوق المعلومات الافتراضية. إذا تم إنشاء مثل هذه السجلات بحكمة ، فيمكن أن تعمل على إنشاء لوحات معلومات CloudWatch مفيدة.
مع المقاييس والمعلومات المنظمة التي تعطي تفاصيل إضافية حول معالجة المهمة. لا يمكن أن تحتوي فقط على عناصر واجهة مستخدم قياسية بمعلومات تشبه النظام حول الخدمة. يمكنك توسيع هذا مع المحتوى الخاص بك ، مجمّعًا في عنصر واجهة المستخدم أو المقياس المخصص.
استعلم عن ملفات السجل
المصدر: aws.amazon.com
تتيح لك AWS CloudWatch Log Insights البحث في بيانات السجل من موارد AWS وتحليلها في الوقت الفعلي. يمكنك النظر إليها كطريقة عرض لقاعدة البيانات. أنت تحدد الاستعلام على لوحة المعلومات ، وستقوم لوحة القيادة بتحديده عند زيارته أو في النافذة الزمنية المحددة في الماضي ، كما تحدده في عرض لوحة المعلومات.
يستخدم لغة استعلام تسمى CloudWatch Logs Insights للبحث عن بيانات السجل وتحليلها. تعتمد لغة الاستعلام على مجموعة فرعية من لغة SQL. يسمح لك بالبحث عن بيانات السجل وتصفيتها. يمكنك البحث عن أحداث سجل معينة ، ونص سجل مخصص أو كلمات رئيسية ، وتصفية بيانات السجل استنادًا إلى حقول محددة. والأهم من ذلك ، قم بتجميع بيانات السجل داخل ملف سجل واحد أو أكثر لإنشاء مقاييس وتصورات ملخصة.
عند تشغيل استعلام ، يبحث CloudWatch Log Insights من خلال بيانات السجل في مجموعة السجل. ثم تقوم بإرجاع النصوص الناتجة عن الملفات التي تطابق معايير الاستعلام الخاصة بك.
مثال على استعلام ملف السجل
دعنا نلقي نظرة على بعض الاستفسارات الأساسية لفهم المفهوم.
تسجل كل خدمة ، بشكل افتراضي ، بعض أخطاء الخدمة الجسيمة. حتى إذا لم تقم بإنشاء سجل مخصص مخصص لأحداث الخطأ هذه. ثم باستخدام استعلام بسيط ، يمكنك حساب عدد الأخطاء في سجلات التطبيق الخاص بك على مدار الساعة الماضية:
fields @timestamp, @message | filter @message like /ERROR/ | stats count() by bin(1h)
أو فيما يلي كيفية مراقبة متوسط وقت الاستجابة لواجهة برمجة التطبيقات الخاصة بك خلال اليوم الأخير:
fields @timestamp, @message | filter @message like /API response time/ | stats avg(response_time) by bin(1d)
نظرًا لأن استخدام وحدة المعالجة المركزية ، افتراضيًا ، عبارة عن معلومات يتم تسجيلها بواسطة الخدمة في CloudWatch ، يمكنك جمع هذا النوع من المقاييس أيضًا:
fields @timestamp, @message | filter @message like /CPUUtilization/ | stats avg(value) by bin(1h)
يمكن تخصيص هذه الاستعلامات لتناسب حالة الاستخدام المحددة الخاصة بك ويمكن استخدامها لإنشاء مقاييس وتصورات مخصصة في لوحات معلومات CloudWatch. طريقة القيام بذلك هي وضع القطعة على لوحة القيادة ووضع الكود داخل القطعة لتحديد ما يجب تحديده.
فيما يلي بعض الأدوات التي يمكن استخدامها في CloudWatch Dashboards وملؤها بالمحتوى من Log Insights:
- أدوات النص – تعرض المعلومات المستندة إلى النص ، مثل إخراج استعلام CloudWatch Insights.
- أدوات استعلام السجل – تعرض نتائج استعلام سجل CloudWatch Insights ، مثل عدد الأخطاء في سجلات التطبيق.
كيفية إنشاء معلومات سجل مفيدة للوحة القيادة
المصدر: aws.amazon.com
لاستخدام استعلامات CloudWatch Insights بشكل فعال في لوحات معلومات CloudWatch ، من الجيد اتباع بعض أفضل الممارسات عند إنشاء سجلات CloudWatch لكل خدمة من الخدمات التي تستخدمها في نظامك. هنا بعض النصائح:
# 1. استخدم التسجيل المنظم
يجب عليك الالتزام بتنسيق التسجيل الذي يستخدم مخططًا محددًا مسبقًا لتسجيل البيانات بتنسيق منظم. هذا يجعل من السهل البحث عن بيانات السجل وتصفيتها باستخدام استعلامات CloudWatch Insights.
هذا يعني في الأساس توحيد سجلاتك عبر خدمات مختلفة في نظامك الهندسي. يساعد تحديدها في معايير التطوير بشكل كبير.
على سبيل المثال ، يمكنك تحديد أن كل مشكلة تتعلق بجدول قاعدة بيانات معين سيتم تسجيلها برسالة البداية مثل: “[TABLE_NAME] تحذير / خطأ: <الرسالة> ”.
أو يمكنك فصل وظائف البيانات الكاملة عن وظائف بيانات دلتا عن طريق بادئات مثل “[FULL/DELTA]”لاختيار الرسائل المتعلقة فقط بعمليات البيانات الملموسة.
يمكنك تحديد أنه أثناء معالجة البيانات من نظام مصدر معين ، سيكون اسم النظام بادئة لكل إدخال سجل ذي صلة. يصبح من الأسهل كثيرًا بعد ذلك تصفية هذه الرسائل من ملفات السجل وإنشاء مقاييس عليها.
المصدر: aws.amazon.com
# 2. استخدم تنسيقات سجل متسقة
استخدم تنسيقات سجل متسقة عبر جميع موارد AWS الخاصة بك لتسهيل البحث عن بيانات السجل وتصفيتها باستخدام استعلامات CloudWatch Insights.
هذا مرتبط بشكل كبير بالنقطة السابقة ، ولكن الحقيقة هي أنه كلما كان تنسيق السجل أكثر توحيدًا ، كان من الأسهل استخدام بيانات السجل. يمكن للمطورين بعد ذلك الاعتماد على هذا التنسيق واستخدامه بشكل حدسي.
الحقيقة القاسية هي أن معظم المشاريع لا تهتم بأي معايير حول قطع الأشجار. علاوة على ذلك ، لا تنشئ العديد من المشاريع أي سجلات مخصصة على الإطلاق. إنه أمر مروع ولكنه شائع جدًا في نفس الوقت.
لا أستطيع حتى تحديد عدد المرات التي وجدت فيها نفسي أتساءل كيف يمكن للناس العيش هنا دون أي نهج للتعامل مع الأخطاء. وإذا بذل أي شخص جهدًا للقيام بنوع من التعامل مع الخطأ كاستثناء ، فإنهم فعلوا ذلك بشكل خاطئ.
لذلك ، يعد تنسيق السجل المتسق أحد الأصول القوية. ليس لدى الكثير منهم.
# 3. قم بتضمين البيانات الوصفية ذات الصلة
قم بتضمين البيانات الوصفية في بيانات السجل ، مثل الطوابع الزمنية ومعرفات الموارد وأكواد الخطأ ، لتسهيل البحث عن بيانات السجل وتصفيتها باستخدام استعلامات CloudWatch Insights.
# 4. قم بتمكين تدوير السجل
قم بتمكين تدوير السجل لمنع بيانات السجل من أن تصبح كبيرة جدًا ولتسهيل البحث عن بيانات السجل وتصفيتها باستخدام استعلامات CloudWatch Insights.
يعد عدم وجود بيانات سجل أمرًا واحدًا ، ولكن وجود الكثير منها بدون بنية أمر يائس بالمثل. إذا لم تتمكن من استخدام بياناتك ، فهذا يشبه عدم وجود بيانات على الإطلاق.
# 5. استخدم وكلاء سجلات CloudWatch
إذا كنت لا تستطيع مساعدة نفسك ورفضت فقط إنشاء نظام سجل مخصص ، فاستخدم وكلاء CloudWatch Logs على الأقل. يرسلون تلقائيًا بيانات السجل من موارد AWS إلى CloudWatch Logs. هذا يجعل من السهل البحث عن بيانات السجل وتصفيتها باستخدام استعلامات CloudWatch Insights.
أمثلة على استعلام رؤى أكثر تعقيدًا
يمكن أن يكون استعلام CloudWatch Insights أكثر تعقيدًا من مجرد عبارة مكونة من سطرين.
fields @timestamp, @message | filter @message like /ERROR/ | filter @message not like /404/ | parse @message /.*[(?<timestamp>[^]]+)].*"(?<method>[^s]+)s+(?<path>[^s]+).*" (?<status>d+) (?<response_time>d+)/ | stats avg(response_time) as avg_response_time, count() as count by bin(1h), method, path, status | sort count desc | limit 20
يقوم هذا الاستعلام بما يلي:
يحدد هذا الاستعلام الأخطاء الأكثر شيوعًا في تطبيقك ويتتبع متوسط وقت الاستجابة لكل مجموعة من طرق HTTP والمسار ورمز الحالة. يمكنك استخدام النتائج لإنشاء مقاييس وتصورات مخصصة في لوحات معلومات CloudWatch لمراقبة أداء تطبيق الويب الخاص بك واستكشاف المشكلات وإصلاحها.
مثال آخر للاستعلام عن رسائل خدمة Amazon S3:
fields @timestamp, @message | filter @message like /REST.API.REQUEST/ | parse @message /.*"(?<method>[^s]+)s+(?<path>[^s]+).*" (?<status>d+) (?<response_time>d+)/ | stats avg(response_time) as avg_response_time, count() as count by bin(1h), method, path, status | sort count desc | limit 20
- يحدد الاستعلام أحداث السجل التي تحتوي على السلسلة “REST.API.REQUEST”.
- ثم يوزع رسالة السجل لاستخراج طريقة HTTP والمسار ورمز الحالة ووقت الاستجابة.
- يحسب متوسط وقت الاستجابة وعدد أحداث السجل لكل مجموعة من طريقة HTTP والمسار ورمز الحالة ويصنف النتائج حسب العدد بترتيب تنازلي.
- يقصر الإخراج على أفضل 20 نتيجة.
يمكنك استخدام ناتج هذا الاستعلام لإنشاء رسم بياني خطي في لوحة تحكم CloudWatch تعرض متوسط وقت الاستجابة لكل مجموعة من طرق HTTP والمسار ورمز الحالة بمرور الوقت.
بناء لوحة القيادة
لملء المقاييس والتصورات في لوحات معلومات CloudWatch من إخراج استعلامات سجل CloudWatch Insights ، يمكنك الانتقال إلى وحدة تحكم CloudWatch واتباع معالج Dashboard لإنشاء المحتوى الخاص بك.
بعد ذلك ، هذه هي الطريقة التي يظهر بها رمز لوحة تحكم CloudWatch ويحتوي على مقاييس مليئة ببيانات CloudWatch Insights Query:
{ "widgets": [ { "type": "metric", "x": 0, "y": 0, "width": 12, "height": 6, "properties": { "metrics": [ [ "AWS/EC2", "CPUUtilization", "InstanceId", "i-0123456789abcdef0", { "label": "CPU Utilization", "stat": "Average", "period": 300 } ] ], "view": "timeSeries", "stacked": false, "region": "us-east-1", "title": "EC2 CPU Utilization" } }, { "type": "log", "x": 0, "y": 6, "width": 12, "height": 6, "properties": { "query": "fields @timestamp, @message | filter @message like /ERROR/ | stats count() by bin(1h) ", "region": "us-east-1", "title": "Application Errors" } } ] }
تحتوي لوحة تحكم CloudWatch هذه على أداتين:
إنه ملف بتنسيق JSON به تعريف للوحة القيادة والمقاييس بالداخل. يحتوي (كخاصية) أيضًا على استعلام البصيرة نفسه.
يمكنك أخذ الكود ونشره في أي حساب AWS تحتاجه. بافتراض أن الخدمات ورسائل السجل متسقة على جميع حسابات ومراحل AWS الخاصة بك ، ستعمل لوحة القيادة على جميع الحسابات دون الحاجة إلى تغيير الكود المصدري للوحة المعلومات.
الكلمات الأخيرة
كان بناء هيكل تسجيل متين دائمًا استثمارًا جيدًا في مستقبل موثوقية النظام. الآن يمكن أن يخدم غرضًا أكبر. يمكن أن يكون لديك لوحات معلومات مفيدة تحتوي على مقاييس وتصورات كأثر جانبي لذلك.
عند الحاجة إلى القيام بذلك مرة واحدة فقط ، مع القليل من العمل الإضافي ، يمكن لفريق التطوير وفريق الاختبار ومستخدمي الإنتاج الاستفادة من نفس الحل.
بعد ذلك ، تحقق من أفضل أدوات مراقبة AWS.