Elastic Stack – که قبلاً با عنوان ELK Stack شناخته می شد – مجموعه ای از نرم افزارهای منبع باز است که توسط Elastic ساخته شده است و به شما امکان می دهد ورودهای حاصل از هر منبع با هر فرمت را جستجو ، تجزیه و تحلیل و تجسم کنید ، روشی که به centralized logging شناخته می شود. centralized logging می تواند در هنگام تلاش برای شناسایی مشکلات سرور مجازی ها یا برنامه های کاربردی مفید باشد ، زیرا این امکان را به شما می دهد تا از طریق تمام ورودهای خود در یک مکان جستجو کنید. این ویژگی همچنین از این لحاظ مفید است که به شما امکان می دهد با پیوند دادن ورودهای چند سرور مجازی در یک بازه زمانی خاص مسائلی را که آن سرور مجازی ها را ارتباط میدهد شناسایی کنید.
Elastic Stack چهار مؤلفه اصلی دارد:
Elasticsearch: یک موتور جستجوی توزیع شده RESTful که تمام داده های جمع آوری شده را ذخیره می کند.
Logstash: مولفه پردازش داده ها از Stack Elastic که داده های ورودی را به Elasticsearch می فرستد.
Kibana: رابط وب برای جستجو و تجسم ورودها.
Beats: انتقال داده های سبک و یک منظوره که می توانند داده ها را از صدها یا هزاران دستگاه به Logstash یا Elasticsearch ارسال کنند.
در این آموزش Elastic Stack را روی سرور مجازی Ubuntu 18.04 نصب خواهید کرد. یاد می گیرید که چگونه تمام مؤلفه های Elastic Stack – از جمله Filebeat را نصب کنید، که یک ضربان برای ارسال و متمرکز کردن ورود ها و فایل ها است – و آن ها را برای جمع آوری و تجسم ورودهای مربوط به سیستم پیکربندی میکند. علاوه بر این ، به دلیل اینکه معمولاً Kibana فقط در localhost موجود است ، ما از Nginx برای پروکسی استفاده می کنیم ، بنابراین از طریق مرورگر وب قابل دسترسی خواهد بود. همه این مؤلفه ها را روی یک سرور مجازی واحد نصب خواهیم کرد که به عنوان سرور مجازی Elastic Stack ما به آن اشاره خواهیم کرد.
توجه: هنگام نصب Elastic Stack ، باید از نسخه مشابه در کل پشته استفاده کنید. در این آموزش آخرین نسخه های کل پشته را نصب خواهیم کرد که در زمان نوشتن این مقاله ، Elasticsearch 7.6.1 ، Kibana 7.6.1 ، Logstash 7.6.1 و Filebeat 7.6.1 هستند.
پیش نیازها
برای تکمیل این آموزش به موارد زیر نیاز دارید:
سرور مجازی Ubuntu 18.04 شامل کاربر sudo غیر ریشه و فایروال تنظیم شده با ufw که می توانید با پیروی از مقاله ستاپ اولیه سرور مجازی برای Ubuntu 18.04 به این هدف برسید. میزان CPU ، RAM و حافظه مورد نیاز سرور مجازی Elastic stack شما به حجم ورود هایی که انتظار دارید بستگی دارد. برای این آموزش از VPS با مشخصات زیر برای سرور مجازی Elastic stack خود استفاده میکنیم:
⦁ OS: Ubuntu 18.04
⦁ RAM: 4GB
⦁ CPU: 2
⦁ جاوا 8 – که توسط Elasticsearch و Logstash لازم است – روی سرور مجازی شما نصب شده باشد. توجه داشته باشید که جاوا 9 پشتیبانی نمی شود. برای نصب این گزینه ، “نصب Oracle JDK” بخش راهنمای ما درباره نحوه نصب جاوا 8 در اوبونتو 18.04 را دنبال کنید.
⦁ Nginx بر روی سرور مجازی شما نصب شده باشد ، که بعداً در این راهنما به عنوان یک پروکسی معکوس برای Kibana پیکربندی می کنیم. برای تنظیم این برنامه ، راهنمای ما در مورد نحوه نصب Nginx در اوبونتو 18.04 را دنبال کنید.
علاوه بر این ، از آنجا که از Elastic Stack برای دسترسی به اطلاعات ارزشمندی درباره سرور مجازی خود استفاده می کنید که نمی خواهید کاربران غیرمجاز به آنها دسترسی پیدا کنند ، مهم است که با نصب گواهی TLS / SSL ، سرور مجازی خود را ایمن نگه دارید. این کار اختیاری است اما به شدت توصیه میشود.
با این وجود ، از آن جا که در نهایت در طول این راهنما تغییراتی در بلوک سرور مجازی Nginx خود ایجاد خواهید کرد ، به احتمال زیاد منطقی تر خواهد بود که راهنمای Let’s Encrypt در Ubuntu 18.04 را در پایان مرحله دوم این آموزش پیگیری کنید. با توجه به این نکته ، اگر می خواهید پیکربندی Let’s Encrypt را روی سرور مجازی خود انجام دهید ، قبل از انجام این کار به موارد زیر نیاز دارید:
• نام دامنه کاملاً واجد شرایط ( (FQDN. در سراسر این آموزش از example.com استفاده خواهد شد. می توانید نام دامنه را در Namecheap خریداری کنید ، یکی را به صورت رایگان در Freenom دریافت کنید ، یا از ثبت دامنه مورد نظر خود استفاده کنید.
• هر دو رکورد DNS زیر برای سرور مجازی شما تنظیم شده باشد. برای جزئیات بیشتر در مورد چگونگی اضافه کردن آنها می توانید این مقدمه را در vpsgol DNS دنبال کنید.
o یک رکورد A با example.com که آدرس IP عمومی سرور مجازی شما را نشان می دهد.
o رکورد A با آدرس www.example.com که به آدرس IP عمومی سرور مجازی شما اشاره کند.
مرحله 1 – نصب و پیکربندی Elasticsearch
مولفه های Elasticsearch در مخازن بسته پیش فرض اوبونتو در دسترس نیستند. اما می توانند پس از افزودن لیست منبع بسته بندی Elastic ، با APT نصب کنید.
به منظور محافظت از سیستم خود در برابر جعل بسته ، همه بسته ها با کلید امضای Elasticsearch امضا شده اند. بسته هایی که با استفاده از کلید تأیید شده اند توسط مدیر بسته شما قابل اعتماد خواهند بود. در این مرحله ، کلید GPG عمومی Elasticsearch را وارد کرده و به منظور نصب Elasticsearch ، لیست منبع بسته بندی الاستیک را اضافه می کنید.
برای شروع ، دستور زیر را برای وارد کردن کلید عمومی GPG Elasticsearch در APT اجرا کنید.
⦁ $ wget -qO – https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add –

در مرحله بعد ، لیست منبع الاستیک را به دیرکتوری 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 منبع جدید الاستیک را بخواند:
⦁ $ sudo apt update

در مرحله بعد با این دستور Elasticsearch را نصب کنید:
⦁ $ sudo apt install elasticsearch

اکنون Elasticsearch نصب شده است و آماده پیکربندی است. از ویرایشگر متن دلخواه خود برای ویرایش فایل اصلی پیکربندی Elasticsearch ، elasticsearch.yml استفاده کنید. در اینجا ، ما از nano استفاده خواهیم کرد:
⦁ $ sudo nano /etc/elasticsearch/elasticsearch.yml

توجه: فایل پیکربندی Elasticsearch با فرمت YAML است ، به این معنی که ما باید قالب دندانه ای را حفظ کنیم. مطمئن شوید که با ویرایش این فایل هیچ فضای اضافی ایجاد نمی کنید.

Elasticsearch ترافیک را از هر جایی در پورت 9200 گوش می دهد. بهتر است دسترسی خارجی به نمونه Elasticsearch خود را محدود کنید تا از خوانده شدن اطلاعات توسط دیگر افراد یا خاموش کردن خوشه Elasticsearch از طریق REST API جلوگیری کنید. برای محدود کردن دسترسی و در نتیجه افزایش امنیت ، خطی را که network.hostرا مشخص می کند ، پیدا کنید ، آن را حذف کنید و مقدار آن را با localhost مانند این جایگزین کنید:
/etc/elasticsearch/elasticsearch.yml
. . .
network.host: localhost
. . .
elasticsearch.ym را ذخیره کرده و ببندید. اگر از nano استفاده می کنید ، می توانید با فشار دادن CTRL + X ، به دنبال آن Y و سپس ENTER این کار را انجام دهید. سپس سرویس Elasticsearch را با systemctl شروع کنید.
$ sudo systemctl start elasticsearch

سپس ، دستور زیر را اجرا کنید تا Elasticsearch بتواند هر بار که سرور مجازی خود را راه اندازی می کند اجرا شود:
⦁ $ sudo systemctl enable elasticsearch

با ارسال یک درخواست HTTP می توانید آزمایش کنید که آیا سرویس Elasticsearch شما اجرا شده است:
⦁ $ curl -X GET “localhost:9200”

پاسخی را مشاهده خواهید کرد که اطلاعات اصلی در مورد گره محلی شما را نشان می دهد ، مشابه این:
Output
{
“name” : “ElasticSearch”,
“cluster_name” : “elasticsearch”,
“cluster_uuid” : “SMYhVWRiTwS1dF0pQ-h7SQ”,
“version” : {
“number” : “7.6.1”,
“build_flavor” : “default”,
“build_type” : “deb”,
“build_hash” : “aa751e09be0a5072e8570670309b1f12348f023b”,
“build_date” : “2020-02-29T00:15:25.529771Z”,
“build_snapshot” : false,
“lucene_version” : “8.4.0”,
“minimum_wire_compatibility_version” : “6.8.0”,
“minimum_index_compatibility_version” : “6.0.0-beta1”
},
“tagline” : “You Know, for Search”
}
اکنون که Elasticsearch در حال اجرا و کار است ، بیایید Kibana ، مؤلفه بعدی Elastic Stack را نصب کنیم.
مرحله 2 – نصب و پیکربندی داشبورد Kibana
طبق مستندات رسمی ، باید Kibana را تنها پس از نصب Elasticsearch نصب کنید. نصب با این ترتیب این اطمینان را می دهد که مولفه های مربوط به هر محصول به طور صحیح در جای خود قرار دارند.
از آنجا که شما در مرحله قبل منبع بسته الاستیک را اضافه کرده اید ، می توانید با استفاده از apt فقط مولفه های باقیمانده Elastic Stack را نصب کنید:
⦁ $ sudo apt install kibana

سپس سرویس Kibana را فعال و راه اندازی کنید:
⦁ $ sudo systemctl enable kibana

⦁ $ sudo systemctl start kibana

از آنجا که Kibana پیکربندی شده است که فقط به localhost گوش کند ، ما باید یک پروکسی معکوس تنظیم کنیم تا دسترسی خارجی به آن امکان پذیر باشد. برای این منظور از Nginx استفاده خواهیم کرد که قبلاً باید روی سرور مجازی شما نصب شود.
ابتدا از دستور openssl برای ایجاد یک کاربر ادمین Kibana استفاده کنید که برای دسترسی به رابط وب Kibana استفاده خواهید کرد. به عنوان نمونه ما این حساب را kibanaadmin نامگذاری می کنیم ، اما برای اطمینان از امنیت بیشتر توصیه می کنیم برای کاربر خود یک نام غیر استاندارد انتخاب کنید که حدس زدن آن دشوار خواهد بود.
دستور زیر کاربر و پسورد ادمین Kibana را ایجاد کرده و آنها را در فایل htpasswd.users ذخیره می کند. Nginxرا پیکربندی می کنید تا این نام کاربری و رمز عبور را دریافت کرده و این فایل را لحظه به لحظه بخوانید:
⦁ $ echo “kibanaadmin:`openssl passwd -apr1`” | sudo tee -a /etc/nginx/htpasswd.users

با مشاهده اعلان، رمز عبور را وارد و تأیید کنید. این اطلاعات را به خاطر بسپارید یا یادداشت کنید ، زیرا برای دسترسی به رابط وب Kibana به آن نیاز خواهید داشت.
در مرحله بعد ، یک فایل بلوک سرور مجازی Nginx ایجاد خواهیم کرد. به عنوان نمونه ، ما این فایل را example.com می نامیم ، گرچه ممکن است بهتر باشد یک نام توصیف کننده تر انتخاب کنید. به عنوان مثال ، اگر یک فایل FQDN و DNS برای این سرور مجازی تنظیم کرده اید ، می توانید این فایل را پس از FQDN خود نامگذاری کنید.
⦁ $ sudo nano /etc/nginx/sites-available/example.com

بلوک کد زیر را در فایل اضافه کنید ، مطمئن شوید که example.com خود را به روز می کنید تا با FQDN یا آدرس IP عمومی سرور مجازی شما مطابقت داشته باشد. این کد Nginx را پیکربندی می کند تا ترافیک HTTP سرور مجازی شما را به برنامه Kibana منتقل کند ، که در حال گوش دادن به localhost: 5601 است. علاوه بر این ، Nginx را برای خواندن فایل htpasswd.users پیکربندی می کند و احتیاج به احراز هویت اساسی دارد.
توجه داشته باشید که اگر از قبل آموزش Nginx را امتحان کرده اید ، ممکن است قبلاً این فایل را ایجاد کرده باشید و آن را با محتوای قبلی پر کرده اید. در این حالت ، قبل از اضافه کردن موارد زیر تمام محتوای موجود در فایل را حذف کنید:
/etc/nginx/sites-available/example.com
server {
listen 80;

server_name example.com;

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/example.com /etc/nginx/sites-enabled/example.com

سپس پیکربندی خطاهای نحوی را بررسی کنید:
⦁ $ sudo nginx -t

اگر خطایی در خروجی شما گزارش شده بود ، به عقب برگردید و بررسی کنید که محتوایی که در فایل پیکربندی خود قرار داده اید به درستی اضافه شده است. وقتی syntax is ok را در خروجی مشاهده کردید ، پیش بروید و سرویس Nginx را ریستارت کنید:
⦁ $ sudo systemctl restart nginx

اگر راهنمای ستاپ اولیه سرور مجازی را دنبال کرده باشید ، باید فایروال UFW را فعال کنید. برای اجازه اتصال به Nginx ، می توانیم قوانین را با تایپ دستور زیر تنظیم کنیم:
⦁ $ sudo ufw allow ‘Nginx Full’

توجه: اگر از آموزش مقدماتی Nginx پیروی کرده اید ، ممکن است یک قانون UFW ایجاد کرده باشید که مشخصات Nginx HTTP را از طریق فایروال امکان پذیر کند. از آنجا که پروفایل Nginx Full امکان عبور و مرور HTTP و HTTPS را از طریق فایروال فراهم می کند ، می توانید با خیال راحت قانونی را که در آموزش پیش نیاز ایجاد کرده اید حذف کنید. این کار را با دستور زیر انجام دهید:
⦁ $ sudo ufw delete allow ‘Nginx HTTP’

اکنون Kibana از طریق FQDN یا آدرس IP عمومی سرور مجازی Elastic Stack شما قابل دسترسی است. می توانید با رفتن به آدرس زیر و وارد کردن اطلاعات ورود به سیستم هنگام درخواست ، صفحه وضعیت سرور مجازی Kibana را بررسی کنید:
http://your_server_ip/status
این صفحه وضعیت اطلاعات مربوط به استفاده از منابع سرور مجازی را نشان می دهد و افزونه های نصب شده را لیست می کند.

توجه: همانطور که در بخش Preferences ذکر شد ، توصیه می شود SSL / TLS را روی سرور مجازی خود فعال کنید. برای به دست آوردن یک گواهینامه رایگان SSL برای Nginx در اوبونتو 18.04 می توانید از راهنمای Let’s Encrypt استفاده کنید. پس از اخذ گواهینامه های SSL / TLS ، می توانید دوباره به این مرحله برگردید و این آموزش را تکمیل کنید.
اکنون که داشبورد Kibana پیکربندی شده است ، بگذارید مؤلفه بعدی را نصب کنیم : Logstash .
مرحله 3 – نصب و پیکربندی Logstash
اگرچه ممکن است Beats داده را مستقیماً به پایگاه داده Elasticsearch ارسال کند ، استفاده از Logstash برای پردازش داده ها معمول است. این کار به شما امکان می دهد انعطاف پذیری بیشتری برای جمع آوری داده ها از منابع مختلف ، تبدیل آن به یک قالب مشترک و انتقال آن به پایگاه داده دیگری داشته باشید.
Logstash را با این دستور نصب کنید:
⦁ $ sudo apt install logstash

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

یک فایل پیکربندی به نام 02-beats-input.conایجاد کنید که ورودی Filebeat خود را تنظیم کنید:
$ sudo nano /etc/logstash/conf.d/02-beats-input.conf

پیکربندی ورودی زیر را وارد کنید. این یک ورودی beats را مشخص می کند که پورت TCP 5044 را گوش خواهد کرد.
/etc/logstash/conf.d/02-beats-input.conf
input {
beats {
port => 5044
}
}

فایل را ذخیره کنید و ببندید. در مرحله بعد ، یک فایل پیکربندی به نام 10-syslog-filter.conf ایجاد کنید، که یک فیلتر برای ورودهای سیستم اضافه میکنیم و به syslogs نیز شناخته میشود:
⦁ $ sudo nano /etc/logstash/conf.d/10-syslog-filter.conf

پیکربندی syslog filter زیر را وارد کنید. این پیکربندی ورودی های سیستم مثال از مستندات الاستیک رسمی گرفته شده است. این فیلتر برای دنبال کردن ورودهای سیستم ورودی برای ساختاردار و مورد استفاده کردن آن ها توسط داشبوردهای از پیش تعریف شده Kibana استفاده میشود.
/etc/logstash/conf.d/10-syslog-filter.conf
filter {
if [fileset][module] == “system” {
if [fileset][name] == “auth” {
grok {
match => { “message” => [“%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} %{DATA:[system][auth][ssh][method]} for (invalid user )?%{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]} port %{NUMBER:[system][auth][ssh][port]} ssh2(: %{GREEDYDATA:[system][auth][ssh][signature]})?”,
“%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} user %{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]}”,
“%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: Did not receive identification string from %{IPORHOST:[system][auth][ssh][dropped_ip]}”,
“%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sudo(?:\[%{POSINT:[system][auth][pid]}\])?: \s*%{DATA:[system][auth][user]} 🙁 %{DATA:[system][auth][sudo][error]} ;)? TTY=%{DATA:[system][auth][sudo][tty]} ; PWD=%{DATA:[system][auth][sudo][pwd]} ; USER=%{DATA:[system][auth][sudo][user]} ; COMMAND=%{GREEDYDATA:[system][auth][sudo][command]}”,
“%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} groupadd(?:\[%{POSINT:[system][auth][pid]}\])?: new group: name=%{DATA:system.auth.groupadd.name}, GID=%{NUMBER:system.auth.groupadd.gid}”,
“%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} useradd(?:\[%{POSINT:[system][auth][pid]}\])?: new user: name=%{DATA:[system][auth][user][add][name]}, UID=%{NUMBER:[system][auth][user][add][uid]}, GID=%{NUMBER:[system][auth][user][add][gid]}, home=%{DATA:[system][auth][user][add][home]}, shell=%{DATA:[system][auth][user][add][shell]}$”,
“%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} %{DATA:[system][auth][program]}(?:\[%{POSINT:[system][auth][pid]}\])?: %{GREEDYMULTILINE:[system][auth][message]}”] }
pattern_definitions => {
“GREEDYMULTILINE”=> “(.|\n)*”
}
remove_field => “message”
}
date {
match => [ “[system][auth][timestamp]”, “MMM d HH:mm:ss”, “MMM dd HH:mm:ss” ]
}
geoip {
source => “[system][auth][ssh][ip]”
target => “[system][auth][ssh][geoip]”
}
}
else if [fileset][name] == “syslog” {
grok {
match => { “message” => [“%{SYSLOGTIMESTAMP:[system][syslog][timestamp]} %{SYSLOGHOST:[system][syslog][hostname]} %{DATA:[system][syslog][program]}(?:\[%{POSINT:[system][syslog][pid]}\])?: %{GREEDYMULTILINE:[system][syslog][message]}”] }
pattern_definitions => { “GREEDYMULTILINE” => “(.|\n)*” }
remove_field => “message”
}
date {
match => [ “[system][syslog][timestamp]”, “MMM d HH:mm:ss”, “MMM dd HH:mm:ss” ]
}
}
}
}

فایل نهایی را ذخیره کنید و ببندید.
در انتها فایل پیکربندی به نام 30-elasticsearch-output.confرا ایجاد کنید:
⦁ $ sudo nano /etc/logstash/conf.d/30-elasticsearch-output.conf


پیکربندی خروجی زیر را وارد کنید. اساساً ، این خروجی Logstash را برای ذخیره داده های Beats در Elasticsearch ، که در localhost: 9200 اجرا می شود ، پیکربندی می کند تا در شاخصی به نام Beat مورد استفاده قرار گیرد. Beat مورد استفاده در این آموزش Filebeat است:
/etc/logstash/conf.d/30-elasticsearch-output.conf
output {
elasticsearch {
hosts => [“localhost:9200”]
manage_template => false
index => “%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}”
}
}

فایل را ذخیره کنید و ببندید.
اگر می خواهید فیلترهایی را برای سایر برنامه هایی که از ورودی Filebeat استفاده می کنند ، اضافه کنید ، حتما فایل ها را نامگذاری کنید تا بین پیکربندی ورودی و خروجی طبقه بندی شوند ، به این معنی که نام فایل ها باید با یک عدد دو رقمی بین 02 و 30 باشد.
پیکربندی Logstash خود را با این دستور تست کنید:
⦁ $ sudo -u logstash /usr/share/logstash/bin/logstash –path.settings /etc/logstash -t

اگر خطایی در نحو وجود نداشته باشد ، خروجی شما پس از چند ثانیه Configuration OK را نشان می دهد. اگر این مورد را در خروجی خود مشاهده نمی کنید ، خطایی را که در خروجی شما ظاهر می شود را بررسی کنید و پیکربندی خود را به روز کنید تا خطاها را اصلاح کنید.
اگر آزمایش پیکربندی شما موفقیت آمیز بود ، Logstash را شروع و فعال کنید تا تغییرات پیکربندی را به مرحله اجرا برساند:
⦁ $ sudo systemctl start logstash

⦁ $ sudo systemctl enable logstash

اکنون که Logstash به درستی اجرا شده است و کاملاً پیکربندی شده است ، بیایید Filebeat را نصب کنیم.
مرحله 4 – نصب و پیکربندی Filebeat
Elastic Stack از چندین فرستنده داده سبک به نام Beats برای جمع آوری داده ها از منابع مختلف و انتقال آنها به Logstash یا Elasticsearch استفاده می کند. در اینجا Beats که در حال حاضر از Elastic موجود است:
⦁ Filebeat: فایل های ورود را جمع آوری و ارسال می کند.
⦁ Metricbeat: معیارها را از سیستم ها و سرویس های شما جمع آوری می کند.
⦁ Packetbeat: داده های شبکه را جمع آوری و تجزیه و تحلیل می کند.
⦁ Winlogbeat: ورودهای مربوط به رویدادهای Windows را جمع می کند.
⦁ Auditbeat: داده های چارچوب حسابرسی لینوکس را جمع می کند و بر یکپارچگی فایل نظارت می کند.
⦁ Heartbeat: سرویس ها را برای دسترس پذیری آنها با استفاده از پروب فعال کنترل می کند.
در این آموزش از Filebeat استفاده خواهیم کرد تا ورود های محلی را به Stack Elastic ارسال کنیم.
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 به ارسال اطلاعات به طور مستقیم به Elasticsearc نیاز نخواهد داشت، بنابراین بیایید آن خروجی را غیرفعال کنیم. برای انجام این کار ، بخش input.elasticsearch را بیابید و خطوط زیر را با قرار دادن # قبل از آنها خارج کنید:
/etc/filebeat/filebeat.yml

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

سپس بخش output.logstash را پیکربندی کنید. خطوط out.logstash: و hosts: [“localhost:5044”] را با حذف # خارج کنید . با این کار Filebeat را برای پیوند دادن به Logstash در سرور مجازی Elastic Stack در پورت 5044 پیکربندی می کنید ، پورتی که برای آن ورودی Logstash را قبلاً مشخص کردیم:
/etc/filebeat/filebeat.yml
output.logstash:
# The Logstash hosts
hosts: [“localhost:5044”]

فایل را ذخیره کنید و ببندید.
قابلیت Filebeat را می توان با ماژول های Filebeat گسترش داد. در این آموزش از ماژول سیستم استفاده خواهیم کرد که ورود های ایجاد شده توسط سرویس ثبت ورود سیستم توزیع های رایج لینوکس را جمع آوری و تجزیه می کند.
بیایید آن را فعال کنیم:
⦁ $ sudo filebeat modules enable system

با اجرای لیست می توانید ماژول های فعال و غیرفعال را مشاهده کنید:
⦁ $ sudo filebeat modules list

لیستی مشابه موارد زیر را مشاهده خواهید کرد:
Output
Enabled:
system

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

به طور پیش فرض ، Filebeat پیکربندی شده است تا از مسیرهای پیش فرض برای ورودهای مربوط به syslog و مجوزها استفاده کند. در مورد این آموزش نیازی به تغییر چیزی در پیکربندی نیست. پارامترهای ماژول را می توانید در فایل پیکربندی /etc/filebeat/modules.d/system.yml مشاهده کنید.
در مرحله بعد ، باید اتصالات ورودی Filebeat را تنظیم کنیم ، که داده های ورود را قبل از ارسال از طریق logstash به Elasticsearch تجزیه می کند. برای لود خط اتصال ورودی برای ماژول سیستم ، دستور زیر را وارد کنید:
⦁ $ sudo filebeat setup –pipelines –modules system

در مرحله بعد ، قالب فهرست را در Elasticsearch بارگذاری کنید. ایندکس Elasticsearch مجموعه ای از اسنادی است که دارای مشخصات مشابه است. ایندکس ها با یک نام مشخص می شوند که در هنگام انجام عملیات های مختلف درون آن ، به ایندکس اشاره می شود. الگوی ایندکس با ایجاد یک ایندکس جدید به طور خودکار اعمال می شود.
برای لود الگو ، از دستور زیر استفاده کنید:
⦁ $ sudo filebeat setup –template -E output.logstash.enabled=false -E ‘output.elasticsearch.hosts=[“localhost:9200”]’

⦁ Output
⦁ Loaded index template

Filebeat با داشبورد نمونه Kibana بسته بندی شده است که به شما امکان می دهد داده های Filebeat را در Kibana تجسم کنید. قبل از استفاده از داشبورد ، باید الگوی ایندکس را ایجاد کرده و داشبورد را درون Kibana بارگذاری کنید.
با لود داشبورد ، Filebeat برای بررسی اطلاعات نسخه به Elasticsearch متصل می شود. برای لود داشبورد هنگام فعال شدن Logstash ، باید خروجی Logstash را غیرفعال کنید و خروجی Elasticsearch را فعال کنید:
⦁ $ sudo filebeat setup -e -E output.logstash.enabled=false -E output.elasticsearch.hosts=[‘localhost:9200’] -E setup.kibana.host=localhost:5601


باید خروجی مشابه این دریافت کنید:
Output
2018-09-10T08:39:15.844Z INFO instance/beat.go:273 Setup Beat: filebeat; Version: 7.6.1
2018-09-10T08:39:15.845Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200
2018-09-10T08:39:15.845Z INFO pipeline/module.go:98 Beat name: elk
2018-09-10T08:39:15.845Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200
2018-09-10T08:39:15.849Z INFO elasticsearch/client.go:708 Connected to Elasticsearch version 7.6.1
2018-09-10T08:39:15.856Z INFO template/load.go:129 Template already exists and will not be overwritten.
Loaded index template
Loading dashboards (Kibana must be running and reachable)
2018-09-10T08:39:15.857Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200
2018-09-10T08:39:15.865Z INFO elasticsearch/client.go:708 Connected to Elasticsearch version 7.6.1
2018-09-10T08:39:15.865Z INFO kibana/client.go:113 Kibana url: http://localhost:5601
2018-09-10T08:39:45.357Z INFO instance/beat.go:659 Kibana dashboards successfully loaded.
Loaded dashboards
2018-09-10T08:39:45.358Z INFO elasticsearch/client.go:163 Elasticsearch url: http://localhost:9200
2018-09-10T08:39:45.361Z INFO elasticsearch/client.go:708 Connected to Elasticsearch version 7.6.1
2018-09-10T08:39:45.361Z INFO kibana/client.go:113 Kibana url: http://localhost:5601
2018-09-10T08:39:45.455Z WARN fileset/modules.go:388 X-Pack Machine Learning is not enabled
Loaded machine learning job configurations

اکنون می توانید Filebeat را شروع و فعال کنید:
⦁ $ sudo systemctl start filebeat

⦁ $ sudo systemctl enable filebeat

اگر به طور صحیح Elastic Stack خود تنظیم کرده باشید ، Filebeat شروع به ارسال syslog و ورودهای مجاز به Logstash می کند ، و سپس این داده ها را در Elasticsearch لود می کند.
برای تأیید اینکه Elasticsearch در واقع این داده ها را دریافت می کند ، شاخص Filebeat را با این دستور جستجو کنید:
⦁ $ curl -XGET ‘http://localhost:9200/filebeat-*/_search?pretty’

باید خروجی مشابه این دریافت کنید:
Output

{
“took” : 1,
“timed_out” : false,
“_shards” : {
“total” : 1,
“successful” : 1,
“skipped” : 0,
“failed” : 0
},
“hits” : {
“total” : {
“value” : 10000,
“relation” : “gte”
},
“max_score” : 1.0,
“hits” : [
{
“_index” : “filebeat-7.6.1-2020.03.22-000001”,
“_type” : “_doc”,
“_id” : “_vafAnEB9n8Ibpfym4VS”,
“_score” : 1.0,
“_source” : {
“agent” : {
“hostname” : “ElasticSearch”,
“id” : “ee9d1a5d-75a7-4283-a126-ee90c1455173”,
“type” : “filebeat”,
“ephemeral_id” : “b927d9fb-500a-43ab-a20c-598d55c080ac”,
“version” : “7.6.1”
},
“process” : {
“name” : “kernel”
},
“log” : {
“file” : {
“path” : “/var/log/syslog”
},
“offset” : 97048
},
“fileset” : {
“name” : “syslog”
},

اگر خروجی شما جمع کل 0 را نشان می دهد ، Elasticsearch در زیر ایندکسی که جستجو کرده اید ، هیچ فایلی را لود نمی کند ، و شما نیاز به بررسی تنظیمات خود برای رفع خطاها دارید. اگر خروجی مورد انتظار را دریافت کردید ، به مرحله بعدی بروید ، که در آن خواهیم دید که چگونه می توان از طریق داشبورد Kibana پیش رفت.
مرحله 5 – جستجو در داشبوردهای Kibana
بیایید به رابط وب Kibana که قبلاً نصب کردیم نگاهی بیاندازیم.
در یک مرورگر وب ، به FQDN یا آدرس IP عمومی سرور مجازی Elastic Stack بروید. اگر بخش فعلی شما دچار اختلال شده است ، باید اعتبار خود را که در مرحله 2 تعریف کردید ، دوباره وارد کنید. پس از ورود به سیستم ، باید صفحه اصلی Kibana را دریافت کنید:

بر روی لینک Discover  در نوار پیمایش در سمت چپ کلیک کنید. در صفحه Discover ، الگوی شاخص از پیش تعریف شده filebeat- * را انتخاب کنید تا داده های Filebeat را ببینید. به طور پیش فرض ، همه اطلاعات ورود را در طول 15 دقیقه گذشته به شما نشان می دهد. یک هیستوگرام با گزارش ورود به سیستم و برخی از پیامهای ورود را در زیر مشاهده خواهید کرد:

در اینجا می توانید ورودهای خود را جستجو و مرور کنید و همچنین داشبورد خود را به صورت دلخواه تنظیم کنید. اگرچه در این مرحله موارد زیادی وجود نخواهد داشت زیرا شما فقط syslogs را از سرور مجازی Elastic Stack خود دریافت می کنید.
برای رفتن به صفحه داشبورد و جستجوی داشبورد Filebeat System از پنل سمت چپ استفاده کنید. پس از آنجا ، می توانید داشبورد نمونه ای را که با ماژول سیستم Filebeat همراه است ، انتخاب کنید.
به عنوان مثال ، می توانید آمار دقیق را بر اساس پیام های syslog خود مشاهده کنید:

همچنین می توانید مشاهده کنید که کدام کاربران و چه موقع از دستور sudo استفاده کرده اند:

Kibana بسیاری از ویژگی های دیگر ، مانند نمودار و فیلتر را دارد ، بنابراین به راحتی در آن جستجو کنید.
نتیجه
در این آموزش ، نحوه نصب و پیکربندی Elastic Stack را برای جمع آوری و تحلیل ورودهای مربوط به سیستم آموخته اید. به یاد داشته باشید که می توانید تقریباً هر نوع ورود به سیستم یا داده های ایندکس شده را با استفاده از Beats به Logstash برای Logstash ارسال کنید ، اما اگر با فیلتر Logstash تجزیه و ساختار بندی شود ، داده ها حتی مفیدتر خواهند شد ، زیرا این داده ها را به یک قالب پایدار تبدیل می کند که به راحتی توسط Elasticsearch قابل خواندن است.

برچسب‌ها:, ,