Wéi installéiere Elasticsearch, Logstash, a Kibana (ELK Stack) op CentOS/RHEL 7


Wann Dir eng Persoun sidd, oder war an der Vergaangenheet, zoustänneg fir d'Inspektioun an d'Analyse vun System Logbicher am Linux, wësst Dir wat en Albtraum dës Aufgab ka ginn, wa verschidde Servicer gläichzäiteg iwwerwaacht ginn.

An de leschten Deeg huet dës Aufgab meeschtens manuell gemaach, mat all Logtyp getrennt gehandhabt. Glécklecherweis mécht d'Kombinatioun vun Elasticsearch, Logstash a Kibana op der Server Säit, zesumme mam Filebeat op der Client Säit, déi eemol schwiereg Aufgab wéi e Spazéiergang am Park haut.

Déi éischt dräi Komponente bilden wat en ELK Stack genannt gëtt, deem säin Haaptzweck ass Logbicher vu méi Serveren zur selwechter Zäit ze sammelen (och bekannt als zentraliséiert Logbicher).

Eng agebaut Java-baséiert Web-Interface erlaabt Iech Logbicher séier op ee Bléck z'inspektéieren fir méi einfache Verglach a Problembehandlung. Dës Client Logbicher ginn op en zentrale Server vum Filebeat geschéckt, deen als Logverschécken Agent beschriwwe ka ginn.

Loosst eis kucken wéi all dës Stécker zesumme passen. Eis Testëmfeld besteet aus de folgende Maschinnen:

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.

Notéiert w.e.g. datt d'RAM Wäerter déi hei virgesi sinn net strikt Viraussetzunge sinn, awer recommandéiert Wäerter fir eng erfollegräich Ëmsetzung vum ELK Stack op den zentrale Server. Manner RAM op Clienten wäert net vill Ënnerscheed maachen, wann all, iwwerhaapt.

ELK Stack op de Server installéieren

Loosst eis ufänken mam ELK Stack um Server z'installéieren, zesumme mat enger kuerzer Erklärung iwwer wat all Komponent mécht:

  1. Elasticsearch späichert d'Logbicher déi vun de Cliente geschéckt ginn.
  2. Logstash veraarbecht dës Logbicher.
  3. Kibana stellt d'Web-Interface zur Verfügung, déi eis hëllefe fir d'Logbicher z'inspektéieren an ze analyséieren.

Installéiert déi folgend Packagen um zentrale Server. Als éischt wäerte mir Java JDK Versioun 8 installéieren (Update 102, déi lescht am Moment vun dësem Schreiwen), wat eng Ofhängegkeet vun den ELK Komponenten ass.

Dir wëllt vläicht als éischt op der Java Downloads Säit hei kucken fir ze kucken ob et en neien Update verfügbar ass.

# 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

Zäit fir ze kontrolléieren ob d'Installatioun erfollegräich ofgeschloss ass:

# java -version

Fir déi lescht Versioune vun Elasticsearch, Logstash, a Kibana z'installéieren, musse mir Repositories fir Yum manuell erstellen wéi follegt:

1. Import den Elasticsearch ëffentleche GPG Schlëssel an den rpm Package Manager:

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

2. Füügt déi folgend Zeilen an d'Repository Konfiguratiounsdatei elasticsearch.repo an:

[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. Installéiert de Package Elasticsearch.

# yum install elasticsearch

Wann d'Installatioun fäerdeg ass, gitt Dir opgefuerdert Elasticsearch ze starten an z'aktivéieren:

4. Start an aktivéiert de Service.

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

5. Erlaabt Traffic duerch den TCP Hafen 9200 an Ärer Firewall:

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

6. Kuckt ob Elasticsearch op einfach Ufroen iwwer HTTP reagéiert:

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

D'Ausgab vum uewe genannte Kommando soll ähnlech sinn wéi:

Vergewëssert Iech datt Dir déi uewe genannte Schrëtt ofgeschloss hutt an da fuert mat Logstash weider. Well souwuel Logstash wéi och Kibana den Elasticsearch GPG Schlëssel deelen, ass et net néideg et nei z'importéieren ier Dir d'Packagen installéiert.

7. Füügt déi folgend Zeilen an d'Repository Konfiguratiounsdatei logstash.repo an:

[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. Installéiert de Logstash Package:

# yum install logstash

9. Füügt en SSL Zertifikat op Basis vun der IP Adress vum ELK Server op der folgender Linn ënnert der [ v3_ca ] Sektioun an /etc/pki/tls/openssl.cnf:

[ v3_ca ]
subjectAltName = IP: 192.168.0.29

10. Generéiere e selbst ënnerschriwwenen Zertifika valabel fir 365 Deeg:

# 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. Logstash Input, Output a Filterdateien konfiguréieren:

Input: Erstellt /etc/logstash/conf.d/input.conf a setzt déi folgend Zeilen an. Dëst ass néideg fir Logstash fir \léiere\ wéi Beats vu Clienten ze veraarbecht ginn. Vergewëssert Iech datt de Wee zum Zertifika an de Schlëssel mat de richtege Weeër passen wéi am virege Schrëtt beschriwwen:

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) Datei:

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

Filter (/etc/logstash/conf.d/filter.conf) Datei. Mir protokolléieren Syslog Messagen fir Einfachheet:

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

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

12. Vergewëssert Iech d'Logstash Konfiguratiounsdateien.

# service logstash configtest

13. Start an aktivéiert Logstash:

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

14. Konfiguréiert d'Firewall fir Logstash z'erméiglechen d'Logbicher vun de Clienten ze kréien (TCP Hafen 5044):

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

14. Setzt déi folgend Zeilen an d'Repository Konfiguratiounsdatei 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. Installéiert de Kibana Package:

# yum install kibana

16. Start an aktivéiert Kibana.

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

17. Vergewëssert Iech datt Dir Zougang zu Kibana's Webinterface vun engem anere Computer kënnt (erlaabt Traffic op TCP Hafen 5601):

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

18. Lancéiere Kibana (http://192.168.0.29:5601) fir z'iwwerpréiwen datt Dir op d'Webinterface kënnt:

Mir kommen hei zréck nodeems mir Filebeat op de Clienten installéiert a konfiguréiert hunn.

Installéiert Filebeat op de Client Serveren

Mir weisen Iech wéi Dir dëst fir Client #1 mécht (widderhuelen fir Client #2 duerno, Weeër änneren wann et op Är Verdeelung zoutrëfft).

1. Kopéiert den SSL Zertifika vum Server op d'Clienten:

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

2. Import den Elasticsearch ëffentleche GPG Schlëssel an den rpm Package Manager:

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

3. Erstellt e Repository fir Filebeat (/etc/yum.repos.d/filebeat.repo) an CentOS baséiert Verdeelungen:

[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. Konfiguréiert d'Quell fir Filebeat op Debian a seng Derivate z'installéieren:

# 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. Installéiert de Filebeat Package:

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

6. Start an aktivéiert Filebeat:

# systemctl start filebeat
# systemctl enable filebeat

E Wuert vun Vorsicht hei. Filebeat Konfiguratioun gëtt an enger YAML Datei gespäichert, déi strikt Indentatioun erfuerdert. Sidd virsiichteg mat dësem wéi Dir /etc/filebeat/filebeat.yml wéi follegt ännert:

  1. Under Weeër, gitt un wéi eng Logdateien op den ELK-Server \verschéckt solle ginn.
  2. Ënner Prospektoren:

input_type: log
document_type: syslog

  1. Ënner Output:
    1. Entkommentéiert d'Linn déi mat Logstash ufänkt.
    2. Gitt d'IP Adress vun Ärem ELK Server a Port un, wou Logstash an Hosten lauschtert.
    3. Vergewëssert Iech datt de Wee zum Zertifika op déi aktuell Datei weist, déi Dir am Schrëtt I (Logstash Sektioun) uewen erstallt hutt.

    Déi uewe genannte Schrëtt sinn am folgende Bild illustréiert:

    Späichert d'Ännerungen, a fänkt dann Filebeat op de Clienten nei:

    # systemctl restart filebeat
    

    Wann mir déi uewe genannte Schrëtt op d'Clientë ofgeschloss hunn, fille sech gratis weider ze goen.

    Fir z'iwwerpréiwen datt d'Logbicher vun de Clienten erfollegräich geschéckt a kritt kënne ginn, fuert de folgende Kommando um ELK Server:

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

    D'Output soll ähnlech sinn (Bemierkung wéi Messagen vun /var/log/messages an /var/log/secure vum Client1 a Client2 kritt ginn):

    Soss kontrolléiert d'Filebeat Konfiguratiounsdatei fir Feeler.

    # journalctl -xe
    

    nodeems Dir probéiert de Filebeat nei ze starten, weist Iech op déi beleidegend Linn (en).

    Nodeems mir iwwerpréift hunn datt d'Logbicher vun de Clienten geschéckt ginn an erfollegräich op de Server kréien. Déi éischt Saach déi mir zu Kibana maache mussen ass en Indexmuster konfiguréieren an et als Standard setzen.

    Dir kënnt en Index als voll Datebank an engem relational Datebank Kontext beschreiwen. Mir wäerte mat filebeat-* goen (oder Dir kënnt e méi präzise Sichcritère benotze wéi an der offizieller Dokumentatioun erkläert).

    Gitt filebeat-* am Indexnumm oder Musterfeld a klickt dann op Erstellen:

    Notéiert w.e.g. datt Dir spéider erlaabt eng méi feinkorrekt Sichcritère anzeginn. Als nächst klickt op de Stär am grénge Rechteck fir et als Standard Indexmuster ze konfiguréieren:

    Endlech, am Entdeckungsmenü fannt Dir e puer Felder fir an de Logvisualiséierungsbericht ze addéieren. Huelt just iwwer hinnen a klickt Add:

    D'Resultater ginn am zentrale Beräich vum Écran gewisen wéi uewen gewisen. Fillt Iech gratis ronderëm ze spillen (Felder aus dem Logbuch bäizefügen an ze läschen) fir mat Kibana vertraut ze ginn.

    Par défaut weist d'Kibana d'Opzeechnungen déi an de leschten 15 Minutten veraarbecht goufen (kuckt uewe riets am Eck), awer Dir kënnt dat Verhalen änneren andeems Dir en aneren Zäitframe wielt:

    Resumé

    An dësem Artikel hu mir erkläert wéi een en ELK Stack opstellt fir d'Systemprotokoller ze sammelen, déi vun zwee Clienten geschéckt ginn, e CentOS 7 an eng Debian 8 Maschinnen.

    Elo kënnt Dir op déi offiziell Elasticsearch Dokumentatioun referenzéieren a méi Detailer fannen wéi Dir dëse Setup benotzt fir Är Logbicher méi effizient z'inspektéieren an ze analyséieren.

    Wann Dir Froen hutt, zéckt net ze froen. Mir freeën eis vun Iech ze héieren.