Menginstal ELK Stack di CentOS 8

Selamat datang di demo kami tentang menginstal ELK Stack di CentOS 8.

ELK adalah akronim untuk tiga proyek sumber terbuka: Elasticsearch, Logstash, dan Kibana.Elasticsearch adalah engine pencari dan analitik. Logstash adalah pipa pemrosesan data sisi server yang menyerap data dari berbagai sumber secara bersamaan, mengubahnya, dan kemudian mengirimkannya ke “simpanan” seperti Elasticsearch. Kibanamemungkinkan user memvisualisasikan data dengan bagan dan grafik di Elasticsearch. Beast, pengirim data juga merupakan bagian dari stack.

Menginstal ELK Stack di CentOS 8

Urutan pemasangan komponen Elastic Stack sangat penting. Biasanya menerima pesananElasticsearch > Kibana > Logstash > Beats. Perhatikan juga bahwa semua komponen harus dari versi yang sama.

Untuk menginstal komponen Elastic Stack pada sistem CentOS 8, Anda dapat memilih untuk membuat repo Elastic RPM atau menginstal setiap komponen menggunakan biner RPM masing-masing.

Membuat Repo RPM Stack Elastis di CentOS 8

Elastic Stack versi 7.x repo dapat dibuat dengan menjalankan perintah di bawah ini.

cat > /etc/yum.repos.d/elasticstack.repo << EOL [elasticstack] name=Elastic repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md EOL 

Jalankan pembaruan paket sistem.

dnf update

Instal Elasticsearch di CentOS 8

Anda dapat menginstal Elasticsearch di CentOS 8 dari repo Elastic RPM yang dibuat atau hanya dari menggunakan biner RPM.

dnf install elasticsearch

Atau, Anda dapat menginstal ES menggunakan biner RPM, versi 7.5.2 adalah stabil terbaru pada tulisan ini.

VERSION=7.5.2 dnf install https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-$VERSION-x86_64.rpm

Mengonfigurasi Elasticsearch

Di luar kotak, Elasticsearch bekerja dengan baik dengan opsi konfigurasi default. Dalam demo ini, kami akan membuat beberapa perubahan sesuai dengan Konfigurasi Penting Elasticsearch.

Setel alamat pengikatan Elasticsearch ke IP tertentu jika Anda perlu mengaktifkan akses jarak jauh baik dari Kibana atau Logstash atau dari Beats. Replace the IP, 192.168.56.154, with your appropriate server IP address.

sed -i 's/#network.host: 192.168.0.1/network.host: 192.168.56.154/' /etc/elasticsearch/elasticsearch.yml

Anda juga dapat membiarkan pengaturan default hanya mengizinkan akses lokal ke Elasticsearch.

Saat dikonfigurasi untuk mendengarkan pada interface non-loopback, Elasticsearch mengharapkan untuk bergabung dengan sebuah cluster. Tetapi karena kami menyiapkan Elastic Stack node tunggal, Anda perlu menentukan dalam konfigurasi ES bahwa ini adalah setup node tunggal, dengan memasukkan baris,discovery.type: single-node, di bawah opsi konfigurasi penemuan. Namun, Anda dapat melewati ini jika ES Anda mendengarkan pada interface loopback.

vim /etc/elasticsearch/elasticsearch.yml
# --------------------------------- Discovery ---------------------------------- # # Pass an initial list of hosts to perform discovery when this node is started: # default list of hosts is ["127.0.0.1", "[::1]"] # #discovery.seed_hosts: ["host1", "host2"] # # Bootstrap the cluster using an initial set of master-eligible nodes: # #cluster.initial_master_nodes: ["node-1", "node-2"] # Single Node Discovery discovery.type: single-node

Selanjutnya, konfigurasikan ukuran stack JVM ke tidak lebih dari setengah ukuran memori Anda. Dalam hal ini, server pengujian kami memiliki RAM 2G dan ukuran stack diatur ke 512M untuk ukuran maksimum dan minimum.

vim /etc/elasticsearch/jvm.options
... ################################################################ # Xms represents the initial size of total heap space # Xmx represents the maximum size of total heap space -Xms512m -Xmx512m...

Mulai dan aktifkan ES untuk berjalan pada boot sistem.

systemctl daemon-reload systemctl enable --now elasticsearch

Verifikasi bahwa Elasticsearch berjalan seperti yang diharapkan.

curl -XGET 192.168.56.154:9200
{ "name" : "elastic.kifarunix-demo.com", "cluster_name" : "elasticsearch", "cluster_uuid" : "iyslQrEdTISVdVGsDNDvlA", "version" : { "number" : "7.5.2", "build_flavor" : "default", "build_type" : "rpm", "build_hash" : "8bec50e1e0ad29dad5653712cf3bb580cd1afcdf", "build_date" : "2020-01-15T12:11:52.313576Z", "build_snapshot" : false, "lucene_version" : "8.3.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" } 

Instal Kibana di CentOS 8

Komponen Elastic Stack selanjutnya yang harus diinstal adalah Kabana. Karena kami telah membuat repo Elastic Stack, Anda cukup menjalankan perintah di bawah ini untuk menginstalnya.

yum install kibana

Mengonfigurasi Kibana

Untuk memulainya, Anda perlu mengonfigurasi Kibana untuk mengizinkan akses jarak jauh. Biasanya hanya mengizinkan akses lokal pada port 5601/tcp. Oleh karena itu, buka file konfigurasi Kibana untuk mengedit dan batalkan komentar dan ubah baris berikut;

vim /etc/kibana/kibana.yml
... #server.port: 5601... # To allow connections from remote users, set this parameter to a non-loopback address. #server.host: "localhost"... # URLs of the Elasticsearch instances to use for all your queries. #elasticsearch.hosts: ["http://localhost:9200"]

Sehingga tampilannya seperti gambar di bawah ini:

Replace the IP addresses of Kibana and Elasticsearch accordingly. Note that in this demo, All Elastic Stack components are running on the same host.

... server.port: 5601... # To allow connections from remote users, set this parameter to a non-loopback address. server.host: "192.168.56.154"... # URLs of the Elasticsearch instances to use for all your queries. elasticsearch.hosts: ["http://192.168.56.154:9200"]

Mulai dan aktifkan Kibana untuk berjalan pada boot sistem.

systemctl enable --now kibana

Buka Kibana Port di FirewallD, jika sedang berjalan;

firewall-cmd --add-port=5601/tcp --permanent
firewall-cmd --reload

Mengakses Interface Kibana

Anda sekarang dapat mengakses Kibana dari browser Anda dengan menggunakan URL, http://kibana-server-hostname-OR-IP:5601.

Pada interface web Kibana, Anda dapat memilih untuk mencoba data sampel karena kami belum memiliki data yang dikirim ke Elasticsearch. Anda juga dapat memilih untuk menjelajahi data Anda sendiri, tentu saja setelah mengirim data ke Es.

Instal Logstash di CentOS 8

Logstash adalah komponen dari Elastic Stack yang melakukan pemrosesan lebih lanjut dari data peristiwa sebelum mengirimkannya ke penyimpanan data Elasticsearch. Misalnya, Anda dapat mengembangkan regex khusus, pola grok untuk mengekstrak bidang tertentu dari data peristiwa.

Dimungkinkan juga untuk langsung mengirim data ke Elasticsearch alih-alih meneruskannya melalui Logstash.

Untuk menginstal Logstash di CentOS 8.

yum install logstash

Sebagian besar, Logstash menginstal dengan Java/JDK yang dibundel. Tetapi jika karena alasan tertentu Logstash mengharuskan Java diinstal, maka Anda dapat menginstal Java 8 menggunakan perintah di bawah ini, jika didukung.

yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel

Menguji Logstash

Setelah instalasi Logstash selesai, Anda dapat memverifikasi bahwa itu siap untuk memproses data peristiwa dengan menjalankan perintah pipa das
ar seperti yang ditunjukkan di bawah ini;

cd /usr/share/logstash/bin/logstash -e 'input { stdin { } } output { stdout {} }'

Tekan ENTER untuk menjalankan perintah dan tunggu Pipeline siap menerima data input.

... [INFO ] 2020-02-09 08:37:38.732 [[main]-pipeline-manager] javapipeline - Pipeline started {"pipeline.id"=>"main"} [INFO ] 2020-02-09 08:37:38.818 [Agent thread] agent - Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]} stdin plugin is now waiting for input: [INFO ] 2020-02-09 08:37:39.395 [Api Webserver] agent - Successfully started Logstash API endpoint {:port=>9600}

Ketik string apa saja, misalnya, testing Logstash pipeline dan tekan ENTER.

Logstash memproses data input dan menambahkan informasi stempel waktu dan alamat host ke pesan.

{ "host" => "elastic.kifarunix-demo.com", "message" => "testing Logstash pipeline", "@timestamp" => 2020-02-09T05:42:17.666Z, "@version" => "1" }

Anda dapat menghentikan pipa Logstash dengan menekan Ctrl+D.

Mengonfigurasi Logstash untuk Mengumpulkan dan Mengirim Acara ke Elasticsearch

Logstash sekarang siap menerima dan memproses data. Dalam demo ini, kita akan mempelajari cara mengonfigurasi pipa Logstash untuk mengumpulkan peristiwa dari sistem lokal.

Pipa logstash terdiri dari tiga bagian;

  • itu input: mengumpulkan data dari berbagai sumber
  • itu filter: ( Opsional ) melakukan pemrosesan lebih lanjut pada data.
  • itu output: menyimpan data yang diterima ke dalam datastore tujuan seperti Elasticsearch.

Konfigurasikan plugin Masukan Logstash

Untuk mengumpulkan event dari sistem lokal, kita akan menggunakan plugin input file. Ada beberapa plugin input yang dapat Anda gunakan, periksa di Logstash Input Plugins.

Dalam demo ini, kami menggunakan file konfigurasi tunggal untuk mendefinisikan komponen pipeline; masukan, filter, keluaran.

vim /etc/logstash/conf.d/local-ssh-events.conf
## Collect System Authentication events from /var/log/secure input { file { path => "/var/log/secure" type => "ssh_auth" }

Konfigurasi plugin Filter Logstash

Konfigurasikan filter Logstash untuk mengekstrak hanya peristiwa yang relevan seperti baris di bawah ini dari /var/log/securefile.

Mar 28 14:45:12 ssp sshd[10125]: Accepted password for johndoe from 192.168.2.106 port 37292 ssh2 Mar 28 14:45:37 ssp sshd[10199]: Failed password for johndoe from 192.168.2.106 port 37304 ssh2 Mar 28 14:45:59 ssp sshd[10202]: Failed password for invalid user koromicha from 192.168.2.106 port 37310 ssh2 Mar 28 14:46:33 ssp sshd[10230]: Accepted publickey for janedoe from 192.168.2.106 port 37330 ssh2: RSA SHA256:3soC1YLO/OVyp0+aHILa/iaBEBdQBT4L7QrwNheIVCM

Kami menggunakan Filter Grok untuk memproses ekstrak baris-baris ini dari file log;

vim /etc/logstash/conf.d/local-ssh-events.conf
## Collect System Authentication events from /var/log/secure input { file { path => "/var/log/secure" type => "ssh_auth" } } ## Design a grok filter to extract useful SSH authentication events. filter { if [type] == "ssh_auth" { grok { match => { "message" => "%{SYSLOGTIMESTAMP:timestamp}s+%{IPORHOST:dst_host}s+%{WORD:syslog_program}[d+]:s+(?.+)s+fors+%{USER:auth_user}s+froms+%{SYSLOGHOST:src_host}.*" } add_field => { "activity" => "SSH Logins" } add_tag => "linux_auth" } grok { match => { "message" => "%{SYSLOGTIMESTAMP:timestamp}s+%{IPORHOST:dst_host}s+%{WORD:syslog_program}[d+]:s+(?.+)s+fors+invalids+users%{USER:auth_user_nonexist}s+froms+%{SYSLOGHOST:src_host}.*" } add_field => { "activity" => "SSH Logins" } add_tag => "linux_auth" } } # Drop any message that doesn't contain the keywords below if [message] !~ /(Failed password|Accepted password|Accepted publickey|for invalid)/ { drop { } } } 

Note the grok filter used above will just capture password based and public key SSH logins. Anda dapat menggunakan Grok Debugger di Kibana untuk menguji pola Anda, Dev-tools > Grok Debugger.

Perhatikan juga filternya;

if [message] !~ /(Failed password|Accepted password|Accepted publickey|for invalid)/ { drop { }

Untuk tujuan demo dan hanya untuk menangkap log yang kita perlukan untuk demo ini, baris tersebut pada dasarnya menjatuhkan log peristiwa lain yang tidak mengandung kata kunci yang ditentukan di atas.

Konfigurasikan Plugin Keluaran Logstash

Selanjutnya, kita akan mengirimkan data yang sudah diproses ke Elasticsearch yang berjalan di localhost.

Tentukan keluaran Elasticsearch.

vim /etc/logstash/conf.d/local-ssh-events.conf
## Collect System Authentication events from /var/log/secure input { file { path => "/var/log/secure" type => "ssh_auth" } } filter { if [type] == "ssh_auth" { grok { match => { "message" => "%{SYSLOGTIMESTAMP:timestamp}s+%{IPORHOST:dst_host}s+%{WORD:syslog_program}[d+]:s+(?.+)s+fors+%{USER:auth_user}s+froms+%{SYSLOGHOST:src_host}.*" } add_field => { "activity" => "SSH Logins" } add_tag => "linux_auth" } grok { match => { "message" => "%{SYSLOGTIMESTAMP:timestamp}s+%{IPORHOST:dst_host}s+%{WORD:syslog_program}[d+]:s+(?.+)s+fors+invalids+users%{USER:auth_user_nonexist}s+froms+%{SYSLOGHOST:src_host}.*" } add_field => { "activity" => "SSH Logins" } add_tag => "linux_auth" } } # Drop any message that doesn't contain the keywords below if [message] !~ /(Failed password|Accepted password|Accepted publickey|for invalid)/ { drop { } } } ## Send data to Elasticsearch on the localhost output { elasticsearch { hosts => ["192.168.56.154:9200"] manage_template => false index => "ssh_auth-%{+YYYY.MM}" } } 

Pastikan Logstash dapat membaca file yang sedang dipantau, /var/log/secure. Secara default, file dimiliki oleh root. Oleh karena itu, agar logstash dapat membaca file, pertama-tama ubah kepemilikan grup menjadi adm, tambahkan logstash ke grup adm, dan tetapkan akses baca ke logstash.

chown :adm /var/log/secure
usermod -aG adm logstash
chmod g+r /var/log/secure

Verifikasi Filter Logstash Grok

Sebelum Anda dapat mengirim data ke Elasticsearch, Anda perlu memverifikasi filter grok. Ikuti panduan kami di bawah ini untuk mempelajari cara men-debug pola grok.

Cara Men-debug Filter Logstash Grok

Verifikasi Konfigurasi Logstash

Setelah konfigurasi, jalankan perintah di bawah ini untuk memverifikasi konfigurasi Logstash sebelum Anda dapat memulainya.

sudo -u logstash /usr/share/logstash/bin/logstash --path.settings /etc/logstash -t
Sending Logstash logs to /var/log/logstash which is now configured via log4j2.properties [2020-02-09T00:43:10,110][INFO ][org.reflections.Reflections] Reflections took 92 ms to scan 1 urls, producing 20 keys and 40 values Configuration OK...

Configuration OK menegaskan bahwa tidak ada error dalam file konfigurasi.

Jika Anda perlu men-debug file konfigurasi pipa Logstash tertentu, Anda dapat menjalankan perintah di bawah ini. Ganti jalur ke file konfigurasi dengan jalur file Anda. Pastikan logstash tidak berjalan saat menjalankan perintah ini.

sudo -u logstash /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/local-ssh-events.conf --path.settings /etc/logstash/

Menjalankan Logstash

Anda dapat memulai dan mengaktifkan Logstash untuk berjalan pada boot sistem.

systemctl enable --now logstash

Jika karena beberapa alasan aneh Logstash tidak menghasilkan file service systemd dengan gejala:(Failed to restart logstash.service: Unit logstash.service not found.)Cukup buat file service dengan menjalankan perintah;

/usr/share/logstash/bin/system-install /etc/logstash/startup.options systemd

Anda dapat memulai dan mengaktifkannya untuk berjalan saat boot seperti yang ditunjukkan di atas.

Untuk memeriksa statusnya;

systemctl status logstash
● logstash.service - logstash Loaded: loaded (/etc/systemd/system/logstash.service; enabled; vendor preset: disabled) Active: active (running) since Sun 2020-02-09 14:52:12 EAT; 1min 4s ago Main PID: 6699 (java) Tasks: 32 (limit: 11500) Memory: 474.9M CGroup: /system.slice/logstash.service └─6699 /bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -Djava.awt.>...

Memvisualisasikan Data di Kibana

Untuk memvisualisasikan dan menjelajahi data di Kibana, Anda perlu membuat pola indeks untuk mengambil data dari Elasticsearch. Dalam demo ini, pola indeks kami adalahssh_auth-*, seperti yang didefinisikan pada plugin keluaran Logstash Elasticsearch, index => “ssh_auth-%{+YYYY.MM}”.

Di Dasbor Kibana, Navigasikan ke Management > Kibana > Index Patterns > Create index pattern. Pola indeks bisa cocok dengan nama indeks tunggal, atau menyertakan karakter pengganti (*) untuk mencocokkan beberapa indeks.

Klik Berikutnya dan pilih @timestamp sebagai filter waktu dan klik Create index pattern.

Setelah itu, klik Discover tabdi panel kiri untuk melihat data. Perluas rentang waktu dengan tepat.

Anda juga dapat memilih bidang yang ingin Anda lihat berdasarkan pola grok Anda. Pada tangkapan layar di bawah, rentang waktu adalah 3 menit terakhir.

Dan itu saja tentang menginstal ELK Stack di CentOS 8. Pastikan untuk menyesuaikan pola Grok Anda sesuai keinginan Anda jika menggunakan Logstash sebagai engine pengolah data Anda.

Referensi;

Memasang Stack Elastis

Tutorial Terkait

Instal Elastic Stack 7 di Fedora 30/Fedora 29/CentOS 7

Instal dan Konfigurasi Filebeat 7 di Ubuntu 18.04/Debian 9.8

Instal Elastic Stack 7 di Ubuntu 18.04/Debian 9.8