LINUX

Cómo configurar ELK Stack para centralizar registros en Ubuntu 16.04

La pila ELK consta de Elasticsearch, Logstash y Kibana que se utilizan para centralizar los datos. ELK se utiliza principalmente para el análisis de registros en entornos de TI. La pila ELK hace que sea más fácil y rápido buscar y analizar un gran volumen de datos para tomar decisiones en tiempo real, todo el tiempo.

En este tutorial usaremos las siguientes versiones de ELK stack.

Elasticsearch 2.3.4
Logstash 2.3.4
Kibana 4.5.3
Oracle Java versión 1.8.0_91
Filebeat versión 1.2.3 (amd64)

Antes de comenzar a instalar ELK stack, verifique la versión LSB del servidor Ubuntu.

# lsb_release -a

Lanzamiento de Ubuntu LSB

1. Instale Java

El requisito para elasticsearch y logstash es instalar primero Java. Instalaremos Oracle java ya que elasticsearch lo recomienda. Sin embargo, también funciona con OpenJDK.

Agregue el PPA de Oracle Java a apt:

# sudo add-apt-repository -y ppa:webupd8team/java

Agregar Oracle JAVA al repositorio de apt

Actualizar la base de datos de apt

# sudo apt-get update

Ahora instale la última versión estable de Oracle Java 8 usando el siguiente comando.

# sudo apt-get -y install oracle-java8-installer

Aceptar licencia JAVA

Java 8 está instalado, verifique la versión de Java usando el comando java -version

Compruebe la versión de JAVA

2. Instale Elasticsearch

Para instalar Elasticsearch, primero importe su clave GPG pública a la base de datos apt. Ejecute el siguiente comando para importar la clave GPG pública de Elasticsearch en apt

# wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

Ahora cree la lista de fuentes de Elasticsearch

# echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list

Crear una lista de fuentes de elasticsearch

Actualizar la base de datos de apt

# sudo apt-get update

Ahora instale Elasticsearch usando el siguiente comando

# sudo apt-get -y install elasticsearch

Instale elasticsearch usando apt get

A continuación, edite el archivo de configuración de elasticsearch

# sudo vi /etc/elasticsearch/elasticsearch.yml

Para restringir el acceso externo a la instancia de Elasticsearch (puerto 9200), elimine el comentario de la línea que dice network.host y reemplace su valor con «localhost».

network.host: localhost

Editar el host de la red de elasticsearch

Ahora inicie Elasticsearch

# sudo service elasticsearch restart

Para iniciar Elasticsearch al arrancar, ejecute el siguiente comando.

# sudo update-rc.d elasticsearch defaults 95 10

Pruebe elasticsearch usando el siguiente comando.

# curl localhost:9200

Prueba Elasticsearch usando CURL

3. Instale logstash

Cree la lista de fuentes de Logstash. Ya hemos importado la clave pública ya que logstash y elasticsearch son del mismo repositorio.

# wget https://download.elastic.co/logstash/logstash/packages/debian/logstash_2.3.4-1_all.deb

Descarga Logstash usando WGET

# dpkg -i logstash_2.3.4-1_all.deb

Instale Logstash usando dpkg

# sudo update-rc.d logstash defaults 97 8

# sudo service logstash start

Para verificar el estado de logstash, ejecute el siguiente comando en la terminal.

# sudo service logstash status

Iniciar Logstash

Puede encontrar que logstash está activo pero no puede detener / reiniciar logstash correctamente usando el comando service o systemctl. En ese caso, debe configurar usted mismo el script del demonio logstash de systemd. Primero, haga una copia de seguridad del script de inicio logstash dentro de /etc/init.d/ y / etc / systemd / system y elimínelo de allí. Ahora instale este script «pleaserun» de https://github.com/elastic/logstash/issues/3606 El requisito previo para instalar este script es ruby.

Instalar Ruby

# sudo apt install ruby

Instalar Ruby

Ahora instale, ejecute gem

# gem install pleaserun

Instalar Pleaserun

Ahora está listo para crear el archivo de demonio systmd para logstash. Utilice el siguiente comando para hacer esto.

# pleaserun -p systemd -v default --install /opt/logstash/bin/logstash agent -f /etc/logstash/logstash.conf

Ahora que se ha creado el demonio systemd para logstash, inícielo y verifique el estado de logstash.

# sudo systemctl start logstash

# sudo systemctl status logstash

Estado de Logstash

4. Configurar logstash

Configuremos ahora Logstash. Los archivos de configuración de logstash residen dentro de /etc/logstash/conf.d y están en formato JSON. La configuración consta de tres partes y son entradas, filtros y salidas. Primero, cree un directorio para almacenar el certificado y la clave para logstash.

# mkdir -p /var/lib/logstash/private

# sudo chown logstash:logstash /var/lib/logstash/private

# sudo chmod go-rwx /var/lib/logstash/private

Cambiar la propiedad del directorio de logstash

Ahora cree certificados y claves para logstash

# openssl req -config /etc/ssl/openssl.cnf -x509  -batch -nodes -newkey rsa:2048 -keyout /var/lib/logstash/private/logstash-forwarder.key -out /var/lib/logstash/private/logstash-forwarder.crt -subj /CN=172.31.13.29

Cambie /CN=172.31.13.29 a la dirección IP privada de su servidor. Para evitar el «error de protocolo de enlace TLS», agregue la siguiente línea en /etc/ssl/openssl.cnf.

[v3_ca] subjectAltName = IP:172.31.13.29

Crear certificado SSL para el servidor ELK

Tenga en cuenta que tenemos que copiar este certificado a todos los clientes cuyos registros desee enviar al servidor ELK a través de filebeat.

A continuación, primero crearemos la entrada «filebeat» con el nombre 02-beats-input.conf

# sudo vi /etc/logstash/conf.d/02-beats-input.conf

input {
beats {
port => 5044
ssl => true
ssl_certificate => "/var/lib/logstash/private/logstash-forwarder.crt"
ssl_key => "/var/lib/logstash/private/logstash-forwarder.key"
}
}

Sección de entrada de Filebeat

Ahora crearemos un filtro «filebeat» con el nombre 10-syslog-filter.conf para agregar un filtro para los mensajes de syslog.

# sudo vi /etc/logstash/conf.d/10-syslog-filter.conf

filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:[%{POSINT:syslog_pid}])?: %{GREEDYDATA:syslog_message}" }
add_field => [ "received_at", "%{@timestamp}" ]
add_field => [ "received_from", "%{host}" ]
}
syslog_pri { }
date {
match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
}
}

Sección Filebeat Filter

Por último, crearemos la salida «filebeat» con el nombre 30-elasticsearch-output.conf

# sudo vi /etc/logstash/conf.d/30-elasticsearch-output.conf

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

Sección de salida de Filebeat

Pruebe su configuración de Logstash con el siguiente comando.

# sudo service logstash configtest

Mostrará Configuración correcta si no hay errores de sintaxis; de lo contrario, verifique los archivos de registro logstash en / var / log / logstash

Prueba de configuración de Logstash

Para probar el logstash, ejecute el siguiente comando desde la terminal.

# cd /opt/logstash/bin && ./logstash -f /etc/logstash/conf.d/02-beats-input.conf

Verá que el logstash ha iniciado una canalización y procesando los registros del sistema. Una vez que esté seguro de que logstash está procesando los syslogs, combine 02-beats-input.conf, 10-syslog-filter.conf y 30-elasticsearch-output.conf como un solo archivo logstash conf en el directorio / etc / logstash / conf .D

Reinicie logstash para volver a cargar la nueva configuración.

# sudo systemctl restart logstash

5. Instale el panel de control de muestra

Descargue paneles de Kibana de muestra y patrones de índice de Beats. No vamos a usar este tablero, pero los cargaremos para que podamos usar el patrón de índice filebeat en él. Descargue los paneles de control de muestra y descomprímalos.

# curl -L -O https://download.elastic.co/beats/dashboards/beats-dashboards-1.1.0.zip

# unzip beats-dashboards-1.1.0.zip

Descargar el panel de control de ritmo de muestra

Cargue los cuadros de mando de muestra, las visualizaciones y los patrones de índice de Beats en Elasticsearch con los siguientes comandos.

# cd beats-dashboards-1.1.0 # ./load.sh

Encontrará los siguientes patrones de índice en la barra lateral izquierda del panel de kibana. Usaremos solo el patrón de índice de latido de archivo.

packetbeat- *
topbeat- *
filebeat- *
winlogbeat- *

Dado que usaremos filebeat para reenviar registros a Elasticsearch, cargaremos una plantilla de índice de filebeat en elasticsearch.

Primero, descargue la plantilla de índice de filebeat

# curl -O https://gist.githubusercontent.com/thisismitch/3429023e8438cc25b86c/ raw/d8c479e2a1adcea8b1fe86570e42abab0f10f364/filebeat-index-template.json

Ahora cargue la siguiente plantilla con el siguiente comando CURL.

# curl -XPUT 'http://localhost:9200/_template/filebeat?pretty' -d@filebeat-index-template.json

Si la plantilla se cargó correctamente, debería ver un mensaje como este:

Producción:
{
«reconocido»: verdadero
}

xput JSON plantilla usando CURL

El servidor ELK ahora está listo para recibir datos de filebeat, configuremos filebeat en el servidor cliente. Para obtener más información sobre cómo cargar el panel de ritmos, consulte este enlace https://www.elastic.co/guide/en/beats/libbeat/current/load-kibana-dashboards.html

6. Instale filebeat en los clientes

Cree la lista de fuentes de Beats en los clientes cuyos registros desee enviar al servidor ELK. Actualice la base de datos de apt e instale filebeat usando apt-get

# echo "deb https://packages.elastic.co/beats/apt stable main" | sudo tee -a /etc/apt/sources.list.d/beats.list # sudo apt-get update && sudo apt-get install filebeat

Instale filebeat usando apt-get

Iniciar filebeat

# /etc/init.d/filebeat start

Iniciar filebeat

Ahora edite el archivo /etc/filebeat/filebeat.yml. Modifique el prospector existente para enviar syslog a logstash. En la sección de rutas, comente el archivo – /var/log/*.log y agregue nuevas entradas para syslog – / var / log / syslog.

Editar la ruta de filebeat syslog

A continuación, especifica que los registros del prospector son de tipo syslog.

Editar tipo de documento filebeat

Descomente Logstash: sección de salida y hosts: [«SERVER_PRIVATE_IP:5044»] sección. Edite localhost a la dirección IP privada o al nombre de host de su servidor ELK. Ahora descomente la línea que dice certificate_authorities, y modifique su valor a /var/lib/logstash/private/logstash-forwarder.crt que hemos creado en el servidor ELK en el paso debe copiar este certificado a todas las máquinas cliente.

Reinicie filebeat y verifique su estado.

# sudo /etc/init.d/filebeat restart # sudo service filebeat status

Verificar el estado de filebeat

Para probar el filebeat, ejecute el siguiente comando desde la terminal.

# filebeat -c /etc/filebeat/filebeat.yml -e -v

Probar filebeat desde la terminal

El filebeat enviará los registros a logstash para indexarlos. Habilite el filebeat para que se inicie durante cada arranque.

# sudo update-rc.d filebeat defaults 95 10

Ahora abra su navegador favorito y apunte la URL a http: // ELK-SERVER-IP: 5601 o http: // ELK-SERVER-DOMAIN-NAME: 5601, encontrará los syslogs cuando haga clic en file-beats- * a la izquierda barra lateral.

Esta es nuestra configuración final de filebeat para filebeat –

filebeat:
prospectors:
-
paths:
- /var/log/auth.log
- /var/log/syslog

input_type: log

document_type: syslog

registry_file: /var/lib/filebeat/registry

output:
logstash:
hosts: ["172.31.13.29:5044"]
bulk_max_size: 1024

tls:
certificate_authorities: ["/var/lib/logstash/private/logstash-forwarder.crt"]

shipper:

logging:
files:
rotateeverybytes: 10485760

Configuración final de filebeat

7. Configurar el cortafuegos

Agregue reglas de firewall para permitir el tráfico a los siguientes puertos.

El comando cuatro IPTABLE será

# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 5601 -j ACCEPT
# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 9200 -j ACCEPT
# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
# iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 5044 -j ACCEPT

Guarde las reglas.

# service iptables save

Reiniciar IPTABLE

# service iptables restart

Para usuarios de UFW:

# sudo ufw allow 5601/tcp

# sudo ufw allow 9200/tcp

# sudo ufw allow 80/tcp

# sudo ufw allow 5044/tcp

# sudo ufw reload

8. Instalar / configurar Kibana

Descargue la última kibana desde https://download.elastic.co/

# cd /opt

# wget https://download.elastic.co/kibana/kibana/kibana-4.5.3-linux-x64.tar.gz

# tar -xzf kibana-4.5.3-linux-x64.tar.gz # cd kibana-4.5.3-linux-x64/

# mv kibana-4.5.3-linux-x64 kibana # cd /opt/kibana/config # vi kibana.yml

Ahora cambie estos parámetros en /opt/kibana/config/kibana.yml

server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://localhost:9200"

Editar el archivo de configuración de Kibana

Para fines de prueba, puede ejecutar kibana usando los siguientes comandos.

# cd /opt/kibana/bin

# ./kibana & # netstat -pltn

Iniciar kibana desde la terminal

Ahora crearemos el demonio systemd para kibana usando «pleaserun» de la misma manera que lo hemos creado para logstash.

# pleaserun -p systemd -v default –install /opt/kibana/bin/kibana -p 5601 -H 0.0.0.0 -e http://localhost:9200

dónde
-p especifica el número de puerto que enlazará kibana
-H especifica la dirección IP del host donde se ejecutará Kibana.
La opción -e especifica la dirección IP de elasticsearch.

Iniciar la kibana

# systemctl start kibana

Verificar el estado de kibana

# systemctl status kibana

Compruebe si el puerto no 5601 ha sido ocupado por kibana

# netstat -pltn| grep '5601'

Crear script de demonio systemd para kibana

9. Instalar / Configurar NGINX

Dado que Kibana está configurado para escuchar en localhost, necesitamos configurar un proxy inverso para permitir el acceso externo a él. Usaremos NGINX como proxy inverso. Instale las utilidades de NGINX y apache usando el siguiente comando.

# sudo apt-get install nginx apache2-utils php-fpm

Instalar las utilidades de NGINX y Apache

Edite el archivo de configuración php-fpm www.conf dentro /etc/php/7.0/fpm/pool.d

listen.allowed_clients = 127.0.0.1,172.31.13.29

Configurar php fpm

Reinicie php-fpm

# sudo service php-fpm restart

Con htpasswd, cree un usuario administrador con el nombre «kibana» para acceder a la interfaz web de Kibana.

# sudo htpasswd -c /etc/nginx/htpasswd.users kibana

Crear usuario http de kibana

Ingrese una contraseña cuando se le solicite. Recuerde esta contraseña, la usaremos para acceder a la interfaz web de Kibana.
Crea un certificado para NGINX

# sudo openssl req -x509 -batch -nodes -days 365 -newkey rsa:2048  -out /etc/ssl/certs/nginx.crt -keyout /etc/ssl/private/nginx.key -subj /CN=demohost.com

Cree un certificado y una clave SSL de NGINX

Edite el bloque de servidor predeterminado de NGINX.

# sudo vi /etc/nginx/sites-available/default

Elimine el contenido del archivo y pegue la siguiente configuración en el archivo.

server_tokens off;
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
server {
listen 443 ssl;

auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/htpasswd.users;
ssl_certificate /etc/ssl/certs/nginx.crt;
ssl_certificate_key /etc/ssl/private/nginx.key;

location / {
proxy_pass http://localhost:5601;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
add_header Strict-Transport-Security "max-age=31536000;";
}
server {
listen 80;
listen [::]:80 default_server ipv6only=on;
return 301 https://$host$request_uri;
}

Archivo de configuración NGINX

No estamos usando la directiva server_name ya que hemos configurado nuestro nombre de dominio en / etc / hosts y / etc / hostname como demohost.com. También desde entonces, hemos editado el host predeterminado de NGINX (/ etc / nginx / sites-available / default). Por lo tanto, una vez que NGINX haya iniciado, demohost.com estará disponible en el navegador.

Guardar y Salir. A partir de ahora, NGINX dirigirá el tráfico HTTP del servidor a la aplicación Kibana en el puerto no 5601.
Ahora reinicie NGINX para que nuestros cambios surtan efecto:

# sudo service nginx restart

Ahora puede acceder a Kibana visitando el FQDN o la dirección IP pública de su servidor ELK, es decir, http: // elk_server_public_ip /. Ingrese las credenciales «kibana» que ha creado anteriormente, será redirigido a la página de bienvenida de Kibana, que le pedirá que configure un patrón de índice.

Iniciar sesión en el panel de Kibana

Haga clic en filebeat * en la barra lateral superior izquierda, verá los registros de los clientes fluyendo hacia el tablero.

Ver el panel de Kibana

Haga clic en el estado del servidor ELK

Estado del servidor ELK

Conclusión:

Eso es todo para el servidor ELK, instale filebeat en cualquier número de sistemas cliente y envíe los registros al servidor ELK para su análisis. Para hacer que los datos de registro no estructurados sean más funcionales, analícelos correctamente y hágalo estructurado con grok. También hay algunos complementos increíbles disponibles para usar junto con kibana, para visualizar los registros de una manera sistemática.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba
Cerrar