Elastic Stack که با عنوان ELK stack نیز شناخته میشود، مجموعه نرم افزارهای رایگان و منبع بازی از شرکت Elastic است که برای تهیه گزارش بصورت متمرکز طراحی شده است.
Elastic Stack، امکان جستجو، تجزیه و تحلیل و نمایش گزارشهای مربوط به منابع مختلف را در هزاران قالب فراهم میکند. تهیه گزارش متمرکز به شناسایی مشکلات برنامه یا سرور از یک نقطه مشترک کمک میکند.
در این راهنما، چگونگی نصب و پیکربندی Elastic stack برروی اوبونتو 18.04 شرح داده شده است.
اجزای Elastic Stack
Elastic Stack، از 4 جزء اصلی تشکیل شده است که به شرح زیر میباشد.
Elasticsearch: یک موتور جستجوی RESTful است که تمام دادههای جمع آوری شده را ذخیره و نگهداری میکند.
Logstash: مؤلفهای است که دادهها را پردازش کرده و آن را در elastic search تجزیه مینماید.
Kibana: یک رابط وب است که گزارشها را تهیه میکند.
Beatها: حمل کنندههای داده سبک هستند که گزارشها را از صدها یا هزاران سرور به سرور مرکزی (که ELK بر روی آن پیکربندی شده است) منتقل میکنند.
قبل از شروع نصب، اطمینان حاصل کنید که زیرساختهای زیر را داشته باشید:
- سرور اوبونتو 18.04 LTS با دسترسی root و یک کاربر غیر root به همراه فایروال ufw.
- 4 گیگابایت RAM
- 2 پردازنده
- برنامه Java 8 که توسط Elasticsearch و Logstash مورد نیاز خواهد بود.
- وب سرور NGINX که برای مدیریت Kibana پیکربندی میشود.
نصب Elasticsearch برروی اوبونتو
در ابتدا باید کلید عمومی GPG مربوط به Elasticsearch را به APT وارد کنید. بستههای Elastic stack معمولاً با کلید امضای Elasticsearch امضا میشوند تا از سیستم شما در برابر جعل بستهها محافظت نمایند. علاوهبراین، بستههای معتبر توسط مدیر بسته قابل اعتماد تلقی میشوند.
به منظور وارد کردن کلید GPG کافیست دستور زیر را اجرا کنید:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
سپس، با استفاده از دستور زیر، مخزن Elastic را به دایرکتوری source.list.d اضافه نمایید.
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
خروجی دو دستور به صورت زیر است:
اکنون مخزن سیستم را با استفاده از دستور زیر به روز کنید.
sudo apt update
خروجی به صورت زیر خواهد بود:
پس از آن، Elasticsearch را با استفاده از دستور زیر نصب نمایید.
sudo apt install elasticsearch
خروجی نصب به صورت زیر خواهد بود:
پیکربندی Elasticsearch در اوبونتو
Elasticsearch، پورت 9200 را شنود میکند. در اینجا میخواهیم دسترسی خارجی را محدود نماییم تا از بیرون نتوانند به دادهها دسترسی پیدا کنند و Elastic cluster را خاموش نمایند. بدین صورت تغییرات را به صورت زیر در فایل پیکربندی Elasticsearch ایجاد میکنیم.
فایل elasticsearch.yml را با استفاده از دستور زیر ویرایش نمایید.
sudo nano /etc/elasticsearch/elasticsearch.yml
ویژگی network.host را پیدا کرده و آن را از حالت کامنت خارج نمایید و localhost را به عنوان مقدار آن اضافه کنید. علاوه بر این، ویژگی http.port را از حالت کامنت خارج نمایید.
خروجی به صورت زیر باید باشد.
network.host: localhost
http.port: 9200
در مرحله بعد، سرویس Elasticsearch را به صورت زیر راهاندازی و فعال کنید.
sudo systemctl start elasticsearch
sudo systemctl enable elasticsearch
خروجی دستور به صورت زیر خواهد بود:
در این مرحله، Elasticsearch باید فعال و اجرا باشد. با اجرای دستور زیر میتوانید از این مورد مطمئن شوید.
systemctl status elasticsearch
خروجی دستور به صورت زیر خواهد بود.
شما میتوانید از دستور netstat نیز به صورت زیر استفاده نمایید.
netstat -pnltu
همچنین، میتوانید دستور curl را نیز به صورت زیر اجرا کنید.
curl -X GET "localhost:9200"
خروجی این دستور به صورت زیر خواهد بود.
تا اینجا نصب و پیکربندی Elasticsearch کامل شد. در مرحله بعدی، قصد داریم Logstash را نصب و پیکربندی نماییم.
نصب و پیکربندی Logstash
دومین مؤلفه Elastic stack که قصد نصب آن را داریم، Logstash است. Logstash وظیفه جمع آوری و متمرکزسازی گزارشهای مربوط به سرورهای مختلف را با استفاده از Filebeat Data Transporter به عهده دارد. پس از آن، دادههای syslog را فیلتر کرده و به Elasticsearch منتقل میکند.
بدین منظور ابتدا مطمئن شوید که OpenSSL در حال اجرا است. برای انجام این کار، دستور زیر را اجرا کنید.
openssl version -a
خروجی دستور مشابه زیر خواهد بود:
برای نصب Logstash، دستور زیر را اجرا نمایید.
sudo apt install logstash -y
خروجی دستور به صورت زیر است:
سپس، فایل /etc/hosts را ویرایش کرده و موارد زیر را اضافه نمایید:
18.224.44.11 elk-master
که در آن، 18.224.44.11 آدرس IP سرور masterELk است.
سپس باید کلید گواهینامه SSL را ایجاد کنید تا انتقال دادهها ازکلاینت به سرور logstash بصورت ایمن انجام شود.
برای انجام این کار، ابتدا یک پوشه SSL جدید در دایرکتوری تنظیمات logstash یعنی /etc/logstash ایجاد کرده و به آن دایرکتوری بروید.
mkdir -p /etc/logstash/ssl
cd /etc/logstash/
اکنون میتوانید گواهینامه SSL را بصورت زیر تولید کنید.
openssl req -subj '/CN=elk-master/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout ssl/logstash-forwarder.key -out ssl/logstash-forwarder.crt
در مرحله بعدی باید فایلهای پیکربندی جدیدی برای logstash ایجاد نمایید. در اینجا، یک فایل پیکربندی "filebeat-input.conf" به عنوان فایل ورودی از filebeat، و یک فایل "syslog-filter.conf" برای پردازش syslog و در آخر یک فایل "output-elasticsearch.conf" به عنوان فایل خروجی Elasticsearch ایجاد خواهیم کرد.
به دایرکتوری Logstash رفته و یک فایل 'filebeat-input.conf' در پوشه 'conf.d' ایجاد نمایید.
cd /etc/logstash/
vim conf.d/filebeat-input.conf
پیکربندی زیر را جایگذاری کنید.
input {
beats {
port => 5443
type => syslog
ssl => true
ssl_certificate => "/etc/logstash/ssl/logstash-forwarder.crt"
ssl_key => "/etc/logstash/ssl/logstash-forwarder.key"
}
}
فایل را ذخیره کرده و از آن خارج شوید.
برای دادههای گزارش پردازش syslog، در اینجا از پلاگین فیلتر به نام 'grok' به منظور تجزیه فایلهای syslog استفاده میکنیم.
یک فایل پیکربندی جدید "syslog-filter.conf" ایجاد نمایید.
vim conf.d/syslog-filter.conf
تنظیمات زیر را در آن کپی کنید.
filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
add_field => [ "received_at", "%{@timestamp}" ]
add_field => [ "received_from", "%{host}" ]
}
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
}
}
فایل را ذخیره کرده و از آن خارج شوید.
در آخر، یک فایل پیکربندی به نام 'output-elasticsearch.conf' برای خروجی elasticsearch ایجاد نمایید.
vim conf.d/output-elasticsearch.conf
محتوای زیر را جایگذاری کنید.
output {
elasticsearch { hosts => ["localhost:9200"]
hosts => "localhost:9200"
manage_template => false
index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}
فایل را ذخیره کرده و از آن خارج شوید.
پس از آن، سرویس Logstash را فعال و راهاندازی نمایید.
sudo systemctl enable logstash
sudo systemctl start logstash
برای بررسی اینکه Logstash در حال اجرا است، دستور را اجرا کنید.
sudo systemctl status logstash
خروجی دستور به صورت زیر خواهد بود:
همانطور که نشان داده شده میتوانید از دستور netstat نیز استفاده نمایید.
کد
نصب و پیکربندی Kibana برروی اوبونتو
اکنون میخواهیم Kibana را در ابونتو نصب کنیم. بدین منظور کافیست از دستور زیر استفاده نمایید.
sudo apt install kibana -y
خروجی دستور به صورت زیر خواهد بود:
پس از آن باید تغییراتی در فایل پیکربندی kibana ایجاد کنید. بدین منظور، ابتدا فایل را با استفاده از دستور زیر ویرایش نمایید.
vim /etc/kibana/kibana.yml
و سپس ویژگیهای زیر را پیدا کرده و آنها را از حالت کامنت خارج نمایید.
server.port: 5601
server.host: "localhost"
elasticsearch.url: "https://localhost:9200"
فایل را ذخیره کرده و از آن خارج شوید.
سپس سرویس Kibana را فعال و راهاندازی کنید:
sudo systemctl enable kibana
sudo systemctl start kibana
خروجی دستور به صورت زیر خواهد بود:
همانطور که نشان داده شده است، با استفاده از دستور netstat به صورت زیر میتوانید بررسی کنید که kibana روی پورت پیش فرض 5601 در حال اجرا است.
netstat -pnltu
خروجی دستور به صورت زیر خواهد بود:
نصب و پیکربندی NGINX به عنوان پروکسی معکوس (reverse proxy) برای Kibana
در اینجا از NGINX به عنوان یک پروکسی معکوس برای داشبوردهای kibana استفاده کردهایم. بدین منظور با استفاده از دستور زیر، Nginx و ‘Apache2-utils’ را نصب نمایید.
sudo apt install nginx apache2-utils -y
پس از آن، یک فایل میزبان مجازی جدید به نام kibana ایجاد کنید.
vim /etc/nginx/vim sites-available/kibana
محتوای زیر را در فایل میزبان مجازی کپی نمایید.
server {
listen 80;
server_name localhost;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/.kibana-user;
location / {
proxy_pass https://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;
}
}
فایل را ذخیره کرده و از آن خارج شوید.
در مرحله بعد، با استفاده از دستور htpasswd به صورت زیر، یک احراز هویت اساسی برای داشبورد kibana ایجاد کنید.
sudo htpasswd -c /etc/nginx/.kibana-user elastic
Type the elastic user password
خروجی دستور به صورت زیر خواهد بود:
در مثال بالا، نام کاربری elastic است و رمز ورود همان چیزی است که شما ارائه میدهید.
سپس، پیکربندی میزبان مجازی Kibana را فعال کرده و پیکربندی Nginx را آزمایش نمایید.
ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/
nginx -t
خروجی دستور به صورت زیر خواهد بود:
پس از آن، سرور Nginx را فعال کرده و مجدداً راهاندازی نمایید.
systemctl enable nginx
systemctl restart nginx
نصب و پیکربندی Filebeat
در این مرحله، میخواهیم فایل تنظیمات filebeat را در سرور elk-master خود پیکربندی کنیم. با این کار تمام پیامهای syslog برای logstash ارسال میشوند که توسط kibana پردازش و تحلیل میشوند.
برای نصب Filebeat کافیست دستور زیر را اجرا نمایید.
sudo apt install filebeat
سپس، فایل پیکربندی filebeat را با استفاده از دستور زیر باز کنید.
sudo vim /etc/filebeat/filebeat.yml
در اینجا برای انجام پردازش بیشتر روی دادههای جمع آوری شده توسط Filebeat، از Logstash استفاده خواهیم کرد. به منظور ارسال مستقیم هیچ یک از دادهها به Elasticsearch نیازی به Filebeat نخواهد بود. بدین منظور، بخش elasticsearch را پیدا کرده و کامنت نمایید.
#output.elasticsearch:
# Array of hosts to connect to.
#hosts: ["localhost:9200"]
پس از آن، به بخش Logstash رفته و آن را به صورت زیر از حالت کامنت خارج کنید.
output.logstash:
# The Logstash hosts
hosts: ["localhost:5044"]
با تغییر مقدار خط "enabled" به "true"، جستجوی filebeat را فعال نمایید.
enabled: true
فایلهای گزارش سیستم را برای ارسال به سرور logstash مشخص کنید. در این مثال، ما فایل گزارش ssh به نام 'auth.log' و فایل syslog را اضافه خواهیم کرد.
paths:
- /var/log/auth.log
- /var/log/syslog
فایل را ذخیره کرده و خارج شوید.
در آخر، فایل گواهی logstash به نام logstash-forwarder.crt را در دایرکتوری /etc/filebeat کپی کنید.
cp ~/logstash-forwarder.crt /etc/filebeat/logstash-forwarder.crt
اکنون Filebeat را راهاندازی کرده و فعال نمایید.
systemctl start filebeat
systemctl enable filebeat
برای بررسی وضعیت filebeat، دستور زیر را اجرا کنید:
systemctl status filebeat
خروجی دستور به صورت زیر خواهد بود:
تست Elasticsearch Stack
برای آزمایش Elastic stack، مرورگر خود را باز کرده و IP سرور خود را به همراه پورت 5601 (که پورت شنود kibana است) وارد نمایید.
ip-address:5601
نام کاربری و رمز ورود را وارد کنید تا صفحه زیر نمایش داده شود.
برروی تب "discover" و سپس "Filebeat" کلیک کنید. رابط زیر ظاهر میشود که برای شما دادههای تصویری را به نمایش میگذارد.
منبع:
journaldev
0 دیدگاه
نوشتن دیدگاه