Sådan installeres Elasticsearch, Logstash og Kibana (ELK Stack) på CentOS/RHEL 7


Hvis du er en person, der er, eller har været tidligere, ansvarlig for at inspicere og analysere systemlogfiler i Linux, ved du, hvilket mareridt den opgave kan blive, hvis flere tjenester overvåges samtidigt.

Tidligere dage skulle opgaven hovedsagelig udføres manuelt, idet hver logtype blev håndteret separat. Heldigvis får kombinationen af Elasticsearch, Logstash og Kibana på serversiden sammen med Filebeat på klientsiden den engang vanskelige opgave til at ligne en tur i parken i dag.

De første tre komponenter danner det, der kaldes en ELK-stak, hvis hovedformål er at indsamle logfiler fra flere servere på samme tid (også kendt som centraliseret logning).

En indbygget java-baseret webgrænseflade giver dig mulighed for hurtigt at inspicere logfiler for lettere sammenligning og fejlfinding. Disse klientlogfiler sendes til en central server af Filebeat, som kan beskrives som en logforsendelsesagent.

Lad os se, hvordan alle disse stykker passer sammen. Vores testmiljø vil bestå af følgende maskiner:

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.

Bemærk, at de RAM-værdier, der er angivet her, ikke er strenge forudsætninger, men anbefalede værdier til vellykket implementering af ELK-stakken på den centrale server. Mindre RAM på klienter vil overhovedet ikke gøre meget, hvis nogen.

Installation af ELK Stack på serveren

Lad os begynde med at installere ELK-stakken på serveren sammen med en kort forklaring på, hvad hver komponent gør:

  1. Elasticsearch gemmer de logfiler, der sendes af klienterne.
  2. Logstash behandler disse logfiler.
  3. Kibana leverer webgrænsefladen, der hjælper os med at inspicere og analysere logfilerne.

Installer følgende pakker på den centrale server. Først og fremmest installerer vi Java JDK version 8 (opdatering 102, den seneste på dette tidspunkt), hvilket er en afhængighed af ELK-komponenterne.

Det kan være en god idé at tjekke først på siden Java-downloads her for at se, om der er en nyere opdatering tilgængelig.

# 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

Tid til at kontrollere, om installationen blev gennemført med succes:

# java -version

For at installere de nyeste versioner af Elasticsearch, Logstash og Kibana bliver vi nødt til at oprette arkiver til yum manuelt som følger:

1. Importer den offentlige GPG-nøgle til Elasticsearch til rpm-pakkehåndtering:

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

2. Indsæt følgende linjer i arkivkonfigurationsfilen elasticsearch.repo :

[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. Installer Elasticsearch-pakken.

# yum install elasticsearch

Når installationen er gennemført, bliver du bedt om at starte og aktivere elasticsearch:

4. Start og aktiver tjenesten.

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

5. Tillad trafik gennem TCP-port 9200 i din firewall:

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

6. Kontroller, om Elasticsearch reagerer på enkle anmodninger via HTTP:

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

Outputtet fra ovenstående kommando skal svare til:

Sørg for at udføre ovenstående trin, og fortsæt derefter med Logstash. Da både Logstash og Kibana deler Elasticsearch GPG-nøglen, er det ikke nødvendigt at genimportere den, før pakkerne installeres.

7. Indsæt følgende linjer i arkivkonfigurationsfilen logstash.repo :

[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. Installer Logstash-pakken:

# yum install logstash

9. Tilføj et SSL-certifikat baseret på IP-adressen på ELK-serveren på følgende linje under afsnittet [v3_ca] i /etc/pki/tls/openssl.cnf:

[ v3_ca ]
subjectAltName = IP: 192.168.0.29

10. Generer et selvsigneret certifikat, der er gyldigt i 365 dage:

# 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. Konfigurer Logstash input-, output- og filterfiler:

Input: Opret /etc/logstash/conf.d/input.conf og indsæt følgende linjer i det. Dette er nødvendigt for, at Logstash “lærer”, hvordan man behandler beats fra klienter. Sørg for, at stien til certifikatet og nøglen stemmer overens med de rigtige stier som beskrevet i forrige trin:

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

Output ( /etc/logstash/conf.d/output.conf ) fil:

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

Filtrer ( /etc/logstash/conf.d/filter.conf ) fil. Vi logger syslog-meddelelser for enkelhedens skyld:

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

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

12. Kontroller Logstash-konfigurationsfilerne.

# service logstash configtest

13. Start og aktiver logstash:

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

14. Konfigurer firewallen, så Logstash kan hente logfilerne fra klienterne (TCP-port 5044):

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

14. Indsæt følgende linjer i arkivkonfigurationsfilen kibana.repo :

[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. Installer Kibana-pakken:

# yum install kibana

16. Start og aktiver Kibana.

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

17. Sørg for at få adgang til Kibanas webgrænseflade fra en anden computer (tillad trafik på TCP-port 5601):

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

18. Start Kibana ( http://192.168.0.29:5601 ) for at bekræfte, at du har adgang til webgrænsefladen:

Vi vender tilbage her, efter at vi har installeret og konfigureret Filebeat på klienterne.

Installer Filebeat på klientserverne

Vi viser dig, hvordan du gør dette for klient nr. 1 (gentag for klient nr. 2 bagefter, skift stier, hvis det er relevant for din distribution).

1. Kopier SSL-certifikatet fra serveren til klienterne:

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

2. Importer den offentlige GPG-nøgle til Elasticsearch til rpm-pakkehåndteringen:

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

3. Opret et lager for Filebeat ( /etc/yum.repos.d/filebeat.repo ) i CentOS-baserede distributioner:

[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. Konfigurer kilden til at installere Filebeat på Debian og dens derivater:

# 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. Installer Filebeat-pakken:

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

6. Start og aktiver Filebeat:

# systemctl start filebeat
# systemctl enable filebeat

Et forsigtighedsord her. Filebeat-konfiguration er gemt i en YAML-fil, hvilket kræver streng indrykning. Vær forsigtig med dette, når du redigerer /etc/filebeat/filebeat.yml som følger:

  1. Under stier skal du angive, hvilke logfiler der skal "sendes" til ELK-serveren.
  2. Under efterforskere:

input_type: log
document_type: syslog

  1. Under output:
    1. Fjern kommentar til den linje, der begynder med logstash.
    2. Angiv IP-adressen på din ELK-server og port, hvor Logstash lytter i værter.
    3. Sørg for, at stien til certifikatet peger på den faktiske fil, du oprettede i trin I (afsnittet Logstash) ovenfor.

    Ovenstående trin er illustreret i følgende billede:

    Gem ændringer, og genstart derefter Filebeat på klienterne:

    # systemctl restart filebeat
    

    Når vi har gennemført ovenstående trin på klienterne, er du velkommen til at fortsætte.

    For at kontrollere, at loggene fra klienterne kan sendes og modtages med succes, skal du køre følgende kommando på ELK-serveren:

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

    Outputtet skal svare til (bemærk hvordan meddelelser fra/var/log/meddelelser og/var/log/sikker modtages fra client1 og client2):

    Ellers skal du kontrollere Filebeat-konfigurationsfilen for fejl.

    # journalctl -xe
    

    efter at have forsøgt at genstarte, vil Filebeat pege dig på den eller de fornærmende linjer.

    Når vi har bekræftet, at logfiler sendes af klienterne og modtages med succes på serveren. Den første ting, vi bliver nødt til at gøre i Kibana, er at konfigurere et indeksmønster og indstille det som standard.

    Du kan beskrive et indeks som en fuld database i en relationel databasekontekst. Vi går med filebeat- * (eller du kan bruge et mere præcist søgekriterium som forklaret i den officielle dokumentation).

    Indtast filebeat- * i feltet Indeksnavn eller mønster, og klik derefter på Opret:

    Bemærk, at du senere får adgang til et mere detaljeret søgekriterium. Klik derefter på stjernen inde i det grønne rektangel for at konfigurere det som standardindeksmønster:

    Endelig finder du i menuen Discover flere felter, du kan føje til logvisualiseringsrapporten. Hold bare markøren over dem, og klik på Tilføj:

    Resultaterne vises i det centrale område af skærmen som vist ovenfor. Du er velkommen til at lege rundt (tilføje og fjerne felter fra lograpporten) for at blive fortrolig med Kibana.

    Som standard viser Kibana de poster, der blev behandlet i de sidste 15 minutter (se øverste højre hjørne), men du kan ændre denne adfærd ved at vælge en anden tidsramme:

    Resumé

    I denne artikel har vi forklaret, hvordan man opretter en ELK-stak til indsamling af systemlogfiler, der sendes af to klienter, en CentOS 7 og en Debian 8-maskine.

    Nu kan du henvise til den officielle Elasticsearch-dokumentation og finde flere detaljer om, hvordan du bruger denne opsætning til at inspicere og analysere dine logfiler mere effektivt.

    Hvis du har spørgsmål, så tøv ikke med at stille. Vi ser frem til at høre fra dig.