بخش ۱: معرفی
اصول مدیریت لاگ: فایل لاگ چیست؟
فایل گزارش یک فایل متنی است که در آن برنامهها، از جمله سیستم عامل، رویدادها را مینویسند. گزارشها به ما نشان میدهند که در پشت صحنه چه اتفاقی افتاده است و چه زمانی اتفاق افتاده است، به طوری که اگر مشکلی در سیستم شما رخ دهد، یک رکورد دقیق از هر اقدام قبل از ناهنجاری داشته باشیم.
بنابراین، فایلهای گزارش، دریافت اطلاعات و شناسایی علت اصلی مشکلات برنامهها و زیرساختها را برای توسعهدهندگان، DevOps، SysAdmins یا SecOps آسانتر میکنند.
گزارش ها همچنین زمانی مفید هستند که سیستم ها به طور عادی رفتار کنند. برای بهبود آن، میتوانید بینشهایی در مورد نحوه واکنش و عملکرد برنامه خود دریافت کنید.
منابع مختلفی از گزارش ها و همچنین انواع لاگ وجود دارد. در ادامه برخی از منابع گزارش به روز که امروزه استفاده می شود، مورد توجه قرار می دهیم:
دنده شبکه (Network Gear): همانطور که ما با برنامه های تلفن همراه، برنامه های وب، وب سایت ها و غیره تعامل داریم، ترافیک شبکه زیادی تولید می کنیم. ابزار شبکه - روترهای شبکه، سوئیچ های شبکه و غیره - می توانند گزارش هایی درباره این ترافیک ایجاد کنند. برخلاف گزارشهای سرور و برنامههایی که تمایل به استفاده از فرمتهای مدرنتر و گزارشهای ساختار یافتهتر دارند، ابزار شبکه همچنان از انواع مختلفی از Syslog استفاده میکند.
گزارش سرور و برنامه (Server and Application Logs): منابع سنتی رویدادهای گزارش، سرورها و برنامههایی هستند که روی آن سرورها اجرا میشوند. هسته پیامهای گزارشی مانند درایورهایی که بارگیری میکند، در صورتی که قاتل OOM فراخوانی شده باشد و غیره منتشر میکند. سپس خدمات سیستمی مانند زمانی که کاربر وارد سیستم می شود وجود دارد. این اطلاعات به ما کمک می کند تا مشکلات پایداری و امنیت و همچنین گلوگاه های عملکرد در سطح سیستم را تشخیص دهیم. آیا هسته کوکی های SYN را ارسال می کند؟ ممکن است یک حمله باشد یا شبکه ممکن است بیش از حد بارگذاری شده باشد. در مورد برنامهها، ممکن است گزارشهای وب سرور Nginx، یک برنامه وب جاوا در یک آپاچی تامکت یا یک برنامه PHP در حال اجرا در وب سرور آپاچی داشته باشید. آنها رویدادهای مختلف اطلاعاتی، خطا یا اشکال زدایی را منتشر می کنند.
برخی از این گزارشها از فرمتهای استاندارد شده مانند Common Log Format استفاده میکنند، در حالی که برخی دیگر از قالبهای سفارشی مختلف، از جمله فرمتهای گزارشگیری ساختاری مختلف، مانند key=value یا حتی گزارشهای JSON استفاده میکنند.
گزارش های مربوط به کانتینر (Container Logs): امروزه برنامه های کاربردی بیشتر و بیشتری در کانتینرها مستقر می شوند. به این ترتیب، کانتینرها و برنامه های کاربردی در حال اجرا در داخل آنها منبع بزرگ دیگری از گزارش ها هستند. برخلاف برنامهها و سرورهای سنتی، و مطمئناً تجهیزات شبکه، کانتینرها بسیار "بیمعنی" هستند. چارچوبهای ارکستراسیون کانتینر مانند Kubernetes، کانتینرها را از میزبانی به میزبان دیگر منتقل میکنند. علاوه بر این، تمرین «ssh in»، زدن به اطراف، دم کردن، و گرفتن گزارش ها برای عیبیابی، عمل بدی در دنیای ابری تلقی میشد. از این رو، نظارت بر Docker و چالشهای مدیریت لاگ نیاز به رویکردهای جدید و ابزارهای مدیریت Log جدید Docker دارد.
دستگاههای موبایل و گزارشهای برنامه (Mobile Devices and App Logs): اپلیکیشنها و دستگاههای موبایل در همه جا وجود دارند. ممکن است آنها را به عنوان منابع گزارش فکر نکنید زیرا نمی توانید (به راحتی) به گزارش های سیستم یا برنامه در دستگاه iOS یا Android دسترسی داشته باشید. فضای دیسک محدود و شبکه نامعتبر به این معنی است که نمیتوان پیامهای پرمخاطب را به صورت محلی ثبت کرد، و نمیتوان فرض کرد که گزارشها را در زمان واقعی به یک مکان مرکزی ارسال میشود. علیرغم این چالشها، مهم است که دانست آیا یک برنامه تلفن همراه خراب میشود و چرا. فراتر از این، نحوه رفتار و عملکرد برنامه. به طور معمول، تا N پیام را به صورت محلی بافر می کنند و آنها را به یک سرویس ثبت مرکزی ارسال می کنند. این کاری است که کتابخانههای Sematext Cloud برای اندروید و iOS انجام میدهند.
حسگرها، اینترنت اشیا، اینترنت اشیاء صنعتی (Sensors, IoT, Industrial IoT): در فضای مصرفکننده، حسگرهایی در خودروها، ترموستاتهای هوشمند، یخچالهای متصل به اینترنت و سایر دستگاههای خانه هوشمند و در مقیاس بزرگتر شهرهای هوشمند وجود دارد. اینترنت صنعتی اشیا یا IIoT، ماشینها و دستگاهها را در صنایعی مانند حملونقل، تولید برق، تولید و مراقبتهای بهداشتی به هم متصل میکند.
به طور معمول، ما به معیارهای تولید شده توسط این دستگاه ها علاقه مند هستیم. به عنوان مثال، ما برخی از سطوح آلودگی هوا (PM2.5، PM10) را جمع آوری کرده و به Sematext Cloud ارسال می کنیم. اما لاگ های منتشر شده از این دستگاه ها نیز مهم هستند: آیا این سنسور به درستی شروع به کار کرد؟ آیا نیاز به کالیبراسیون مجدد دارد؟ حسگرها در 6 ماه گذشته چند بار از کار افتاده اند؟ بر اساس این اطلاعات، مطمئن ترین سازنده کدام است؟ اینها تنها نمونه هایی از ابرداده هستند که می توان از لاگ های اینترنت اشیا استخراج کرد.
مدیریت لاگ بینشی در مورد سلامت و انطباق سیستم ها و برنامه های شما ارائه می دهد.
بدون آن، هنگام تلاش برای عیب یابی مشکلات تولید، مجبور می شویم چندین فایل گزارش را به صورت دستی بازرسی کنیم. این مسئله به طرز وحشتناکی کند، مستعد خطا، گران بود و مقیاس پذیر نخواهد بود.
مدیریت لاگ به دلیل ماهیت پویا، توزیع شده و زودگذر آنها برای برنامه های کاربردی ابری مهم است. بر خلاف برنامههای کاربردی سنتی، برنامههای بومی ابری اغلب در کانتینرها اجرا میشوند و بهجای نوشتن گزارشها در فایلهای گزارش، گزارشها را به خروجی استاندارد منتشر میکنند. این به این معنی است که کاربر، "گزینه پیش فرض" ثبت دستی گزارش ها را ندارد. به طور معمول، ما لاگ ها را ضبط، و آنها را به یک راه حل متمرکز مدیریت گزارش ارسال می کنیم.
به طور خلاصه، مدیریت لاگ به اپراتورهای برنامه و زیرساخت (توسعه دهندگان، DevOps، SysAdmins و غیره) امکان عیب یابی مشکلات را می دهد و به سهامداران تجاری (مدیران محصول، بازاریابی، BizOps و غیره) اجازه می دهد تا بینش هایی را از داده های تعبیه شده در رویدادهای گزارش استخراج کنند. گزارشها همچنین یکی از منابع کلیدی دادهها برای تجزیه و تحلیل امنیتی هستند - تشخیص تهدید، تشخیص نفوذ، انطباق، امنیت شبکه و غیره که در مجموع به عنوان SIEM (اطلاعات امنیتی و مدیریت رویداد) شناخته میشوند.
بخش ۲: معرفی چند ابزار متن باز
۲. ابزار Logstash: این ابزار، اگر کاملاً منبع باز باشد، به کاربر اجازه می دهد تا هر طور که می خواهد از استقرار استفاده کند. این ابزار، میتواند حجم زیادی از دادهها را از چندین پلتفرم جمعآوری کند، به کاربر امکان میدهد خطوط لوله دادههای خود را تعریف و اجرا کند، اطلاعات بیساختار log dumps را درک کند و موارد دیگر.
البته، تنها محدودیت این است که فقط با مجموعه محصولات Elastic کار می کند، و مقیاس را نیز افزایش، می دهد.
۳. ابزار Fluentd: در میان ابزارهای ثبت متمرکز که به عنوان یک لایه میانی برای جذب داده ها کار می کنند، Flutend اولین در بین آنهاست. با یک کتابخانه عالی از پلاگین ها، Fluentd می تواند داده ها را تقریباً از هر سیستم تولیدی جمع آوری کند، آن را در ساختار مورد نظر مرتب کند، یک خط لوله سفارشی بسازد و آن را به پلتفرم تجزیه و تحلیل مورد علاقه کاربر، خواه MongoDB یا Elasticsearch باشد، تبدیل کند. Fluentd بر روی Ruby ساخته شده است، کاملاً منبع باز است و به دلیل انعطاف پذیری و ماژولار بودن آن بسیار محبوب است.
۴. ابزار Flume: اگر واقعاً، در چالش مجموعه دادههای واقعاً بزرگ، Flume یکی از بهترین انتخابها است. این یک پروژه منبع باز "خالص" است، به این معنا که توسط بنیاد محبوب آپاچی ما نگهداری می شود، به این معنی که هیچ برنامه سازمانی وجود ندارد.
کد منبع Flume که به زبان جاوا نوشته شده است، کد منبع Flume کاملاً باز است. اگر به دنبال یک پلت فرم انتقال داده توزیع شده و قابل تحمل خطا برای چیزهای سنگین باشیم، Flume بهترین است.
۵. ابزار Octopussy: در صورت ساده بودن نیازهای کاربر، Octopussy میتواند انتخاب خوبی باشد. Octopussy نیازهای بیشتر محصولات موجود را پوشش می دهد (آمار تخمینی بی ارزش هستند، اما اگر مجبور باشیم حدس بزنیم، می توان به جرأت گفت که 80٪ موارد استفاده در دنیای واقعی را برطرف می کند). Octopussy به هیچ وجه رابط کاربری عالی ندارد ، اما از نظر سرعت و قابلیت نگهداری آن را جبران می کند.
۶. ابزار Rsyslog: کلمه Rsyslog مخفف یک سیستم موشکی سریع برای پردازش گزارش است.
این یک ابزار برای سیستم عامل های مشابه یونیکس است. از نظر فنی، یک مسیریاب پیام با ورودی ها و خروجی های قابل بارگذاری پویا است و بسیار قابل تنظیم است.
می تواند ورودی را از چندین منبع داده بگیرد، آن را تبدیل کند و خروجی را به چندین مقصد ارسال کند. با Rsyslog، میتوان یک میلیون پیام در ثانیه را در مقصدهای محلی ارسال کرد. Rsyslog همچنین یک عامل (agent) ویندوز را ارائه می دهد که بسیار نزدیک با عامل لینوکس Rsyslog کار کند. برای ادغام بین دو محیط استفاده می شود. این عامل ویندوز برای ارسال گزارش رویدادهای ویندوز و سرویس نظارت بر فایل راه اندازی استفاده می شود.
در ادامه سایر ویژگیهای ارائه شده توسط Rsyslog ارئه شده است: تنظیمات انعطافپذیر، ارائه قابلیتهای چند رشتهای، حفاظت از دستکاری فایل گزارش، استفاده از امضای گزارش و رمزگذاری، پشتیبانی از پلتفرمهای Big Data، ارائه قابلیتهای فیلتر مبتنی بر محتوا.
۷. ابزار LOGalyze :یک محصول تجاری است که اخیراً به صورت منبع باز ساخته شده است.
ابزار LOGalyze یک پیشنهاد نسبتاً منعطف و قدرتمند است که برای استقرارهای تک سیستمی که به دنبال ترکیب ورود به سیستم از منابع شناخته شده مانند Postfix، Apache و غیره هستند و خروجی را در CSV، PDF، HTML یا فرمتهای مشابه تولید میکنند، به خوبی کار میکند.
۸. ابزار Grafana Loki: با الهام از Prometheus یک راه حل جمع آوری گزارش های مربوط به چند مستاجر است.
راه حل Loki مقرون به صرفه است، فقط ابر داده را نمایه می کند و می تواند به سیستم محبوبی مانند Kubernetes، Prometheus، Linux، SQL و غیره متصل شود.
۹. ابزار Logwatch: مناسب برای کار کردن با سرورهای منفرد، و نه سیستم یکپارچه و متمرکز. پس از نصب، LogWatch می توان گزارش های سیستم را اسکن کرده و گزارشی از نوع مورد نظر کاربر را ایجاد کند. البته این یک نرمافزار قدیمی است، و به زبان Perl نوشته شده است. بنابراین، برای اجرای آن به Perl 5.6+ روی سرور نیاز است.
۱۰. ابزار Syslog-ng: این ابزار به عنوان راهی برای پردازش فایل های داده Syslog (یک پروتکل سرویس گیرنده-سرور ایجاد شده برای ثبت سیستم) در زمان واقعی توسعه داده شد. با گذشت زمان، با گذشت زمان، از فرمت های داده دیگری پشتیبانی می کند: بدون ساختار، SQL، و NoSQL. نحوه عملکرد پروتکل Syslog تقریباً در تصویر زیر به طور دقیق خلاصه شده است.
ابزار syslog-ng، یک ابزار جمعآوری و طبقهبندی لاگ درجه تولید و قابل اعتماد است که به زبان C نوشته شده است. بهترین بخش توسعه پذیری آن است، که به کاربر این امکان می دهد تا افزونه ها را در C، Python، Java، Lua یا Perl بنویسید.
۱۱. ابزار lnav: مخفف (Log Navigator)، lnav یک ابزار پایانی خالص است که روی یک ماشین واحد، دایرکتوری واحد کار می کند. این ابزار برای کسانی است که ثبتنام خود را در یک فهرست واحد یکپارچه کردهاند یا میخواهند گزارشهای بلادرنگ را از یک منبع منفرد فیلتر و نمایش دهند. از ویژگی های آن می توان به، نمایش سری زمانی، چاپ زیبا (برای JSON و فرمت های دیگر)، منابع گزارش با کد رنگی، فیلترهای قدرتمند، توانایی درک چندین پروتکل گزارش و ... اشاره نمود.
بخش ۳: معرفی چند شرکت ایرانی که در این راستا خدمت رسانی می کنند
[1] https://sematext.com/guides/log-management/
[2] https://geekflare.com/open-source-centralized-logging/
«این مطلب، بخشی از تمرینهای درس معماری نرمافزار در دانشگاه شهیدبهشتی است»