Terapkan Cluster Stack Elastis Node Tunggal pada Kontainer Docker

Dalam tutorial ini, kita akan mempelajari cara men-deploy satu node Elastic Stack cluster pada container Docker. Elastic Stack, evolusi berikutnya dari ELK stack yang terkenal adalah sekelompok proyek perangkat lunak open source: Elasticsearch, Logstash, dan Kibana and Beats. Elasticsearch adalah engine pencari dan analitik, Logstash adalah saluran pemrosesan data sisi server yang menyerap data dari berbagai sumber secara bersamaan, mengubahnya, dan kemudian mengirimkannya ke “simpanan” seperti Elasticsearch, Kibana memungkinkan user memvisualisasikan data dengan bagan dan grafik di Elasticsearch dan Beats adalah pengirim data. Mereka mengirimkan log sistem, jaringan, data infrastruktur, dll ke Logstash untuk diproses lebih lanjut atau Elasticsearch untuk pengindeksan.

Oleh karena itu, dalam tutorial ini, kita akan belajar cara men-deploy Elastic Stack menggunakan penulisan Docker dan Docker.

 Docker  adalah platform yang memungkinkan pengembang dan administrator sistem untuk build, run, and share aplikasi dengan kontainer. Ini menyediakan alat interface command line seperti dockerdan docker-composeyang digunakan untuk mengelola wadah Docker. Sementara docker adalah cli Docker untuk mengelola kontainer Docker tunggal, komposisi docker di sisi lain digunakan untuk menjalankan dan mengelola beberapa kontainer Docker.

Terapkan Cluster Stack Elastis Node Tunggal pada Kontainer Docker

Prasyarat

Sebelum Anda dapat mulai men-deploy kluster Elastic Stack tunggal pada container Docker, ada beberapa prasyarat yang harus dipenuhi oleh host Anda.

Instal Mesin Docker

Tergantung pada distribusi sistem host Anda, Anda perlu menginstal engine Docker. Anda dapat mengikuti tautan di bawah ini untuk menginstal Docker Engine di Ubuntu/Debian/CentOS 8.

Instal dan Gunakan Docker di Debian 10 Buster

Instal Docker CE di Ubuntu 20.04

Instal dan Gunakan Docker CE di CentOS 8

Memeriksa versi Docker yang Terinstal;

docker version
Client: Docker Engine - Community Version: 19.03.12 API version: 1.40 Go version: go1.13.10 Git commit: 48a66213fe Built: Mon Jun 22 15:45:44 2020 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.12 API version: 1.40 (minimum version 1.12) Go version: go1.13.10 Git commit: 48a66213fe Built: Mon Jun 22 15:44:15 2020 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.2.13 GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429 runc: Version: 1.0.0-rc10 GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd docker-init: Version: 0.18.0 GitCommit: fec3683

Instal Docker Compose

Agar penulisan Docker berfungsi, pastikan Anda telah menginstal Mesin Docker. Anda dapat mengikuti tautan di atas untuk menginstal Docker Engine.

Periksa versi rilis stabil Docker Compose saat ini di halaman rilis Github mereka. Pada tulisan ini, Docker Compose versi 1.26.2 adalah rilis stabil saat ini.

Download dan instal Docker Compose di sistem Linux. Pastikan untuk menggantiVER variabel di bawah ini dengan nilai versi rilis stabil penulisan Docker saat ini.

VER=1.26.2
sudo curl -L "https://github.com/docker/compose/releases/download/$VER/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Ini mengdownload alat pembuat buruh pelabuhan ke /usr/local/bindirektori.

Jadikan biner penulisan Docker dapat dieksekusi;

chmod +x /usr/local/bin/docker-compose

Anda sekarang harus dapat menggunakan Docker compose ( docker-compose) pada CLI.

Periksa versi penulisan Docker yang diinstal untuk mengonfirmasi bahwa itu berfungsi seperti yang diharapkan.

docker-compose version
docker-compose version 1.26.2, build eefe0d31 docker-py version: 4.2.2 CPython version: 3.7.7 OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019

Alokasikan RAM Docker Engine yang Cukup

Cukup digunakan relatif di sini. Tetapi pastikan bahwa host Docker Engine Anda memiliki setidaknya 4GB RAM yang dialokasikan.

free -h
 total used free shared buff/cache available Mem: 3.8Gi 236Mi 2.7Gi 1.0Mi 894Mi 3.4Gi Swap: 2.0Gi 0B 2.0Gi

Note: Kami menjalankan penulisan Docker dan Docker sebagai user non-root. Untuk dapat melakukan ini, pastikan Anda menambahkan user standar Anda ke dockergrup.

Misalnya, saya menjalankan pengaturan ini sebagai user koromicha. Jadi, tambahkan user ke grup buruh pelabuhan. Ganti nama user yang sesuai.

usermod -aG docker koromcha

Keluar dan masuk lagi sebagai user yang ditambahkan ke grup buruh pelabuhan dan Anda harus dapat menjalankan alat CLI pembuat buruh pelabuhan dan buruh pelabuhan.

Deploy Cluster Stack Elastis Node Tunggal Menggunakan Docker Compose

Dalam penyiapan ini, kami akan menerapkan cluster Elastic Stack node tunggal dengan ketiga komponen, container Elasticsearch, Logstash, dan Kibana yang berjalan di host yang sama dengan container Docker.

Untuk memulai, buat direktori induk dari mana Anda akan membangun stack Anda.

mkdir $HOME/elastic-docker

Buat file Tulis Docker untuk Menyebarkan Elastis Stack

Menurut Overview of the Docker Compose, “ Docker compose adalah alat untuk mendefinisikan dan menjalankan aplikasi Docker multi-kontainer. Dengan Compose, Anda menggunakan file YAML untuk mengonfigurasi service aplikasi Anda. Kemudian, dengan satu perintah, Anda membuat dan memulai semua service dari konfigurasi Anda “.

“ Menggunakan Compose pada dasarnya adalah proses tiga langkah:

  1. Tentukan lingkungan aplikasi Anda dengan a  Dockerfile sehingga dapat direproduksi di mana saja.
  2. Tentukan service yang membentuk aplikasi Anda  docker-compose.yml sehingga dapat dijalankan bersama di lingkungan yang terisolasi.
  3. Jalankan  docker-compose up dan Tulis memulai dan menjalankan seluruh aplikasi Anda “

Dalam pengaturan ini, kami akan membangun semuanya menggunakan file Docker Compose.

Setup file Docker Compose untuk Elastic Stack

Sekarang kita telah menentukan cara menarik gambar Docker, sekarang saatnya kita membuat file Docker Compose untuk penerapan kita.

vim $HOME/elastic-docker/docker-compose.yml
version: '3.8' services: elasticsearch: container_name: kifarunix-demo-es image: docker.elastic.co/elasticsearch/elasticsearch:7.8.1 environment: - node.name=kifarunix-demo-es - cluster.name=es-docker-cluster - discovery.type=single-node - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - es-data:/usr/share/elasticsearch/data ports: - 9200:9200 networks: - elastic kibana: image: docker.elastic.co/kibana/kibana:7.8.1 container_name: kifarunix-demo-kibana environment: ELASTICSEARCH_URL: http://kifarunix-demo-es:9200 ELASTICSEARCH_HOSTS: http://kifarunix-demo-es:9200 ports: - 5601:5601 networks: - elastic logstash: image: docker.elastic.co/logstash/logstash:7.8.1 container_name: kifarunix-demo-ls ports: - "5044:5044" volumes: -./logstash/conf.d/:/usr/share/logstash/pipeline/:ro networks: - elastic volumes: es-data: driver: local networks: elastic: driver: bridge

Untuk deskripsi lengkap tentang semua opsi konfigurasi penulisan Docker, lihat halaman referensi penulisan Docker.

Tentukan Pipa Pemrosesan Data Logstash

Dalam pengaturan ini, kami akan mengonfigurasi Logstash untuk menerima data peristiwa dari Beats (khususnya Filebeat) untuk diproses lebih lanjut dan disimpan ke engine analitik pencarian, Elasticsearch.

Perhatikan bahwa Logstash hanya diperlukan jika Anda perlu menerapkan pemrosesan lebih lanjut ke data peristiwa Anda. Misalnya, mengekstrak bidang khusus dari data pe
ristiwa, mengubah data peristiwa, dll. Jika tidak, Anda dapat mendorong data langsung ke Elasticsearch dari Beats.

Dalam pengaturan ini, kami akan menggunakan contoh pipa pemrosesan Logstash untuk log audit ModSecurity;

mkdir $HOME/elastic-docker/logstash/conf.d
vim $HOME/elastic-docker/logstash/conf.d/modsec.conf
input { beats { port => 5044 } } filter { # Extract event time, log severity level, source of attack (client), and the alert message. grok { match => { "message" => "(?<event_time>%{MONTH}s%{MONTHDAY}s%{TIME}s%{YEAR})] [:%{LOGLEVEL:log_level}.*clients%{IPORHOST:src_ip}:d+]s(?<alert_message>.*)" } } # Extract Rules File from Alert Message grok { match => { "alert_message" => "(?<rulesfile>[file "(/.+.conf)"])" } }	 grok { match => { "rulesfile" => "(?<rules_file>/.+.conf)" } }	 # Extract Attack Type from Rules File grok { match => { "rulesfile" => "(?<attack_type>[A-Z]+-[A-Z][^.]+)" } }	 # Extract Rule ID from Alert Message grok { match => { "alert_message" => "(?<ruleid>[id "(d+)"])" } }	 grok { match => { "ruleid" => "(?<rule_id>d+)" } } # Extract Attack Message (msg) from Alert Message 	 grok { match => { "alert_message" => "(?<msg>[msg S(.*?)"])" } }	 grok { match => { "msg" => "(?<alert_msg>"(.*?)")" } } # Extract the User/Scanner Agent from Alert Message	 grok { match => { "alert_message" => "(?<scanner>User-Agent' SValue: `(.*?)')" } }	 grok { match => { "scanner" => "(?<user_agent>:(.*?)')" } }	 grok { match => { "alert_message" => "(?<agent>User-Agent: (.*?)')" } }	 grok { match => { "agent" => "(?<user_agent>: (.*?)')" } }	 # Extract the Target Host grok { match => { "alert_message" => "(hostname "%{IPORHOST:dst_host})" } }	 # Extract the Request URI grok { match => { "alert_message" => "(uri "%{URIPATH:request_uri})" } } grok { match => { "alert_message" => "(?<ref>referer: (.*))" } }	 grok { match => { "ref" => "(?<referer> (.*))" } } mutate { # Remove unnecessary characters from the fields. gsub => [ "alert_msg", "["]", "", "user_agent", "[:"'`]", "", "user_agent", "^s*", "", "referer", "^s*", "" ] # Remove the Unnecessary fields so we can only remain with # General message, rules_file, attack_type, rule_id, alert_msg, user_agent, hostname (being attacked), Request URI and Referer. remove_field => [ "alert_message", "rulesfile", "ruleid", "msg", "scanner", "agent", "ref" ] }	 } output { elasticsearch { hosts => ["kifarunix-demo-es:9200"] } }

Periksa Sintaks file Tulis Docker;

docker-compose -f docker-compose.yml config

Atau jika Anda berada di direktori yang sama tempat docker-compose.ymlfile berada, jalankan saja;

docker-compose config

Deploy Elastic Stack Menggunakan file Docker Compose

Semuanya sekarang sudah diatur dan kami siap untuk membangun dan memulai instance Elastic Stack kami menggunakan docker-compose upperintah.

Arahkan ke direktori utama tempat file penulisan Docker berada. Dalam pengaturan saya, direktorinya adalah $HOME/elastic-docker.

cd $HOME/elastic-docker
docker-compose up

Perintah membuat dan memulai kontainer di latar depan.

keluaran sampel;

... kifarunix-demo-es | {"type": "server", "timestamp": "2020-08-10T19:35:00,516Z", "level": "INFO", "component": "o.e.c.m.MetadataIndexTemplateService", "cluster.name": "es-docker-cluster", "node.name": "kifarunix-demo-es", "message": "adding template [.monitoring-alerts-7] for index patterns [.monitoring-alerts-7]", "cluster.uuid": "DBy4Mwk-TB2Jum_AWDY0jw", "node.id": "4Fb4-CZ0QhG2KcZL79-8cw" } kifarunix-demo-ls | [2020-08-10T19:35:00,590][INFO ][logstash.inputs.beats ][main] Beats inputs: Starting input listener {:address=>"0.0.0.0:5044"} kifarunix-demo-ls | [2020-08-10T19:35:00,606][INFO ][logstash.javapipeline ][main] Pipeline started {"pipeline.id"=>"main"} kifarunix-demo-ls | [2020-08-10T19:35:00,672][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]} kifarunix-demo-ls | [2020-08-10T19:35:00,730][INFO ][org.logstash.beats.Server][main][ee92a68a4dc1b148e25ac3c899680db31f95563138e922a364e18e3dc052d084] Starting server on port: 5044 kifarunix-demo-ls | [2020-08-10T19:35:00,947][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}...... kifarunix-demo-kibana | {"type":"log","@timestamp":"2020-08-10T19:36:49Z","tags":["status","plugin:[email protected]","info"],"pid":8,"state":"green","message":"Status changed from uninitialized to green - Ready","prevState":"uninitialized","prevMsg":"uninitialized"} kifarunix-demo-kibana | {"type":"log","@timestamp":"2020-08-10T19:36:49Z","tags":["listening","info"],"pid":8,"message":"Server running at http://0:5601"} kifarunix-demo-es | {"type": "server", "timestamp": "2020-08-10T19:36:49,957Z", "level": "INFO", "component": "o.e.c.m.MetadataMappingService", "cluster.name": "es-docker-cluster", "node.name": "kifarunix-demo-es", "message": "[.kibana_task_manager_1/a3B8lwzxQjiNHtFEAExOaQ] update_mapping [_doc]", "cluster.uuid": "DBy4Mwk-TB2Jum_AWDY0jw", "node.id": "4Fb4-CZ0QhG2KcZL79-8cw" } kifarunix-demo-kibana | {"type":"log","@timestamp":"2020-08-10T19:36:50Z","tags":["info","http","server","Kibana"],"pid":8,"message":"http server running at http://0:5601"}...

Saat Anda menghentikan docker-compose upperintah, semua wadah dihentikan.

Dari konsol lain, Anda dapat memeriksa container yang sedang berjalan. Perhatikan bahwa Anda dapat docker-composememerintahkan user seperti yang Anda dockerperintahkan.

docker-compose ps
 Name Command State Ports ------------------------------------------------------------------------------------------------- kifarunix-demo-es /tini -- /usr/local/bin/do... Up 0.0.0.0:9200->9200/tcp, 9300/tcp kifarunix-demo-kibana /usr/local/bin/dumb-init -... Up 0.0.0.0:5601->5601/tcp kifarunix-demo-ls /usr/local/bin/docker-entr... Up 0.0.0.0:5044->5044/tcp, 9600/tcp

Dari output, Anda dapat melihat bahwa container sedang berjalan dan portnya terbuka di host (alamat IP apa pun) untuk memungkinkan akses eksternal.

Anda dapat menjalankan wadah stack di latar belakang menggunakan -dopsi. Anda dapat menekan ctrl+cuntuk membatalkan perintah dan menghentikan wadah.

Untuk meluncurkan kembali wadah di latar belakang

docker-compose up -d
Starting kifarunix-demo-ls... done Starting kifarunix-demo-es... done Starting kifarunix-demo-kibana... done

Anda juga dapat membuat daftar wadah yang sedang berjalan menggunakan perintah buruh pelabuhan;

docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 130eec8df661 docker.elastic.co/kibana/kibana:7.8.1 "/usr/local/bin/dumb…" 38 minutes ago Up About a minute 0.0.0.0:5601->5601/tcp kifarunix-demo-kibana 6648df61c44b docker.elastic.co/logstash/logstash:7.8.1 "/usr/local/bin/dock…" 41 minutes ago Up About a minute 0.0.0.0:5044->5044/tcp, 9600/tcp kifarunix-demo-ls db9936abbee2 docker.elastic.co/elasticsearch/elasticsearch:7.8.1 "/tini -- /usr/local…" 41 minutes ago Up About a minute 0.0.0.0:9200->9200/tcp, 9300/tcp kifarunix-demo-es

Untuk menemukan detail setiap wadah, gunakan docker inspect <container-name>perintah. Sebagai contoh

docker inspect kifarunix-demo-es

Untuk mendapatkan log wadah, gunakan perintah docker logs [OPTIONS] CONTAINER. Misalnya, untuk mendapatkan log kontainer Elasticsearch;

docker logs kifarunix-demo-es

Jika Anda perlu memeriksa jumlah log tertentu, Anda dapat menggunakan tailopsi. Misalnya untuk mendapatkan 50 baris log terakhir;< /p>

docker logs --tail 50 kifarunix-demo-es

Mengakses Wadah Kibana dari Browser

Setelah stack aktif dan berjalan, Anda dapat mengakses Kibana secara eksternal menggunakan alamat IP host dan port tempat ia terbuka. Dalam pengaturan kami, port kontainer Kibana 5601 diekspos pada port yang sama di host;

docker port kifarunix-demo-kibana
5601/tcp -> 0.0.0.0:5601

Ini berarti Anda dapat mengakses port container Kibana melalui interface apa pun pada host, port 5601. Demikian pula, Anda dapat memeriksa eksposur port container menggunakan perintah di atas.

Oleh karena itu, Anda dapat mengakses Kibana menggunakan alamat host Container Anda, http://<IP-Address>:5601.

Terapkan Cluster Stack Elastis Node Tunggal pada Kontainer Docker

Seperti yang Anda lihat, kami belum memiliki data apa pun di stack kami.

Mengirim data ke Elastic Stack

Karena kami mengonfigurasi Logstash kami menerima data acara dari Beats, kami akan mengonfigurasi Filebeat untuk meneruskan acara.

Kami telah membahas cara menginstal dan mengonfigurasi Filebeat untuk meneruskan data acara di panduan kami sebelumnya;

Instal dan Konfigurasi Filebeat di CentOS 8

Instal Filebeat di Fedora 30/Fedora 29/CentOS 7

Instal dan Konfigurasi Filebeat 7 di Ubuntu 18.04/Debian 9.8

Setelah Anda meneruskan data ke wadah Logstash Anda, hal berikutnya yang perlu Anda lakukan adalah membuat indeks Kibana.

Buka menu, lalu buka Stack Management > Kibana > Index Pola.

Setelah selesai, menuju ke menu Discover untuk melihat data Anda. Anda sekarang seharusnya dapat melihat bidang khusus Logstash Anda terisi.

Terapkan Cluster Stack Elastis Node Tunggal pada Kontainer Docker

Itu menandai akhir dari tutorial kami tentang cara men-deploy satu node Elastic Stack cluster di Docker Containers.

Referensi

Menjalankan Elastis Stack di Docker

Tutorial Terkait Lainnya

Memproses dan Memvisualisasikan Log ModSecurity di ELK Stack

Buat Dasbor Visualisasi Kibana untuk Log ModSecurity

Terapkan All-In-One OpenStack dengan Kolla-Ansible di Ubuntu 18.04

Instal dan Jalankan MariaDB sebagai Docker Container

Related Posts

© 2022 Tekno Sridianti