احتمالاً اگر حتی یک توسعهدهنده ساده نیز بوده باشید از لاگها در برنامه خود استفاده کردهاید. مثلاً به صورت بسیار ساده یک عبارت را در کنسول چاپ کردهاید تا از درستی کد خود مطمئن شوید. لاگها اما به این موارد محدود نمیشوند. لاگهای بسیار با انواع مختلف و ابزارهای متعددی برای مدیریت آنها وجود دارد که در این نوشته با هم آنها را مرور میکنیم.
در دنیای کامپیوتر، لاگ یک فایل است که هر بار اتفاق خاصی در سیستم رخ میدهد، درست میشود. فایلهای لاگ معمولاً دارای برچسب زمانی هستند و ممکن است هر چیزی که مربوط به سیستمعامل یا اپلیکیشنهای نرمافزاری در پشت صحنه اتفاق میافتد را ثبت کنند. به طور کلی، لاگ فایلها همه چیز از سرور گرفته تا شبکه و سیستمعامل و اپلیکیشن را ثبت میکنند تا در آینده بتوان از آنها استفاده کرد.
لاگها میتوانند هر نوع اتفاق (event) را که بین کاربرهای مختلف صورت میگیرد یا در هنگام بکاپ گرفتن اتفاق میافتند یا در هنگامی که سیستم خطا میدهد و متوقف میشود را ثبت کنند. این لاگها میتوانند پیامها یا تراکنش (transaction) ها یا درخواستهای مختلفی باشند که در سیستم ثبت میشود.
پس همان طور که دیدیم لاگها از تعریف سنتیای که در ذهن توسعهدهندگان کمتجربه وجود دارد و به معنای لاگ مثلاً برای ارور است بسیار فراتر است و میتواند حوزه بزرگی از اتفاقات رخ داده در سیستم نرمافزاری را در بر گیرد.
بعضی لاگها توسط انسان میتوانند خوانده شوند ولی بعضی دیگر قابل خواندن توسط انسان نیستند. از نمونه لاگهایی که میتوان نام برد لاگهای مربوط به تراکنشها، ارورها و پیامها است. پسوند فایلهای لاگ میتواند .log یا .txt یا پسوندی دیگر باشد. اگر این لاگها توسط انسان قابل خواندن باشند، این لاگها در ویرایشگر متنی عادی، قابل دیدن و باز شدن است. البته بعضی لاگها ممکن است وابسته به نرمافزار خاصی باشد و در یک نرمافزار خصا باز شود.
لاگها برای پایش سیستم، مشاهده اتفاقات مختلف در سیستم، مشاهده خطاها، مدیریت خطاها و حل کردن مشکلات و بسیاری موارد دیگر قابل استفاده است. به همین خاطر باید تمامی لاگهای سیستم ثبت شود و در هنگام بروز اتفاقات غیرمترقبه استفاده شود. البته لاگ به منظور پایش مستمر سیستم نیز قابل استفاده است و نباید محدود به مواردی مانند لاگ ارورها شود.
مدیریت لاگ به معنای مجموعه فعالیتها و فرایندهایی که برای تولید، جمعآوری، پارس کردن، ذخیره کردن، آرشیو کردن و دور انداختن لاگها انجام میشود است. ابزارهای مدیریت لاگ برای هندل کردن و مدیریت تمامی این لاگها که توسط محیط سیستم، شبکه، نرمافزار و کاربر تولید شده استفاده میشود. باید دقت داشت که این لاگها فقط توسط sys admin ها استفاده نمیشود بلکه توسط توسعهدهندگان سیستم نرمافزاری نیز قابل استفاده است.
در تصویر ۱ به صورت خلاصه بعضی از مراحل مدیریت لاگ آورده شده است.
این مورد مربوط به این است که لاگها چگونه جمعآوری و چگونه ذخیره شوند. از کجا و از کدام واحدهای نرمافزار لاگ جمعآوری شود و در کجا ذخیره شود. در این مرحله مهم است که اگر دیتای تکراری وارد لاگ شد، آن را نادیده و اضافی درنظر نگیرید و همه اطلاعات مفید مرتبط با لاگ را حتماً جمع آوری کنید. البته این مورد نیاز به trade-off دارد و بستگی دارد چه مقدار از لاگها و کدامشان برای یک سیستم، حیاتی باشد.
در هنگام جمعآوری لاگها باید دقت شود که تمام آنها در یکجا به صورت مجتمع نگه داری شوند. البته این کار مخاطراتی نیز دارد مثلاً میزان حافظه مورد نیاز در این فضای مجتمع بسیار مهم است. اگر این حافظه کم باشد در واقع نمیتوان لاگها را به صورت مرکزی و مجتمع ذخیره کرد. همچنین در ذخیره سازی مجتمع لاگها باید دقت کرد که هر نوع لاگی ممکن است بیاید و همه لاگها از یک نوع نیستند پس باید در هنگام ذخیره کردن مجتمع به آن دقت شود.
مرحله بعدی در مدیریت لاگها، ذخیرهسازی طولانی مدت و نگهداری آنهاست. ممکن است سوال پیش بیاید که این "طولانی" یعنی چه؟ به چه مدت باید لاگ را نگه داشت؟ در پاسخ باید به این نکته دقت شود که سازمان از چه بهروشهایی استفاده میکند و لاگها تا چه مدت برای سازمان اهمیت دارند. پاسخ به این سوال میتواند کمکی برای تخمین مدت زمان نگهداری لاگها باشد.
در واقع این مرحله، مشکلات مرحله قبلی را حل میکند. در این مرحله تصمیماتی مبتنی بر اینکه لاگها پس از چه زمانی حذف یا به یک فضای دیگر متنقل شوند یا اینکه فشردهسازی شوند، گرفته میشود. بهتر است لاگها مهم به صورت تجمعی ذخیره شود و لاگهایی که پس از مدتی اهمیت خود را از دست دادهاند به فضایی دیگر منتقل شوند.
آنالیز و تحلیل لاگ یکی از مهمترین مراحل مدیریت لاگ است چرا که هر دیتایی زمانی معنی پیدا میکند و مهم میشود که روی آن تحلیلی انجام شود. ابزارهای مدیریت لاگ به صورت خودکار، تحلیلهای پرکاربردی ارائه میدهند که در تحلیل آسانتر توسعهدهندگان یا مدیر پایش سیستم بسیار میتواند موثر باشد.
هر ادمین و کسی که با مقدار زیادی داده کار کند حتماً به سرچ و گزارشگیری نیاز دارد. مثلاً باید بتواند لاگهای یک بازه زمانی خاص یا مربوط به جای خاصی از سیستم یا بر حسب مقدار فضایی که اشغال کرده را دریافت کند و بتواند به راحتی در میان متن آنها جستجو کند. در اینجا نیز ابزارهای مدیریت لاگ، کمک بسزایی میکنند.
این ابزار برای مدیریت، لاگگرفتن و تجمیع این لاگها در نرمافزارهای به خصوص اپلیکیشنهای وب و موبایل استفاده میشود. این ابزار به تیم نرمافزاری کمک میکند که هر اروری که توسط زیرساخت اپ یا توسط کاربر یا موارد دیگر رخ داده را پایش و بررسی کنند. با استفاده از sentry بعید است که یک ارور حیاتی یا لاگ مهم، بسیار دیر توسط تیم نرمافزاری شناسایی شود و میتواند در بررسی میزان سلامت نرمافزار نیز موثر باشد. این ابزار دارای SDK های مختلف است که در پلتفرمهای مختلف میتواند استفاده شود. همچنین میتواند این ابزار را در سرور شخصی راه اندازی و استفاده کرد. این ابزار تا 10000 ارور در ماه برای نرمافزارها رایگان است.
ویژگیهای مهم Sentry را میتوان در موارد زیر خلاصه کرد:
کلمه ELK مخفف سه واژه Elasticsearch و Logstash و Kibana (الستیک سرچ، لاگاستش و کیبانا) است. هر کدام از این سه ابزار متنباز را در ادامه توضیح میدهیم. این ابزارها جزو محبوبترین ابزارهای موجود برای مدیریت و آنالیز لاگها و دادههای مختلف هستند.
ابتدا در مورد Logstash صحبت کنیم. Logstash یک ابزار رایگان و متنباز است که لاگها را جمعآوری میکند و سپس یک پردازشگر برای خواندن دیتا و لاگهای مختلف و ذخیره آن در یک یا چند فضا استفاده میشود. این ابزار دارای ورودیها، فیلترها، کدکها و خروجیهای متعدد است که میتواند دیتایی که ممکن است قابل تحلیل نباشد یا غیرقابل خواندن باشد را به دیتایی خوانا و با ارزش بسیار بالا تبدیل کند. این ابزار دارای پلاگینهای متعدد و قوی است که میتواند لاگهای مختلف و دارای تایپهای گوناگون را آنالیز و جمعآوری کند.
این ابزار برای تحلیل دیتای غیرساختیافته بسیار پرکاربرد است.
اکنون به Elasticsearch بپردازیم. Elasticsearch محبوبترین موتورجستجویی است که امروزه استفاده میشود و در واقع مهمترین بخش و قلب ELK است. این ابزار هم یک ابزار رایگان و متنباز است که با جاوا نوشته شده است و دارای API های متعدد HTTP برای استفاده آسانتر جهت جستجوی سریع و کارا بین لاگها یا دادههای مختلف است. این ابزار در زبانهای مختلفی مانند پیاچپی، پایتون و سیشارپ قابل استفاده است.
در میان ابزارهای ELK، ابزار Elasticsearch برای ایندکس کردن و ذخیره داده استفاده میشود به نحوی که خواندن از آن بسیار سریع و با نتایج مرتبط باشد. در واقع Elasticsearch را میتوان یک دیتابیس NoSql دانست.
در هنگام استفاده از Elasticsearch میتوان از کوئریهای مختلف جهت ساخت، حذف، مشاهده و تغییر دیتا استفاده کرد که در این لینک میتوانید خلاصهای از آنها را ببینید. همچنین این ابزار دارای API های مختلف برای چاپ، کلاستر کردن، ایندکس کردن و سرچ کردن میان دادهها و لاگها است. برای این ابزار نیز مانند ابزار Logstash پلاگینهای مختلفی وجود دارد که میتوانند مواردی که توسط این ابزار قابل انجام هستند را گسترش دهند. به عنوان مثال برای گسترش API ها، مدیریت بهتر آنها، مدیریت آسانتر امنیت لاگها و ایجاد هشدار و از این دست موارد، پلاگینهای متعددی برای elasticsearch وجود دارد.
در نهایت به ابزار Kibana میرسیم. از این ابزار جهت داشتن داشبورد و همچنین تحلیل و مشاهده و visual کردن لاگها و دادهها در میان ابزارهای ELK استفاده میشود. این ابزار برای نمایش داده و لاگ بسیار زیاد، مناسبترین گزینه است و میتواند الگوها و قسمتهای مختلف داده را تحلیل کند و بر مبنای تحلیل خود آن را نمایش دهد. همچنین با استفاده از آن میتوانید عملیات جستجو را انجام دهید که در واقع از elasticsearch برای این عمل استفاده میکند. امکان نمایش نمودارها و گرافهای مختلف و امکان شخصیسازی آن به فردی که وظیفه بررسی لاگها را دارد امکان بررسی بسیار خوب و بصری لاگها و دادهها را میدهد.
باید توجه داشت که ابزارهای دیگری مانند splunk نیز وجود دارند که در زمینه مدیریت و سرچ و جمعآوری لاگها و دیتاها کاربردی است اما این ابزار به صورت متن باز در دسترس نیست.
شرکت دانش بنیان آتین آتیه اندیش، مستقر در پارک علم و فناوری دانشگاه تهران، در سال 1396 فعالیت خود را به طور تخصصی در حوزه ارائه خدمات احراز هویت آغاز کرد. مدیریت لاگها و ممیزیها یکی از چندین محصولات مختلف این شرکت است. از ویژگیهای محصول ارائه شده در حوزه مدیریت لاگ توسط این شرکت، میتوان به موارد زیر اشاره کرد:
شرکت داده کاوان تصمیم یار خدمات مختلف نرم افزاری ارائه میدهد که یکی از آنها “پلتکو” نام دارد که “پلتفرم یکپارچه سازی و مدیریت وب سرویس” میباشد. در این پلتفرم تکنولوژیهای قدیم و جدید مدیریت چرخه زندگی وب سرویس ادغام شده و به صورت یک خروجی واحد و کاملا شخصی سازی شده در اختیار سازمانها قرار داده میشود. از مزایای نرم افزار مدیریت لاگها میتوان به موارد زیر اشاره کرد:
این مطلب، بخشی از تمرینهای درس معماری نرمافزار در دانشگاه شهیدبهشتی است.