لاگ فایلی است که هر بار که رویدادی خاص (اجرای یا توقف برنامه، رخدادهای برنامه، رخدادهای سیستمی و ...) در سامانه رخ میدهد به طور خودکار تولید میشود. بسته به نیاز ممکن است تنها بخشی از این رویداد ذخیره شوند در حالی که تقریبا میتوان تمامی رویدادها را به صورت خودکار ذخیره نمود.
فایلهای لاگ معمولاً مجموعهای از رخدادها هستند که مهمترین ویژگی این رخدادها، رمان رخداد میباشد. به عبارتی هر گزارش و رویدادی که لاگ میشود، میتواند ویژگیهای زیادی را متناسب با نوع رویداد داشته باشند اما مهمترین ویژگی آنها ویژگی زمان میباشد که بتوانیم بر اساس آن رخدادها را بر اساس زمان مرتب نماییم.
این رخدادها هر چیزی را که در پشت صحنه در سیستمعاملها یا برنامههای نرمافزاری اتفاق میافتد ضبط میکنند. به طور خلاصه، آنها هر چیزی را که سرور، شبکه، سیستمعامل یا برنامه فکر میکند برای پیگیری مهم است، ضبط میکنند. گزارشها میتوانند انواع رویدادها را از جمله پیامها و تراکنشهایی که بین کاربران مختلف رخ میدهد، آنچه در حین پشتیبانگیری اتفاق افتاده، خطاهایی که اجرای برنامه را متوقف کرده است یا فایلهایی که توسط کاربران از یک وبسایت درخواست شده است، مستند کنند.
انواع مختلفی از لاگها وجود دارند. گزارشهای حسابرسی، گزارشهای تراکنش، گزارشهای رویداد، گزارشهای خطا، گزارشهای پیام تنها نمونههایی از فایلهای گزارش مختلف هستند و هر کدام هدف متفاوتی را دنبال میکنند. آنها در طیف گستردهای از پسوندها، مانند log، txt یا پسوندهای اختصاصی مختلف وجود دارند. بسته به پسوند و خوانایی، می توان آنها را با یک ویرایشگر متن استاندارد یا برنامه پردازش کلمه (مثلا Microsoft Word) باز کرد یا ممکن است نیاز به برنامههای خاصی داشته باشد. برخی از ابزارهای مدیریت لاگ این قابلیت را دارند که گزارش برنامهها یا سامانههای مختلف را بخوانند و دادههای مفید از آنها را استخراج کنند.
مدیریت لاگ (گزارش) یک اصطلاح جامع است که شامل تمامی فعالیتها و فرآیندهایی میشود که به منظور تولید دادهی گزارش، جمعآوری آن، متمرکز کردن، تجزیه و تحلیل آن، انتقال، ذخیرهسازی، بایگانی و مدیریت حجم عظیمی از دادههای گزارش تولید شده (اگر مدیریت نشوند، به زودی با محدودیت فضای ذخیرهسازی مواجه میشویم) انجام میشود. ابزارهای مدیریت لاگ برای رسیدگی به تمام گزارشهای تولید شده توسط برنامهها، سیستمها، شبکهها، نرمافزارها یا کاربران و استفاده از آنها به منظور رفع نیازهای سازمان میباشد. مدیریت گزارش نه تنها برای توسعهدهندگان بلکه حتی برای بخشهای مختلف یک سازمان مثل بخش فناوری اطلاعات نیز مهم میباشد. این به این دلیل است که استفاده از لاگها برای اهداف امنیتی، بهبود عملکرد یا عیبیابی در بسیاری از بخشهای فناوری اطلاعات و نقشهای شغلی گسترده قابل استفاده است.
طبق ویکیپدیا، میتوانیم این فیلد را به شش زیر بخش تقسیم کنیم:
● تولید لاگ (گزارش)
● تجمیع لاگها و متمرکزسازی (aggregation)
● ذخیره و نگهداری طولانی مدت لاگ
● چرخش لاگها (log rotation)
● تجزیه و تحلیل لاگها
● جستجو و تولید گزارش از لاگها
در ادامه با جزئیات بیشتر موارد بالا آشنا میشویم.
اولین قدم در مدیریت لاگها، تعیین نحوه تولید دادههای گزارش و محل ذخیره آنها میباشد. لاگهای شما دادههایی را از بخشهای مختلف محیط شامل میشوند: سیستمعامل، فایروالها، سرورها، سوئیچها، روترها، برنامهها، پایگاهدادهها و ...
وقتی صحبت از ذخیرهسازی به میان میآید، سامانههای امنیتی مانند فایروال، سامانههای تشخیص نفوذ یا سامانههای دارای نرخ درخواست بالا دارای حجم زیادی داده برای لاگشدن هستند و این سامانهها معمولاً دهها یا صدها رویداد در ثانیه تولید میکنند. تولید این حجم از داده جدای از بحث چالشهای جمعآوری، نیازمند فضای ذخیرهسازی فراوانی میباشد. معمولا در این زمانها بین هزینه و فایده باید مصالحه نمود و تصمیم گرفت چه مقدار هزینه برای ذخیرهسازی داده میپردازیم، چه مقدار جمعآوری لاگها میتواند شبکه را شلوغ کند، چه مقدار نمونهگیری از دادهی لاگ برای ما کافی است و ...
تجمیع لاگها و متمرکز کردن آنها فرآیندی است که در آن همه لاگها بدون توجه به منبع تولید آنها در یک مکان جمعآوری میشوند. همانطور که در بخش قبلی گفته شد، حجم دادهها یکی از بزرگترین چالشها در این فرآیند است، اما نکات مهم دیگری نیز وجود دارد که باید در نظر گرفته شود. حتی اگر سیستم مدیریت گزارش شما بتواند حجم زیادی از دادهها را مدیریت کند، آنچه اهمیت دارد سرعت تولید این دادهها است. ابزارهای مدیریت لاگ باید بتوانند با این سرعت همگام شوند، به همین دلیل است که «سرعت پردازش» یک ابزار چیزی است که باید هنگام انتخاب آن در نظر گرفته شود.
نکتهی مهم دیگری که در این زمینه وجود دارد این است تمامی گزارشها (به دلیل منبعهای مختلف) با فرمت یکپارچه نیستند و در هنگام جمعآوری گزارشها از منابع مختلف، چالش ایجاد میکنند. فرآیند نرمالسازی تمام لاگهای دریافتی را میگیرد و آنها را به یک خروجی مشترک تبدیل میکند تا اطلاعات درون لاگها راحتتر تجزیه و تحلیل شوند. ما در ادامه نیاز به تحلیل داریم و جمعآوری خام این داده به صورت یک متن چندان مفید نخواهد بود بلکه نیاز داریم قسمتهای مختلف این لاگها مثل زمان رخداد، منبع، سطح لاگ و ... قابل تفکیک و جداسازی باشند تا بتوانیم به راحتی روی لاگهای متمرکزشده جستجو کنیم و گزارشات مفید تولید کنیم.
بعد از تولید و تجمیعسازی لاگها، ذخیره و نگهداری لاگ برای طولانی مدت مسئلهی بعدی است. سوال اصلی در این مرحله این است که چه مدت باید لاگ ها را ذخیره کرد. در حالی که آسانترین راه برای ذخیرهسازی لاگها، در نظر گرفتن زمان نامحدود است تا در صورت نیاز بتوانیم دادههای قدیمی را بازیابی کنیم، اما ذخیره این حجم داده بسیار پرهزینه خواهد بود. معمولا به همین دلیل دادهها برای مدت مشخصی مثلا حداکثر برای یک سال ذخیره میشوند به گونهای که نیازهای مختلف سازمان را پاسخ داده و در عین حال حجم داده محدود شود. (البته بازهی زمانی به حجم هر رکورد لاگ نیز وابسته است و به همین دلیل بازهی زمانی ممکن است کمتر یا زیادتر شود)
هنگام ذخیره لاگها، میتوانیم آنها را بر روی دیسک یا در فضای ابری متناسب با نیاز ذخیره کنیم. هر کدام از این روشها مزیتی دارند که بحث این مقاله نیست.
چرخش گزارش با تغییر نام خودکار، تغییر اندازه، جابجایی یا حذف فایلهای گزارش که خیلی بزرگ یا خیلی قدیمی هستند، به رفع مشکلات در مرحله قبل کمک میکند. با انتخاب فاصله زمانی میتوان مشخص کنیم که پس از آن گزارش حذف شود یا برای صرفهجویی در فضا فشرده شود یا به مکان دیگری فرستاده شود. به این ترتیب، فضای ذخیرهسازی جدیدی برای فایل های گزارش جدیدتر باز میشود.
تجزیه و تحلیل گزارش یکی از مهمترین بخشهای مدیریت گزارش است زیرا جمعآوری و ذخیره دادههای لاگ هیچ فایدهای ندارد اگر قرار نباشد از آن استفاده شود. ابزارهای مدیریت لاگ فرآیند تجزیه و تحلیل دادههای لاگ را خودکار و ساده میکنند و راههای پیشرفتهای برای مصورسازی دادهها ارائه میدهند. گزارش تجزیه و تحلیل از نمودارها و سایر تصاویر برای نشاندادن همبستگیها و شباهتهای بین رویدادها و دادهها استفاده میکند و تشخیص مسائل و ردیابی علت آنها را سادهتر میکند.
موارد مورد استفاده تجزیه و تحلیل گزارش شامل انطباقدادن رویدادهای یکسان، امنیت، عیبیابی سادهتر و بهبود عملکرد است.
ابزارهای مدیریت لاگ با داشتن رویکرد جمعآوری متمرکز و گزینههای جستجوی پیشرفته، جستجو و گزارشگیری از دادههای لاگ را ساده میکنند. با در نظر گرفتن حجم فایلهای گزارش، وجود ویژگیهای جستجو پیشرفته تأثیر زیادی بر کاربردیبودن ابزار مدیریت لاگ خواهد داشت. جستجوی پیشرفته این امکان را فراهم میکند که به گزارشهای ساختاریافته و بدون ساختار نگاه کنید و اطلاعاتی در مورد رویدادهای خاصی اطلاعاتی مهم را جمعآوری کنید.
گاهی راهحلهای مدیریت لاگ مجهز به ابزارهایی برای دادهکاوی میشوند که در میان حجم عطیم دادههای لاگ برای کشف الگوهایی متفاوت میگردند و مواردی پنهان را کشف میکنند. این ابزارها قابلیتهای ایجاد گزارش را نیز فراهم میکنند که خلاصهی نهایی جستجو و تجزیه و تحلیل انجام شده میباشد.
مزایای استفاده از فرآیند و روالهای مدیریت لاگ را به صورت خلاصه (مهمترین آنها) میتوانیم به صورت زیر بیان کنیم:
با توجه به وجود فرآیندهای متنوعی که در زمینهی مدیریت لاگ انجام میشود، معمولا یک ابزار مشخص تمامی این قابلیتها را فراهم نمیکند (اگر چه ابزارهایی هم به صورت مجمتعشده وجود دارند) به همین دلیل در ادامه ابزار یا مجموعهای از ابزارها را که به منظور مدیریت لاگ هستند، معرفی میکنیم.
تا یک یا دو سال پیش، مجموعه ابزار ELK مجموعهای از سه محصول منبع باز شامل Elasticsearch و Logstash و Kibana بود که همگی توسط شرکتی واحد توسعه، مدیریت و نگهداری میشدند. در ادامه با اضافهشدن Beatهای متنوع، این مجموعه به یک پروژه چهار بخشی تبدیل شد اگر چه هنوز اسم آن بر حسب تاریخچه به صورت ELK میباشد.
مولفه Elasticsearch به عنوان محور اساسی و اصلی در مجموعهی ELK محسوب میشود. Elasticsearch که معمولا برای جستجو و تجزیه و تحلیل گزارش استفاده میشود، امروزه یکی از محبوب ترین سیستمهای پایگاهداده موجود است. این نرمافزار ابتدا در سال 2010 منتشر شد، یک موتور جستجو و تجزیه و تحلیل مدرن است که مبتنی بر Apache Lucene است. این نرمافزار کاملاً منبع باز و ساخته شده بر پایهی جاوا میباشد.
در دستهبندی پایگاههای داده از آن به عنوان یک پایگاه داده NoSQL نام برده میشود. این ابزار دادهها را به روشی بدون ساختار (البته به صورت دقیقتر semi-structure) ذخیره میکند و تا همین اواخر حتی امکان استفاده از SQL برای پرسوجو روی دادهها وجود نداشت. (پروژه جدید Elasticsearch SQL به استفاده از دستورات SQL برای تعامل با دادهها میپردازد) اما با این حال بر خلاف بسیاری از پایگاه دادههای NOSQL دیگر، این ابزار تمرکز زیادی بر قابلیتها و ویژگیهای جستجو دارد و برای این منظور، یک واسط کاربری خیلی ساده و در عین حال قدرتمندی دارد که میتوان با آن سادهترین و پیچیدهترین جستجوهای متنی ممکن را انجام داد. در زمینه تجزیه و تحلیل دادهها، Elasticsearch همراه با سایر مولفه های ELK استفاده میشود و نقش ذخیرهسازی دادهها را ایفا میکند.
تجزیه و تحلیل لاگ بر اساس لاگهای دارای ساختار (structured) ممکن است. ساختار این امکان را فراهم میکند تا دادهها را در هر ابزاری بتوانیم سادهتر و راحتتر جستجو، تجزیه و تحلیل و تجسم کنیم. در صورت امکان، این ساختار باید متناسب با لاگهای تولیدشده در سطح برنامه باشد. (تا حد امکان بخش زیادی از این ساختار توسط نرمافزار و برنامههای نوشتهشده فراهم شود) در موارد دیگر، به عنوان مثال لاگ های زیرساخت و سیستم، ممکن است این ساختار وجود نداشته باشد و لازم است که ساختار لاگها توسط برنامههایی استخراج شود تا تجزیه و تحلیلهای آنها در ادامه سادهتر شود.
در پشته ELK وظیفه مهم تجزیه دادهها به Logstash به عنوان یک ابزار منبع باز توسعهیافته برای مدیریت جریان حجم زیادی از دادههای لاگ از چندین منبع داده شده است. این نرمافزار وظیفه پردازش لاگها، بهبود آنها و تغییر آنها و سپس ارسال آنها به یک مقصد مشخص برای ذخیرهسازی را بر عهده دارد. به لطف حجم زیادی از افزونهها (plugins) که امروزه برای آن فراهم شده است، این ابزار میتواند برای جمعآوری، غنیسازی و تبدیل طیف وسیعی از انواع مختلف داده استفاده شود. (بیش از 200 پلاگین مختلف برای این ابزار وجود دارد)
هیچ راه حل متمرکزی (log aggregation) بدون ابزار تحلیل و مصورسازی کامل نیست. بدون امکان پرس و جو و نظارت موثر بر دادهها، صرفا جمعآوری و ذخیره آنها فایده چندانی ندارد. Kibana این نقش را در ELK به عنوان یک لایه تحلیل و مصورسازی قدرتمند ایفا میکند.
این ابزار کاملاا منبعباز بوده و دارای یک رابط کاربری مبتنی بر مرورگر است که میتواند برای جستجو، تجزیه و تحلیل و مصورسازی دادههای ذخیرهشده در Elasticsearch استفاده شود (در زمان حال، Kibana را نمیتوان در ارتباط با پایگاههای داده دیگر استفاده کرد). این ابزار به با قابلیتهای گرافیکی و بصری غنی خود به کاربران این امکان را میدهد تا حجم زیادی از دادهها را کاوش کنند.
ابزارهای Beats مجموعهای از ارسالکنندگان گزارش منبعباز هستند که بهعنوان عوامل (agents) روی سرورهای مختلف در محیط نصب میشوند و برای جمعآوری گزارشها یا معیارهای مختلف عمل میکنند. این ابزارها معمولا با زبان برنامهنویسی Go نوشته میشوند (به همین دلیل سریع و سبک هستند) و در کنار آن این فرستندهها به گونهای طراحی شدهاند که از نظر ماهیت سبک وزن باشند یعنی از منابع به صورت کارآمد استفاده میکنند و معمولا بدون نیاز به وابستگی خاصی کار میکنند.
دادههای جمعآوریشده توسط beatهای مختلف متفاوت است:
علاوه بر Beatهای توسعهیافته و پشتیبانیشده توسط Elastic، فهرست رو به رشدی از آنها ارائهشده توسط جامعه (community) نیز وجود دارد. پس از جمعآوری این اطلاعات، معمولا میتوانید Beatهای خود را طوری پیکربندی کنید که دادهها را مستقیما به Elasticsearch یا Logstash برای پردازش اضافی ارسال کند. برخی از Beatها همچنین از پردازش پشتیبانی میکنند که باعث میشود نیاز به ابزارهایی مثل Logstash که قبلا مسئول آنها بودند کم شود.
در صورتی که علاقهمند به آشناشدن بیشتر با بخشهای مختلف ELK و نحوهی پیکربندی آنها هستید، میتوانید به سایتهای مشابه در این زمینه مانند این سایت مراجعه کنید.
این مجموعه ابزار بسیار شبیه مجموعه ابزار قبلی میباشد! تفاوت آن در این است که به جای Logstash از مولفهی دیگری به نام Fluentd استفاده شده است. این مولفه که امروز گسترش و اهمیت زیادی پیدا کرده است، به دلیل وجود کوبرنتیز و ... مورد استفاده قرار میگیرد (به راحتی قابل اجرا و تنظیمکردن میباشد) البته این مولفه Fluentd خود چندین نوع روش استقرار را پشتیبانی میکند که تا حد خوبی آن را شبیه مجموعه ابزار ELK میکند. این ابزار میتواند به عنوان یک فرستنده یا جمعکننده عمل کند. به عنوان فرستنده، دادههای گزارش را به Elasticsearch و به عنوان جمعآورنده، لاگها را جمعآوری و به فرستنده ارسال میکند. روشهای زیادی برای استقرار و استفاده از Fluentd وجود دارد که در ادامه به دو مورد از آنها اشاره میشود.
یک رویکرد ساده و غیر کارا این است که فرض کنیم سرورهای بزرگ را در اختیار داریم. در اینجا ما می توانیم FluentD را در داخل این سرورها راهاندازی کنیم که به عنوان «گردآورنده» و همچنین «فرستنده» عمل میکند، لاگها را جمعآوری میکند و آن را به Elasticsearch میفرستد که ممکن است به یک گلوگاه تبدیل شود.
یک رویکرد بهتر استفاده FluentBit به عنوان یک «گردآورنده» لاگهای داخل سرورها میباشد. FluentBit حجم کمی دارد و جمعآوری دادههای گزارش و ارسال آن به سرورهای Fluentd را به عهده میگیرد. در اینجا، Fluentd مزایای بسیاری را ارائه میدهد:
معمولا در ایران در این حوزه شرکتهایی به وجود آمدهاند که سرویسهایی را در زمینه مدیریت لاگ ارائه میدهند، فرایند استفاده از ابزارهای منبعباز موجود را تسهیل میکنند یا خود ابزارهایی را ارئه میدهند. در ادامه با چند مورد از آنها آشنا میشویم.
شرکت داده کاوان تصمیم یار در زمینهی ارائه، مشاوره و آموزش خدمات نرمافزاری به سازمانهای دولتی و خصوصی فعالیت مینماید. شرکت داده کاوان تصمیم یار خدمات نرمافزاری مختلفی ارائه میدهد که یکی از آنها «کوالاتک» نام دارد که «تست اتوماتیک نرم افزار و تضمین کیفیت» میباشد.
تیم کوالاتک متشکل از کارشناسان ارشد دانشگاه صنعتی شریف است که کیفیت دغدغه آنهاست. مجموعه به سازمانها و تیمهای توسعه نرمافزار کمک میکند از مزایای تست و تضمین کیفیت بهرهمند شوند.
سیستم مدیریت لاگ کوالاتک (Log Management) ابزاری است که به سازمان کمک میکند تا لاگهای مختلف نرمافزارها، اپلیکیشنها و … را در این ابزار جمعآوری کند و آنها را متناسب با نیاز خود ساماندهی نماید.
ابزار مدیریت لاگ نتایج کاربردی و مهمی برای سازمان دارد که این نتایج به شرح ذیل میباشد: جمع آوری لاگها، تبدیل لاگ به داده، قابلیت جستجو، مانیتورینگ و هشدار و گزارشگیری
برای آشنایی بیشتر با این ابزار و خدمات ارائهشده توسط این شرکت میتوانید از این لینک استفاده نمایید.
شرکت دانش بنیان آتین، مستقر در پارک علم و فناوری دانشگاه تهران، در سال 1396 فعالیت خود را به طور تخصصی درحوزه ارائه خدمات احراز هویت آغاز کرد. این شرکت با بررسی نمونه های مشابه خارجی و بر اساس نیازهای داخلی کشور درحوزه احراز هویت، اقدام به توسعه سامانه مدیریت هویت و دسترسی نموده است. با این حال این شرکت امروزه در زمینهی مدیریت لاگ و مانیتورینگ آنها نیز خدماتی را ارائه میدهد. البته سرویس ارائهشده توسط این شرکت معمولا در کنار دیگر سرویسهای حوزهی امنیت این شرکت استفاده میشود.
لاگ فعالیت های کاربران را در سامانه آتین رقابل ردیابی میباشد. همچنین اقداماتی نظیر ورود به سامانه، افزودن کاربر، بهروز رسانی داشبورد و … از موارد موجود در سامانه آتین است. ثبت خودکار رفتارهای کاربران و رخدادهای مرتبط، ثبت وقایع امنيتی تعریف شده در برنامه های کاربردی، امکان پیگیری وقایع و گزارشگیری، امکان نظارت بر عملکرد کلیه کاربران، محفوظماندن فعاليت كاربران از سايرين به جز مدیران سامانه، ثبت وقایع در سطوح مختلف به منظور کاهش ریسکهای دسترسی به اطلاعات و خدمات و ... شامل ویژگیهای این سامانه است.
برای آشنایی بیشتر با این ابزار و خدمات ارائهشده توسط این شرکت میتوانید از لینک زیر استفاده نمایید.
در حالی که انجام تمام مراحل ذکر شده مدیریت لاگ به تنهایی امکان پذیر است، این یک فرآیند زمانبر است که نیاز به سفارشیسازی و برنامهریزی زیادی دارد. مدیریت لاگ بدون ابزارهای لاگ شبیه به برنامه نویسی از ابتدا به جای استفاده از کتابخانهها و اسکریپتهای موجود است که اگر چه قابل انجام است، اما از نظر زمان و منابع بیهوده است. ابزارهای مدیریت لاگ شامل تمام بخشهای فرآیند مدیریت لاگ میشود و به شما امکان میدهد نحوه اجرای آن را کنترل کنید.
از آنجایی که هیچ دو سیستمی دقیقا شبیه هم نیستند، هر راهحل مدیریت لاگ به شما امکان میدهد روشی را که میخواهید برای ذخیره دادههای لاگ خود انتخاب کنید. یکی از بزرگترین مزیتها، تجزیه و تحلیل و مصورسازی است که به کاربران بینش بهتری نسبت به داده های خود میدهد.
این مطلب، بخشی از تمرینهای درس معماری نرمافزار در دانشگاه شهیدبهشتی است.