Zoeken op website

Hoe Elasticsearch, Logstash en Kibana (ELK Stack) op CentOS/RHEL 7 te installeren


Als je iemand bent of in het verleden verantwoordelijk bent geweest voor het inspecteren en analyseren van systeemlogboeken in Linux, weet je wat een nachtmerrie die taak kan worden als meerdere services tegelijkertijd worden gemonitord.

Vroeger moest die taak grotendeels handmatig worden uitgevoerd, waarbij elk logtype afzonderlijk werd afgehandeld. Gelukkig is de combinatie van Elasticsearch, Logstash en Kibana aan de serverkant, samen met Filebeat aan de client kant, zorgt ervoor dat die eens moeilijke taak vandaag de dag lijkt op een wandeling in het park.

De eerste drie componenten vormen een zogenaamde ELK-stack, waarvan het belangrijkste doel is om logbestanden van meerdere servers tegelijkertijd te verzamelen (ook wel gecentraliseerde logboekregistratie genoemd).

Voorgesteld om te lezen: 4 goede open source logbewakings- en beheertools voor Linux

Dankzij een ingebouwde, op Java gebaseerde webinterface kunt u logboeken snel en in één oogopslag inspecteren, zodat u ze eenvoudiger kunt vergelijken en problemen kunt oplossen. Deze clientlogboeken worden door Filebeat naar een centrale server gestuurd, die kan worden omschreven als een logvervoerder.

Laten we eens kijken hoe al deze stukjes in elkaar passen. Onze testomgeving zal bestaan uit de volgende machines:

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.

Houd er rekening mee dat de hier opgegeven RAM-waarden geen strikte vereisten zijn, maar aanbevolen waarden voor een succesvolle implementatie van de ELK-stack op de centrale server. Minder RAM op clients zal niet veel of helemaal geen verschil maken.

ELK Stack op de server installeren

Laten we beginnen met het installeren van de ELK-stack op de server, samen met een korte uitleg over wat elke component doet:

  1. Elasticsearch slaat de logs op die door de clients worden verzonden.
  2. Logstash verwerkt deze logbestanden.
  3. Kibana levert de webinterface waarmee we de logbestanden kunnen inspecteren en analyseren.

Installeer de volgende pakketten op de centrale server. Allereerst installeren we Java JDK versie 8 (update 102, de nieuwste versie op het moment dat dit wordt geschreven), wat een afhankelijkheid is van de ELK componenten.

Misschien wilt u eerst op de Java-downloadpagina hier controleren of er een nieuwere update beschikbaar is.

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

Tijd om te controleren of de installatie succesvol is afgerond:

java -version

Om de nieuwste versies van Elasticsearch, Logstash en Kibana te installeren, zullen we handmatig opslagplaatsen voor yum moeten maken als volgt:

Schakel Elasticsearch-repository in

1. Importeer de openbare GPG-sleutel van Elasticsearch naar de rpm-pakketbeheerder:

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

2. Voeg de volgende regels in het repositoryconfiguratiebestand elasticsearch.repo in:

[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. Installeer het Elasticsearch-pakket.

yum install elasticsearch

Wanneer de installatie is voltooid, wordt u gevraagd om elasticsearch te starten en in te schakelen:

4. Start en schakel de service in.

systemctl daemon-reload
systemctl enable elasticsearch
systemctl start elasticsearch

5. Sta verkeer toe via TCP-poort 9200 in uw firewall:

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

6. Controleer of Elasticsearch reageert op eenvoudige verzoeken via HTTP:

curl -X GET http://localhost:9200

De uitvoer van het bovenstaande commando zou vergelijkbaar moeten zijn met:

Zorg ervoor dat u de bovenstaande stappen voltooit en ga vervolgens verder met Logstash. Omdat zowel Logstash als Kibana de Elasticsearch GPG sleutel delen, is het niet nodig om deze opnieuw te importeren voordat u de pakketten installeert.

Voorgesteld lezen: Systeemlogboeken beheren (configureren, roteren en importeren in database) in CentOS 7

Schakel Logstash-repository in

7. Voeg de volgende regels in het repositoryconfiguratiebestand logstash.repo in:

[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. Installeer het Logstash pakket:

yum install logstash

9. Voeg een SSL-certificaat toe op basis van het IP-adres van de ELK-server op de volgende regel onder de sectie [ v3_ca ] in /etc/pki/tls/openssl.cnf:

[ v3_ca ]
subjectAltName = IP: 192.168.0.29

10. Genereer een zelfondertekend certificaat dat 365 dagen geldig is:

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. Configureer Logstash invoer-, uitvoer- en filterbestanden:

Invoer: maak /etc/logstash/conf.d/input.conf en voeg de volgende regels erin in. Dit is nodig voor Logstash om te “leren” hoe beats van clients moeten worden verwerkt. Zorg ervoor dat het pad naar het certificaat en de sleutel overeenkomen met de juiste paden, zoals beschreven in de vorige stap:

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

Uitvoerbestand (/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]}"
  }
}

Filterbestand (/etc/logstash/conf.d/filter.conf). Voor de eenvoud zullen we syslog-berichten loggen:


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

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

12. Controleer de Logstash configuratiebestanden.

service logstash configtest

13. Logstash starten en inschakelen:

systemctl daemon-reload
systemctl start logstash
systemctl enable logstash

14. Configureer de firewall zodat Logstash de logbestanden van de clients kan ophalen (TCP-poort 5044):

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

Schakel Kibana-opslagplaats in

14. Voeg de volgende regels in het repositoryconfiguratiebestand kibana.repo in:

[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. Installeer het Kibana pakket:

yum install kibana

16. Start en schakel Kibana in.

systemctl daemon-reload
systemctl start kibana
systemctl enable kibana

17. Zorg ervoor dat u toegang heeft tot de webinterface van Kibana vanaf een andere computer (verkeer toestaan op TCP-poort 5601):

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

18. Start Kibana (http://192.168.0.29:5601) om te verifiëren dat u toegang heeft tot de webinterface:

We komen hier terug nadat we Filebeat op de clients hebben geïnstalleerd en geconfigureerd.

Voorgesteld lezen: Controleer serverlogs in realtime met de tool "Log.io" in Linux

Installeer Filebeat op de clientservers

We laten u zien hoe u dit kunt doen voor Klant nr. 1 (herhaal dit daarna voor Klant nr. 2, waarbij u het pad wijzigt indien van toepassing op uw distributie).

1. Kopieer het SSL-certificaat van de server naar de clients:

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

2. Importeer de openbare GPG-sleutel Elasticsearch in de rpm-pakketbeheerder:

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

3. Maak een opslagplaats voor Filebeat (/etc/yum.repos.d/filebeat.repo) in CentOS > gebaseerde distributies:

[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. Configureer de bron om Filebeat te installeren op Debian en zijn afgeleiden:

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. Installeer het Filebeat-pakket:

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

6. Start en schakel Filebeat in:

systemctl start filebeat
systemctl enable filebeat

Configureer Filebeat

Een woord van waarschuwing hier. De Filebeat-configuratie wordt opgeslagen in een YAML-bestand, waarvoor strikte inspringing vereist is. Wees hier voorzichtig mee als u /etc/filebeat/filebeat.yml als volgt bewerkt:

  1. Geef onder paden aan welke logbestanden naar de ELK-server moeten worden “verzonden”.
  2. Onder goudzoekers:
input_type: log
document_type: syslog
  1. Onder uitvoer:

    1. Verwijder het commentaar op de regel die begint met logstash.
    2. Geef het IP-adres van uw ELK-server en poort op waar Logstash naar luistert in hosts.
    3. Zorg ervoor dat het pad naar het certificaat verwijst naar het daadwerkelijke bestand dat u in Stap I (Logstash sectie) hierboven heeft gemaakt.

De bovenstaande stappen worden geïllustreerd in de volgende afbeelding:

Sla de wijzigingen op en start Filebeat vervolgens opnieuw op de clients:

systemctl restart filebeat

Zodra we de bovenstaande stappen voor de klanten hebben voltooid, kunt u doorgaan.

Filebeat testen

Om te verifiëren dat de logs van de clients succesvol kunnen worden verzonden en ontvangen, voert u de volgende opdracht uit op de ELK-server:

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

De uitvoer zou vergelijkbaar moeten zijn met (merk op hoe berichten van /var/log/messages en /var/log/secure worden ontvangen van client1 en klant2):

Controleer anders het Filebeat-configuratiebestand op fouten.

journalctl -xe

na een poging om opnieuw te starten zal Filebeat u naar de overtredende regel(s) wijzen.

Kibana testen

Nadat we hebben geverifieerd dat logs door de clients worden verzonden en met succes op de server worden ontvangen. Het eerste dat we in Kibana moeten doen, is een indexpatroon configureren en dit als standaard instellen.

U kunt een index beschrijven als een volledige database in een relationele databasecontext. We gaan voor filebeat-* (of u kunt nauwkeurigere zoekcriteria gebruiken, zoals uitgelegd in de officiële documentatie).

Voer filebeat-* in het Indexnaam of patroonveld in en klik vervolgens op Maken:

Houd er rekening mee dat u later nauwkeurigere zoekcriteria kunt invoeren. Klik vervolgens op de ster in de groene rechthoek om deze te configureren als het standaard indexpatroon:

Ten slotte vindt u in het menu Ontdekken verschillende velden die u kunt toevoegen aan het logvisualisatierapport. Plaats de muisaanwijzer erop en klik op Toevoegen:

De resultaten worden weergegeven in het centrale gedeelte van het scherm, zoals hierboven weergegeven. Voel je vrij om wat te spelen (velden toevoegen aan of verwijderen uit het lograpport) om vertrouwd te raken met Kibana.

Standaard geeft Kibana de records weer die gedurende de afgelopen 15 minuten zijn verwerkt (zie rechterbovenhoek), maar u kunt dat gedrag wijzigen door een ander tijdsbestek te selecteren:

Samenvatting

In dit artikel hebben we uitgelegd hoe je een ELK-stack kunt opzetten om de systeemlogboeken te verzamelen die zijn verzonden door twee clients, een CentOS 7- en een Debian 8-machine.

Nu kunt u de officiële Elasticsearch-documentatie raadplegen en meer details vinden over hoe u deze opstelling kunt gebruiken om uw logs efficiënter te inspecteren en analyseren.

Als u vragen heeft, aarzel dan niet om deze te stellen. Wij kijken ernaar uit om van u te horen.