ELK Stack خود را با استفاده از Docker Compose مستقر کنید

مقدمه

در این آموزش، نحوه نصب ELK STack با استفاده از Docker Compose بر روی سرور با اوبونتو (نسخه 22.04) را خواهید آموخت. ELK Stack از Elasticsearch، Kibana و Logstash تشکیل شده است.

  • Elasticsearch یک موتور جستجو و تجزیه و تحلیل است.
  • Kibana یک رابط کاربری برای تجزیه و تحلیل داده ها است.
  • Logstash می تواند گزارش های مربوط به برنامه ها را تجزیه و تحلیل کند.
پیش نیازها
  • سروری که اوبونتو نسخه 22.04 یا بالاتر را اجرا می کند:دسترسی SSH به آن سرور و دسترسی به کاربر ریشه یا کاربری با مجوز sudo
  • دانش اولیه Docker، Docker Compose، ElasticSearch و YAML

مرحله 1 – Docker Compose را نصب کنید

اگر قبلاً Docker Compose را روی سرور خود نصب کرده اید، می توانید از این مرحله صرف نظر کنید. ابتدا SSH را با استفاده از دستور زیر وارد سرور خود کنید:

ssh holu@<your_host>

مطمئن شوید که بسته های apt را به روز کرده و cURL را نصب کنید:

sudo apt-get update && sudo apt-get install curl -y

پس از اطمینان از نصب curl، می توانیم از اسکریپت نصب سریع ارائه شده توسط Docker برای نصب Docker و همچنین Docker Compose استفاده کنیم:

curl https://get.docker.com | sh

این دستور اسکریپت را از get.docker.com دانلود کرده و آن را به sh “pipe” می کند (اسکریپت دانلود شده را به sh تغذیه می کند که آن اسکریپت را اجرا کرده و Docker را نصب می کند). آخرین کاری که می‌توانیم انجام دهیم این است که خودمان را به گروه Docker اضافه کنیم تا هر بار که از دستور docker استفاده می‌کنیم نیازی به استفاده از sudo نداشته باشیم.

sudo usermod -aG docker holu

برای اعمال تغییرات حتما از سیستم خارج شوید و دوباره وارد شوید.

مرحله 2 – docker-compose.yaml را ایجاد کنید

فایل docker-compose.yaml برای اعلان تمام زیرساخت های پشته ELK استفاده خواهد شد. برای ایجاد چندین کانتینر با یک دستور استفاده می شود.

یک پوشه جدید در سرور خود ایجاد کنید و یک فایل docker-compose.yaml در آن ایجاد کنید:

mkdir elk-stack && cd elk-stack && touch docker-compose.yaml

ما می خواهیم از Docker Compose برای ایجاد سه کانتینر Docker استفاده کنیم:


برای ایجاد این سه کانتینر، محتوای زیر را به فایل docker-compose.yaml اضافه کنید:

version: "3"
services:
setup:
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.1
environment:
- ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
- KIBANA_PASSWORD=${KIBANA_PASSWORD}
container_name: setup
command:
- bash
- -c
- |
echo "Waiting for Elasticsearch availability";
until curl -s http://elasticsearch:9200 | grep -q "missing authentication credentials"; do sleep 30; done;
echo "Setting kibana_system password";
until curl -s -X POST -u "elastic:${ELASTIC_PASSWORD}" -H "Content-Type: application/json" http://elasticsearch:9200/_security/user/kibana_system/_password -d "{\"password\":\"${KIBANA_PASSWORD}\"}" | grep -q "^{}"; do sleep 10; done;
echo "All done!";
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.1
# give the container a name
# this will also set the container's hostname as elasticsearch
container_name: elasticsearch
environment:
- discovery.type=single-node
- cluster.name=elasticsearch
- bootstrap.memory_lock=true
# limits elasticsearch to 1 GB of RAM
- ES_JAVA_OPTS=-Xms1g -Xmx1g
# The password for the 'elastic' user
- ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
- xpack.security.http.ssl.enabled=false
kibana:
image: docker.elastic.co/kibana/kibana:8.12.1
container_name: kibana
ports:
- 5601:5601
environment:
# remember the container_name for elasticsearch?
# we use it here to access that container
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
- ELASTICSEARCH_USERNAME=kibana_system
- ELASTICSEARCH_PASSWORD=${KIBANA_PASSWORD}
# Change this to true if you want to sent
# telemetry data to kibana developers
- TELEMETRY_ENABLED=false

در حال حاضر یک عنصر، فایل .env را از دست داده ایم. فایل .env برای ذخیره اسرار مانند گذرواژه‌ها و نشانه‌های API برای حذف آنها از پیکربندی یا کد شما استفاده می‌شود. Docker Compose به طور خودکار فایل .env را شناسایی می کند و متغیرهایی مانند ${MY_VARIABLE} را با متغیر env. جایگزین می کند.

env را ایجاد کنید و خطوط زیر را اضافه کنید:

ELASTIC_PASSWORD=<your-elastic-password>
KIBANA_PASSWORD=<your-kibana-password>

اکنون می توانید docker compose را برای راه اندازی همه چیز اجرا کنید:

docker compose up -d

خروجی:

[+] Running 3/4
⠇ Network elk-stack_default Created
:heavy_check_mark: Container kibana Started
:heavy_check_mark: Container setup Started
:heavy_check_mark: Container elasticsearch Started

می توانید از دستور docker ps برای بررسی اینکه آیا همه چیز همانطور که انتظار می رود کار می کند یا خیر استفاده کنید.

holu@<your_host>:~/elk-stack$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<id> docker.elastic.co/kibana/kibana:8.12.1 "<command>" About a minute ago Up About a minute 0.0.0.0:5601->5601/tcp, :::5601->5601/tcp kibana
<id> docker.elastic.co/elasticsearch/elasticsearch:8.12.1 "<command>" About a minute ago Up About a minute 9200/tcp, 9300/tcp elasticsearch

اکنون می توانید Kibana را در یک مرورگر وب با وارد کردن <your_server>:5601 در نوار URL باز کنید.

با نام کاربری elastic و رمز عبوری که قبلاً در فایل .env تعیین کرده اید وارد شوید.


اگر هنگام ورود به سیستم این صفحه را دارید، بر روی “Explore On My Own” کلیک کنید.


اکنون باید بتوانید به صفحه اصلی کیبانا دسترسی داشته باشید. به نظر می رسد این است:


مرحله 3 – Logstash

اکنون زمان اضافه کردن آخرین قطعه پازل، Logstash است. Logstash می‌تواند گزارش‌ها را از برنامه(های) شما تجزیه و تحلیل کند و گزارش‌های تحلیل شده را به elasticsearch می‌رساند.

docker-compose.yaml را ویرایش کنید و ظرف چهارم را در بخش “خدمات” در زیر “kibana” اضافه کنید.

logstash:
image: docker.elastic.co/logstash/logstash:8.12.1
container_name: logstash
command:
- /bin/bash
- -c
- |
cp /usr/share/logstash/pipeline/logstash.yml /usr/share/logstash/config/logstash.yml
echo "Waiting for Elasticsearch availability";
until curl -s http://elasticsearch:9200 | grep -q "missing authentication credentials"; do sleep 1; done;
echo "Starting logstash";
/usr/share/logstash/bin/logstash -f /usr/share/logstash/pipeline/logstash.conf
environment:
- xpack.monitoring.enabled=false
- ELASTIC_USER=elastic
- ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
- ELASTIC_HOSTS=http://elasticsearch:9200
volumes:
- ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf

راه اندازی Logstash کمی پیچیده تر است. شما به یک فایل پیکربندی اضافی به نام logstash.conf نیاز دارید. Logstash روی چیزی به نام خط لوله کار می کند. این فایلی است که توضیح می دهد Logstash چه کاری باید انجام دهد (لاگ ها از کجا می آیند، چگونه گزارش ها را تجزیه و تحلیل کنیم، آنها را به کجا ارسال کنیم). خط لوله در فایل logstash.conf خواهد بود.

این یکی از اساسی ترین خطوطی مواردی است که می توانید داشته باشید:

input {
file {
path => "/var/log/dpkg.log"
start_position => "beginning"
}
}
filter { }
output {
elasticsearch {
hosts => "${ELASTIC_HOSTS}"
user => "elastic"
password => "${ELASTIC_PASSWORD}"
index => "logstash-%{+YYYY.MM.dd}"
}
stdout { }
}

کاملاً خود توضیحی است. یک فایل را به عنوان ورودی می گیرد (در این مورد /var/log/dpkg.log) و به Elasticsearch و stdout خروجی می دهد.

مثال بالا را در فایل logstash.conf خود قرار دهید.

دایرکتوری elk-stack اکنون باید حاوی فایل های زیر باشد:

elk-stack/
├── .env
├── docker-compose.yaml
└── logstash.conf

اکنون می توانید Logstash را با استفاده از دستور زیر راه اندازی کنید:

docker compose up -d

خروجی:

[+] Running 4/4
:heavy_check_mark: Container logstash Started
:heavy_check_mark: Container setup Started
:heavy_check_mark: Container elasticsearch Running
:heavy_check_mark: Container kibana Running

اکنون می توانید از Kibana به Logstash دسترسی داشته باشید. ابتدا باید یک نمای داده logstash ایجاد کنید.

به صفحه کشف «Analytics» بروید. شما باید چیزی شبیه به این را ببینید:


با کلیک بر روی دکمه “Create Data View” نمای داده خود را ایجاد کنید:


پس از ذخیره نمای داده، باید بتوانید گزارش هایی را که از Logstash می آیند مشاهده کنید:


مرحله 4 – پشته را از بین ببرید

در نهایت، برای متوقف کردن پشته و حذف کانتینرها، دستور زیر را اجرا کنید:

docker compose down

خروجی:

[+] Running 5/5
:heavy_check_mark: Container logstash Removed
:heavy_check_mark: Container elasticsearch Removed
:heavy_check_mark: Container kibana Removed
:heavy_check_mark: Container setup Removed
:heavy_check_mark: Network elk-stack_default Removed

نتیجه

شما باید یک پشته ELK در حال اجرا با Docker Compose داشته باشید. مراحل بعدی اضافه کردن صادرکنندگان گزارش مانند Filebeat یا بررسی اسناد رسمی است.

[تعداد: 1   میانگین: 5/5]
دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

شاید دوست داشته باشید