Cum se instalează Elasticsearch, Logstash și Kibana (ELK Stack) pe CentOS/RHEL 7


Dacă sunteți o persoană care este, sau a fost în trecut, responsabilă cu inspectarea și analizarea jurnalelor de sistem în Linux, știți ce coșmar poate deveni această sarcină dacă mai multe servicii sunt monitorizate simultan.

În zilele trecute, această sarcină trebuia făcută în mare parte manual, fiecare tip de jurnal fiind gestionat separat. Din fericire, combinația de Elasticsearch, Logstash și Kibana pe partea de server, împreună cu Filebeat pe client partea, face ca acea sarcină cândva dificilă să arate ca o plimbare în parc astăzi.

Primele trei componente formează ceea ce se numește o stivă ELK, al cărei scop principal este acela de a colecta jurnalele de pe mai multe servere în același timp (cunoscut și ca înregistrare centralizată).

Lectură recomandată: 4 instrumente bune de monitorizare și gestionare a jurnalelor open source pentru Linux

O interfață web încorporată bazată pe Java vă permite să inspectați rapid jurnalele dintr-o privire pentru o comparație mai ușoară și depanare. Aceste jurnalele client sunt trimise către un server central de către Filebeat, care poate fi descris ca un agent de expediere a jurnalelor.

Să vedem cum se potrivesc toate aceste piese. Mediul nostru de testare va consta din următoarele mașini:

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.

Vă rugăm să rețineți că valorile RAM furnizate aici nu sunt cerințe preliminare stricte, ci valori recomandate pentru implementarea cu succes a stivei ELK pe serverul central. Mai puțină RAM pentru clienți nu va face o mare diferență, dacă există, deloc.

Instalarea ELK Stack pe server

Să începem prin a instala stiva ELK pe server, împreună cu o scurtă explicație despre ceea ce face fiecare componentă:

  1. Elasticsearch stochează jurnalele trimise de clienți.
  2. Logstash procesează jurnalele respective.
  3. Kibana oferă interfața web care ne va ajuta să inspectăm și să analizăm jurnalele.

Instalați următoarele pachete pe serverul central. În primul rând, vom instala Java JDK versiunea 8 (actualizarea 102, cea mai recentă la momentul scrierii acestui articol), care este o dependență a componentelor ELK.

Poate doriți să verificați mai întâi pagina de descărcări Java de aici pentru a vedea dacă există o actualizare mai nouă disponibilă.

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

Este timpul să verificați dacă instalarea s-a finalizat cu succes:

java -version

Pentru a instala cele mai recente versiuni de Elasticsearch, Logstash și Kibana, va trebui să creăm manual depozite pentru yum după cum urmează:

Activați depozitul Elasticsearch

1. Importați cheia publică GPG Elasticsearch în managerul de pachete rpm:

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

2. Introduceți următoarele rânduri în fișierul de configurare a depozitului 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. Instalați pachetul Elasticsearch.

yum install elasticsearch

Când instalarea este finalizată, vi se va solicita să porniți și să activați elasticsearch:

4. Porniți și activați serviciul.

systemctl daemon-reload
systemctl enable elasticsearch
systemctl start elasticsearch

5. Permite traficul prin portul TCP 9200 în firewall:

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

6. Verificați dacă Elasticsearch răspunde la solicitări simple prin HTTP:

curl -X GET http://localhost:9200

Ieșirea comenzii de mai sus ar trebui să fie similară cu:

Asigurați-vă că parcurgeți pașii de mai sus și apoi continuați cu Logstash. Deoarece atât Logstash cât și Kibana partajează cheia Elasticsearch GPG, nu este nevoie să o reimportați înainte de a instala pachetele.

Lectură recomandată: gestionați jurnalele de sistem (configurați, rotiți și importați în baza de date) în CentOS 7

Activați Logstash Repository

7. Introduceți următoarele rânduri în fișierul de configurare a depozitului 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. Instalați pachetul Logstash:

yum install logstash

9. Adăugați un certificat SSL bazat pe adresa IP a serverului ELK la următoarea linie de sub secțiunea [ v3_ca ] din /etc/pki/tls/openssl.cnf:

[ v3_ca ]
subjectAltName = IP: 192.168.0.29

10. Generați un certificat autosemnat valabil 365 de zile:

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. Configurați fișierele de intrare, de ieșire și de filtrare a Logstash:

Intrare: creați /etc/logstash/conf.d/input.conf și introduceți următoarele linii în el. Acest lucru este necesar pentru ca Logstash să „învăța ” cum să proceseze beat-urile venite de la clienți. Asigurați-vă că calea către certificat și cheia se potrivesc cu căile corecte, așa cum este prezentat în pasul anterior:

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

Fișier de ieșire (/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]}"
  }
}

Filtrați fișierul (/etc/logstash/conf.d/filter.conf). Vom înregistra mesajele syslog pentru simplitate:


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

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

12. Verificați fișierele de configurare Logstash.

service logstash configtest

13. Porniți și activați logstash:

systemctl daemon-reload
systemctl start logstash
systemctl enable logstash

14. Configurați paravanul de protecție pentru a permite Logstash să obțină jurnalele de la clienți (portul TCP 5044):

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

Activați depozitul Kibana

14. Introduceți următoarele linii în fișierul de configurare a depozitului 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. Instalați pachetul Kibana:

yum install kibana

16. Porniți și activați Kibana.

systemctl daemon-reload
systemctl start kibana
systemctl enable kibana

17. Asigurați-vă că puteți accesa interfața web a Kibana de pe alt computer (permiteți traficul pe portul TCP 5601):

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

18. Lansați Kibana (http://192.168.0.29:5601) pentru a verifica dacă puteți accesa interfața web:

Vom reveni aici după ce am instalat și configurat Filebeat pe clienți.

Lectură recomandată: Monitorizați serverul înregistrează în timp real cu instrumentul „Log.io ” în Linux

Instalați Filebeat pe serverele client

Vă vom arăta cum să faceți acest lucru pentru Clientul #1 (repetați pentru Clientul #2 după aceea, schimbând căile dacă este cazul distribuției dvs.).

1. Copiați certificatul SSL de pe server pe clienți:

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

2. Importați cheia GPG publică Elasticsearch în managerul de pachete rpm:

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

3. Creați un depozit pentru Filebeat (/etc/yum.repos.d/filebeat.repo) în CentOS > distribuții bazate pe:

[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. Configurați sursa pentru a instala Filebeat pe Debian și derivatele sale:

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. Instalați pachetul Filebeat:

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

6. Porniți și activați Filebeat:

systemctl start filebeat
systemctl enable filebeat

Configurați Filebeat

Un cuvânt de precauție aici. Configurația Filebeat este stocată într-un fișier YAML, care necesită indentare strictă. Fiți atenți la acest lucru când editați /etc/filebeat/filebeat.yml după cum urmează:

  1. Sub căi, indicați ce fișiere jurnal ar trebui să fie „expediate” către serverul ELK.
  2. Sub prospectori:
input_type: log
document_type: syslog
  1. Sub ieșire:

    1. Decomentați linia care începe cu logstash.
    2. Indicați adresa IP a serverului dvs. ELK și portul pe care Logstash ascultă în gazde.
    3. Asigurați-vă că calea către certificat indică fișierul real creat la Pasul I (secțiunea Logstash) de mai sus.

Pașii de mai sus sunt ilustrați în imaginea următoare:

Salvați modificările, apoi reporniți Filebeat pe clienți:

systemctl restart filebeat

După ce am finalizat pașii de mai sus pentru clienți, nu ezitați să continuați.

Testarea Filebeat

Pentru a verifica dacă jurnalele de la clienți pot fi trimise și primite cu succes, rulați următoarea comandă pe serverul ELK:

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

Rezultatul ar trebui să fie similar cu (observați modul în care mesajele de la /var/log/messages și /var/log/secure sunt primite de la client1 și client2):

În caz contrar, verificați fișierul de configurare Filebeat pentru erori.

journalctl -xe

după ce ați încercat să reporniți Filebeat vă va indica liniile ofensive.

Testarea Kibana

După ce am verificat că jurnalele sunt expediate de clienți și primite cu succes pe server. Primul lucru pe care va trebui să-l facem în Kibana este să configuram un model de index și să-l setăm ca implicit.

Puteți descrie un index ca o bază de date completă într-un context de bază de date relațională. Vom merge cu filebeat-* (sau puteți folosi un criteriu de căutare mai precis, așa cum este explicat în documentația oficială).

Introduceți filebeat-* în Nume index sau câmpul de model, apoi faceți clic pe Creați:

Vă rugăm să rețineți că vi se va permite să introduceți un criteriu de căutare mai precis mai târziu. Apoi, faceți clic pe steaua din interiorul dreptunghiului verde pentru a-l configura ca model de index implicit:

În cele din urmă, în meniul Descoperiți veți găsi mai multe câmpuri de adăugat la raportul de vizualizare a jurnalului. Treceți cu mouse-ul peste ele și faceți clic pe Adăugați:

Rezultatele vor fi afișate în zona centrală a ecranului, așa cum se arată mai sus. Simțiți-vă liber să jucați (adăugați și eliminați câmpuri din raportul de jurnal) pentru a vă familiariza cu Kibana.

În mod implicit, Kibana va afișa înregistrările care au fost procesate în ultimele 15 minute (vezi colțul din dreapta sus), dar puteți modifica acest comportament selectând un alt interval de timp:

rezumat

În acest articol am explicat cum să configurați o stivă ELK pentru a colecta jurnalele de sistem trimise de doi clienți, o mașină CentOS 7 și o mașină Debian 8.

Acum puteți consulta documentația oficială Elasticsearch și puteți găsi mai multe detalii despre cum să utilizați această configurare pentru a vă inspecta și analiza mai eficient jurnalele.

Dacă aveți întrebări, nu ezitați să întrebați. Asteptam sa auzim de tine.