Skip to main content

استک EFK

در این مستند نحوه راه‌اندازی استک EFK را با استفاده از دارکوب به شما آموزش می‌دهیم که شامل سه ابزار Elasticsearch و Fluentd و Kibana است. Elasticsearch یک موتور برای ذخیره‌سازی، جستجو و آنالیز داده‌ها است. Kibana یک فرانت اند برای Elastic stack است که جستجو و نمایش داده‌های موجود در Elasticsearch را انجام می‌دهد. Fluentd لاگ‌ها را از جاهای مختلف جمع آوری می‌کند تا در Elasticsearch ذخیره کند.

راه اندازی elasticsearch

در ابتدا یک Repository به همراه یک Dockerfile ایجاد می‌کنیم. اگر قصد دارید از سرویس های دیگر Elasticsearch نیز استفاده کنید، بهتر است این تنظیمات را داخل پوشه مجزا با نام elasticsearch قرار دهید.

در داکرفایل تنظیمات elasticsearch را به صورت environment variables قرار می‌دهم.

FROM docker.elastic.co/elasticsearch/elasticsearch:7.15.0
ENV discovery.type="single-node"
ENV ES_JAVA_OPTS="-Xms300m -Xmx300m"

که تنظیمات ما فقط برای heap  (توصیه می‌شود مقدار تعیین شده در این فایل را کم‌تر از memory کل بگیرید تا مقداری از آن برای اجرای JVM باقی بماند) است

شما می‌توانید تنظیمات دلخواه را در env ها اعمال کنید و این تنها برای نمونه است. حال نوبت ساخت اپ در دارکوب است. در پنل دارکوب هنگام ساخت اپ جدید "منبع گیت" را انتخاب کنید و آدرس repo و محل داکرفایل آن را وارد کنید.

این‌جا ما یک repo برای کل استک EFK ایجاد کردیم که یک پوشه‌ی آن مربوط به elasticsearch است و داکرفایل در آن قرار دارد. قبل از دیپلوی نام اپ را elasticsearch انتخاب کردیم و پورت‌ها و متغیرهای محیطی را به شکل زیر نوشتیم:

دقت کنید elasticsearch به شکل single node دیپلوی می‌شود. حال برای persist شدن اطلاعات باید یک دیسک به  /usr/share/elasticsearch/data/  (که دیتای elasticsearch در آن‌جا قرار می‌گیرد) mount کنیم. در بخش دیسک یک دیسک با حجم دلخواه اضافه کنید، یک پارتیشن جدید به آن اضافه کنید و به این شکل در مسیر گفته شده mount کنید:

حال باید "ذخیره تغییرات" را بزنیم و بعد از چند لحظه اپ ما آماده است.

نکته: در این‌جا ما elasticsearch را به دنیای بیرون expose نکردیم. در صورتی که قصد چنین کاری را دارید از فعال‌سازی احراز هویت در تب آدرس دامنه استفاده کنید.

راه‌اندازی Kibana

در پنل دارکوب هنگام ساخت اپ جدید "داکر ایمیج" را انتخاب کنید. نام ایمیج را docker.elastic.co/kibana/kibana و تگ آن را با توجه به نسخه‌ی مورد نظر خود وارد کنید.  در این‌جا از 7.12.0 استفاده شده است.

در صفحه‌ی تنظیمات پورت و متغیرهای محیطی را می‌دهیم.

دقت کنید آدرس رسیدن به elasticsearch نام اپ آن است. در قسمت آدرس دامنه می‌توان تنظیمات رسیدن به kibana را انجام داد. برای دسترسی امن به kibana می‌توانید در تب آدرس دامنه تیک فعال سازی احراز هویت را بزنید تا با username و password به آن دسترسی داشته باشید. سپس اپ را دیپلوی می‌کنیم. حال می‌توان به آدرس دامنه برویم و پنل kibana را ببینیم.

راه‌اندازی Fluentd

برای fluentd لازم است یک repo در هم‌گیت بسازیم تا با تنظیمات شخصی ایمیج را بیلد کنیم. برای این کار دو فایل درست می‌کنیم. یکی داکرفایل و دیگری fluentd.conf است.

محتوای داکرفایل به شکل زیر است:

در این فایل از یک ایمیج fluentd استفاده می‌کنیم تا پلاگین elasticsearch را روی آن نصب کنیم و فایل fluent.conf را به آن منتقل کنیم. فایل fluentd.conf برای تنظیمات fluentd است:

تنظیمات نوشته شده بسیار ساده هستند و با توجه به نیازهای خود می‌توانید آن را تغییر دهید. در این‌جا هر اطلاعاتی که به پورت ۹۸۸۰ fluentd با پروتکل http برسد را به عنوان لاگ در نظر می‌گیرد که در بخش source گفته شده است. در بخش match تمامی ورودی‌ها را می‌گیریم. با store هم تنظیمات رسیدن به elasticsearch بیان شده است. دقت کنید که مقدار host باید برابر با نام اپ elasticsearch شما باشد.

حال باید در دارکوب یک اپ با "منبع گیت" بسازیم و آدرس  این repo را در هم‌گیت به آن بدهیم و محل داکرفایل را هم مشخص کنیم.

در بخش تکمیل اطلاعات اپ پورت http را می‌دهیم:

باید در بخش آدرس دامنه تنظیمات دسترسی به http آن را بدهید. با ساخت این اپ می‌توان به آن درخواست http داد و لاگ را در elasticsearch ذخیره کرد و در پنل kibana آن را می‌توانید ببینید.