سلام. امیدوارم حالتون خوب باشه. امروز در این مقاله میخوام در مورد استک ELK باهم صحبت کنیم و ببینیم که در سطح مقدماتی این به چه معنایی است. اگر بخوام بعد از چندین سال متمادی کار در دنیای نرمافزار، معماری سیستم و زیرساخت یک نکته را با اطمینان بگم، آن نکته این است:
سیستمی که دیده نشود، دیر یا زود از کنترل خارج میشود.
فرقی نمیکند یک وبسایت ساده داشته باشیم یا یک پلتفرم بزرگ با دهها سرویس؛ وقتی ندانیم داخل سیستم دقیقاً چه اتفاقی میافتد، تصمیمهایمان حدسی میشود و خطاها معمولاً زمانی خودشان را نشان میدهند که کار از کار گذشته است.
ELK دقیقاً برای حل همین مشکل بهوجود آمده است. ELK در اصل نام یک Stack است، نه یک ابزار واحد. این Stack از سه بخش اصلی تشکیل شده: Elasticsearch، Logstash و Kibana. هر کدام از اینها بهتنهایی ابزار قدرتمندی هستند، اما کنار هم معنی واقعی پیدا میکنند. این سه ابزار توسط شرکت Elastic توسعه داده شدهاند و هدفشان این است که دادههای خام، پراکنده و گاهی بیمعنی را به چیزی تبدیل کنند که بتوان با آن فکر کرد، تحلیل کرد و تصمیم گرفت.
در بیشتر پروژهها، لاگها اولین و دمدستترین منبع اطلاعات هستند. برنامهها لاگ مینویسند، سرورها لاگ مینویسند، دیتابیسها لاگ مینویسند. در ابتدا همهچیز ساده است؛ یک فایل، چند خط متن، نهایتاً یک tail یا grep. اما با گذشت زمان حجم لاگها زیاد میشود، سرویسها بیشتر میشوند و ناگهان میبینید برای پیدا کردن یک خطای ساده باید دهها فایل را در چند سرور مختلف بگردید.
مشکل فقط حجم نیست. مشکل این است که لاگها ساختار ندارند، قابل جستجوی درست نیستند و هیچ دید کلیای از وضعیت سیستم به شما نمیدهند. شما نمیدانید این خطا چند بار تکرار شده، روی کدام نسخه، برای چه کاربری و از چه زمانی شروع شده است. اینجاست که نگاه سنتی به لاگ شکست میخورد و نیاز به یک رویکرد جدید شکل میگیرد.

Elasticsearch را اگر بخواهیم خیلی ساده توضیح بدهیم، یک موتور جستجوی توزیعشده بسیار سریع و مبتنی بر Lucene برای جستجوی حجم زیاد دادههاست. اما این تعریف، حق مطلب را کامل ادا نمیکند. Elasticsearch در واقع قلب تپنده ELK است. جایی که همه دادهها در آن ذخیره میشوند و از حالت متن ساده خارج میشوند.
Elasticsearch برخلاف دیتابیسهای کلاسیک، بر پایه مفهوم «سند» ساخته شده است. دادهها معمولاً به شکل JSON ذخیره میشوند و قبل از ذخیره، ایندکس میشوند. این ایندکس شدن باعث میشود بتوانید روی حجم بسیار بزرگی از دادهها، جستجوهای پیچیده را در زمان بسیار کوتاه انجام دهید. اینجا دیگر فقط دنبال یک متن خاص نیستید؛ میتوانید بپرسید چه خطاهایی در یک بازه زمانی مشخص رخ دادهاند، روی کدام سرویس، با چه ویژگیهایی و چه الگویی دارند.
از نگاه معماری، Elasticsearch جایی است که دادهها فقط نگهداری نمیشوند، بلکه آماده تحلیل هستند. وقتی سیستم بزرگ میشود، این تفاوت حیاتی است.

اما یک واقعیت مهم وجود دارد: دادهها تمیز و مرتب بهدنیا نمیآیند. لاگها از منابع مختلف میآیند، فرمتهای متفاوت دارند و پر از نویز هستند. اینجاست که Logstash وارد بازی میشود.
Logstash را میشود یک خط تولید یا یک لوله پردازش داده در نظر گرفت. دادهها از هر جایی که باشند، وارد Logstash میشوند. در این مسیر، Logstash آنها را میخواند، تجزیه میکند، فیلدها را جدا میکند، اطلاعات اضافی اضافه میکند و در نهایت دادهای ساختیافته تحویل میدهد. این داده آماده است که وارد Elasticsearch شود. این ابزار قابلیت دریافت داده از منابع متنوع (مانند سرورها، دیتابیسها و فایلهای لاگ) و تبدیل آنها به فرمتهای قابل استفاده در Elasticsearch را دارد.
بدون Logstash هم میشود داده وارد Elasticsearch کرد، اما تجربه نشان داده هرچه سیستم جدیتر میشود، نبود یک لایه پردازش وسط راه دردسرساز خواهد شد. Logstash همان جایی است که دادههای خام به دادههای قابل استفاده تبدیل میشوند.

ذخیره و جستجو کافی نیست. مغز انسان با دیدن الگوها بهتر کار میکند. Kibana دقیقاً برای همین ساخته شده است. Kibana یک رابط گرافیکی است که مستقیماً به Elasticsearch متصل میشود و به شما اجازه میدهد دادهها را ببینید، نه فقط بخوانید.
در Kibana میتوانید جستجو کنید، فیلتر بزنید، نمودار بسازید و داشبوردهایی طراحی کنید که وضعیت سیستم را در یک نگاه نشان بدهند. اینجا دیگر فقط برنامهنویس مخاطب نیست. مدیر محصول، تیم پشتیبانی و تیم عملیات هم میتوانند بفهمند سیستم چه حال و روزی دارد.
Kibana دادهها را از حالت فنی و خام خارج میکند و به زبان تصمیمگیری ترجمه میکند.
قدرت واقعی ELK وقتی مشخص میشود که این سه ابزار کنار هم قرار میگیرند. Logstash دادهها را جمعآوری و آماده میکند، Elasticsearch آنها را ذخیره و قابل جستجو میکند و Kibana آنها را به تصویر میکشد. این زنجیره باعث میشود سیستم شما «قابل مشاهده» شود؛ مفهومی که امروز به آن Observability میگویند.
در چنین سیستمی، دیگر حدس نمیزنید چه اتفاقی افتاده است، بلکه میدانید. دادهها حرف میزنند، فقط باید ابزار درست برای شنیدنشان داشته باشید.
اگرچه ELK با لاگ شناخته شد، اما امروز کاربردهای آن بسیار فراتر رفته است. مانیتورینگ عملکرد سیستم، تحلیل رفتار کاربران، بررسی مسائل امنیتی و حتی جستجوی متنی در اپلیکیشنها، همه جاهایی هستند که ELK حضور پررنگ دارد. به همین دلیل هم امروزه بیشتر از اصطلاح Elastic Stack استفاده میشود تا نشان دهد این اکوسیستم بزرگتر از سه ابزار اولیه است.
ELK ابزاری نیست که روز اول پروژه به آن فکر کنیم. معمولاً وقتی سیستم بزرگ میشود و درد شروع میشود، سراغش میرویم. اما تجربه نشان داده هرچه زودتر به مسئله مشاهدهپذیری فکر کنیم، هزینه کمتری در آینده میدهیم. ELK کمک میکند سیستم ما از یک جعبه سیاه به یک موجود قابل فهم تبدیل شود؛ و این، در دنیای نرمافزار، یک مزیت حیاتی محسوب میگردد.
قبل از اینکه یادم بره میخوام بگم که الستیک یک ابزار دیگه بنام Beats داره که در اکوسیستم الستیک خیلی کمک کننده هست. در مقالات بعدی به بررسی این ابزار هم خواهیم پرداخت و سپس نحوه راه اندازی و بهره برداری از اون در یک سرور واقعی رو بررسی میکنیم.