اگر تا به حال پروژهای را 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. استفاده از دادهها
این دادهی جمع آوری شده، قابلیتهای مختلفی در اختیار ما قرار میدهد که برای مثال میتوان به موارد زیر اشاره کرد:
- گزارشگیری: تهیهی گزارشی از خلاصهی اطلاعات لاگ برای مانیتورینگ و یا مدیر
- آنالیز داده: بسیاری از اوقات لازم است که اطلاعاتی را به دست بیاورید که به راحتی بدست نمیآید. به عنوان مثال، مدل رفتاری کاربری خاص در یک سرویس وب
- بکآپ: دادهی لاگ به علت دارا بودن اطلاعات مهم، میتواند در جایی ذخیره شود که در صورت نیاز بعدا از آن استفاده شود و یا در صورت از دست رفتن داده ی موجود، جایگزین شود.
در این متن شما را با لاگ و کاربردهای آن آشنا کردیم و به اکوسیستم لاگینگ پرداختیم. در ادامه به برخی از سوالاتی که ممکن است تا کنون برایتان پیش آمده باشد، پاسخ میدهیم و سپس کاربردهای فایل لاگ را در سیستمعاملهای مختلف بررسی میکنیم.
فایل لاگ با لاگ سیستم چه تفاوتی دارد؟
فایل log فایلی است که تمام فعالیتها را در سرورها، برنامهها، سیستمها و غیره در بر میگیرد، اما لاگ سیستم یا syslog رکوردی برای یک سیستم یا برنامه خاص است.
آیا فایلهای لاگ سیستم مهم هستند؟
ثبت گزارش (لاگینگ) مهم است، زیرا فایلهای لاگ نشان میدهد که آیا منابع به درستی و بهینه کار میکنند یا خیر. فایلهای لاگ میتوانند اطلاعات مهمی مانند نیاز به ارتقاء یا مناطقی برای بهبود عملکرد را نشان دهند.
سیستم مدیریت لاگ چیست؟
سیستم مدیریت لاگ ابزاری است که برای جمعآوری، مرتبسازی و تجزیه و تحلیل دادههای لاگ از منابع مختلف استفاده میشود. سیستمهای مدیریت لاگ، تمام فایلهای لاگ را متمرکز کرده و ردیابی و رسیدگی به مسائل کلیدی مرتبط با عملکرد برنامه را آسان میکنند.
نمونههایی از فایل لاگ برای سیستمعاملهای مختلف
هر زمان که رویدادی در شبکه رخ دهد، فایلهای لاگ بهطور خودکار توسط کامپیوتر تولید میشوند. دلیل وجود فایلهای لاگ این است که توسعهدهندگان نرمافزار و سختافزار برای عیبیابی و اشکالزدایی راحتتر، ترجیح میدهند به یک رکورد متنی از رویدادهایی که سیستم تولید میکند، دسترسی داشته باشند. هر یک از سیستمعاملهای پیشرو مانند ویندوز و لینوکس بهطور منحصربهفردی برای تولید و دستهبندی لاگها در پاسخ به انواع خاصی از رویدادها پیکربندی شدهاند.
فایلهای لاگ ویندوز
سیستمعامل ویندوز به ازای هر نوع فعالیت هر یک از اجزای سختافزاری یا نرمافزاری خود، یک گزارش رویداد (Event Log) ایجاد میکند. تحلیلگران امنیت شبکه میتوانند از نرمافزارهای تخصصی برای جمعآوری و تجزیه و تحلیل این لاگها، شناسایی الگوها و روندها، و پاسخ به حوادث یا مشکلات احتمالی کاربر استفاده کنند. ویندوز به نحوی پیکربندی شده است تا رویدادها را در شش دسته طبقهبندی کند:
- Application Logs: لاگ برنامه زمانی ایجاد میشود که رویدادی در داخل یک برنامه اتفاق میافتد. این لاگها به برنامهنویسان کمک میکنند تا نحوه عملکرد برنامهها را در طول توسعه برنامه و قبل از انتشار آن درک کرده و اندازهگیری کنند.
- Directory Service Logs: کامپیوتری که برای پاسخ به درخواستهای احراز هویت امنیتی در Windows Server domain (domain controller) پیکربندی شده است، ممکن است directory service logs (لاگهای دایرکتوری سرویس) ایجاد کند. این لاگها تغییرات امتیاز کاربر، عملیات احراز هویت، درخواستها و سایر عملیاتهایی را که در اکتیو دایرکتوری ویندوز انجام میشوند، ثبت میکنند.
- DNS Server Logs: سرور سیستم نام دامنه (DNS) شامل پایگاههای دادهای است که نام میزبان وبسایتهای موجود در اینترنت را با آدرسهای IP آنها مطابقت میدهد. هر بار که به یک صفحه وب جدید میروید، سرورهای DNS در پردازش درخواست نقش دارند و به مرورگر شما کمک میکنند تا به صفحه مناسب برسد. گزارشهای سرور DNS نوع خاصی از فایل لاگ برای ضبط فعالیت در سرور DNS هستند.
- File Replication Service Log: نوع دیگری از فایل لاگ وجود دارد که فقط برای domain controllerها در دسترس است. این لاگها اطلاعات مربوط به تکرار فایلهایی که در کامپیوتر انجام میشود را رکورد میکنند.
- Security Log: لاگهای امنیتی در پاسخ به رویدادهای امنیتی که در کامپیوتر رخ میدهند، ایجاد میشوند. این موارد میتواند شامل رویدادهای مختلفی مانند ورود ناموفق، تغییر رمز عبور، درخواستهای احراز هویت ناموفق، حذف فایل و موارد دیگر باشد. مدیران شبکه میتوانند تعیین کنند که کدام نوع رویدادها به عنوان رویدادهای برنامه در نظر گرفته شوند و کدام یک باید در گزارش امنیتی وارد شوند.
- System Log: لاگهای سیستم رویدادهایی را که در خود سیستمعامل رخ میدهند، مانند خطاهای درایور هنگام راهاندازی، رویدادهای ورود و خروج و سایر فعالیتها، ثبت میکند.
فایلهای لاگ لینوکس
سیستمعامل لینوکس (Linux) برای تولید و ذخیره فایلهای لاگ به طور خاصی پیکربندی شده است. لینوکس یک جدول زمانی پیوسته از رویدادهایی که در سیستم اتفاق میافتد را ایجاد میکند. این رویدادها شامل هر رویداد مربوط به سرور، کرنل و برنامههای در حال اجرا میشود. لینوکس رویدادها را در چهار دسته مجزا قرار میدهد:
- Application logs
- Event logs
- Service logs
- System logs
این دستهبندیها مشابه دستههایی هستند که توسط سیستمعامل ویندوز استفاده میشود.
فایلهای لاگ iOS
iOS در مقایسه با سایر سیستمعاملها، رویکرد منحصر به فردی را برای تولید گزارش رویداد اتخاذ میکند. iOS تمام رویدادهایی را که در سیستم اتفاق میافتد ثبت نمیکند، بلکه فقط اسنادی را در زمان خرابی برنامهها ایجاد میکند. نسخههای بالاتر iOS (10.0 و بالاتر) یک API ارائه میدهند که میتواند برای ثبت رویدادهای برنامهای که در سیستم اتفاق میافتند استفاده شود. این API به مدیران شبکه اجازه میدهد تا به دادههای فایل لاگ در موارد زیر دسترسی داشته باشند:
- امنیت یکپارچهسازی
- پرداخت اپل (Apple Pay)
- رمزگذاری دادهها
- کنترلهای دستگاه
- سرویسهای اینترنت
- امنیت شبکه
- کنترلهای خصوصی
- مدیریت پسورد کاربر
فایل لاگ در شبکه توزیع محتوا (CDN)
شبکه توزیع محتوا (CDN) مجموعهای از سرورهای توزیعشده است که برای تحویل محتوای وب در سریعترین زمان ممکن به دست کاربران طراحی شدهاند. لاگهای CDN که قابل تجزیه و تحلیل هستند، اطلاعات بسیار ارزشمندی ارائه میدهند. چرا لاگ CDN ارزشمند است؟
CDNها میزبان سرورهای زیادی در سرتاسر جهان هستند و به گونهای طراحی شدهاند که علاوه بر افزایش ترافیک وبسایت بدون نیاز به حداکثر رساندن load balancerها، امکان حفظ امنیت در برابر بسیاری از حملات سایبری را فراهم میکند. تمامی این فعالیتها نیازمند نظارت دقیق است که با گزارشات نوشته شده در فایل لاگ میتوان آنها را بررسی کرد.
کار با لاگهای CDN
فرمت زیر یک فرمت بسیار رایج از لاگ دسترسی به وب است. در ادامه هر یک از بخشهای این فرمت را تجزیه و تحلیل میکنیم:
127.0.0.1 username [10/Oct/2021:13:55:36 +0000] “GET /my_image.gif HTTP/2.0” 200 150 1289
IP Address (127.0.0.1): این قسمت، آدرس IP منبعی را نشان میدهد که کاربر از آنجا درخواست ارسال میکند. این اطلاعات بسیار کاربردی است، زیرا اگر تعداد زیادی درخواست از همان آدرس IP را مشاهده کنید، متوجه میشوید که شخصی دارد از وبسایت شما سوء استفاده میکند.
Username (username): برخی از ارائه دهندگان، هدر Authorization درخواستهای ورودی را برای پیدا کردن نام کاربری (Username) رمزگشایی میکنند. این کار برای پیدا کردن کاربری که اقدام به فعالیتهای مخرب کرده است، کاربرد دارد. برای مثال، درخواست احراز هویت اولیه حاوی نام کاربری و رمز عبور رمزگذاری شده است. اگر هر گونه فعالیت مخربی شناسایی شود، میتوان آن را ردیابی و کاربر موردنظر را پیدا کرد.
Timestamp (10/Oct/2021:13:55:36 +0000): همانطور که از نام آن پیداست، این بخش از گزارش زمان ارسال درخواست را نشان میدهد. این قسمت معمولا یکی از مقادیر مهمی است که در نمودار نشان داده میشود. به عنوان مثال، تشخیص جهش ناگهانی در ترافیک.
Request Line (“GET /my_image.gif HTTP/2.0”): این قسمت، نوع درخواست و آنچه درخواست شده را نشان میدهد. به عنوان مثال، میبینیم که در اینجا یک درخواست HTTP GET صادر شده است. این بدان معناست که کاربر به احتمال زیاد چیزی از سرور درخواست کرده است. مثال دیگر ممکن است به جای GET، POST باشد که در آن کاربر چیزی را به سرور ارسال میکند. همچنین، میتوانید ببینید کدام منبع درخواست شده و از کدام نسخه پروتکل HTTP استفاده شده است.
HTTP Status (200): وضعیت HTTP نشان میدهد که آیا سرور شما قادر به انجام درخواست بوده است یا خیر. طبق قانون، اگر کد وضعیت HTTP شما با 2 شروع شود، به احتمال زیاد موفق بوده است، در غیر این صورت نشان دهنده وضعیت متفاوتی است. به عنوان مثال، کدهای وضعیت 4XX نشان میدهد که درخواست به دلایلی انجام نشده است؛ مثلا، عدم احراز هویت یا کمبود منبع، مانند خطای رایج 404.
Latency (150): تأخیر (Latency) یک معیار کشنده برای ردیابی محسوب میشود. تأخیر مدت زمانی است که بین زمان دریافت درخواست توسط CDN شما و ارسال پاسخ به کاربر طول میکشد. افزایش زمان تأخیر برای کاربران به معنای کاهش سرعت وبسایت است و میتواند اولین نشانهای باشد که مشکلی به وجود آمده است.
Response size (1289): اندازه بدنه پاسخ یک مقدار است که اغلب نادیده گرفته میشود، اما معیار فوق العاده مهمی است. اگر بدنه پاسخ بزرگ باشد و بیش از حد مورد استفاده قرار بگیرد، میتواند کار بسیار بیشتری را به سرور تحمیل کند.
هر زمان که از CDN استفاده میکنید، فایلهای لاگ که معدن طلایی از اطلاعات مفید هستند، ایجاد میشوند تا الگوی رفتار کاربران، عملکرد سرویس خود و تعداد درخواستهای مخربی که به وبسایت شما میرسد را ببینید و آنها را بهتر درک کنید. این بینشها برای یادگیری و رشد خدمات شما اساسی هستند و با استفاده از این اطلاعات میتوانید با خیال راحت از آنها برای رسیدن به اهداف فنی-تجاری خود استفاده کنید.