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