Kako namestiti Elasticsearch, Logstash in Kibana (ELK Stack) na CentOS/RHEL 7


Če ste oseba, ki je ali je bila v preteklosti zadolžena za pregled in analizo sistemskih dnevnikov v Linuxu, veste, kakšna nočna mora lahko postane ta naloga, če hkrati spremljate več storitev.

V preteklih dneh je bilo treba to nalogo opraviti večinoma ročno, pri čemer je bilo treba vsako vrsto dnevnika obravnavati ločeno. Na srečo kombinacija Elasticsearch, Logstash in Kibana na strežniški strani skupaj s Filebeatom na odjemalski strani naredi nekoč težko nalogo videti kot sprehod po parku danes.

Prve tri komponente tvorijo tako imenovani sklad ELK, katerega glavni namen je zbiranje dnevnikov iz več strežnikov hkrati (znano tudi kot centralizirano beleženje).

Vgrajeni spletni vmesnik na osnovi jave omogoča hiter pregled dnevnikov s hitrim pregledom za lažjo primerjavo in odpravljanje težav. Te odjemalske dnevnike pošlje na osrednji strežnik Filebeat, ki ga lahko opišemo kot agenta za pošiljanje dnevnikov.

Poglejmo, kako se vsi ti deli ujemajo. Naše testno okolje bodo sestavljali naslednji stroji:

Central Server: CentOS 7 (IP address: 192.168.0.29). 2 GB of RAM.
Client #1: CentOS 7 (IP address: 192.168.0.100). 1 GB of RAM.
Client #2: Debian 8 (IP address: 192.168.0.101). 1 GB of RAM.

Upoštevajte, da tukaj navedene vrednosti RAM-a niso strogi predpogoji, temveč priporočene vrednosti za uspešno izvedbo sklada ELK na osrednjem strežniku. Manj RAM-a na odjemalcih sploh ne bo imel velike razlike, če sploh.

Namestitev ELK Stack na strežnik

Začnimo z namestitvijo sklada ELK na strežnik, skupaj s kratko razlago o tem, kaj počne posamezna komponenta:

  1. Elasticsearch shranjuje dnevnike, ki jih pošljejo stranke.
  2. Logstash obdeluje te dnevnike.
  3. Kibana ponuja spletni vmesnik, ki nam bo pomagal pregledati in analizirati dnevnike.

Na osrednji strežnik namestite naslednje pakete. Najprej bomo namestili Java JDK različice 8 (posodobitev 102, zadnja v času pisanja tega članka), ki je odvisna od komponent ELK.

Morda boste najprej želeli preveriti na strani za prenose Java, ali je na voljo novejša posodobitev.

# yum update
# cd /opt
# wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u102-b14/jre-8u102-linux-x64.rpm"
# rpm -Uvh jre-8u102-linux-x64.rpm

Čas je, da preverite, ali je bila namestitev uspešno zaključena:

# java -version

Če želite namestiti najnovejše različice Elasticsearch, Logstash in Kibana, bomo morali ročno ustvariti repozitorije za yum, kot sledi:

1. Uvozite javni ključ GPG Elasticsearch v upravitelj paketov rpm:

# rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch

2. V konfiguracijsko datoteko repozitorija elasticsearch.repo vstavite naslednje vrstice:

[elasticsearch]
name=Elasticsearch repository
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

3. Namestite paket Elasticsearch.

# yum install elasticsearch

Ko je namestitev končana, boste pozvani, da zaženete in omogočite elasticsearch:

4. Zaženite in omogočite storitev.

# systemctl daemon-reload
# systemctl enable elasticsearch
# systemctl start elasticsearch

5. Omogočite promet prek vrat TCP 9200 v požarnem zidu:

# firewall-cmd --add-port=9200/tcp
# firewall-cmd --add-port=9200/tcp --permanent

6. Preverite, ali se Elasticsearch odziva na preproste zahteve prek HTTP:

# curl -X GET http://localhost:9200

Rezultat zgornjega ukaza mora biti podoben:

Prepričajte se, da ste izvedli zgornje korake in nato nadaljevali z Logstash. Ker si Logstash in Kibana delita ključ Elasticsearch GPG, ga pred namestitvijo paketov ni treba znova uvoziti.

7. V konfiguracijsko datoteko logstash.repo vstavite naslednje vrstice:

[logstash]
name=Logstash
baseurl=http://packages.elasticsearch.org/logstash/2.2/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1

8. Namestite paket Logstash:

# yum install logstash

9. V naslednjo vrstico pod odsekom [v3_ca] v /etc/pki/tls/openssl.cnf dodajte potrdilo SSL na podlagi naslova IP strežnika ELK. :

[ v3_ca ]
subjectAltName = IP: 192.168.0.29

10. Ustvarite samopodpisano potrdilo, veljavno 365 dni:

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

11. Konfigurirajte vhodne, izhodne in filtrirne datoteke Logstash:

Vhod: Ustvari /etc/logstash/conf.d/input.conf in vanj vstavi naslednje vrstice. To je potrebno, da se Logstash\"nauči", kako obdelati utripe, ki prihajajo od odjemalcev. Prepričajte se, da se pot do potrdila in ključa ujema s pravimi potmi, kot je opisano v prejšnjem koraku:

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

Izhodna datoteka ( /etc/logstash/conf.d/output.conf ):

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

Datoteka s filtrom ( /etc/logstash/conf.d/filter.conf ). Za preprostost bomo beležili sporočila syslog:

filter {
if [type] == "syslog" {
	grok {
  	match => { "message" => "%{SYSLOGLINE}" }
	}

	date {
match => [ "timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
  }
}

12. Preverite konfiguracijske datoteke Logstash.

# service logstash configtest

13. Zaženite in omogočite logstash:

# systemctl daemon-reload
# systemctl start logstash
# systemctl enable logstash

14. Konfigurirajte požarni zid, da bo Logstash dobil dnevnike od odjemalcev (vrata TCP 5044):

# firewall-cmd --add-port=5044/tcp
# firewall-cmd --add-port=5044/tcp --permanent

14. V konfiguracijsko datoteko repozitorija kibana.repo vstavite naslednje vrstice:

[kibana]
name=Kibana repository
baseurl=http://packages.elastic.co/kibana/4.4/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

15. Namestite paket Kibana:

# yum install kibana

16. Zaženite in omogočite Kibana.

# systemctl daemon-reload
# systemctl start kibana
# systemctl enable kibana

17. Prepričajte se, da lahko dostopate do spletnega vmesnika Kibana iz drugega računalnika (dovolite promet na vratih TCP 5601):

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

18. Zaženite Kibana ( http://192.168.0.29:5601 ), da preverite, ali imate dostop do spletnega vmesnika:

Sem se bomo vrnili po tem, ko bomo na odjemalce namestili in konfigurirali Filebeat.

Namestite Filebeat na odjemalske strežnike

Pokazali vam bomo, kako to storiti za odjemalca # 1 (nato ponovite za odjemalca # 2 in spremenite poti, če je primerno za vašo distribucijo).

1. Kopirajte potrdilo SSL s strežnika odjemalcem:

# scp /etc/pki/tls/certs/logstash-forwarder.crt [email :/etc/pki/tls/certs/

2. Uvozite javni ključ GPG Elasticsearch v upravitelj paketov rpm:

# rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch

3. Ustvarite repozitorij za Filebeat ( /etc/yum.repos.d/filebeat.repo ) v distribucijah, ki temeljijo na CentOS:

[filebeat]
name=Filebeat for ELK clients
baseurl=https://packages.elastic.co/beats/yum/el/$basearch
enabled=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
gpgcheck=1

4. Konfigurirajte vir za namestitev Filebeat-a na Debian in njegove izpeljanke:

# aptitude install apt-transport-https
# echo "deb https://packages.elastic.co/beats/apt stable main" > /etc/apt/sources.list.d/filebeat.list
# aptitude update

5. Namestite paket Filebeat:

# yum install filebeat        [On CentOS and based Distros]
# aptitude install filebeat   [On Debian and its derivatives]

6. Zaženite in omogočite Filebeat:

# systemctl start filebeat
# systemctl enable filebeat

Tukaj je previdna beseda. Konfiguracija Filebeat je shranjena v datoteki YAML, ki zahteva stroge zamike. Pri tem bodite previdni, saj urejate /etc/filebeat/filebeat.yml , kot sledi:

  1. Pod potmi navedite, katere dnevniške datoteke naj bodo\"poslane" na strežnik ELK.
  2. Pod raziskovalci:

input_type: log
document_type: syslog

  1. Pod izhodom:
    1. Odpokličite vrstico, ki se začne z logstash.
    2. Navedite naslov IP strežnika ELK in vrata, kjer Logstash posluša v gostiteljih.
    3. Prepričajte se, da pot do potrdila kaže na dejansko datoteko, ki ste jo ustvarili v zgornjem koraku I (razdelek Logstash).

    Zgornji koraki so prikazani na naslednji sliki:

    Shranite spremembe in nato znova zaženite Filebeat na odjemalcih:

    # systemctl restart filebeat
    

    Ko končamo zgornje korake za stranke, vas prosimo, da nadaljujete.

    Če želite preveriti, ali je dnevnike odjemalcev mogoče uspešno pošiljati in sprejemati, na strežniku ELK zaženite naslednji ukaz:

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

    Izhod bi moral biti podoben (opazite, kako sporočila iz/var/log/messages in/var/log/secure prejemajo od client1 in client2):

    V nasprotnem primeru preverite, ali so v konfiguracijski datoteki Filebeat napake.

    # journalctl -xe
    

    po poskusu ponovnega zagona Filebeat vas bo usmeril v vrstice, ki kršijo smernice.

    Ko preverimo, ali odjemalci pošiljajo dnevnike in jih uspešno prejemajo na strežniku. Prva stvar, ki jo bomo morali storiti v Kibani, je konfiguriranje vzorca indeksa in njegovo nastavitev kot privzeto.

    Kazalo lahko opišete kot polno bazo podatkov v kontekstu relacijske baze podatkov. Uporabili bomo filebeat- * (ali pa lahko uporabite natančnejša merila iskanja, kot je razloženo v uradni dokumentaciji).

    V polje Ime ali vzorec indeksa vnesite filebeat- * in kliknite Ustvari:

    Prosimo, upoštevajte, da boste pozneje lahko vnesli natančnejša merila iskanja. Nato kliknite zvezdo znotraj zelenega pravokotnika, da jo konfigurirate kot privzeti vzorec indeksa:

    Na koncu v meniju Odkrivanje najdete več polj, ki jih lahko dodate v poročilo o vizualizaciji dnevnika. Premaknite miškin kazalec nad njih in kliknite Dodaj:

    Rezultati bodo prikazani v osrednjem delu zaslona, kot je prikazano zgoraj. Lahko se poigrate (dodajte in odstranite polja iz poročila dnevnika), da se seznanite s Kibano.

    Kibana bo privzeto prikazala zapise, ki so bili obdelani v zadnjih 15 minutah (glej zgornji desni kot), vendar lahko to vedenje spremenite tako, da izberete drug časovni okvir:

    Povzetek

    V tem članku smo razložili, kako nastaviti sklad ELK za zbiranje sistemskih dnevnikov, ki sta jih poslala dva odjemalca, stroji CentOS 7 in Debian 8.

    Zdaj se lahko obrnete na uradno dokumentacijo Elasticsearch in najdete več podrobnosti o tem, kako s to nastavitvijo učinkoviteje pregledati in analizirati svoje dnevnike.

    Če imate kakršna koli vprašanja, ne oklevajte in vprašajte. Veselimo se vaših odzivov.