با 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 است پرس و جو کنید.
میانه کمی بیش از 5 ثانیه است، اما حداکثر آن حدود 16 ثانیه است.
ممکن است به محتویات فایل پیکربندی عامل بستگی داشته باشد (در هر force_flush_interval؟)
2-3. دروازه API
هنگامی که خروجی ورود به سیستم در دروازه API فعال است، گروه گزارشی را که خروجی است، پرس و جو کنید.
(API-Gateway-Execution-Logs_{stage ID})
میانه زمان بیش از 20 ثانیه است که طولانی ترین زمان در بین موارد مقایسه شده است.
تفاوت هایی در تمایلات عقب ماندگی در بین خدمات وجود داشت. تلاش برای حدس زدن علت جالب خواهد بود.
من از Logs Insights برای تجسم داده ها استفاده کردم و آن را آسان و مفید یافتم.
این پست بازنویسی انگلیسی پستی است که من به ژاپنی نوشتم.