کامپیوتر ۱۹۲۵ بازدید

در این راهنما مراحل نصب استک ELK یعنی Elasticsearch 2.2.x, Logstash 2.2.x و Kibana 4.5.x را روی سرور اوبونتو 14.04 بررسی می‌کنیم. همچنین شیوه پیکربندی آن برای گردآوری و بصری‌سازی گزارش‌های سیستمی در یک مکان مرکزی را با استفاده از Filebeat 1.1.x معرفی می‌کنیم. Logstash یک ابزار متن-باز برای گردآوری، تجزیه و مرتب‌سازی گزارش‌ها برای استفاده‌های آتی محسوب می‌شود. Kibana یک رابط وب است که می‌تواند برای جستجو و مشاهده گزارش‌هایی که Logstash اندیس‌گذاری کرده، مورد استفاده قرار گیرد.

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

امکان استفاده از Logstash برای گردآوری گزارش‌ها از همه نوع وجود دارد؛ اما در این راهنمای آموزشی ما خودمان را صرفاً به گردآوری گزارش‌های سیستمی محدود ساخته‌ایم.

هدف این راهنما

هدف این راهنمای آموزشی آن است که Logstash را برای گردآوری گزارش‌های سیستمی (syslog) از چند سرور پیکربندی کنیم و Kibana را برای بصری‌سازی این گزارش‌های گردآوری شده راه‌اندازی کنیم.

مجموعه استک ELK ما چهار جزء اساسی دارد:

  • Logstash – این جزء از سرور ELK به پردازش گزارش‌های ورودی می‌پردازد.
  • Elasticsearch – همه گزارش‌ها را ذخیره می‌سازد.
  • Kibana – رابط وب برای جستجو و بصری‌سازی گزارش‌ها است که به وسیله NginX پراکسی می‌شود.
  • Filebeat – روی سرورهای کلاینتی که گزارش‌های خود را به Logstash ارسال خواهند کرد، نصب می‌شود. Filebeat به عنوان یک عامل (agent) ارسال گزارش استفاده می‌شود که از پروتکل شبکه‌بندی lumberjack برای ارتباط با Logstash بهره می‌گیرد.

ما سه جزء نخست را روی یک سرور نصب می‌کنیم که آن را سرور ELK می‌نامیم. Filebeat روی همه سرورهایی کلاینتی که می‌خواهیم گزارش‌هایشان را گردآوری کنیم، نصب خواهند شد و به همه آن‌ها مجموعاً سرورهای کلاینت می‌گوییم.

پیش‌نیازها

برای مطالعه این راهنما باید دسترسی root به یک سرور اوبونتو 14.04 داشته باشید. مقدار CPU و RAM که سرور شما مورد استفاده قرار می‌دهد به حجم گزارش‌هایی که قرار است گردآوری شوند بستگی دارد. در این راهنما ما از سرور VPS با مشخصات زیر استفاده می‌کنیم:

  • سیستم عامل: Ubuntu 14.04
  • RAM: چهار گیگابایت
  • CPU: دو هسته

علاوه بر سرور ELK باید چند سرور دیگر نیز داشته باشید که گزارش‌ها را از آن‌ها گردآوری کنید. اینک آماده هستیم که سرور ELK خود را راه‌اندازی کنیم.

نصب جاوا 8

الاستیک‌سرچ و Logstash برای اجرا به جاوا نیاز دارند و از این رو در این مرحله آن را نصب می‌کنیم. بر اساس توصیه‌های الاستیک‌سرچ در این راهنما Oracle Java 8 را نصب می‌کنیم. با این حال اگر OpenJDK را نیز نصب کنید، اصولاً مشکلی پیش نخواهد آمد.

Oracle Java PPA را به apt اضافه کنید:

sudo add-apt-repository -y ppa:webupd8team/java

پایگاه داده بسته apt خود را به‌روزرسانی کنید:

sudo apt-get update

جدیدترین نسخه از Oracle Java 8 را با دستور زیر نصب کنید:

sudo apt-get -y install oracle-java8-installer

اینک جاوا نسخه 8 نصب شده است و باید الاستیک‌سرچ را نصب کنیم.

نصب Elasticsearch

الاستیک‌سرچ را می‌توان به کمک نرم‌افزار مدیریت بسته با افزودن فهرست منبع بسته Elastic نصب کرد. دستور زیر را برای ایمپورت کردن کلید GPG عمومی Elasticsearch در apt اجرا کنید:

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

اگر مشاهده کردید که اعلان فرمان معلق مانده است، احتمالاً منتظر وارد کردن رمز عبور کاربر (برای احراز دستور sudo) است. در این صورت رمز عبور خود را وارد کنید. فهرست منبع الاستیک‌سرچ را ایجاد کنید:

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

پایگاه داده بسته apt خود را به‌روزرسانی کنید:

sudo apt-get update

الاستیک‌سرچ را با دستور زیر نصب کنید:

sudo apt-get -y install elasticsearch

اینک الاستیک‌سرچ نصب شده است و در ادامه فایل پیکربندی آن را ویرایش می‌کنیم:

sudo vi /etc/elasticsearch/elasticsearch.yml

ما باید دسترسی خارجی (پورت 9200) به وهله در حال اجرای الاستیک‌سرچ را مسدود کنیم تا از خارج امکان خواندن یا خاموش کردن کلاستر الاستیک‌سرچ از طریق API HTTP وجود نداشته باشد. بدین منظور خطی را که با network.host آغاز می‌شود یافته و مقدار آن را با «localhost» جایگزین کنید تا به صورت زیر درآید:

network.host: localhost

فایل elasticsearch.yml را ذخیره ساخته و خارج شوید. اینک می‌توانید الاستیک‌سرچ را آغاز کنید:

sudo service elasticsearch restart

سپس دستور زیر را اجرا کنید تا الاستیک‌سرچ بوت شود:

sudo update-rc.d elasticsearch defaults 95 10

اینک الاستیک‌سرچ آغاز به کار کرده است. در ادامه کیبانا را نصب می‌کنیم.

نصب Kibana

Kibana را می‌توان از طریق افزودن فهرست منبع بسته elastic به نرم‌افزار مدیریت بسته نصب کرد. فهرست منبع Kibana را ایجاد کنید:

echo "deb http://packages.elastic.co/kibana/4.5/debian stable main" | sudo tee -a /etc/apt/sources.list.d/kibana-4.5.x.list

پایگاه داده بسته apt خود را به‌روزرسانی کنید:

sudo apt-get update

Kibana را با دستور زیر نصب کنید:

sudo apt-get -y install kibana

اینک کیبانا نصب شده است. فایل پیکربندی آن را برای ویرایش باز کنید:

sudo vi /opt/kibana/config/kibana.yml

در فایل پیکربندی کیبانا، خطی را که با server.host آغاز می‌شود بیابید و آدرس IP (به طور پیش‌فرض 0.0.0.0) را با مقدار «localhost» جایگزین کنید:

server.host: "localhost"

فایل را ذخیره کرده و خارج شوید. این تنظیمات باعث می‌شوند که کیبانا تنها در دسترس میزبان محلی خود باشد. این وضعیت مطلوبی است، زیرا پراکسی معکوس Nginx امکان دسترسی بیرونی را ایجاد خواهد کرد. اینک سرویس Kibana را فعال و آن را آغاز می‌کنیم:

sudo update-rc.d kibana defaults 96 9
sudo service kibana start

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

نصب Nginx

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

توجه کنید که اگر از قبل Nginx را روی سرور خود نصب دارید، می‌توانید از همان استفاده کنید. کافی است مطمئن شوید کیبانا چنان پیکربندی شده که سرور Nginx به آن دسترسی دارد. بدین منظور احتمالاً باید مقدار host را در فایل opt/kibana/config/kibana.yml/ به آدرس IP خصوصی یا نام میزبانی سرور کیبانا تغییر دهید. ضمناً توصیه می‌شود که SSL/TLS را فعال کنید. از apt برای نصب Nginx و Apache2-utils استفاده می‌کنیم:

sudo apt-get install nginx apache2-utils

از htpasswd برای ایجاد یک کاربر ادمین به نام «kibanaadmin» استفاده می‌کنیم (بهتر است شما از نام دیگری استفاده کنید) که به رابط وب Kibana دسترسی خواهد داشت:

sudo htpasswd -c /etc/nginx/htpasswd.users kibanaadmin

یک رمز عبور در اعلان فرمان وارد می‌کنیم. این رمز را به خاطر بسپارید چون در ادامه برای دسترسی به رابط وب کیبانا به آن نیاز خواهید داشت. اینک بلوک سرور پیش‌فرض Nginx را باز کنید:

sudo vi /etc/nginx/sites-available/default

محتوای فایل را پاک کنید و کد زیر را در فایل بچسبانید. مطمئن شوید که مقدار server_name مطابق نام سرور شما تنظیم شده است:

    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;        
        }
    }

فایل را ذخیره کرده و خارج شوید. بدین ترتیب Nginx طوری پیکربندی شده است که ترافیک HTTP سرور شما را به اپلیکیشن کیبانا هدایت کند که روی localhost:5601 گوش می‌دهد. ضمناً Nginx از فایل htpasswd.users که قبلاً ایجاد کردیم برای احراز هویت مقدماتی استفاده می‌کند. اینک Nginx را ری‌استارت کنید تا تنظیمات اعمال شوند:

sudo service nginx restart

اکنون کیبانا از طریق FQDN یا آدرس IP عمومی سرور ELK شما یعنی /http://elk-server-public-ip در دسترس است. اگر در مرورگر وب این آدرس را وارد کنید، پس از وارد کردن اطلاعات احراز هویت، با صفحه خوشامدگویی کیبانا مواجه می‌شوید که از شما می‌خواهد تا الگوی اندیس‌گذاری را پیکربندی کنید. اینک به این قضیه نمی‌پردازیم و به ادامه پیکربندی اجزای دیگر ادامه می‌دهیم.

نصب Logstash

بسته Logstash در همان ریپازیتوری الاستیک‌سرچ موجود است و قبلاً کلید عمومی آن را نصب کرده‌ایم بنابراین فهرست منبع Logstash را ایجاد می‌کنیم:

echo 'deb http://packages.elastic.co/logstash/2.2/debian stable main' | sudo tee /etc/apt/sources.list.d/logstash-2.2.x.list

پایگاه داده بسته apt خود را به‌روزرسانی کنید:

sudo apt-get update

Logstash را با دستور زیر نصب کنید:

sudo apt-get install Logstash

اینک Logstash نصب شده؛ اما هنوز پیکربندی نشده است.

ایجاد گواهی‌های SSL

از آنجا که ما قصد داریم از Filebeat برای ارسال گزارش‌ها از سرورهای کلاینت به سرور ELK استفاده کنیم باید گواهی SSL و جفت کلید آن را ایجاد کنیم. این گواهی از سوی Filebeat برای تأیید هویت سرور ELK استفاده می‌شود. دایرکتوری‌هایی که قرار است گواهی و کلیدهای خصوصی در آن ذخیره شوند را با دستور زیر ایجاد می‌کنیم:

sudo mkdir -p /etc/pki/tls/certs
sudo mkdir /etc/pki/tls/private

اینک دو گزینه برای ایجاد گواهی‌های SSL پیش روی خود داریم. اگر DNS راه‌اندازی شده دارید، می‌توانید به سرورهای کلاینت اجازه بدهید آدرس IP سرور ELK را Resolve کنند و از این رو از گزینه 2 استفاده کنید. در غیر این صوت از گزینه 1 استفاده کنید که امکان استفاده از آدرس IP را فراهم می‌سازد.

گزینه 1 – آدرس IP

اگر DNS خود را راه‌اندازی نکرده‌اید، باید آدرس IP خصوصی سرورهای خود را به فیلد subjectAltName گواهی SSL که می‌خواهیم ایجاد کنیم اضافه کنید. بدین منظور فایل پیکربندی OpenSSL را باز کنید:

sudo vi /etc/ssl/openssl.cnf

در این فایل، بخش [v3_ca] را پیدا کرده و این خط را زیر آن اضافه کنید (دقت کنید که باید آدرس سرور خصوصی خود را جایگزین نمایید):

subjectAltName = IP: ELK_server_private_IP

فایل را ذخیره کرده و ببندید. اینک گواهی و کلید خصوصی SSL در مکان‌های مناسب (/etc/pki/tls/) با دستور زیر ایجاد می‌شوند:

cd /etc/pki/tls
sudo openssl req -config /etc/ssl/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

فایل logstash-forwarder.crt به همه سرورهایی که گزارش‌هایشان را به Logstash ارسال می‌کنند کپی خواهد شد؛ اما این کار را کمی بعدتر انجام می‌دهیم. اینک باید پیکربندی Logstash را کامل کنیم. اگر از این گزینه استفاده کرده‌اید، بخش بعدی یعنی گزینه 2 را رد کنید و به عنوان پیکربندی Logstash مراجعه کنید.

گزینه 2: (FQDN (DNS

اگر DNS خود را راه‌اندازی کرده‌اید و امکان شبکه‌بندی خصوصی وجود دارد، باید یک رکورد A ایجاد کنید که شامل آدرس IP خصوصی سرور ELK باشد. از این نام دامنه در ادامه برای ایجاد گواهی SSL استفاده خواهد شد. به طور جایگزین می‌توانید از رکوردی که به آدرس IP عمومی سرور اشاره می‌کند بهره بگیرید. در هر صورت باید مطمئن شوید که سرورهای شما (یعنی سرورهایی که گزارش‌هایشان را گردآوری می‌کنید) می‌توانند نام دامنه سرور ELK شما را resolve کنند.

اکنون گواهی SSL و کلیدهای خصوصی با دستور زیر در موقعیت‌های مناسب خود (/etc/pki/tls/) ایجاد می‌شوند (دقت کنید که FQDN سرور ELK خود را جایگزین کنید):

cd /etc/pki/tls; sudo openssl req -subj '/CN=ELK_server_fqdn/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

فایل logstash-forwarder.crt به همه سرورهایی که گزارش‌هایشان را به سرور ELK ارسال می‌کنند، کپی خواهد شد؛ اما این کار را در ادامه انجام می‌دهیم. اینک باید روی تکمیل پیکربندی Logstash متمرکز شویم.

پیکربندی Logstash

فایل‌های پیکربندی Logstash در قالب JSON هستند و در دایرکتوری etc/logstash/conf.d/ قرار دارند. این پیکربندی شامل سه بخش است: ورودی‌ها، فلیترها و خروجی‌ها.

در این مرحله یک فایل پیکربندی به نام 02-beats-input.conf ایجاد می‌کنیم که ورودی «filebeat» ما را راه‌اندازی می‌کند:

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

پیکربندی input زیر را در فایل وارد کنید:

    input {
      beats {
        port => 5044
        ssl => true
        ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
        ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
      }
    }

فایل را ذخیره کرده و خارج شوید. بدین ترتیب ورودی beats برای گوش دادن به پورت tcp 5044 تنظیم می‌شود و از گواهی SSL و کلید خصوصی که قبلاً ایجاد کردیم استفاده می‌کند.

سپس یک فایل پیکربندی به نام 10-syslog-filter.conf ایجاد می‌کنیم که فیلتری برای پیام‌های syslog اضافه می‌کند:

sudo vi /etc/logstash/conf.d/10-syslog-filter.conf

پیکربندی فیلتر syslog زیر را در فایل درج کنید:

    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}" ]
        }
        syslog_pri { }
        date {
          match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
        }
      }
    }

فایل را ذخیره کرده و خارج شوید. این فیلتر به دنبال گزارش‌هایی می‌گردد که دارای عنوان از نوع «syslog» هستند و تلاش می‌کند تا از grok برای تجزیه گزارش‌های ورودی syslog استفاده کند تا آن‌ها را به روشی سازماندهی‌شده و قابل پرس‌وجو ذخیره‌سازی کند.

در نهایت یک فایل پیکربندی به نام 30-elasticsearch-output.conf ایجاد می‌کنیم:

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

پیکربندی خروجی زیر را در آن وارد می‌کنیم:

    output {
      elasticsearch {
        hosts => ["localhost:9200"]
        sniffing => true
        manage_template => false
        index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
        document_type => "%{[@metadata][type]}"
      }
    }

فایل را ذخیره کرده و خارج شوید. این خروجی اساساً Logstash را پیکربندی می‌کند تا داده‌های beats را در الاستیک‌سرچ ذخیره کند که در localhost:9200 در یک اندیس به نام beat مورد استفاده در حال اجرا است.

اگر می‌خواهید فیلترهایی برای اپلیکیشن‌هایی که از ورودی Filebeat استفاده می‌کنند، اضافه کنید باید اطمینان پیدا کنید که فایل‌ها را طوری نام‌گذاری می‌کنید که بین پیکربندی‌های ورودی و خروجی تمییز ایجاد شود.

در این زمان پیکربندی Logstash خود را با دستور زیر تست می‌کنیم:

sudo service logstash configtest

اگر هیچ خطای ساختاری وجود نداشته باشد، در خروجی باید پیام Configuration OK نمایش یابد. در غیر این صورت خروجی خطا را بخوانید تا ببینید که کدام بخش از پیکربندی Logstash اشتباه بوده است. Logstash را ری‌استارت و آن را فعال کنید تا تغییرات پیکربندی اعمال شوند:

sudo service logstash restart
sudo update-rc.d logstash defaults 96 9

سپس داشبوردهای پیش‌فرض کیبانا را بارگذاری می‌کنیم.

بارگذاری داشبوردهای Kibana

الاستیک چند داشبورد پیش‌فرض Kibana و الگوهای اندیس Beats عرضه کرده است که برای آغاز به کار با کیبانا مفید است. با این که ما در این راهنما از این داشبوردها استفاده نمی‌کنیم، آن‌ها را به هر ترتیب بارگذاری می‌کنیم تا بتوانیم از الگوی اندیس Filebeat که در خود دارد، استفاده کنیم. ابتدا فایل‌های فشرده داشبوردهای نمونه را در دایرکتوری home دانلود کنید:

cd ~
curl -L -O https://download.elastic.co/beats/dashboards/beats-dashboards-1.1.0.zip

بسته unzip را با دستور زیر نصب کنید:

sudo apt-get -y install unzip

سپس محتوای فایل‌های فشرده را استخراج کنید:

unzip beats-dashboards-*.zip

و داشبوردهای نمونه، بصری‌سازی‌ها و الگوهای اندیس Beats را با دستورهای زیر در الاستیک‌سرچ بارگذاری کنید:

cd beats-dashboards-*
./load.sh

این‌ها الگوهای اندیس هستند که بارگذاری کرده‌ایم:

  • [packetbeat-]YYYY.MM.DD
  • [topbeat-]YYYY.MM.DD
  • [filebeat-]YYYY.MM.DD
  • [winlogbeat-]YYYY.MM.DD

زمانی که شروع به استفاده از کیبانا بکنیم، الگوی اندیس Filebeat را به عنوان مقدار پیش‌فرض انتخاب می‌کنیم.

بارگذاری قالب اندیس Filebeat در الاستیک‌سرچ

از آنجا که قصد داریم از Filebeat برای ارسال گزارش‌ها به الاستیک‌سرچ استفاده کنیم، باید یک قالب اندیس Filebeat را بارگذاری کنیم. قالب اندیس باعث می‌شود الاستیک‌سرچ برای تحلیل فیلدهای Filebeat ورودی به روشی مشخص پیکربندی شود. ابتدا قالب اندیس Filebeat را در دایرکتوری home دانلود می‌کنیم:

cd ~
curl -O https://gist.githubusercontent.com/thisismitch/3429023e8438cc25b86c/raw/d8c479e2a1adcea8b1fe86570e42abab0f10f364/filebeat-index-template.json

پس قالب را با دستور زیر بارگذاری می‌کنیم:

curl -XPUT 'http://localhost:9200/_template/filebeat?pretty' -d@filebeat-index-template.json

اگر قالب به درستی بارگذاری شود باید پیامی مانند زیر ببینید:

Output:
{
   "acknowledged": true
}

اکنون که سرور ELK آماده دریافت داده‌های Filebeat است، می‌توانیم اقدام به راه‌اندازی Filebeat روی هر یک از سرورهای کلاینت بکنیم.

راه‌اندازی Filebeat (افزودن سرورهای کلاینت)

مراحل زیر را روی هر یک از سرورهای اوبونتو یا دبیان که می‌خواهید گزارش‌هایشان را به Logstash روی سرور ELK بفرستند، تکرار کنید.

کپی کردن گواهی SSL

روی سرور ELK گواهی SSL را که در بخش‌های پیشین این راهنما ایجاد کردیم، کپی کنید و در سرورهای کلاینت بچسبانید (دقت کنید که آدرس سرور کلاینت و اطلاعات ورود را جایگزین کنید):

scp /etc/pki/tls/certs/logstash-forwarder.crt user@client_server_private_address:/tmp

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

اینک روی سرور کلاینت گواهی SSL سرور ELK را به مکان‌های مناسب (etc/pki/tls/certs/) کپی کنید:

sudo mkdir -p /etc/pki/tls/certs
sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/

در ادامه اقدام به نصب Topbeat می‌کنیم.

نصب بسته Filebeat

در سرور کلاینت فهرست منبع Beats را ایجاد کنید:

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

این فهرست از همان کلید GPG الاستیک‌سرچ استفاده می‌کند و از این رو با دستور زیر قابل نصب است:

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

سپس بسته Filebeat را نصب کنید:

sudo apt-get update
sudo apt-get install filebeat

اینک Filebeat نصب شده؛ اما هنوز پیکربندی نشده است.

پیکربندی Filebeat

در ادامه Filebeat را چنان پیکربندی می‌کنیم که به Logstash روی سرور ELK اتصال یابد. در این بخش اقدام به ویرایش فایل پیکربندی نمونه‌ای که به همراه Filebeat ارائه شده است می‌کنیم. زمانی که این مراحل پایان یافتند، فایلی خواهم داشت که شبیه زیر است:

filebeat:
  prospectors:
    -
      paths:
        - /var/log/auth.log
        - /var/log/syslog
      #  - /var/log/*.log

      input_type: log
      
      document_type: syslog

  registry_file: /var/lib/filebeat/registry

output:
  logstash:
    hosts: ["elk_server_private_ip:5044"]
    bulk_max_size: 1024

    tls:
      certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]

shipper:

logging:
  files:
    rotateeverybytes: 10485760 # = 10MB

روی سرور کلاینت یک فایل پیکربندی Filebeat ایجاد کرده و آن را ویرایش می‌کنیم:

sudo vi /etc/filebeat/filebeat.yml

توجه کنید که فایل پیکربندی Filebeat در قالب YAML است. یعنی تورفتگی در این فایل بسیار مهم است. بنابراین اطمینان حاصل کنید که تعداد space ها دقیقاً با دستورالعمل‌های این راهنما مطابقت دارند:

در بخش‌های ابتدایی فایل، بخش prospectors را می‌بینید که محلی برای تعریف این موارد است. prospector ها تعیین می‌کنند که کدام فایل‌های log باید ارسال شوند و این کار چگونه باید مدیریت شود. هر prospector به وسیله کاراکتر – مشخص می‌شود.

ما prospector موجود را برای ارسال syslog و auth,log به Logsyah ویرایش می‌کنیم. زیر paths فایل  /var/log/*.log – را از کامنت خارج کنید. بدین ترتیب از ارسال همه فایل‌های.log در این دایرکتوری به Logstash ممانعت می‌کنیم. سپس مدخل‌های جدیدی برای syslog و auth.log ایجاد می‌کنیم. در این زمان فایل باید چیزی شبیه زیر باشد:

...
      paths:
        - /var/log/auth.log
        - /var/log/syslog
#        - /var/log/*.log
...

سپس خطی را که document_type: را مشخص کرده است پیدا می‌کنیم، آن را از حالت کامنت خارج می‌کنیم و مقدار آن را به «syslog» تغییر می‌دهیم. این فایل پس از اصلاح باید به صورت زیر باشد:

...
      document_type: syslog
...

این بخش تعیین می‌کند که گزارش‌ها در این prospector از نوع syslog هستند.

اگر می‌خواهید فایل‌های دیگری را به سرور ELK ارسال کنید یا هر گونه تغییری در شیوه مدیریت گزارش‌ها از سوی Filebeat ایجاد کنید، می‌توانید مدخل‌های prospector را ویرایش کنید یا مواردی را بیفزایید.

سپس زیر بخش output خطی را که با :elasticsearch شروع می‌شود پیدا کنید. این بخش خروجی الاستیک را مشخص می‌سازد. کل بخش خروجی الاستیک‌سرچ را تا خطی که با :logstash# آغاز می‌شود حذف یا کامنت کنید.

بخش خروجی کامنت شده Logstash را که با :logstash# آغاز می‌شود، پیدا کنید و آن را با حذف # ابتدایی از حالت کامنت خارج کنید. در این بخش خط [“hosts: [“localhost:5044 را از کامنت خارج می‌کنیم. مقدار localhost را به آدرس IP خصوصی (یا نام میزبانی) سرور ELK خود تغییر دهید:

  ### Logstash as output
  logstash:
    # The Logstash hosts
    hosts: ["ELK_server_private_IP:5044"]

بدین ترتیب Filebeat طوری پیکربندی می‌شود که به سرور ELK روی پورت 5044 وصل شود. این همان پورتی است که قبلاً در بخش ورودی Logstash تعیین کرده‌ایم.

بلافاصله زیر مدخل hosts و با همان میزان تورفتگی خط زیر را اضافه کنید:

    bulk_max_size: 1024

سپس بخش tls را بیابید و آن را نیز از کامنت خارج کنید. سپس خطی را که با certificate_authorities آغاز می‌شود از کامنت خارج کنید و مقدار آن را به [“/etc/pki/tls/certs/logstash-forwarder.crt”] تغییر دهید. بنابراین باید به صورت زیر در آمده باشد:

...
    tls:
      # List of root certificates for HTTPS server verifications
      certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]

بدین ترتیب Filebeat برای استفاده از آن گواهی SSL که قبلاً روی سرور ELK ایجاد کردیم، پیکربندی می‌شود. فایل را ذخیره کرده و خارج شود. اینک می‌توانید Filebeat را ری‌استارت کنید تا همه تغییرات اعمال شوند:

sudo service filebeat restart
sudo update-rc.d filebeat defaults 95 10

در این مورد نیز باید اطمینان حاصل کنید که پیکربندی Filebeat صحیح است. بدین منظور آن را با پیکربندی نمونه Filebeat که در ادامه ارائه شده است مقایسه کنید:

filebeat:
  prospectors:
    -
      paths:
        - /var/log/auth.log
        - /var/log/syslog
      #  - /var/log/*.log

      input_type: log
      
      document_type: syslog

  registry_file: /var/lib/filebeat/registry

output:
  logstash:
    hosts: ["elk_server_private_ip:5044"]
    bulk_max_size: 1024

    tls:
      certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]

shipper:

logging:
  files:
    rotateeverybytes: 10485760 # = 10MB

اکنون Filebeat فایل‌های syslog و auth.log را به Logstash روی سرور ELK ارسال می‌کند. این بخش را برای همه سرورهای دیگری که می‌خواهید گزارش‌هایشان را گردآوری کنید، تکرار نمایید.

تست نصب Filebeat

اگر استک ELK شما به طرز درستی پیکربندی شده باشد، Filebeat (روی سرورهای کلینت) باید گزارش‌ها را به Logstash روی سرور ELK ارسال کند. Logstash نیز باید داده‌های Filebeat را در الاستیک‌سرچ در اندیس با مُهر تاریخ (timestamp) به صورت filebeat-YYYY.MM.DD بارگذاری کند.

روی سرور ELK با کوئری زدن به اندیس Filebeat با استفاده از دستور زیر، مطمئن شوید که الاستیک‌سرچ عملاً داده‌ها را بارگذاری می‌کند:

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

در خروجی دستور فوق یک دسته از داده‌ها را می‌بینید که باید چیزی شبیه زیر باشد:

Sample Output:
...
{
      "_index" : "filebeat-2016.01.29",
      "_type" : "log",
      "_id" : "AVKO98yuaHvsHQLa53HE",
      "_score" : 1.0,
      "_source":{"message":"Feb  3 14:34:00 rails sshd[963]: Server listening on :: port 22.","@version":"1","@timestamp":"2016-01-29T19:59:09.145Z","beat":{"hostname":"topbeat-u-03","name":"topbeat-u-03"},"count":1,"fields":null,"input_type":"log","offset":70,"source":"/var/log/auth.log","type":"log","host":"topbeat-u-03"}
    }
...

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

اتصال به Kibana

زمانی که راه‌اندازی Filebeat روی همه سرورهایی که قرار است گزارش‌هایشان گردآوری شود، پایان یافت نوبت آن رسیده است که نگاهی به Kibana، رابط وبی که قبلاً نصب کردیم داشته باشیم.

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

در این مرحله گزینه [filebeat]-YYY.MM.DD را از منوی الگوهای اندیس (در سمت چپ) انتخاب کنید، سپس روی دکمه ستاره (تعیین به عنوان پیش‌فرض) کلیک کنید تا Filebeat از آن به عنوان الگوی پیش‌فرض استفاده کند.

اینک می‌توانید روی لینک Discover در نوای ناوبری فوقانی بزنید. به طور پیش‌فرض با این کار همه داده‌های log در طی 15 دقیقه اخیر به شما نمایش داده می‌شود. باید هیستوگرام رویدادهای log را به همراه پیام‌های log زیر ببینید:

در این زمان احتمالاً موارد زیادی وجود ندارند، زیرا شما تنها syslog ها را از سرورهای کلاینت گردآوری کرده‌اید. در این صفحه می‌توانید گزارش‌ها را مورد جستجو قرار دهید. همچنین می‌توانید داشبورد را به سلیقه خود سفارشی‌سازی کنید. موارد زیر را امتحان کنید:

  • به دنبال مقدار «root» بگردید تا ببینید آیا کسی تلاش کرده است به عنوان کاربر root وارد سیستم شما شود یا نه.
  • به دنبال نام میزبان خاص مثلاً “host: “hostname بگردید.
  • قاب زمانی را با انتهای یک محدوده از هیستوگرام یا از منوی فوقانی تغییر دهید.
  • روی پیام‌های زیر هیستوگرام کلیک کنید تا داده‌هایی که فیلتر شده‌اند را مشاهده نمایید.

کیبانا ویژگی‌های زیادی مانند گراف بندی و فیلترینگ دارد.

سخن پایانی

اینک که همه گزارش‌های سیستمی را از طریق الاستیک‌سرچ و Logstash در یک مکان مرکزی گردآوری کرده‌ایم و می‌توانیم آن‌ها را با استفاده از Kibana بصری‌سازی کنیم، قادر خواهیم بود همه log های مهم خود را به صورت متمرکز درآوریم. به خاطر داشته باشید که می‌توانید هر نوع از log یا داده‌های اندیس شده را به Logstash ارسال کنید، اما این داده‌ها در مواردی که با grok تجزیه و سازماندهی شوند بسیار مفیدتر خواهند بود.

برای بهبود استک ELK باید تلاش کنید log های دیگری را با استفاده از Losgatsh گردآوری و فیلتر کنید و داشبوردهای Kibana خاص خود ایجاد کنید. همچنین احتمالاً می‌خواهید معیارهای مختلف سیستم را با استفاده از Topbeat در استک ELK خود گردآوری کنید.

اگر این مطلب برایتان مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

بر اساس رای ۴ نفر
آیا این مطلب برای شما مفید بود؟
شما قبلا رای داده‌اید!
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.

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

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد.

مشاهده بیشتر