بهطور کلی، نرمافزارهای کامپیوتری هنگامی که رویدادی رخ میدهد، اطلاعات مربوط به آن را در فایلهای لاگ برنامهها ثبت میکنند. مثالهایی از این رویدادها ممکن است شامل لاگ انتقال داده توسط وبسرور، لاگ تکمیل موفقیتآمیز پشتیبانگیری توسط سرور پایگاه داده یا لاگ درخواستهای اتصال ناموفق توسط فایروال باشند. تیمهای فناوری اطلاعات (IT)، بهطور معمول از دادههای لاگ برنامهها برای بررسی اختلالها، رفعاشکال یا تحلیل رخدادهای (security incidents) امنیتی استفاده میکنند. تجزیهوتحلیل لاگهای برنامهها ممکن است به تیمهای فناوری اطلاعات کمک کند تا علت اصلی حوادث را شناسایی کنند. با ورود سیستمهای بیشتر مدیریت لاگ به بازار، کسبوکارها از لاگهای برنامهها برای اهدافی فراتر از رفعاشکالات استفاده میکنند. آنها از رویدادهای لاگشده برای بررسی رخدادهای امنیتی، ردیابی رفتار مشتریان، برنامهریزی ظرفیت سیستم یا بررسی پایبندی به مقررات استفاده میکنند.
در این مقاله، به بررسی این موضوع میپردازیم که لاگ برنامه چیست، انواع مختلف لاگهای برنامه کداماند و چگونه یک ابزار مدیریت متمرکز لاگ، به شما کمک میکند تا بینشهای عملی کسبوکار را از این لاگها استخراج کنید.
لاگ برنامه چیست؟
برنامههای نرمافزاری، هنگامی که رویدادی درون برنامه اتفاق میافتد یا بر آن تأثیر میگذارد، لاگ تولید میکنند. بهطور معمول، نرمافزارها، اطلاعات مربوط به لاگ را در یک فایل، روی سرور نرمافزار ذخیره میکنند. برخی سازمانها برای صرفهجویی در فضای دیسک، نرمافزارها را طوری تنظیم میکنند که لاگهای خود را به یک پوشۀ مشترک در شبکه، به یک سرور اختصاصی Syslog، یا از طریق Webhook به یک برنامۀ ثبت لاگ ارسال کنند. نرمافزارهای مبتنیبر ابر نیز لاگهای خود را در سرویس لاگ ابری ذخیره میکنند.
برخی از رویدادهای لاگ، مربوط به وضعیتهای داخلی برنامه هستند. مثالهایی از این رویدادها عبارتاند از:
- نشت حافظه (Memory Leaks)
- خطاهای مسیر ناموجود
- استثناهای مدیریتنشده در کد
- خرابی سیستم
انواع دیگر رویدادها، مربوط به عوامل خارجی هستند که برنامه، آنها را تشخیص میدهد. مثالهایی از این رویدادها عبارتاند از:
- هشدارهای کمبود فضای دیسک
- ریبوتهای سرور (راهاندازی مجدد سرور)
- قطع شدن دسترسی شبکه
همۀ نرمافزارها با یکدیگر متفاوتاند؛ بنابراین رویدادهای ثبتشده، به این بستگی دارند که توسعهدهندگان، چگونه برنامه را برای ثبت رویدادها پیکربندی کردهاند. بهطور معمول، رویدادهای بحرانی مانند خطاها یا هشدارها، بهطور پیشفرض ثبت میشوند؛ بااینحال، ممکن است رویدادهای مربوط به عملیات موفق مانند تکمیل انتقال داده، پشتیبانگیری موفق یا خاموش شدن بدون مشکل نیز مشاهده شود.
برخی از فیلدهای رایج، در بیشتر لاگهای برنامه وجود دارند:
- تایم استمپ (Timestamp): تاریخ و زمان رویداد که ممکن است بهصورت زمان محلی سرور یا منطقۀ زمانی دیگری مانند UTC باشد.
- سطح لاگ (Log Level): شدت رویداد است. برخی از سطوح لاگ شامل DEBUG ،INFO ،WARNING و CRITICAL هستند.
- نام کاربری (Username): کاربر شبکه (یا کاربری که وارد شده) که مسئول رویداد است. برای بعضی از رویدادهای مرتبط با سیستم، این قسمت خالی خواهد بود.
- آدرس IP مبدأ (Source IP): آدرس IP مشتری است. برای رویدادهای محلی، این قسمت ممکن است خالی باشد.
- آدرس IP مقصد (Destination IP): آدرس IP سرور محلی است.
- پیام رویداد (Event Message): شرح رویداد که معمولاً بهصورت متن کوتاه است.
انواع لاگ برنامه
با توجه به رویدادهای لاگشده، انواع مختلفی از لاگهای برنامه وجود دارد:
لاگهای دسترسی، احراز هویت و مجوز
این لاگها نشان میدهند:
- چه کسی وارد سیستم شده یا از آن خارج شده است.
- آیا عملیاتهای انجامشده توسط افراد، موفقیتآمیز بوده است یا خیر.
- چه کسی به منابع برنامه مانند فایلها یا جدولهای پایگاه داده، دسترسی داشته است.
- چه کسی دادهای را درخواست کرده است.
- چگونه کاربر، در شبکه حرکت کرده است.
این لاگها برای رصد اقدامات کاربر در شبکه، مفید هستند. میتوانید از این لاگها برای رفع مشکلات دسترسی، بررسی رخدادهای امنیتی یا حتی تحلیل رفتار کاربران استفاده کنید.
مثال زیر، یک لاگ دسترسی Apache را نشان میدهد:
127.0.0.1 - jbloggs [12/Oct/2021:13:55:36 -0700] "GET/server-status HTTP/1.1" 404 2457
در این مثال، لاگ نشان میدهد که کاربر jbloggs، در تاریخ ۱۲ اکتبر ۲۰۲۱، ساعت ۱:۵۵ بعدازظهر، به وقت محلی سرور، به وبسرور محلی دسترسی پیدا کرده است. کاربر، به صفحۀ وضعیت سرور در دایرکتوری روت وبسرور دسترسی پیدا کرده؛ اما وبسرور، خطای 404 (صفحه پیدا نشد) را بازگردانده است. حجم دادههای منتقلشده، ۲۴۵۷ بایت بوده است.
لاگهای تغییرات
لاگهای تغییرات، تغییرات انجامشده درون برنامه را نشان میدهند. نمونههایی از این تغییرات عبارتاند از:
- افزودن کاربران جدید
- تغییر مجوزها
- افزودن آدرسهای IP به لیست سفید
- تغییر پارامترهای پیکربندی
- بهروزرسانی نسخههای نرمافزاری
هنگامی که چیزی در برنامه، از کار میافتد، یکی از علتهای احتمالی میتواند تغییرات اخیر در پیکربندی باشد. لاگهای تغییرات، کمک میکنند تا مشخص شود چه چیزی تغییر کرده، چه زمانی تغییر کرده و چه کسی، این تغییر را ایجاد کرده است. این اطلاعات به شما کمک میکنند تا مشکل را بهسرعت برطرف کنید. همچنین، تیم عملیات امنیتی (SecOps) میتواند از لاگهای تغییرات برای شناسایی رخدادهای امنیتی استفاده کند. برای مثال، تیم میتواند هشدارهایی را برای ایجاد رخدادهای کاربران جدید با دسترسی ویژه یا ثبت کتابخانههای نرمافزاری جدید، تنظیم کند. رخداد زیر، نشان میدهد که مدیر اکتیو دایرکتوری (Active Directory)، یک کاربر جدید ایجاد کرده است:
A user account was created.
Subject:
Security ID: DOMAIN-FR\administrator
Account Name: administrator
Account Domain: DOMAIN-FR
Logon ID: 0x20f9d
New Account:
Security ID: DOMAIN-FR\John.Bloggs
Account Name: John.Bloggs
Account Domain: DOMAIN-FR
لاگهای خطا
لاگهای خطا، جزئیات بیشتری را دربارۀ اقداماتی که در برنامه، بهاشتباه انجام شده است، ارائه میدهند. برخی از خطاها ممکن است باعث کاهش عملکرد نشوند؛ اما اگر حل نشوند، منجر به اختلال در سرویس میشوند. مانیتورینگ یا نظارت بر لاگهای خطا میتواند به شناسایی مشکلات، قبل از تبدیل شدن به رخداد کمک کند و در نتیجه میانگین زمان بازیابی (MTTR) را کاهش دهد. تحلیل زمانی این لاگها میتواند الگوهای عملکردی یا رفتاری کاربران را که به شرایط بروز خطا منجر میشوند، مشخص کند. برای مثال، اگر کاربران، بهطور مداوم با خطاهای تایماوت (Timeout) مواجه شوند، این مسئله میتواند نشاندهندۀ تأخیر در شبکه، مشکلات کمبود حافظه یا تنظیمات نادرست آستانۀ زمان انتظار برای اتصال باشد. خطاهای ناشی از کتابخانههای برنامه نیز ممکن است نشاندهندۀ ناسازگاری، پس از بهروزرسانی یا استفاده از نسخههای پشتیبانینشدۀ کتابخانه باشند. زمانی که لاگهای خطا، استثناهای مدیریتنشده در برنامه را نشان میدهند، این اطلاعات میتوانند به توسعهدهندگان کمک کنند تا سیستم را با ارائۀ یک وصله (Patch)، بهبود بخشند.
خطاهای برنامه ممکن است بهدلایل مختلفی رخ دهند و به همین دلیل رویدادهای موجود در لاگهای خطا میتوانند بسیار متنوع باشند. برخی از خطاهای رایج که در لاگها ثبت میشوند، عبارتاند از:
- هشدارهای کمبود فضای دیسک
- نزدیک شدن به تاریخ انقضای مجوز
- هنگ کردن برنامه
- تمام شدن ظرفیت حافظه
- تخلیۀ حافظه (Memory Dump)
- و غیره
کد زیر، نمونهای از یک لاگ خطا را نشان میدهد که بهدلیل کمبود فضای دیسک، ایجاد شده است:
"EventTime": "2022-06-22T13:48:55.445645-08:00",
"Hostname": "WIN-26101992",
"Message": "There is not enough disk space available to complete this operation",
"Severity": "CRITICAL"
لاگهای دسترسیپذیری
لاگهای دسترسیپذیری، اطلاعاتی را دربارۀ وضعیت دسترسی برنامۀ شما نشان میدهند. نمونههایی از این لاگها عبارتاند از:
- لاگهای کلاستر (Cluster): تغییراتی مانند Failoverها یا اضافه و حذف شدن گره (Node)های شبکه را نشان میدهند.
- لاگهای سیستم: موفقیتآمیز بودن عملیات پشتیبانگیری دادهها را ثبت میکنند.
- لاگهای سیستمعامل: رویدادهای خاموش شدن و راهاندازی مجدد سیستم را نشان میدهند.
- لاگهای تکثیر (Replication): تأخیرها در فرایند تکثیر دادهها را ثبت میکنند.
لاگهای دسترسیپذیری برای ایجاد گزارشهای SLA (توافقنامۀ سطح سرویس) مفید هستند. با استفاده از این لاگها، میتوانید زمان فعالیت برنامه (Uptime) را محاسبه کنید، خاموش شدنهای برنامهریزینشده یا خطاهای سرویس را بررسی کنید، یا رفتارهای مورد انتظار، در فرایند نگهداری سرور ویندوز را تأیید کنید. کد زیر، نمونهای از یک ورودی لاگ دسترسیپذیری را نشان میدهد:
"EventTime": "2022-06-22T13:48:55.445645-08:00",
"Hostname": "WIN-12101992",
"Uptime": "72000",
"LastReboot": "2022-06-21T17:48:55.487655-08:00"
"Severity": "INFO"
مزیتهای استفاده از راهکارهای مدیریت لاگ
تحلیل لاگهای برنامهها، بهطور مستقیم روی سیستم میزبان ممکن است چالشبرانگیز باشد. لاگهای برنامهها اغلب پرحجم، پیچیده و دشوار برای همبستگی هستند. همچنین برخی از لاگها، بهصورت پیوسته، بهروزرسانی میشوند؛ بنابراین پیگیری تمام پیامها ممکن است دشوار باشد. علاوهبر این، برنامههای توزیعشده، از بخشهای متحرک زیادی تشکیل شدهاند و هر بخش، لاگ مخصوصبهخود را دارد. همبستگی تمام لاگها برای یک رویداد خاص میتواند مانند جستوجوی سوزن در انبار کاه باشد.
در اینجا، راهکارهای مدیریت لاگها کمککننده هستند. یک راهکار مدیریت لاگ، لاگهای برنامهها را از تمام سیستمها، جمعآوری و آنها را تحلیل میکند و سپس امکان جستوجو در دادهها را فراهم میسازد. این امر، منجر به چندین مزیت میشود:
عیبیابی سریعتر
راهکارهای مدیریت لاگ، عیبیابی مشکلات را آسانتر و سریعتر میکنند؛ زیرا تمام لاگها، از طریق یک رابط کاربری ساده و قابل پیمایش، در دسترس هستند. اپراتورها نیازی ندارند به هر سرور، بهطور جداگانه وارد شوند یا از دستوراتی مانند tail و grep برای فیلتر کردن نتایج استفاده کنند.
دسترسی به اطلاعات مرتبط
میتوانید از پیکربندیهای تجزیۀ لاگ سفارشی استفاده کنید تا فقط دادههای مرتبط را از لاگهای برنامه استخراج کنید. این کار، به محدود کردن دادههای بازگشتی در جستوجوها کمک کرده و داشبوردها و نمودارها را سادهتر میکند.
تحلیل زمانی
راهکارهای مدیریت لاگ، به شما امکان میدهند دادهها را برای مدتزمان طولانیتری، در مقایسه با ذخیرهسازی در یک سرور یا فضای شبکه، نگهداری کنید. بهاینترتیب، میتوانید تحلیل زمانی بهتری از دادههای برنامه انجام دهید. این نوع تحلیل برای گزارشگیری روندها، بسیار ارزشمند است.
همبستگی لاگها (Log Correlation)
راهکارهای مدیریت لاگ، دارای تجزیهکنندههای داخلی (Built-In parsers) هستند که انواع مختلف لاگها را تشخیص میدهند. این امر، جمعآوری لاگها از برنامههای مختلف و همبستگی آنها با استفاده از فیلدهای مشترک مانند نام کاربری یا آدرس IP را آسان میکند. همبستگی رویدادهایی که بهظاهر نامرتبط هستند، میتواند زمینهای برای رویدادها ایجاد کند که در غیر این صورت آشکار نبود.
نمایش بصری (Visualization)
داشبوردهایی با نمودارها، چارتها یا نقشههای جغرافیایی، شناسایی روندها و ناهنجاریها یا مواردی را که بهاشتباه در برنامهها پیش میروند، آسان میکنند.
هشدارها
راهکارهای مدیریت لاگ، به شما امکان میدهند هشدارهایی را براساس معیارهای از پیش تعریفشده تنظیم کنید. این معیارها شامل آستانههایی است که روی مقدار یک فیلد خاص تنظیم میشوند. هنگامی که رویدادهای ثبتشده، نشاندهندۀ عبور مقدار فیلد از آستانه باشند، هشدارها فعال و تیمهای مرتبط مطلع میشوند. برای مثال، میتوانید هشدارهایی را برای خطاهای جدی یا بحرانی، فعالیتهای مشکوک ورود به سیستم، یا استفادۀ زیاد از CPU تنظیم کنید. بعضی از راهکارهای مدیریت لاگ میتوانند بهصورت خودکار، اقداماتی مانند ایجاد تیکت پشتیبانی یا اجرای مراحل اصلاحی خودکار از طریق یک پلیبوک را فعال کنند.
این مقاله، ترجمهای از مقالۀ CrowdStrike است.