Logging همیشه ابزاری برای توسعه‌دهندگان بوده است تا برنامه‌های خود را اشکال‌زدایی کنند، از «چاپ ساده» («اینجا»)» تا استفاده از کتابخانه‌های رسمی‌تر مانند log4j و ماژول‌های گزارش‌گیری. در حالی که برای توسعه‌دهندگان انفرادی که لاگ‌ها را برای مشخص کردن مشکلات می‌خوانند، موثر است، اما این نوع «Logging بدون ساختار» در حین انجام تحلیل‌های عمیق‌تر یا ساختن گزارش‌ها در مورد نحوه استفاده از یک برنامه، مقیاس نمی‌شود.

کسب اطلاعات بیشتر: ChatGPT vs Bard: کدام یک برای کدنویسی بهتر است؟ 

کار خود را در فضای ابری تسریع کنید

یک Cloud Guru سطح شغلی خود را در فضای ابری آسان (و عالی) آسان می کند – حتی اگر کاملاً در فن آوری تازه کار باشید. دوره های رایگان فعلی ACG را بررسی کنید یا اکنون با یک آزمایش رایگان شروع کنید.

در خلال فضای اخیر توییتر در مورد ساخت برنامه‌های بدون سرور، ایده گزارش‌دهی ساختاریافته به عنوان راهی برای مقیاس‌سازی تلاش‌های گزارش‌گیری و ارائه راهی ثابت برای مصرف لاگ‌ها مورد بحث قرار گرفت.

ورود به سیستم ساخت یافته چیست؟

گزارش‌گیری ساختاریافته روشی برای ثبت اطلاعات در قالبی ثابت است که به لاگ‌ها اجازه می‌دهد به‌عنوان داده به‌جای متن تلقی شوند. گزارش‌های ساختاریافته اغلب در JSON بیان می‌شوند که به توسعه‌دهندگان این امکان را می‌دهد تا به طور موثر لاگ‌ها را ذخیره، بازیابی و تجزیه و تحلیل کنند.

برخی از مزایای اصلی که امکان اشکال زدایی سریعتر را فراهم می کند عبارتند از …

جستجوی بهتر – با استفاده از فرمت JSON می‌توانیم پرس‌و‌جوهایی را در فیلدها ایجاد کنیم، بدون اینکه به الگوهای regex شکننده متن خام تکیه کنیم.
ادغام بهتر – با استفاده از فرمت JSON سازگار، برنامه ها می توانند داده ها را به راحتی برای کارهای پایین دستی مانند داشبورد یا تجزیه و تحلیل جذب کنند.
خوانایی بهتر – با استفاده از یک قالب ثابت، مصرف کنندگان گزارش ها مانند مدیران سیستم می توانند داده ها را بسیار موثرتر از خواندن فایل های متنی خام تجزیه و تحلیل کنند.

در این پست، نمونه‌ای را در پایتون بررسی می‌کنم که تفاوت‌های بین لاگ بدون ساختار و ساختار یافته در یک تابع ساده AWS Lambda را برجسته می‌کند.

نمونه لاگ بدون ساختار

در این مثال، ما فقط از دستور چاپ پیش فرض استفاده می کنیم. به سادگی گفتن “Here” به ما امکان می دهد بدانیم کد در کجای تابع اجرا شده است.

در حالی که ساده است، امکان پردازش سریع اشکال زدایی قابل خواندن توسط انسان را فراهم می کند، در صورت مشاهده رویدادهای گزارش. در زمینه AWS Lambda، می‌توانیم از گروه‌های گزارش AWS CloudWatch برای تأیید آسان کدهای خود استفاده کنیم.

اسکرین شات کدنویسی سریعتر را اشکال زدایی کنید

اگرچه برای اشکال زدایی فردی در موارد استفاده ساده عالی است، چاپ متن به سادگی زمینه مورد نیاز برای تجزیه و تحلیل عمیق تر یا روشی کارآمد برای جستجو را منتقل نمی کند. یک مثال می‌تواند جستجوی گزارش‌های مشتریان در یک منطقه خاص، یا انجام یک عمل در یک صفحه خاص باشد. مجبور به انجام تطبیق متن یا عبارات منظم برای یافتن داده ها در گزارش ها برای جستجوی ظریف نیست.

ماژول ورود به سیستم نیز از همان مشکل یک بیانیه چاپ استاندارد رنج می برد.

داده‌ها هنوز در قالب متن هستند، حتی اگر اطلاعات اضافی مانند سطح گزارش را ارائه می‌دهند، پیام گزارش همچنان به‌جای داده به عنوان متن در نظر گرفته می‌شود.

نمونه لاگ ساختاری

برای اینکه گزارش‌ها را به‌عنوان داده در نظر بگیریم، باید ساختاری ایجاد کنیم که بتوانیم گزارش‌ها را به‌عنوان داده بیان کنیم. بسته هایی مانند پایتون JSON Logger وجود دارد که مکانیزمی برای تبدیل لاگ ها به JSON ارائه می دهد، اما می توانید یک کلاس برای کپسوله کردن داده های خود ایجاد کنید.

اکنون وقتی داده‌ها را در Cloudwatch مشاهده می‌کنیم، یک JSON زیبا با هر فیلدی که می‌خواهیم دریافت می‌کنیم.

از آنجایی که داده ها در قالب JSON هستند که به ما امکان می دهد از Cloudwatch Log Insights برای اجرای پرس و جوها روی داده ها با استفاده از فیلدهای سفارشی استفاده کنیم، بدون هیچ گونه پیکربندی اضافی تصمیم گرفتیم.

برای مثال‌های بیشتر از استفاده از گزارش‌های Cloudwatch، وبلاگ AWS Compute را بررسی کنید.

هنگامی که گزارش‌ها را پورت می‌کنیم، یک فرمت JSON آسان را نیز دریافت می‌کنیم که می‌تواند در برنامه‌های دیگر مصرف شود.

پیام log اکنون به عنوان یک شی JSON در مثال ساختاریافته در مقایسه با متن خام در سایر نمونه‌های گزارش قابل مصرف است.

همانطور که می بینید ورود به سیستم ساخت یافته یک “نیاز سخت” نیست که باید به روشی خاص اجرا شود. این فقط یک چارچوب است که به شما امکان می‌دهد گزارش‌ها را به‌عنوان داده‌ها در نظر بگیرید تا روش‌های اشکال‌زدایی قوی‌تری را برای شما، تیم و سازمانتان فعال کنید.