اگر تا به حال پروژهای را deploy کردهاید، حتما با واژهای به نام لاگ (log) آشنایی دارید. در این جا سعی میکنیم که در مورد اینکه لاگ چیست، چه استفادهای دارد، چگونه سطح بندی میشود، چگونه میتوان از آن بهره برد و اینکه چه سرویسهای مختلفی با استفاده از آن میتوان راهاندازی کرد، صحبت کنیم. این موضوع در همینجا بسته نمیشود و قسمتهای بیشتری در مورد آن در آیندهی نزدیک اضافه خواهد شد. پس عجالتا این قسمت را قسمت اول مینامیم و در آینده قسمتهای مختلفی اضافه خواهیم کرد.
با مطالعهی این قسمت با تعاریف اولیه، کاربردها، سطحبندی و نحوهی استفاده از لاگ بهطور کلی آشنا میشوید.
جالب است بدانید که یکی از معنیهای Log بهطورکلی، بخشی از تنه یا شاخهای بزرگ از درخت است که افتاده یا قطع شدهاست.
ولی همانطور که میدانید، در علوم کامپیوتر با معنای دیگری از آن روبرو میشویم، که میگوید این یک ثبت رسمی از وقایعی است که در نرمافزار ما اتفاق افتادهاست. بسیاری از نرمافزارها میتوانند با استفاده از لاگهای با سطوح مختلف، اطلاعات دقیق تری راجع به کاری که در حال انجام است، ارائه دهند.
لاگ چیست؟
حال بگذارید کمی دقیقتر لاگ را بررسی کنیم. لاگ سادهترین انتزاع ذخیرهسازی است. لاگ در واقع چیزی است که یک سیستم رایانهای، دستگاه، نرمافزار و … با هدفی خاص تولید میکند. این هدف کاملا به منبعی که در حال ایجاد آن است بستگی دارد.
در اینجا به چند مثال اشاره میکنیم:
- ورود و خروج کاربران در سیستمهای یونیکس
- اطلاعات مربوط به دیسکها، بالاخص زمانی که برای آنها اتفاقی میافتد
- بررسی سیستم، برای مانیتور وضعیت CPU یا RAM
- پذیرش یا عدم پذیرش ACL (Access Control Lists) توسط فایروال
اطلاعاتی که لاگ در اختیار ما میگذارد، یک منبع بسیار مهم برای کسب دانش است. به عنوان مثال با استفاده از لاگ یک سرور وب، به راحتی میتوان تشخیص داد که چه تعداد کاربر و از چه موقعیتهای جغرافیایی به فایل خاصی دسترسی داشتهاند و یا با تجمیع لاگهای مربوط به سیستمهای یک شرکت میتوان تشخیص داد که چه خطرات امنیتی برای این سیستمها وجود دارند و یا حتی پیشبینی کرد که در آینده ممکن است چه خطراتی برای آنها وجود داشتهباشد.
سطحبندی لاگها به چه صورت است؟
لاگها را به روشهای مختلفی میتوان دستهبندی کرد اما یکی از رایجترین آنها که به نحوی لاگها را در سطوح مختلفی قرار میدهد به صورت زیر است:
- Info: پیامهای این نوع به گونهای هستند که به ادمین اطلاع میدهد که اتفاق معمولی افتادهاست. به عنوان مثال در سیستم عامل کاربر خاصی لاگین کردهاست.
- Debug یا اشکالزدایی: پیامهای اشکالزدایی اصولا برای کمک به توسعهدهندگان نرمافزار برای عیبیابی و شناسایی مشکلات موجود در اجرای برنامه از سیستمهای نرمافزاری تولید میشوند.
- Warning یا هشدار: پیامهای هشدار مربوط به شرایطی است که ممکن است سیستم به چیزهایی نیاز داشتهباشد که در دسترس نیستند، اما عدم وجود آنها تاثیری بر عملکرد سیستم نخواهد داشت.
- Error یا خطا: پیامهای خطا برای زمانی است که سیستم دچار خطایی میشود. به عنوان مثال یک سیستم عامل ممکن است هنگامی که نمیتواند بافرها را با دیسک همگامسازی کند، لاگ خطا صادر کند.
- Alert یا هشدار: هشدار به معنای این است که اتفاق مهمی افتاده است و باید سریعا به آن رسیدگی شود.
اما یک پیام لاگ چه فرمتی دارد؟
بنیادیترین اجزای لاگ شامل فیلد تاریخ (Timestamp)، منبع لاگ و داده میباشد.
1. Timestamp
این پارامتر، مشخصکنندهی این است که این لاگ در چه زمانی تولید شدهاست.
2. منبع
منبع لاگ، سیستم یا سرویسی است که این لاگ را تولید کرده است که میتواند نام هاست، آی پی و یا نام سرویس باشد و داده هم در واقع اطلاعاتی است که این لاگ در اختیار قرار میدهد.
3. دادهی لاگ
دادهی لاگ استاندارد مشخصی ندارد و میتواند هر فرمتی داشته باشد، اما بسیاری از سازمانها، سرویسها یا نرمافزارها قرارداد خاصی برای آن تعریف میکنند. لاگها میتوانند شامل اطلاعات دیگری مانند پورت منبع یا مقصد، نام کاربر، میزان بایت منتقل شده و … باشد.
مثال از فرمت
یک فرمت ساده از لاگ میتواند به صورت زیر باشد:

این یک لاگ آپاچی میباشد که شامل قسمتهای مختلفی است که اطلاعات مرتبط با یک درخواست HTTP به یک فایل مشخص را نشان میدهد.
اکوسیستم لاگینگ چیست؟
اکوسیستم لاگ که اصولا به زیرساخت لاگ گفته میشود، شامل همهی اجزایی است که برای تولید، فیلتر، نرمالسازی، تجزیه و تحلیل و ذخیرهسازی بلند مدت دادههای لاگ مورد استفاده قرار میگیرد. در نهایت هدف چنین اکوسیستمی این است که به ما این امکان را بدهد که مسائل موجود را حل کنیم. این مساله دقیقا به کاری که انجام میدهیم بستگی دارد. به عنوان مثال زمانی که ما یک سرویس وب داریم و کاربران در حال استفاده از آن هستند، سرعت سرویسدهی، امنیت استفاده کاربران، پایداری سرویس و (قابل اطمینان بودن)reliability آن میتواند یک مسالهی مهم باشد.
اما برای راهاندازی چنین اکوسیستمی چه باید کرد و چگونه میتوان این اجزا را در کنار هم قرار داد؟
1. برنامهریزی
اولین مساله برنامهریزی است. هر شرکتی برای راهاندازی چنین اکوسیستمی حتما دلایل مهمی دارد. برای این کار نیاز است که قبل از هر چیزی برای راهاندازی سوالات مناسبی را از خود بپرسیم. در اینجا به چند مثال ساده اشاره میکنیم:
- چه قسمتهایی از سیستم نیاز به لاگینگ دارد؟ در مثال سرور وب، آیا نیاز است که ارورها لاگ شوند؟
- آیا نیاز است که اطلاعات کاربران لاگ شوند؟
- آیا نیاز است که اجزای زیرساختی که سرویس بر روی آن است سیستم لاگینگ داشته باشند؟
- چه نیازهای ذخیره سازی بلند مدتی نیاز است؟
- دادههای لاگ را چه مدت نگه خواهیم داشت؟
- چه سایزی خواهند داشت؟
- سرعت افزایش حجم داده چقدر خواهد بود؟
- چه اطلاعاتی برای ما مهم است که باید جمعآوری شوند؟
- نوع فایلهایی که درخواست داده میشوند؟
- نوع کوئریهایی که در درخواست وجود دارد؟
- چه Headerهایی در درخواست وجود دارند؟
- درخواست http بوده یا https؟
- حجم دادهی درخواستی چقدر بوده است؟
2. منابع
در مرحلهی بعد مشخص کنید که چه منابعی برای تولید لاگ وجود دارند. هر کدام از این منابع راههای خاص خود برای تولید لاگ را دارند. اگر سرویس باشد، توسعهدهندهی آن میتواند لاگ را تولید کند. اگر سختافزار خاصی باشد، تمپلیت خاص خود را دارد و … . برای این کار شما فقط لازم است که بر اساس نیازهای خود، لاگ هر کدام از این سرویسها را فعال کنید و لاگهای خود را به جایی که میخواهید ارسال کنید.
3. فیلترکردن و نرمالسازی
مرحلهی بعد، فیلتر کردن و نرمالسازی لاگ است. فیلتر کردن به معنای حذف یا نگهداشتن قسمتی از لاگها بر اساس نیاز شماست. بعضی از منابع، خود توانایی این کار را دارند ولی برخی از منابع نیز چنین امکاناتی ندارند و شما نیاز دارید که خود به فکر فیلتر کردن لاگها باشید.
نرمالسازی، به معنای تبدیل لاگ به فرمتهای مورد نظر خودمان است. لاگ اصولا یک خط تکست است و ما میتوانیم اطلاعات مختلف را از این خط استخراج کنیم و به فرمتی که دوست داریم تبدیل کنیم. وقتی داده فرمت مورد نظر ما را داشته باشد، دسترسی به اطلاعات آن نیز برای ما بسیار آسانتر خواهد بود. به عنوان مثال فرمت استاندارد لاگ بالا پس از نرمالسازی میتواند به فرمت زیر تبدیل شود:

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

در این متن شما را با لاگ و کاربردهای آن آشنا کردیم و به اکوسیستم لاگینگ پرداختیم. در ادامه سعی خواهیم کرد که هر کدام از این مفاهیم را باز کرده و به طور دقیقتری بررسی کنیم و در ادامه به بررسی این موضوع در سیستمهای توزیعشده خواهیم پرداخت.