برنامه نویسی

با Logs Insights تأخیر ورود گزارش‌های CloudWatch را تجسم کنید

من زمان تاخیری که برای وارد کردن گزارش‌ها به گزارش‌های CloudWatch طول می‌کشد را تجسم کرده‌ام و آن را بر اساس سرویس منبع مقایسه کرده‌ام!

رویداد CloudWatch Logs شامل دو بار زیر است.

  • (i) timestamp = زمان وقوع رویداد
  • (ii) ingestionTime =زمانی که رویداد وارد گزارش‌های CloudWatch شد

بین «مهر زمانی» و «زمان ورود» یک تاخیر وجود دارد.

توالی

“زمان زمان” (=زمان وقوع رویداد) توسط پارامتر InputLogEvent از PutLogEvents ارسال می شود.
این چیزی است که اگر از یک سرویس یکپارچه یا عامل CloudWatch استفاده می کنیم به ندرت از آن آگاه هستیم.

ما می‌توانیم هر دو را از داده‌های گزارش در Logs Insights دریافت کنیم، بنابراین با استفاده از دستور stats آنها را جمع می‌کنیم.

1-1. “مهر زمان” و “ingestionTime” را جستجو کنید

درخواست اولیه Logs Insights فقط نمایش داده می شود مهر زمانی، اما بیایید نمایش دهیم زمان مصرف همچنین

fields @timestamp, @ingestionTime, @message, @logStream, @log
| sort @timestamp desc
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نتیجه

سیاهههای مربوط

می بینید که یک تاخیر زمانی چند ثانیه ای وجود دارد.

1-2. استعلام اختلاف زمانی (= تاخیر)

fields @timestamp, @ingestionTime, toMillis(@ingestionTime) - toMillis(@timestamp) as diff
| sort @timestamp desc
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نتیجه

سیاهههای مربوط

toMillis(@ingestionTime) – toMillis(@timestamp) به عنوان تفاوت

تابع “toMillis” مهر زمانی موجود در فیلد نامگذاری شده را به عددی تبدیل می کند که نشان دهنده میلی ثانیه است.

1-3. تفاوت زمانی (= تاخیر) را با آمار تجسم کنید

fields @timestamp, @ingestionTime, toMillis(@ingestionTime) - toMillis(@timestamp) as diff
| sort @timestamp desc
| stats max(diff), pct(diff,50), avg(diff) by bin(30min)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

حداکثر، میانه (صدک 50)، و میانگین اختلاف در فواصل 30 دقیقه ای خروجی می شود. دوره 2 هفته مشخص شده است.
حداکثر تعداد فیلدهای گزارشی که Logs Insights می تواند خروجی دهد 1000 است، بنابراین بازه و دوره باید متناسب با آن تنظیم شوند.

نتایج

تجسم

بیایید یک پرس و جوی تجسمی اجرا کنیم تا ببینیم آیا تفاوت زمانی بسته به منبع گزارش متفاوت است یا خیر!

2-1. AWS Lambda

AWS Lambda با CloudWatch یکپارچه شده است و به طور خودکار گزارش‌ها را با مجوزهای مناسب خروجی می‌دهد، بنابراین ما گروه را پرس و جو می‌کنیم. (/aws/lambda/{function name})

اوس لامبدا
میانگین زمان تقریباً کمتر از 9 ثانیه است.

2-2. EC2 + CloudWatch Agent

گروه گزارشی را که EC2 در حال خروجی از طریق CloudWatch Agent است پرس و جو کنید.

ec2

میانه کمی بیش از 5 ثانیه است، اما حداکثر آن حدود 16 ثانیه است.
ممکن است به محتویات فایل پیکربندی عامل بستگی داشته باشد (در هر force_flush_interval؟)

2-3. دروازه API

هنگامی که خروجی ورود به سیستم در دروازه API فعال است، گروه گزارشی را که خروجی است، پرس و جو کنید.
(API-Gateway-Execution-Logs_{stage ID})

دروازه api

میانه زمان بیش از 20 ثانیه است که طولانی ترین زمان در بین موارد مقایسه شده است.

تفاوت هایی در تمایلات عقب ماندگی در بین خدمات وجود داشت. تلاش برای حدس زدن علت جالب خواهد بود.

من از Logs Insights برای تجسم داده ها استفاده کردم و آن را آسان و مفید یافتم.

این پست بازنویسی انگلیسی پستی است که من به ژاپنی نوشتم.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

همچنین ببینید
بستن
دکمه بازگشت به بالا