آشنایی و نصب ابزار ELK

1 مقدمه و معرفی بسته‌ی ELK

لاگ گیری از سیستم‌های حیاتی اطلاعات مفیدی را در رابطه‌ با سازش‌ها و ناسازگاری‌ّها در اختیار ما قرار می‌دهد. همچنین از اطلاعات‌ آن‌ها می‌توان در جرم‌شناسی و در هر زمینه‌ی مرتبط دیگری استفاده کرد. [1]

1-1 استاندارد‌ها

تمام سیستم‌هایی که دارای اطلاعات محرمانه، تصدیق‌کننده‌ی اتصال به شبکه،‌ ایجاد و یا کنترل دسترسی و یا تکلیف شناسایی را دارند باید از قابلیت logging آن سیستم استفاده کنند و باید به سوا لات زیر پاسخ دهند:

1. چه فعالیتی انجام‌گرفته است؟

2. چه کسی یا چه چیزی فعالیتی را کجا و یا روی کدام سیستم انجام داده است؟

3. چه فعالیتی بر روی شئ انجام‌گرفته است؟

4. چه زمانی فعالیت انجام‌گرفته است؟

5. با چه ابزاری فعالیت انجام‌گرفته است؟

6. چه وضعیتی را داشته (success or failure) ، خروجی و نتیجه چه شده است؟

فعالیت‌هایی که باید log شوند:

1. ایجاد، حذف، به‌روزرسانی، و خواندن اطلاعات محرمانه شامل اطلاعات احراز هویت محرمانه مانند password.

2. آغاز ارتباطات شبکه‌ای

3. تصدیق ارتباط شبکه‌ای

4. احراز هویت و صدور اجازه برای فعالیت‌های گفته‌شده در شماره‌ی ۱،۲،۳ مانند login , logout

5. اعطا کردن دست‌کاری کردن و یا فراخوانی قوانین دسترسی مانند تغییر یا اضافه کردن کاربر به سیستم، افزایش دسترسی به یک کاربر خواص، تغییر firewall rule، تغییر رمز عبور.

6. تغییر پیکربندی سیستم، شبکه‌، سرویس شامل نصب‌ نرم‌افزار، patch، به‌روزرسانی نرم‌افزار.

7. روند‌های یک برنامه مانند آغاز کار،‌ پایان کار،‌ دوباره‌ راه‌اندازی شدن

8. فرآیند‌های برنامه مانند شکست در اجرا، غیر نرمال به انتها رسیدن، terminateشدن و به‌خصوص عدم دسترسی یک نرم‌افزار به یک منبع و یا نبود منبع کافی مانند (CPU, memory, network, network bandwidth, disk space) مشکل خوردن یک سخت‌افزار.

9. تشخیص رفتار‌های عناد گونه [1] با استفاده از ابزار‌هایی مانند ips/ids و یا آنتی‌ویروس.

عناصر لاگ

1. نوع عمل،‌ مانند به‌روزرسانی، ایجاد،‌ خواندن، حذف، تصدیق هویت.

2. متعلقاتی(سیستم‌ّهای مرتبطی ) که فعالیتی را انجام داده‌اند به‌طور مثال: نام تراکنش انجام‌شده توسط یک برنامه همراه با شناسه‌ی برنامه

3. شناسایی به هر میزان که امکان دارد برای آنچه درخواست یک فعالیت را دارد مانند نام کاربری، آدرس IP، mac address

4. شناسایی به هرمیزانی که امکان دارد برای آنچه فعالیتی بر روی آن انجام‌شده است

5. در صورت امکان اندازه‌گیری مقادیر یک عنصر در سیستم قبل و بعد از اعمال یک فعالیت مانند به‌روزرسانی

6. تاریخ و زمان اجرای یک عمل

7. آیا یک عمل توسط کنترل دسترسی و احراز هویت تصدیق شده است یا رد شده است

8. توصیف این‌که یک عمل چرا تصدیق شده است و یا چرا رد شده است

فرمت دهی و ذخیره‌ی لاگ‌ها

1. سیستم باید توانایی ذخیره گزارش لاگ‌ها را در فرمت‌های استاندارد داشته باشد.

2.گزارش رویداد یا Event log در مایکروسافت ویندوز مسئول متمرکز کردن و ذخیره‌ی لاگ‌ها را دارد

3. فراهم آمدن لاگ‌ها در یک فرمت مناسب داکیومنت توسط پروتکل شبکه‌ای syslog، syslog-ng یا syslog-reliable برای ارسال و ذخیره در یک مرکزیت

4. لاگ‌های ذخیره شده در پایگاه داده‌ی ANSI-SQL که خود به تولید لاگ‌های حسابرسی در انطباق با داکیومنت موجود می‌نماید

1-2 مجموعه ابزار‌های ELK

متمرکز کردن logها، اطلاعات مفیدی برای تشخیص مسائل به وجود آمده از برنامه‌ها و سرور‌های شما، در یک محل فراهم می‌آورد و امکان جستوجو را در میان تمامی لاگ‌ّها برای شما به وجود می‌آورد.

بسته‌ی نرم‌افزاری ELK یک مجموعه‌ی بسیار مشهور از ابزار‌هایی است که عبارتنداز :

  • Elasticsearch
  • Logstash
  • Kibana

که هرکدام به‌صورت جدا گاه با یکدیگر در ارتباط هستند و زمانی که این 3 نرم‌افزار باهم استفاده شوند نام مجموعه با ELK شناخته می‌شود. هرکدام از آن‌ها وظیفه‌ی خاص خود را دارد که عبارت‌اند از

ابزار Elasticsearch: محل ذخیره‌ی جایگاه‌هایی است که از طرف client به آن ارسال‌شده است

ابزار Logstash: پردازش لاگ‌ها

ابزار Kibana: یک رابط کاربری را فراهم می‌آورد برای اینکه بتوان لاگ‌ّها را تشریح و مشاهده کرد

نحوه‌ی کارکرد و همکاری این دسته نرم‌افزاری را می‌توانید در شکل ‏1‑1 مشاهده کنید

شکل ‏1‑1 نحوه‌ی کارکرد دسته نرم‌افزار ELK
شکل ‏1‑1 نحوه‌ی کارکرد دسته نرم‌افزار ELK

در شکل ‏1‑1 مشاهده می‌کنید که log ایجاد شده و به logstash forwarder تحویل داده می‌شود و logstash forwarder آن را به سمت logstash ارسال می‌کند وظیفه‌ی logstash پردازش logهای دریافتی است و بعد از پردازش، لاگ‌های پردازش را به سمت elastic search ارسال می‌کند و وظیفه‌ی elastic search ذخیره لاگ‌ّهای دریافتی است و در این زمان kibana ارتباطی با elastic search برای نمایش مورد نیاز‌هایش برقرار می‌کند.

مواردی که ذکر شد اعم از ارتباطات و پیکربندی‌ها باید به صورت جداگانه بر روی هر نرم‌افزار تنظیم شود.

در ادامه به بررسی و نصب این سه نرم‌افزار می‌پردازیم.

2 نصب بسته نرم‌افزاری

در این مستند تمامی هر سه نرم‌افزار برو روی یک سیستم نصب می‌شوند، اما نکات نصب توزیع‌شده‌ی، بسته‌ی نرم‌افزاری در میان آموزش توضیح خواهد داده شد.

سیستم‌عاملی که در این مستند در نظر گرفته‌شده debian 8 است، شما می‌توانید که دیگر سیستم عامل‌های سازگار را در اینجا مشاهده کنید.

سخت افزار مورد نیاز برنامه به میزان انتطار شما از نرم‌افزار بستگی دارد هر چه که شما پردازش سنگین‌تری را احتیاج داشته باشید، همچنین هر چه میزان حجم لاگ دریافتی بیشتر باشد نیاز به سخت‌افزار قوی‌تری دارید اما نصب نرم‌افزار در سیتسم‌ّهای ۱ گیک رم با یک cpu دو هسته‌ای هم انجام می‌شود.[2]

2-1 نصب Elasticsearch

به علت ایجاد امنیت بیشتر پیشنهاد می‌شود که با استفاده از کاربر root به نصب این نرم‌افزار پرداخته نشود بلکه در ابتدا یک کاربر را اضافه کنید و از طریق این کاربر به نصب نرم‌افزار بپردازید.

در سیستم‌عامل debian پکیج sudo به‌صورت پیش‌فرض نصب نیست و شما در ابتدا باید این پکیج را نصب کنید و سپس کاربر جدید را به آن اضافه کنید.

برای افزودن حساب کاربری جدید و افزودن آن به گروه sudoerفرمان‌های برنامه ‏2‑1 را اجرا کنید.

apt-get install sudo
adduser elk
adduser elk sudo

برنامه ‏2‑1 افزودن کاربر

نر‌م‌افزار elasticsearch برای مرتب‌سازی داده‌هایش و جست‌وجو درداده‌ها از جاوا استفاده می‌کند. بنابراین باید در ابتدا جاوا را بر روی سیستم نصب کنیم. برنامه ‏2‑2

sudo apt-get install openjdk-7-jre

برنامه ‏2‑2 نصب جاوا

بعد از انجام موارد گفته‌شده نوبت به نصب elastic searchمی‌رسد که در این مستند نحوه‌ی نصب از طریق repository آموزش داده می‌شود.

در ابتدا احتیاج است که کلید عضویت در elastic.co را دانلود کنیم.

برای دانلود و نصب باید کلید عضویت در elastic.co را دانلود کنید، اما مشکلی که وجود دارد این است که این سایت ایران را تحریم کرده و احتیاج است که از پروکسی استفاده کنید.

برای نصب کلید عضویت از برنامه ‏2‑3 استفاده کنید

wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

برنامه ‏2‑3 دانلود کلید عضویت

برای افزودن repository موردنیاز elastic search از استفاده کنید

echo &quotdeb http://packages.elastic.co/elasticsearch/2.x/debian stable main&quot | sudo tee -a /etc/apt/sources.list.d/Elasticsearch-2.x.list

برنامه ‏2‑4 افزودن repository

بعد از update کردن repository برای نصب elastic search از استفاده کنید

sudo apt-get install elasticsearch

برنامه ‏2‑5 نصب elasticsearch

2-1-1 راه‌اندازی نرم‌افزار elasticsearch

بعد از نصب نرم‌افزار نوبت به راه‌اندازی آن است

در ابتدا نرم‌افزار را در دسته‌ی سرویس‌های startupسیستم قرار دهید. برنامه ‏2‑6

sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service

برنامه ‏2‑6 افزودن به startup

سپس سرویس را restart کنید. برنامه ‏2‑7

sudo systemctl start elasticsearch.service

برنامه ‏2‑7 restart کردن سرویس

بعد از اجرای برنامه ‏2‑7 شما باید خروجی مانند شکل ‏2‑1 باشد.

شکل ‏2‑1 مشاهده‌ی وضعیت سرویس
شکل ‏2‑1 مشاهده‌ی وضعیت سرویس

توصیه) بهتر است بعد از اجرای سرویس مسیر */var/log/elasticsearch/ را بررسی کنید که هیچ گونه errorرخ‌‌نداده باشد.

2-2 نصب logstash

برای نصب این نرم‌افزار احتیاج به عضویت در سایت elastic.coاست اما به دلیل این که در قسمت قبل برای elasticsearch این عضویت انجام گرفت برنامه ‏2‑3 در این زمان کافی است که فقط repository را اضافه کنیم. برنامه ‏2‑8

echo &quotdeb http://packages.elastic.co/logstash/2.0/debian stable main&quot | sudo tee -a /etc/apt/sources.list

برنامه ‏2‑8 افزودن repository logstash

بعد از update کردن مخازن، نصب نرم‌افزار را با استفاده از انجام دهید. برنامه ‏2‑9

sudo apt-get install logstash

برنامه ‏2‑9 نصب logstash

2-2-1 بررسی وضعیت مجموعه نرم‌افزاری ELK بعد از نصب

برای راه اندازی سرویس و افزودن آن در startup مانند برنامه ‏2‑10 عمل کنید

sudo systemctl daemon-reload
sudo systemctl enable logstash.service
sudo systemctl start logstash.service

برنامه ‏2‑10 راه اندازی logstash

بعد از راه اندازی بررسی کنید که سرویس بالا آمده باشد

systemctl status logstash.service

برنامه ‏2‑11 بررسی وضعیت logstash

خروجی برنامه ‏2‑11 مانند شکل ‏2‑2 است

شکل ‏2‑2 بررسی logstash
شکل ‏2‑2 بررسی logstash

توصیه) بهتر است بعد از اجرای سرویس مسیر */var/log/logstash/ را بررسی کنید که هیچ گونه errorرخ‌‌نداده باشد.

3 پیکربندی مجموعه ابزار ELK

برای شروع کار با مجموعه ابزار elk در ابتدا نیاز است که با یکسری مفاهیم مورد استفاده آشنا شویم[3] جدول ‏3‑1

جدول ‏3‑1 اصطلاحات
جدول ‏3‑1 اصطلاحات

در شکل ‏3‑1 می‌تواند اصطلاحات elasticsearch را با RDBMS مقایسه کنید[4]

شکل ‏3‑1 RDBMS vs ES
شکل ‏3‑1 RDBMS vs ES

3-1 پیکربندی elasticsearch

بعد از آشنایی با اصطلاحات elasticsearch احتیاج است که با فرمت json هم آشنا شوید که این بحث خارج از محدوده‌ی این مستند است.

ابزار Elasticsearch از فرم json برای ذخیره‌ی متن‌ها استفاده می‌کند.

ابزاری که برای تنظیمات و مشاهده‌ی تنظیمات elasticsearchاستفاده می‌‌شوند عبارتنداز:

دستور Curl یک ابزار ارسال url یا انتقال داده‌ّها در لینوکس

افزونه Head plugin: پلاگینی که برروی elasticsearch نصب می‌شود و محیط گرافیکی برای پیکربندی فراهم می‌آورد

برای کار با ابزار curl باید با option آن یعنی PUT و GET آشنا شوید.

متد GET: برای برداشتن یا درخواست از یک سرور استفاد می شود

متد PUT: برای بارگزاری در یک سرور استفاده می‌شود

در elasticsearch داکیومنت‌ها به وسیله‌ی index API ذخیره و جستوجو پذیر می‌شوند و همان طور که گفته شد داکیومنت‌ها باید دارای typeو ID باشند حال در صورتی که شما می‌خواهید یک داکیومنت را در elasticsearch ذخیره کنید باید این داکیومنت دارای یک id و type و index باشد فرم افزودن یک داکیومنت با ویژگی‌های گفته شده مانند برنامه ‏3‑1 است.

PUT /{index}/{type}/{id}
{
&quotfield&quot: &quotvalue&quot,
...
}

برنامه ‏3‑1 بارگذاری داکیومنت در سرور

به عنوان مثال برای استفاده از curl در بارگذاری در سرور می‌توانید برنامه ‏3‑2را مشاهده کنید

curl –X PUT http://localhost:9200/website/blog/123
{
&quottitle&quot: &quotMy first blog entry&quot,
&quottext&quot: &quotJust trying this out...&quot,
&quotdate&quot: &quot2014/01/01&quot
}

برنامه ‏3‑2نمونه بارگذاری

برنامه ‏3‑2 به بارگذاری یک داکیومنت در سیستم پرداخته است که اجزای آن عبارتند از:

Index=website
Type=blog
ID=123

از ویژگی‌ّهای elastic این است که در صورتی که یک داده‌ای قبلا index نشده باشد به صورت اتوماتیک برای آن یک index جدید ایجاد می‌کند

زمانی که شما یک index جدید ایجاد می‌کنید یا یک index جدید ایجاد می‌شود این امکان وجود دارد که بتوان indexرا پیکربندی دوباره کرد در این مستند درباره‌ی shard و replica توضیحاتی نوشته شده است((مراجعه به قسمت اصطلاحات جدول ‏3‑1)) در برنامه ‏3‑3 می‌توانید نحوه‌ی تنظیم کردن یک index را مشاهده کنید که تعداد shard و replica را تغییر داده است

از ویژگی‌ّهای elastic این است که در صورتی که یک داده‌ای قبلا indexنشده باشد به صورت اتوماتیک برای آن یک index جدید ایجاد می‌کند

برنامه ‏3‑3 setting

از تنظیمات دیگر مورد نیاز برای یک indexمی‌توان mapping((توضیحات جدول ‏3‑1)) را هم نام برد.

فرض کنید که می‌خواهید mapping یک index را مشاهده کنید در این زمان می‌توانید از برنامه ‏3‑4 استفاده کنید

curl –XGET http://localhost:9200/website/_mapping

برنامه ‏3‑4 mapping

خروجی برنامه ‏3‑4 نمایش دهنده‌ی data typeهای یک indexهستند.

خروجی دستور curl واضح نیست و پیشنهاد می‌شود که از پلاگین‌ها موجود در elasticsearch و kibana استفاده شود.

افزونه‌ای که در این مستند ذکر می‌شود head نام دارد که بر روی elasticsearch نصب می‌شود.

برای نصب افزونه‌ی head در ابتدا وارد مسیر usr/share/elasticsearch/bin/ شوید و با وارد کردن افزونه نصب می‌شود

./plugin -install mobz/elasticsearch-head

برنامه ‏3‑5 نصب افزونه

بعد از نصب افزونه شما میتوانید با ورود به مرورگر و وارد کردن آدرس http://localhost:9200/_plugin/head نمای رابط کابری آن را مشاهده کنید.

نکته) زمانی که شما می‌خواهید از یک سیستم دیگر به elasticsearchمتصل شوید باید در فایل تنظیمات elasticsearch تغییراتی را اعمال کنید تا این که node از دید دیگر سیستم‌ها مخفی نماند برای این کار مانند شکل ‏3‑2 network.host عمل کنید و network.host را به 0.0.0.0 تغییر دهید و از کامنت بودن خارج کنید

شکل ‏3‑2 network.host
شکل ‏3‑2 network.host

نکته) زمانی که شما از مجموعه ELK استفاده می‌کنید و با استفاده از logstash که در ادامه به پیکربندی آن می‌پردازیم به ارسال لاگ به سمت elastic می‌پردازید خود ES[1] به ایجاد indexهایی با نام logstash و زمان ایجاد آن می‌پردازد.

زمانی که با پلاگین head به elasticsearch متصل می‌شوید نمای کاربری شکل ‏3‑3 elastic head plugin را مشاهده می‌کنید

شکل ‏3‑3 elastic head plugin
شکل ‏3‑3 elastic head plugin

شما با استفاده از افزونه‌ی head می‌توانید به ایجاد، حذف و مشاهده‌ی و اعمال تنظیمات در یک فضای گرافیکی بپردازید.

در شکل ‏3‑3 می‌توانید در تب overviewبه مشاهده‌ی اطلاعات در رابطه با indexها بپردازید

برای افزودن یک index جدید وارد تب indices شده و بر روی new index کلیک کنید. شکل ‏3‑4

شکل ‏3‑4 ایجاد index
شکل ‏3‑4 ایجاد index

برای مشاهده‌ی documentها و جستوجو در آن‌ّها وارد تب browser شوید. شکل ‏3‑5

شکل ‏3‑5 تب browser
شکل ‏3‑5 تب browser

شما می‌توانید برای ساختار دهی به نتیجه‌ی query وارد تب structured query شوید شکل ‏3‑6

شکل ‏3‑6 ساختار دهی به پرسو جو
شکل ‏3‑6 ساختار دهی به پرسو جو

در تب Any requestشما می‌توانید هر گونه اطلاعاتی را upload یا download کنید. شکل ‏3‑7

شکل ‏3‑7 any request
شکل ‏3‑7 any request

3-2 پیکربندی logstash

وظیفه‌ی logstash در سه بخش تقسیم می‌شود:

· ابتدا دریافت‌ لاگ‌ها از فایل یا از یک سیستم دیگر

· پردازش بر روی لاگ‌ّها

· ارسال‌ لاگ به elasticsearch

ابزار Logstash تنظیمات خود را از یک فایل پیکربندی برمی‌دارد، این فایل شامل سه بخش input، filter و output است هرکدام از این سه بخش به صورت جداگانه در ادامه توضیح داده می‌شوند

3-2-1 دریافت لاگ در logstash

همان گونه که گفته شد یکی از وظایف logstash دریافت لاگ است، برای این کار از تنظیماتش را از قسمت input دریافت می‌کند

فرض کنید که شما بر روی یک سیستم نرم‌افزار logstashرا نصب کرده‌اید حالا می‌خواهید که فایل‌هایی از مسیر /var/log را به سمت elasticsearch ارسال کنید.

در این زمان همچنین یک دسته از سیستم‌ها هستند که با استفاده از نرم‌افزار‌هایی مانند rsyslog مشغول به ارسال لاگ سمت logstash بر روی یک پورت خاص در اینجا پورت 3333 هستند، در این زمان شما می‌توانید فرم input فایل پیکربندی را مانند برنامه ‏3‑6 وارد کنید

Input{
tcp {
port => 3333
type => &quotremote syslog&quot
}
file {
path => &quot/var/log/syslog&quot
type => &quotlocal syslog&quot
}
file {
path => &quot/var/log/alternatives.log&quot
type => &quotlocal alternatives.log&quot
}
file {
path => &quot/var/log/user.log&quot
type => &quotlocal user.log&quot
}
file {
path => &quot/var/log/kern.log&quot
type => &quotlocal kern.log&quot
}
file {
path => &quot/var/log/messages&quot
type => &quotlocal messages&quot
}
}

برنامه ‏3‑6 فرم input

همانگونه که در برنامه ‏3‑6 مشاهده می‌کنید بخش tcpبرای گوش دادن بر روی یک پورت tcpاستفاده می‌شود و همچنین بخش fileبرای مشخص کردن یک fileدر یک مسیر خاص. کلمه‌ی typeمشخص می‌کند که typeورودی این لاگ‌ها چیست در واقع با افزودن یک type به یک مجموعه لاگ آن‌ها را برای پردازش راحت تر و همچنین شناسایی راحت‌تر مشخص می‌کنیم

همان گونه که گفته شد اطلاعات دریافتی از طریق inputباید فیلتر شوند تا به قالب قابل فهم تبدیل شوند. در حال حاضر لاگ‌های ورودی مشخص شده‌اند و شما می‌توانید بر روی آن‌ّها پردازش‌های مورد نیاز را انجام دهید البته برای قسمت input تنظیمات بیشتری وجود دارد که خارج حوزه‌ی این مستند است شما می‌توانید با مراجعه به سایت elastic جزئیات بیشتر را مشاهده کنید.

3-2-2 پردازش بر روی لاگ

از علل فیلتر کردن می‌توان گفت که باعث خواناتر شدن لاگ شده و همچنین می‌توان آن را در یک پایگاه داده با جزئیات بیشتر ذخیره کرد. همچنین می‌توان موراد بیشتری مانند اطلاعات زمانی به آن اضافه کرد یا این که از آن برخی اطلاعات اضافی را حذف کرد.

هدف ما این است که اطلاعات را در فرم json تبدیل کنیم، در این قسمت فقط از pluginفیلتر کننده‌ی grokنام برده می‌شود و توضیحات آن را به خود خواننده واگذار می‌کنم، اما در صورت نیاز grokها از قبل نوشته شده‌ای مبتنی بر نیاز‌های شما در اینترنت موجود است و در اینجا در یک grok نمونه برای لاگ syslog آورده شده است که کافی است شما آن را کپی کنید از آن استفاده کنید.

در مشخص شده است در صورتی که type یک log که در قسمت input ((در قسمت دریافت لاگ در logstash))

وارد شده است برابر با remote syslog بود فیلترینگ grok را بر روی آن اعمال کن.

نکته) شما می‌توانید خروجی این فیلترینگ را در صفحه‌ی نمایش مشاهده کنید که در قسمت بعدی (output) به آن می‌پردازیم

filter {
if [type] == &quotremote syslog&quot {
grok {
match => { &quotmessage&quot => &quot%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}&quot }
add_field => [ &quotreceived_at&quot, &quot%{@timestamp}&quot ]
add_field => [ &quotreceived_from&quot, &quot%{host}&quot ]
}
syslog_pri { }
date }
match => [ &quotsyslog_timestamp&quot, &quotMMM d HH:mm:ss&quot, &quotMMM dd HH:mm:ss&quot ]
}
}

برنامه ‏3‑7 grok filter

3-2-3 ارسال لاگ‌های پردازش شده

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

برای مشاهده‌ی خروجی فایل پیکربندی در ابتدا موارد گفته شده در قسمت‌های((‏3-2-1 و ‏3-2-2)) را در یک فایل به نام دلخواه با پسوند .conf وارد کنید در این مثال نام فایل logstash_sample.conf است. در مرحله‌ی بعد نوبت به تنظیم قسمت outputنرم‌افزار logstashمی‌شود.

قسمت خروجی را مانند برنامه ‏3‑8 تنظیم می‌کنیم

output {
stdout {}
}

برنامه ‏3‑8 output

برای debuggingدر قسمت stdout مانند برنامه ‏3‑9 عمل کنید

output {
stdout { codec => rubydebug }
}

برنامه ‏3‑9 تنظیم خروجی

فایلی که در اینجا مورد استفاده قرار می‌گیرد محتوای برنامه ‏3‑10 دارد

input{
tcp {
port => 3333
type => &quotremote syslog&quot
}
file {
path => &quot/var/log/syslog&quot
type => &quotlocal syslog&quot
}
file {
path => &quot/var/log/alternatives.log&quot
type => &quotlocal alternatives.log&quot
}
file {
path => &quot/var/log/user.log&quot
type => &quotlocal user.log&quot
}
file {
path => &quot/var/log/kern.log&quot
type => &quotlocal kern.log&quot
}
file {
path => &quot/var/log/messages&quot
type => &quotlocal messages&quot
}
}
filter {
if [type] == &quotremote syslog&quot {
grok {
match => { &quotmessage&quot => &quot%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}&quot }
add_field => [ &quotreceived_at&quot, &quot%{@timestamp}&quot ]
add_field => [ &quotreceived_from&quot, &quot%{host}&quot ]
}
syslog_pri { }
date {
match => [ &quotsyslog_timestamp&quot, &quotMMM d HH:mm:ss&quot, &quotMMM dd HH:mm:ss&quot ]
}
}
}
}
output {
stdout { codec => rubydebug }
}

برنامه ‏3‑10 محتوای فایل تست

برای تست فایل محتوای برنامه ‏3‑10 مانند ادامه عمل کنید

به محلی که logstash را نصب کرده‌اید بروید و فایل پیکربندی را در آنجا کپی کنید، به طور معمول و در این داکیومنت در مسیر /opt محل قرار گیری فایل نصبی logstash است، حالا وارد مسیر /opt/logstash/bin/ شده و مانند برنامه ‏3‑11 با استفاده از option –fو نام فایل خروجی را مشاهده کنید

./opt/logstash/bin/logstash –f logstash_sample.conf

برنامه ‏3‑11 اجرای فایل پیکربندی

خروجی دستور برنامه ‏3‑11 مانند شکل ‏3‑8

شکل ‏3‑8خروجی فایل پیکربندی
شکل ‏3‑8خروجی فایل پیکربندی

برای زمانی که می‌خواهید خروجی logstash را به elasticsearch ارسال کنید نیاز است که برنامه ‏3‑12 در قسمت outputآن را اضافه کنید.

elasticsearch { hosts => [&quotlocalhost:9200&quot] }

برنامه ‏3‑12 ارسال به elasticsearch

بنابراین قسمت output فایل کانفیگ برابر با برنامه ‏3‑13 است.

output {
elasticsearch { hosts => [&quotlocalhost:9200&quot] }
}

برنامه ‏3‑13 send to elastic

3-2-4 رابط‌کاربری kibana

بعد از نصب نرم‌افزار kibana شما می‌توانید وارد browser شده و به مشاهده‌ی لاگ‌های ذخیره شده در elastic بپردازید. پورت مورد استفاده و به صورت پیش فرض 5601 است.

در ابتدا که وارد رابط کاربری kibana شدید صفحه‌ای خالی مشاهده می‌کنید.شکل ‏3‑9

شکل ‏3‑9 kibana
شکل ‏3‑9 kibana

برای مشاهده‌ی logها در نرم‌افزار kibana در ابتدا باید index یا indexهای مورد نظر را انتخاب کنیم در ابتدا وارد تب setting شده و نام index مورد نظر را انتخاب کنید برای مشاهده‌ی indexها می‌‌توانید از روش‌های گفته شده در بخش ((‏3-1)) استفاده کنید.

صورتی که از logstash استفاده می‌کنید indexها با نام اولیه‌ی logstash ایجاد می‌شوند شما می‌توانید با استفاده از کاراکتر * تمامی indexهای موجود در logstashرا انتخال کنید، مانند:

شکل ‏3‑10 انتخاب index
شکل ‏3‑10 انتخاب index

در مرحله‌ی بعد تمامی تیک‌های گزینه‌ها را بردارید و create را کلیک کنید مانند شکل ‏3‑11تنظیم index

شکل ‏3‑11 تنظیم index
شکل ‏3‑11 تنظیم index

زمانی که indexمورد نظر را ایجاد کردید وارد تب discover شوید. بعد از ورود به تب discover می‌توانبد لاگ‌هایی که ذخیره شده‌اند را همراه با fildهای موجود مشاهده کنید.

شکل ‏3‑12 مشاهده‌ی لاگ‌ّها
شکل ‏3‑12 مشاهده‌ی لاگ‌ّها

در صورتی که به جستوجوی خواصی نیازمند هستید باید بر زبان DSL طراحی شده برای elasticsearchتسلط داشته باشید، عبارتی که می‌خواهید جستوجو کنید را در نوار جستوجوی صفحه‌ی kibana وارد کنید. شکل ‏3‑13

شکل ‏3‑13 نوار جستوجو
شکل ‏3‑13 نوار جستوجو

برای نمایش بصری یک query وارد تب visualizeشوید و نوع chart خود را انتخاب کنید به عنوان نمونه در اینجا PIE chart انتخاب می‌شود. شکل ‏3‑14 نمودار‌ها

شکل ‏3‑14 نمودار‌ها
شکل ‏3‑14 نمودار‌ها

بعد از انتخاب نمودار pie chart اسم index از شما پرسیده می‌شود و به شما می‌گوید آیا از قبل پرس و جویی ذخیره دارید یا می‌خواید یک پرس و جوی جدید ایجاد کنید،‌ در اینجا گزینه‌ی from new search را انتخاب می‌کنیم و بعد از آن index مورد نظر را انتخاب می‌کنیم.

شکل ‏3‑15 new search
شکل ‏3‑15 new search

بعد از انتخاب index مورد نظر صفحه‌ی ظاهر می‌شود که باید در این زمان مشخص کنیم که چه بخش‌هایی باید به صورت visual نمایش داده شوند.

شکل ‏3‑16 visuale
شکل ‏3‑16 visuale

حال در قسمت چپ صفحه splite را انتخاب کنید و نوع داده‌هایی که قصد تجمع آن‌ها را دارید انتخاب نمائید.که در اینجا ما قصد داریم بر اساس زمان، دیتا جمع آوری کنیم و تنظیمات را مانند شکل ‏3‑17 تنظیمات visual قرار می‌دهیم.

شکل ‏3‑17 تنظیمات visual
شکل ‏3‑17 تنظیمات visual

بعد از انجام موارد گفته شده در تنظیمات بر روی قسمت play آن کلیک کنید. در این زمان، نمودار به قسمت‌ّهایی تقسیم می‌شود که هر قسمت نمایش دهنده‌ی میزان لاگ در بازه‌ی زمانی مشخص شده است.شکل ‏3‑18 visual split

شکل ‏3‑18 visual split
شکل ‏3‑18 visual split

فیلتر‌‌های دیگری هم وجود دارد که می‌توان اعمال کرد و شما در نهایت می‌توانید یک نمودار را ذخیره کنید تا در مکان‌های دیگر و در زمان‌های دیگر از آن‌ها استفاده کنید مانند شکل ‏3‑19

شکل ‏3‑19 ذخیره نمودار
شکل ‏3‑19 ذخیره نمودار

و بعد از ذخیره‌ی نمودار آن را در dashboard خود وارد کنید.

برای وارد کردن در dashboard وارد تب dashboard شده و مانند شکل ‏3‑20 بر روی علامت + کلیک کنید

شکل ‏3‑20 افزودن به داشبورد
شکل ‏3‑20 افزودن به داشبورد

و بعد از مشاهده‌ی چارت‌های ذخیره شده یکی را انتخاب کنید تا به داشبورد شما افزوده شود. شکل ‏3‑21

شکل ‏3‑21 داشبورد
شکل ‏3‑21 داشبورد

3-3 موارد تکمیلی

مجموعه نرم‌افزاری ELK از قابلیت‌های بسیاری برخوردار است که گفتن تمامی آنها خارج از محدوده‌ی این مستند است. مطالبی که تا کنون در این مستند نوشته شده و آموزش داده شده است برای آشنایی با ابزار تا حد مناسبی کافی است، در صورت نیاز به تنظیمات اضافی با مراجعه به شبکه‌ی جهانی internet نیاز‌های خود را برطرف کنید.

در روند راه اندازی دستورات مفیدی که توانست به راه اندازی کمک کند عبارتند از

  • دستور netstat –nlp : برای مشاهده‌ی پورت‌های باز
  • دستور lsof -nPi:9200 : برای مشاهده‌ی وضعیت یک پورتد
  • دستور tcpdump -Xnlo port 9200 : برای مشاهده‌ی دیتای ورودی و خروجی از یک پورت خاص برو روی یک اینترفیس

این دستورات در بررسی اطمینان از ارسال داده‌ها کمک شایانی داشتند.

بعد این که با پیکربندی‌های نرم‌افزار‌ها اشنا شدید نکاتی را برای اتصال این مجموعه نرم‌افزاری باید در نظر داشت که عبارتنداز:

در صورتی که تمام نرم‌افزار‌های بر روی یک سیستم نصب می‌شوند احتیاج نیست که از PKIها استفاده کنید.

در صورتی که نرم‌افزارها بر روی سیستم‌های متفاوتی نصب هستند بهتر است که با استفاده از دستورات گفته شده مانند tcpdump و lsof به بررسی باز بودن پورت‌ها و اطمینان از ارسال داده‌ها بپردازید.

در صورت که قصد ندارید که مطابق با نصب این مستند این ابزار را راه اندازی کنید باید از سازگاری نسخه‌های مختلف نرم‌افزار‌ّها مطلع شوید که می‌توانید نسخه‌های سازگار را طریق آدرس [5] موجود در فصل مراجع مشاهده فرمائید

4 رفع مشکلات

در راه‌اندازی این مجموعه نرم‌افزار مشکلاتی به جود آمدند که در ادامه آن‌ها را بررسی و نحوه‌ی برطرف شدن آن‌ها را ذکر خواهم کرد.

برای نصب نرم‌افزار از طریق repository احتیاج است که از فیلتر شکن استفاده شود به این علت که تحریم هستیم.

در قسمت نصب بهتر است که ابتدا اتصال را بدون استفاده از مکانیزم امن سازی PKI استفاده کنید و بعد از برقراری اتصال در صورت نیاز از PKIها استفاده کنید.

برای کار و اعمال تنظیمات در مجموعه نرم‌افزار با تمامی اصطلاحات آشنا شوید

سعی کنید که قبل از اتصال kibana به elasticsearch توسط head plugin برای elastic از وجود indexها اطمینان حاصل کنید.

5 مراجع

[1] “information-logging-standard.” .

[2] “Install ELK Stack on Debian 8 |,” Atlantic.Net Community. .

[3] “Glossary of terms | Elasticsearch Reference [5.1] | Elastic.” [Online]. Available: https://www.elastic.co/guide/en/elasticsearch/reference/current/glossary.html. [Accessed: 01-Jan-2017].

[4] Vic Hargrave, “Managing Your Security Logs with Elasticsearch,” 13:15:43 UTC.

[5] “Elastic Support Matrix · Elasticsearch | Elastic.” [Online]. Available: https://www.elastic.co/support/matrix. [Accessed: 01-Jan-2017].


این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است