Com instal·lar Elasticsearch, Logstash i Kibana (ELK Stack) a CentOS/RHEL 7


Si sou una persona que és, o ha estat en el passat, l'encarregada d'inspeccionar i analitzar els registres del sistema a Linux, sabeu el malson que pot convertir-se en aquesta tasca si s'estan supervisant diversos serveis simultàniament.

Dies passats, aquesta tasca s'havia de fer principalment manualment, i cada tipus de registre es gestionava per separat. Afortunadament, la combinació d'Elasticsearch, Logstash i Kibana al costat del servidor, juntament amb Filebeat al costat del client, fa que aquesta tasca abans difícil sembli avui un passeig pel parc.

Els tres primers components formen el que s'anomena pila ELK, el propòsit principal de la qual és recollir registres de diversos servidors alhora (també conegut com a registre centralitzat).

Una interfície web integrada basada en Java us permet inspeccionar els registres ràpidament d'un cop d'ull per facilitar la comparació i la resolució de problemes. Filebeat envia aquests registres de client a un servidor central, que es pot descriure com un agent d'enviament de registres.

Vegem com encaixen totes aquestes peces. El nostre entorn de prova estarà format per les màquines següents:

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.

Tingueu en compte que els valors de RAM proporcionats aquí no són requisits previs estrictes, sinó valors recomanats per a una implementació correcta de la pila ELK al servidor central. Menys RAM als clients no farà gaire diferència, si n'hi ha, en absolut.

Instal·lant ELK Stack al servidor

Comencem instal·lant la pila ELK al servidor, juntament amb una breu explicació sobre què fa cada component:

  1. Elasticsearch emmagatzema els registres que envien els clients.
  2. Logstash processa aquests registres.
  3. Kibana proporciona la interfície web que ens ajudarà a inspeccionar i analitzar els registres.

Instal·leu els paquets següents al servidor central. En primer lloc, instal·larem Java JDK versió 8 (actualització 102, l'última en el moment d'escriure aquest article), que és una dependència dels components ELK.

És possible que vulgueu comprovar primer a la pàgina de descàrregues de Java aquí per veure si hi ha una actualització més recent disponible.

# 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

És hora de comprovar si la instal·lació s'ha completat correctament:

# java -version

Per instal·lar les últimes versions d'Elasticsearch, Logstash i Kibana, haurem de crear manualment dipòsits per a yum de la següent manera:

1. Importeu la clau pública GPG d'Elasticsearch al gestor de paquets rpm:

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

2. Inseriu les línies següents al fitxer de configuració del dipòsit 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. Instal·leu el paquet Elasticsearch.

# yum install elasticsearch

Quan s'hagi completat la instal·lació, se us demanarà que inicieu i activeu elasticsearch:

4. Inicieu i activeu el servei.

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

5. Permet el trànsit a través del port TCP 9200 al tallafoc:

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

6. Comproveu si Elasticsearch respon a sol·licituds senzilles mitjançant HTTP:

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

La sortida de l'ordre anterior hauria de ser similar a:

Assegureu-vos de completar els passos anteriors i, a continuació, procediu amb Logstash. Com que tant Logstash com Kibana comparteixen la clau GPG d'Elasticsearch, no cal tornar-la a importar abans d'instal·lar els paquets.

7. Inseriu les línies següents al fitxer de configuració del dipòsit 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. Instal·leu el paquet Logstash:

# yum install logstash

9. Afegiu un certificat SSL basat en l'adreça IP del servidor ELK a la línia següent sota la secció [ v3_ca ] a /etc/pki/tls/openssl.cnf >:

[ v3_ca ]
subjectAltName = IP: 192.168.0.29

10. Genereu un certificat autofirmat vàlid durant 365 dies:

# 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. Configureu els fitxers d'entrada, sortida i filtre de Logstash:

Entrada: creeu /etc/logstash/conf.d/input.conf i inseriu-hi les línies següents. Això és necessari perquè Logstash \aprèn com processar els ritmes procedents dels clients. Assegureu-vos que el camí cap al certificat i la clau coincideixin amb els camins correctes, tal com s'indica al pas 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"
  }
}

Fitxer de sortida (/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]}"
  }
}

Fitxer de filtre (/etc/logstash/conf.d/filter.conf). Registrarem els missatges de syslog per simplificar:

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

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

12. Verifiqueu els fitxers de configuració de Logstash.

# service logstash configtest

13. Inicieu i activeu logstash:

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

14. Configureu el tallafoc per permetre a Logstash obtenir els registres dels clients (port TCP 5044):

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

14. Inseriu les línies següents al fitxer de configuració del dipòsit 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. Instal·leu el paquet Kibana:

# yum install kibana

16. Inicieu i activeu Kibana.

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

17. Assegureu-vos que podeu accedir a la interfície web de Kibana des d'un altre ordinador (permeteu el trànsit al port TCP 5601):

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

18. Inicieu Kibana (http://192.168.0.29:5601) per verificar que podeu accedir a la interfície web:

Tornarem aquí després d'haver instal·lat i configurat Filebeat als clients.

Instal·leu Filebeat als servidors client

Us mostrarem com fer-ho per al client núm. 1 (repetiu-ho per al client núm. 2 després, canviant els camins si escau a la vostra distribució).

1. Copieu el certificat SSL del servidor als clients:

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

2. Importeu la clau pública GPG d'Elasticsearch al gestor de paquets rpm:

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

3. Creeu un dipòsit per a Filebeat (/etc/yum.repos.d/filebeat.repo) a les distribucions basades en 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. Configureu la font per instal·lar Filebeat a Debian i els seus derivats:

# 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. Instal·leu el paquet Filebeat:

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

6. Inicieu i activeu Filebeat:

# systemctl start filebeat
# systemctl enable filebeat

Una paraula de precaució aquí. La configuració de Filebeat s'emmagatzema en un fitxer YAML, que requereix un sagnat estricte. Aneu amb compte amb això mentre editeu /etc/filebeat/filebeat.yml de la següent manera:

  1. En els camins, indiqueu quins fitxers de registre s'han d'\enviar al servidor ELK.
  2. Sota els prospectors:

input_type: log
document_type: syslog

  1. Sota la sortida:
    1. Descomenteu la línia que comença amb logstash.
    2. Indiqueu l'adreça IP del vostre servidor ELK i el port on Logstash escolta als amfitrions.
    3. Assegureu-vos que el camí del certificat apunta al fitxer real que heu creat al pas I (secció Logstash) anterior.

    Els passos anteriors es mostren a la imatge següent:

    Deseu els canvis i, a continuació, reinicieu Filebeat als clients:

    # systemctl restart filebeat
    

    Un cop hàgim completat els passos anteriors sobre els clients, no dubteu a continuar.

    Per verificar que els registres dels clients es poden enviar i rebre correctament, executeu l'ordre següent al servidor ELK:

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

    La sortida hauria de ser similar a (observeu com es reben missatges de /var/log/messages i /var/log/secure de client1 i client2):

    En cas contrari, comproveu si hi ha errors al fitxer de configuració de Filebeat.

    # journalctl -xe
    

    després d'intentar reiniciar Filebeat us indicarà les línies ofensives.

    Després d'haver verificat que els registres estan sent enviats pels clients i rebuts correctament al servidor. El primer que haurem de fer a Kibana és configurar un patró d'índex i establir-lo per defecte.

    Podeu descriure un índex com una base de dades completa en un context de base de dades relacional. Anirem amb filebeat-* (o podeu utilitzar un criteri de cerca més precís tal com s'explica a la documentació oficial).

    Introduïu filebeat-* al camp Nom de l'índex o patró i després feu clic a Crea:

    Tingueu en compte que més endavant podreu introduir criteris de cerca més detallats. A continuació, feu clic a l'estrella dins del rectangle verd per configurar-lo com a patró d'índex predeterminat:

    Finalment, al menú Discover trobareu diversos camps per afegir a l'informe de visualització del registre. Només cal que passeu el cursor per sobre d'ells i feu clic a Afegeix:

    Els resultats es mostraran a l'àrea central de la pantalla tal com es mostra a dalt. No dubteu a jugar (afegir i eliminar camps de l'informe de registre) per familiaritzar-vos amb Kibana.

    De manera predeterminada, Kibana mostrarà els registres que s'han processat durant els darrers 15 minuts (vegeu la cantonada superior dreta), però podeu canviar aquest comportament seleccionant un altre període de temps:

    Resum

    En aquest article hem explicat com configurar una pila ELK per recollir els registres del sistema enviats per dos clients, una màquina CentOS 7 i una Debian 8.

    Ara podeu consultar la documentació oficial d'Elasticsearch i trobar més detalls sobre com utilitzar aquesta configuració per inspeccionar i analitzar els vostres registres de manera més eficient.

    Si tens qualsevol pregunta, no dubtis a preguntar. Esperem amb interès tenir notícies teves.