بسته نرم‌افزاری Elastic که قبلاً با نام ELK شناخته می‌شد، مجموعه‌ای از نرم‌افزارهای متن‌باز است. این بسته توسط تیم Elastic ساخته شده که به شما اجازه جستجو، آنالیز و شبیه‌سازی ثبت‌ وقایع را می‌دهد. این ثبت وقایع می‌تواند از هر منبعی و در هر فرمتی باشد. این رویکرد در اصطلاح «ثبت وقایع متمرکز» نامیده می‌شود. ثبت وقایع متمرکز می‌تواند با امکان جستجو در تمامی ثبت‌های وقایع، می‌تواند به تشخیص بهتر مشکلات سرورها یا اپلیکیشن‌ها کمک کند. همچنین به این وسیله می‌توانید مشکلات سرورهای چندگانه را در یک بازه زمانی مشخص تشخیص دهید.

بسته نرم افزاری Elastic دارای ۴ جزء اصلی است.

  • Elasticsearch: یک ابزار جستجوی گسترده RESTful که تمام داده‌های جمع‌آوری‌شده را ذخیره می‌کند.
  • Logstash: عضو پردازشگر داده‌ها در بسته نرم‌افزاری Elastic که داده ورودی را به Elasticsearch ارسال می‌کند.
  • Kibana: یک رابط کاربری تحت وب برای جستجو و شبیه‌سازی ثبت وقایع.
  • Beat ها: رابط‌های سبک و مخصوص انتقال داده که می‌توانند داده‌ها را از صدها یا هزاران سیستم به Logstash یا Elasticsearch انتقال دهند.

در این مطلب نحوه نصب بسته نرم‌افزاری Elastic را در یک سرور اوبونتو 20.04 را آ‌موزش خواهیم داد. شما چگونگی نصب تمام اجزای بسته Elasric شامل Filebeat را فراخواهید گرفت. Filebeat یک نمونه از Beat ها برای اراسل و جمع‌آوری ثبت وقایع و فایل‌ها می‌باشد. همچنین با توجه به اینکه Kibana معمولاً تنها در لوکال‌هاست در دسترس است، از Nginx برای پروکسی‌کردن آن استفاده خواهیم کرد. در نتیجه، این ابزار از طریق یک مرورگر وب در دسترس خواهد بود. تمام این اجزا در یک سرور جداگانه نصب می‌شوند که ‌آن را سرور Elastic Stack می‌نامیم.

نکته: به خاطر داشته باشید که وقتی بسته نرم‌افزاری Elastic را نصب می‌کند، باید نسخه نرم‌افزاری در تمام بسته یکسان باشد. در این آموزش ما آخرین نسخه این بسته را نصب می‌کنیم که در زمان نگارش این مطلب برابر 7.7.1 است.

پیش‌نیازها

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

یک سرور اوبونتو 20.04 با حافظه رم ۴ گیگابایت، دو CPU و یک کاربر sudo غیر روت. با تنظیمات اولیه سرور اوبونتو 20.04 به راحتی می‌توانید به این موارد دست پیدا کنید. در اینجا با حداقل مقدار پردازشگر و حافظه رم ممکن برای Elasticsearch کار می‌کنیم. به خاطر داشته باشید که میزان قدرت پردازش، حافظه رم و حافظه ذخیره داده مورد نیاز سرور Elasticsearch کاملاً به حجم ثبت وقایعی که انتظار دارید، بستگی خواهد داشت.

نصب OpenJDK 11

نصب Nginx در سرور که بعداً برای ایجاد یک پروکسی بازگشتی برای Kibana مورد استفاده قرار خواهد گرفت.

همچنین با توجه به اینکه بسته نرم‌افزاری Elastic برای دسترسی به اطلاعات باارزش سرور به کار گرفته می‌شود و شما نمی‌خواهید که افراد فاقد صلاحیت به این اطلاعات دسترسی داشته باشند، استفاده از یک ابزار گواهی TLS/SSL اهمیت خواهد داشت. البته این موضوع کاملاً اختیاری است، ولی به‌شدت توصیه می‌شود.

در هر صورت، با توجه به اینکه در انتهای این ‌آموزش، تغییراتی در سرور Nginx انجام خواهید داد، طبیعی که نحوه کار با ابزاری مانند Let’s Encrypt را در اوبونتو 20.04 بلد باشید.

یک عنوان دامین کاملاً معتبر (FQDN). در تمام این آموزش از عنوان your_domain استفاده شده است. می‌توانید در Namecheap یک نام دامین تهیه کنید، یک عنوان به رایگان از Freenom دریافت کنید و یا از یک ابزار ثبت دامین به دلخواه استفاده نمایید.

دو رکورد زیر برای سرور تنظیم می‌شوند.

  • یک رکورد A با اختصاص your_domain به آدرس IP عمومی سرور
  • یک رکورد A با اختصاص your_domain به آدرس IP عمومی سرور

گام ۱) نصب و تنظیمات Elasticsearch

برنامه Elasticsearch به صورت پیش‌فرض در منبع بسته‌های اوبونتو وجود ندارد. با این وجود، می‌توان با کمک APT و اضافه کردن منبع بسته نرم‌افزاری Elastic آن را نصب کرد.

تمام بسته‌ها به منظور ایمنی از کلید ورودی Elasticsearch استفاده می‌کنند که مورد تأیید مدیریت بسته‌های شما قرار می‌گیرد. در این مرحله، شما کلید GPG عمومی Elasticsearch را وارد می‌کنید و با اضافه کردن لیست منبع بسته نرم‌افزاری Elastic، اقدام به نصب Elasticsearch خواهید کرد.

برای شروع از فرمان cURL استفاده می‌کنیم که فرمانی برای انتقال داده‌ها با آدرس URL است. این کار به منظور وارد کردن کلید GPG عمومی Elasticsearch به APT صورت می‌گیرد. به خاطر داشته باشید که از گزینه –fsSL برای خاموش کردن تمام پیغام‌های خطا در طول فرآیند (به جز از کار افتادن سرور) استفاده می‌کنیم. در نتیجه، cURL اجازه خواهد داشت که در صورت پاسخ نگرفتن، درخواست خود را به یک جای جدید ارجاع دهد. خروجی فرمان cURL را به برنامه apt-key انتقال دهید تا کلید GPG عمومی به APT اضافه شود.

curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

سپس لیست منبع Elastic را به دایرکتوری sources.list.d اضافه کنید. این همان جایی است که APT به دنبال منابع جدید جستجو خواهد کرد.

echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

حالا لیست بسته‌های خود را بروزرسانی کنید تا APT منبع جدید Elastic را بخواند.

sudo apt update

حالا نوبت به نصب Elasticsearch با فرمان زیر می‌رسد.

sudo apt install elasticsearch

هم‌اکنون Elasticsearch نصب شده و آماده انجام تنظیمات است. به دلخواه، از یکی از برنامه‌های ویرایشگر برای ویرایش فایل تنظیمات اصلی Elasticsearch یعنی elasticsearch.yml استفاده کنید. در اینجا ما nano را به کار می‌بریم.

sudo nano /etc/elasticsearch/elasticsearch.yml

نکته: فایل تنظیمات Elasticsearch به فرمت YAML است. به این معنا که باید ساختار تورفتگی متن را حفظ کنیم. بنابراین در هنگام ویرایش این فایل دقت کنید که هیچ‌گونه فاصله اضافی ایجاد نکنید.

فایل elasticsearch.yml حاوی تنظیمات لازم برای کلاستر، نقاط، path ها، حافظه، شبکه، بازیابی و مسیرهای خروجی می‌باشد. بسیاری از گزینه‌ها قبلاً در این فایل تنظیم شده‌اند. با این حال، شما می‌توانید مطابق با نیازتان آنها را تغییر دهید. به منظور نشان دادن روند انجام کار در این مطلب که بر اساس یک سرور جداگانه است، ما تنها تنظیمات هاست شبکه را تغییر می‌دهیم.

Elasticsearch منتظر دریافت ترافیک از هر مکانی در پورت 9200 می ماند. در نتیجه، شما باید دسترسی خارجی به برنامه Elasticsearch را محدود کنید تا جلوی خوانده‌شدن داده‌ها یا غیرفعال کردن کلاستر Elasticsearch را از طریق REST API بگیرید. برای ایجاد محدودیت دسترسی و افزایش ایمنی، خطی را پیدا کنید که پارامتر network.host را مشخص می‌کند. کامنت آن را پاک کنید و مقدار آن را با لوکال‌هاست مطابق زیر جایگزین کنید.

/etc/elasticsearch/elasticsearch.yml
. . .
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: localhost
. . .

پس از مشخص کردن لوکال‌هاست، Elasticsearch به تمام رابط‌ها و IP‌ها توجه می‌کند. اگر بخواهید تنها به یک رابط کاربری خاص توجه کند، می‌توانید به جای لوکال‌هاست، از آدرس IP مربوطه استفاده کنید. پس از انجام این تغییرات، فایل elasticsearch.yml را ذخیره کرده و ببندید. اگر از ویرایشگر nano استفاده می‌کنید، می‌توانید این کار را با استفاده از کلیدهای CTRL+X، کلید Y و سپس Enter انجام دهید.

اینها حداقل تنظیماتی هستند که برای شروع کار با Elasticsearch نیاز است. در نتیجه، شما می‌توانید برای اولین بار کار با Elasticsearch را آغاز کنید.

سرویس Elasticsearch را با فرمان systemctl اجرا کنید. این موضوع چند ثانیه زمان می‌برد. در غیر این صورت، با پیغام خطایی مبنی بر عدم اتصال روبرو می‌شوید.

sudo systemctl start elasticsearch

سپس فرمان زیر را اجرا کنید تا در زمان راه‌اندازی سرور، همیشه Elasticsearch اجرا شود.

sudo systemctl enable elasticsearch

در همین حال می‌توانید در دسترس بودن سرویس Elasticsearch را با ارسال یک درخواست HTTP آزمایش کنید.

curl -X GET "localhost:9200"

در نتیجه این فرمان، پاسخی حاوی برخی اطلاعات پایه در مودر سیستم‌ محلی دریافت می‌کنید.

خروجی

{
"name" : "Elasticsearch",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "qqhFHPigQ9e2lk-a7AvLNQ",
"version" : {
"number" : "7.7.1",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
"build_date" : "2020-03-26T06:34:37.794943Z",
"build_snapshot" : false,
"lucene_version" : "8.5.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}

حالا که Elasticsearch راه‌اندازی شده، بیایید Kibana، بخش بعدی بسته نرم‌افزاری Elastic را نصب کنیم.

گام ۲) نصب و تنظیمات داشبورد Kibana

مطابق راهنمای رسمی، شما فقط زمانی می‌توانید Kibana را نصب کنید که Elasticsearch را نصب کرده باشید. این ترتیب نصب بر اساس وابستگی هر کدام از محصولات بسته نرم‌افزاری Elastic به دیگری است.

در مرحله قبلی منبع بسته را اضافه کرده بودیم. بنابراین در اینجا، نصب اجزای دیگر بسته نرم‌افزاری Elastic را با استفاده از فرمان apt به صورت زیر ادامه می‌دهیم.

sudo apt install kibana

سپس سرویس Kibana را فعال و راه‌اندازی می‌کنیم.

sudo systemctl enable kibana
sudo systemctl start kibana

به دلیل اینکه Kibana تنها برای دریافت ورودی از لوکال‌هاست تنظیم شده، نیاز به تنظیم یک پروکسی بازگشتی وجود خواهد داشت تا امکان دسترسی خارجی به آن فراهم گردد. برای این منظور از سرور Nginx استفاده خواهیم کرد. این سرور از قبل باید روی سیستم شما نصب شده باشد.

ابتدا از فرمان openssl برای ایجاد یک کاربر مدیریتی Kibana استفاده کنید. این کاربری را برای دسترسی به رابط کاربری Kibana به کار خواهید برد. به عنوان نمونه، در اینجا نام کاربری را kibanaadmin انتخاب کرده‌ایم. ولی از لحاظ امنیتی توصیه می‌شود که یک نام غیراستاندارد برای کاربر انتخاب کنید تا حدس‌زدن آن چندان آسان نباشد.

فرمان زیر کاربری مدیریتی Kibana را همراه با کلمه عبور ایجاد می‌کند و این اطلاعات نیز در فایل htpasswd.users ذخیره می‌گردد. شما سرور Nginx را برای درخواست کلمه کاربری و رمز عبور تنظیم می‌کنید و به صورت لحظه‌ای این فایل را می‌خوانید.

echo "kibanaadmin:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users

پس از ظاهر شدن پیغام، پسورد را وارد کرده و تأیید کنید. حتماً این اطلاعات ورود را جایی یادداشت کنید؛ چرا که در هنگام دسترسی به رابط کاربری تحت وب Kibana به آن نیاز خواهید داشت.

مرحله بعد، ایجاد فایل بلوک سرور Nginx است. به عنوان نمونه، در اینجا عنوان این فایل را your_domain انتخاب کرده‌ایم. اگرچه شما ممکن است بخواهید یک نام مرتبط‌تر برای آ‌ن داشته باشید. مثلاً فرض کنید که رکوردهای FQDN و DNS را برای این سرور تنظیم کرده باشید. در این حالت می‌توانید یک نام مرتبط با FQDN انتخاب کنید.

با استفاده از nano یا هر ویرایشگر دلخواه، فایل بلوک سرور Nginx را بسازید.

sudo nano /etc/nginx/sites-available/your_domain

بلوک کد زیر را به فایل اضافه کنید. حتماً از بروزرسانی your_domain برای مطابقت با FQDN یا آدرس IP عمومی سرور مطمئن شوید. این کد باعث می‌شود که Nginx ترافیک HTTP را به برنامه Kibana هدایت کند. این برنامه ورودی‌ها را از localhost:5601 دریافت می‌کند. به‌علاوه، این تنظیمات باعث می‌شود که Nginx فایل htpasswd.users را بخواند و تأییدیه‌های ابتدایی را صورت دهد.

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

/etc/nginx/sites-available/your_domain
server {
listen 80;
server_name your_domain;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/htpasswd.users;
location / {
proxy_pass http://localhost:5601;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}

وقتی کارتان تمام شد، فایل را ذخیره کرده و ببندید.

سپس نوبت به فعالسازی تنظیمات جدید با ایجاد یک لینک نمادین به دایرکتوری sites-enabled می‌رسد. اگر یک فایل بلوک سرور با همین نام در فایل‌های Nginx ایجاد کرده‌اید، نیازی به اجرای فرمان زیر ندارید.

sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/your_domain

حالا تنظیمات را نسبت به خطاهای قالبی بررسی کنید.

sudo nginx -t

اگر با هر خطایی در پاسخ روبرو شدید، به عقب برگردید و محتویات فایل تنظیمات را بررسی کنید. وقتی قالب در خروجی تأیید شد، کار را ادامه دهید و سرویس Nginx را دوباره راه‌اندازی کنید.

sudo systemctl reload nginx

اگر تنظیمات اولیه سرور را انجام داده باشید، حتماً فایروال UFW را فعال کرده‌اید. برای مجوّز دادن به ارتباطات Nginx  با تایپ فرمان زیر می‌توانید قوانین آن را تغییر دهید.

sudo ufw allow 'Nginx Full'

نکته: اگر قبلاً کارهای پیش‌نیاز سرور Nginx را انجام داده‌اید، ممکن است یک قانون UFW برای مجوز پروفایل HTTP سرور Nginx از طریق فایروال ایجاد کرده باشید. به دلیل اینکه پروفایل کامل Nginx هر دو نوع ترافیک HTTP و HTTPS را در فایروال مجاز می‌داند، شما می‌توانید بنابر احتیاط، این قانون قبلی را پاک کنید. برای این منظور، فرمان زیر به کمک شما می‌آید.

sudo ufw delete allow 'Nginx HTTP'

در حال حاضر، Kibana از طریق FQDN یا آدرس IP عمومی سرور Elastic Stack در دسترس است. می‌توانید با رفتن به آدرس زیر و وارد کردن اطلاعات ورودی، وضعیت سرور Kibana را بررسی کنید.

http://your_domain/status

این صفحه وضعیت، اطلاعاتی را در مورد میزان استفاده منبع سرور و همچنین لیستی از پلاگین‌های نصب‌شده ارائه می‌دهد.

صفحه وضعیت Kibana

صفحه وضعیت Kibana

نکته: همان‌طور که در قسمت پیش‌نیازها اشاره شد، توصیه می‌شود که SSL/TLS را در سرور فعال کنید. برای این منظور می‌توانید از راهنمای دریافت رایگان گواهینامه SSL به کمک Let’s Encrypt برای سرور Nginx در ابونتو 20.04 استفاده نمایید.

اکنون با تنظیمات داشبورد Kibana، برای نصب قسمت بعدی بسته نرم‌افزاری Elastic، یعنی Logstash آماده می‌شویم.

گام ۳) نصب و تنظیمات Logstash

اگرچه Beat ها می‌توانند داده را مستقیماً به پایگاه داده Elasticsearch ارسال کنند، ولی معمولاً از Logstash برای پردازش داده استفاده می‌شود. این موضوع انعطاف‌پذیری زیادی را در جمع‌آوری داده از منابع مختلف در اختیار قرار می‌دهد. در این حالت، داده‌ها به یک فرمت رایج درمی‌آیند و به یک پایگاه داده دیگر انتقال می‌یابند.

نصب Logstash با فرمان زیر صورت می‌گیرد.

sudo apt install logstash

پس از نصب Logstash، می‌توانید به سراغ تنظیمات آن بروید. فایل‌های تنظیمات Logstash در دایرکتوری /etc/logstash/conf.d قرار می‌گیرند. برای کسب اطلاعات بیشتر در مورد قالب تنظیمات، می‌توانید منابع تنظیماتی که Elastic ارائه کرده را مطالعه کنید. باید توجه داشته باشید که Logstash به عنوان یک خط انتقالی عمل می‌کند که یک سر آن داده است. این داده پردازش پیدا می‌کند و به مقصد یا Elasticsearch انتقال می‌یابد. بنابراین خط انتقال Logstash دارای دو اِلمان ضروری یعنی ورودی و خروجی، و یک اِلمان اختیاری یعنی فیلتر است. پلاگین‌های ورود داده‌ها را از منبع دریافت می‌کنند، پلاگین‌های فیلتر داده‌ها را پردازش می‌کنند و پلاگین‌های خروجی داده‌ها را به مقصد منتقل می‌نمایند.

خط انتقالی Logstash در بسته نرم‌افزاری Elastic

خط انتقالی Logstash در بسته نرم‌افزاری Elastic

در جایی که قرار است ورودی Filebeat خود را تنظیم کنید، فایل تنظیمات 02-beats-input.conf را ایجاد نمایید.

sudo nano /etc/logstash/conf.d/02-beats-input.conf

تنظیمات ورودی زیر را در این فایل قرار دهید. این تنظیمات Beat‌‌هایی را مشخص می‌کنند که قرار است ورودی پورت TCP شماره 5044 را دریافت کنند.

input {
beats {
port => 5044
}
}

حالا فایل را ذخیره کرده و ببندید.

سپس باید یک فایل تنظیمات با نام 30-elasticsearch-output.conf ایجاد کنید.

sudo nano /etc/logstash/conf.d/30-elasticsearch-output.conf

تنظیمات خروجی زیر را وارد کنید. اساساً این تنظیمات باعث می‌شوند که Logstash داده‌های Beats را در Elasticsearch با آدرس localhost:9200 ذخیره کند. درنظر داشته باشید که Beat مورد استفاده در این مثال، Filebeat نام دارد.

output {

if [@metadata][pipeline] {

elasticsearch {

hosts => [“localhost:9200”]

manage_template => false

index => “%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}”

pipeline => “%{[@metadata][pipeline]}”

}

} else {

elasticsearch {

hosts => [“localhost:9200”]

manage_template => false

index => “%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}”

}

}

}

حالا فایل را ذخیره کرده و از آن خارج شوید.

با استفاده از فرمان زیر، تنظیمات Logstash را تست کنید.

sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t

اگر خطای قالبی وجود نداشته باشید، خروجی پیغام “Config Validation Result: OK” را نشان خواهد داد. پس از چند ثانیه، از Logstash خارج می‌شوید. اگر چنین پیغامی را نمی‌بینید، دوباره ورودی‌های خود را بررسی کنید و بروزرسانی را انجام دهید تا تنظیمات اصلاح شوند. به خاطر داشته باشید که هشدارهایی از OpenJDK دریافت می‌کنید که نمی‌توانند مشکلی در ادامه کار ایجاد کنند. می‌توانید این هشدارها را نادیده بگیرید.

در صورتی که تنظیمات را با موفقیت پشت‌سر گذاشتید، Logstash را راه‌اندازی و فعال کنید. در نتیجه، تغییرات تأثیر خود را خواهند داشت.

sudo systemctl start logstash
sudo systemctl enable logstash

اکنون با اجرای درست Logstash و انجام تنظیمات مربوطه، بیایید Filebeat را نصب کنیم.

گام ۴) نصب و تنظیمات Filebeat

بسته نرم‌افزاری Elastic از برخی رابط‌های سبک داده با عنوان Beat استفاده می‌کند. Beat ها داده‌ها را از منابع مختلف جمع‌آوری می‌کنند و آنها را به Logstash یا Elasticsearch انتقال می‌دهند. در اینجا عنوان Beat هایی را می‌بینید که در حال حاضر از طرف Elastic ارائه شده‌اند.

  • Filebeat: جمع‌آوری و انتقال فایل‌های ثبت وقایع
  • Packetbeat: جمع‌آوری و آنالیز داده‌های شبکه
  • Winlogbeat: جمع‌آوری ثبت وقایع ویندوز
  • Auditbeat: جمع‌آوری داده‌های فریم‌ورک حسابرسی لینوکس و پایش وضعیت تکمیل‌بودن فایل
  • Heartbeat: پایش در دسترس‌بودن سرویس و رفع مشکلات به صورت هوشمند.

در این آموزش از Filebeat برای ارسال ثبت وقایع به سرور Elastic Stack استفاده می‌کنیم.

نصب Filebeat با استفاده از فرمان apt صورت می‌گیرد.

sudo apt install filebeat

سپس Filebeat را برای ارتباط با Logstash تنظیم می‌کنیم. در اینجا فایل تنظیمات نمونه همراه با Filebeat را اصلاح می‌کنیم.

ابتدا فایل تنظیمات Filebeat را باز کنید.

sudo nano /etc/filebeat/filebeat.yml

نکته: همانند Elasticsearch، فایل تنظیمات Filebeat نیز در فرمت YAML است. به این معنا که تورفتگی مناسب در متن اهمیت زیادی دارد و بنابراین، دقیقاً همان فاصله‌های نشان داده شده در دستورالعمل را به کار ببرید.

Filebeat خروجی‌های مختلفی را پشتیبانی می‌کند. در عین حال، شما معمولاً تنها وقایع را برای پردازش بیشتر به Elasticsearch یا Logstash ارسال می‌کنید. در اینجا از Logstash برای پردازش بیشتر داده‌های جمع‌‌آوری‌شده توسط Filebeat استفاده می‌شود. Filebeat نیازی به ارسال مستقیم داده به Elasticsearch ندارد. بنابراین این خروجی را غیرفعال می‌کنیم. برای این منظور، بخش output.elasticsearch را پیدا کرده و به اول خطوط زیر علامت # اضافه می‌کنیم تا حالت کامنت و توضیح به خود بگیرند.

...
#output.elasticsearch:
# Array of hosts to connect to.
#hosts: ["localhost:9200"]
...

حالا نوبت به تنظیمات بخش output.logstash می‌رسد. خطوط output.logstash: و hosts: را از حالت کامنت خارج کنید. این کار باعث می‌شود که Filebeat از طریق پورت 5044 سرور Elastic Stack به Logstash متصل شود. این پورت را قبلاً برای ورودی Logstash تنظیم کرده بودیم.

output.logstash:
# The Logstash hosts
hosts: ["localhost:5044"]

فایل را  ذخیره کرده و ببندید.

عملکرد Filebeat می‌تواند با ماژول‌های Filebeat افزایش پیدا کند. در این آموزش از ماژول system استفاده می‌کنیم که می‌تواند ثبت وقایع ایجاد شده توسط توزیع‌های رایج لینوکس را جمع‌آوری کند.

بیایید این ماژول را فعال کنیم.

sudo filebeat modules enable system

با استفاده از فرمان زیر می‌توانید لیستی از ماژول‌های فعال و غیرفعال را مشاهده کنید.

sudo filebeat modules list

لیستی مشابه زیر خواهید دید.

Enabled:
system
Disabled:
apache2
auditd
elasticsearch
icinga
iis
kafka
kibana
logstash
mongodb
mysql
nginx
osquery
postgresql
redis
traefik
...

Filebeat به صورت پیش‌فرض به گونه‌ای تنظیم شده که از مسیرهای پیش‌فرض syslog و authorization logs استفاده کند. در اینجا، نیازی به تغییر هیچکدام از تنظیمات نداریم. در همین حال، پارامترهای این ماژول در فایل تنظیمات /etc/filebeat/modules.d/system.yml قابل‌مشاهده هستند.

سپس باید خطوط توزیع Filebeat را تنظیم کنیم. این خطوط وظیفه تجزیه داده‌ها قبل از ارسال آنها از logstash به Elasticsearch را دارند. برای وارد کردن خطوط توزیع به ماژول system فرمان زیر را تایپ کنید.

sudo filebeat setup --pipelines --modules system

حالا نوبت به بارگزاری قالب فهرست به Elasticsearch می‌رسد. یک فهرست Elasticsearch شامل مجموعه‌ای از داکیومنت‌هایی است که دارای مشخصه‌هایی مشابه هستند. فهرست‌ها با یک نام شناخته می‌شوند که در هنگام انجام عملیات مختلف بر روی ‌آنها استفاده می‌شود. قالب فهرست در هنگام ایجاد یک فهرست جدید، به صورت خودکار اِعمال می‌شود.

برای بارگذاری قالب، از فرمان زیر کمک بگیرید.

sudo filebeat setup --index-management -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]'

خروجی

Index setup finished.

Filebeat به همراه افزونه داشبورد Kibana ارائه شده که به شما اجازه می‌ دهد که داده‌های آن را در Kibana شبیه‌سازی کنید. قبل از اینکه بتوانید از داشبوردها استفاده کنید، باید ابتدا قالب فهرست را بسازید و داشبوردها را به درون Kibana بارگذاری کنید.

وقتی داشبوردها بارگذاری شدند، Filebeat به Elasticsearch متصل می‌شود تا اطلاعات مربوط به نسخه نرم‌افزاری را بررسی کند. برای بارگذاری داشبوردها در هنگام فعال‌بودن Logstash، باید حتماً خروجی Logstash را غیرفعال کنید و در مقابل، خروجی Elasticsearch را فعال نمایید.

sudo filebeat setup -E output.logstash.enabled=false -E output.elasticsearch.hosts=['localhost:9200'] -E setup.kibana.host=localhost:5601

در نتیجه، خروجی‌ای شبیه به زیر باید دریافت کنید.

Overwriting ILM policy is disabled. Set `setup.ilm.overwrite:true` for enabling.
Index setup finished.
Loading dashboards (Kibana must be running and reachable)
Loaded dashboards
Setting up ML using setup --machine-learning is going to be removed in 8.0.0. Please use the ML app instead.
See more: https://www.elastic.co/guide/en/elastic-stack-overview/current/xpack-ml.html
Loaded machine learning job configurations
Loaded Ingest pipelines

حالا می‌توانید Filebeat را اجرا و فعال کنید.

sudo systemctl start filebeat
sudo systemctl enable filebeat

اگر سرور Elastic Stack را به‌درستی تنظیم کرده باشید، Filebeat شروع به انتقال داده‌های ثبت وقایع syslog و authorization logs به Logstash خواهد کرد. این داده‌ها سپس به Elasticsearch بارگذاری خواهند شد.

برای بررسی اینکه Elasticsearch داده‌ها را دریافت می‌کند یا خیر،  وضعیت Filebeat ایندکس را با فرمان زیر بررسی کنید.

curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'

در نتیجه، باید نتیجه‌ای مشابه زیر مشاهده کنید.

...
{
{
"took" : 4,
"timed_out" : false,
"_shards" : {
"total" : 2,
"successful" : 2,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 4040,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "filebeat-7.7.1-2020.06.04",
"_type" : "_doc",
"_id" : "FiZLgXIB75I8Lxc9ewIH",
"_score" : 1.0,
"_source" : {
"cloud" : {
"provider" : "digitalocean",
"instance" : {
"id" : "194878454"
},
"region" : "nyc1"
},
"@timestamp" : "2020-06-04T21:45:03.995Z",
"agent" : {
"version" : "7.7.1",
"type" : "filebeat",
"ephemeral_id" : "cbcefb9a-8d15-4ce4-bad4-962a80371ec0",
"hostname" : "june-ubuntu-20-04-elasticstack",
"id" : "fbd5956f-12ab-4227-9782-f8f1a19b7f32"
},
...

اگر خروجی شما برای total hits عدد صفر را نشان داد، Elasticsearch هیچگونه ثبت وقایعی تحت ایندکسی که برای آن جستجو کرده‌اید، دریافت نکرده است. بنابراین، باید حتماً‌ در تنظیمات خود به دنبال خطاهای احتمالی بگردید. امّا اگر خروجی مورد انتظار را دریافت کردید، مراحل کار را ادامه دهید؛ جایی که می‌خواهیم برخی داشبوردهای Kibana را بررسی کنیم.

گام ۵) بررسی داشبوردهای Kibana

ابتدا به سراغ رابط کاربری تحت وب Kibana که قبلاً  از بسته نرم‌افزاری Elastic نصب کرده بودیم، می‌رویم.

در یک مرورگر وب، به آدرس IP عمومی یا FQDN سرور Elastic Stack بروید. اگر روند کارتان با اختلال همراه شد، باید دوباره تأییدیه‌هایی که در گام ۲ تعریف کرده بودید را وارد کنید. وقتی وارد شدید، باید صفحه خانگی Kibana را مشاهده کنید.

صفحه خانگی Kibana از بسته نرم‌افزاری Elastic

صفحه خانگی Kibana از بسته نرم‌افزاری Elastic

بر روی لینک Discover در نوار سمت چپ کلیک کنید. برای این منظور احتمالاً باید بر روی آیکون Expand در گوشه پایین سمت‌چپ کلیک کنید تا فهرست آیتم‌ها برایتان باز شوند. در صفحه Discover، قالب فهرست از پیش تعریف شده filebeat-* را انتخاب کنید تا داده‌های Filebeat را ببینید. در نتیجه، به صورت پیش‌فرض تمام داده‌های ثبت وقایع ۱۵ دقیقه اخیر در دسترس شما خواهند بود. شما یک هیستوگرام همراه با رخدادها و برخی پیام‌ها مشاهده خواهید کرد.

صفحه Discover

صفحه Discover

در اینجا می‌توانید در میان داده‌های ثبت وقایع بگردید و جستجو کنید. همچنین می‌توانید داشبوردتان را به صورت سفارشی تنظیم کنید. البته در این مقطع، چیز زیادی در داشبورد وجود ندارد. چرا که شما تنها داده‌های syslogs  را از سرور Elastic Stack جمع‌آوری کرده اید.

از پنل سمت چپ برای گشتن در صفحه Dashboard استفاده کنید. در اینجا به دنبال داشبوردهای Filebeat System بگردید. وقتی آن را پیدا کردید، می‌توانید داشبوردهای نمونه برای کار با ماژول system در Filebeat را انتخاب کنید.

به عنوان مثال، می‌توانید داده‌های آماری جزئی را بر اساس پیغام‌های syslog مشاهده کنید.

داشبورد Syslog

داشبورد Syslog

همچنین می‌توانید ببینید که چه کاربرانی، چه زمانی از  فرمان sudo استفاده کرده‌اند.

داشبورد sudo

داشبورد sudo

درنظر داشته باشید که Kibana دارای بسیاری قابلیت‌های دیگر مانند رسم نمودار و فیلترگذاری است. بنابراین، حتماً خودتان هم گزینه‌های مختلف را آزمایش کنید و از کارآیی آنها سر در بیاورید.

جمع‌بندی

در این مطلب آ‌موزشی نسبتاً‌ طولانی، ما نحوه نصب و تنظیم بسته نرم‌افزاری Elastic را برای جمع‌آوری و آنالیز داده‌های ثبت وقایع سیستم آموختیم. به خاطر داشته باشید که امکان ارسال هر نوع داده ایندکس یا ثبت وقایعی با استفاده از Beat ها به Logstash وجود دارد. با این وجود، در صورتی که داده‌ها به فرمت و ساختار Logstash درآیند، می‌توانند به راحتی توسط Elasticsearch خوانده شوند.

منبع: digitalocean.com