Búsqueda elástica es un buscador de código abierto basado en Lucene, desarrollado en java. Proporciona un motor de búsqueda de texto completo distribuido y multiusuario con una interfaz web HTTP Dashboard (Kibana) y un esquema de documentos JSON. Elasticsearch es un motor de búsqueda escalable que se puede utilizar para buscar todo tipo de documentos, incluido el archivo de registro. Elasticsearch es el corazón del 'Elastic Stack' o ELK Stack.
Almacenamiento de registros es una herramienta de código abierto para administrar eventos y registros del sistema. Proporciona canalización en tiempo real para recopilar datos. Logstash recopilará el registro o los datos, convertirá todos los datos en documentos JSON y los almacenará en Elasticsearch.
Kibana es una interfaz de visualización de datos para Elasticsearch. Kibana proporciona un panel bonito (interfaces web), que le permite administrar y visualizar todos los datos de Elasticsearch por su cuenta. No solo es hermoso, sino también poderoso.
En este tutorial, le mostraré cómo instalar y configurar Elastic Stack en un solo servidor Ubuntu 16.04 para monitorear los registros del servidor y cómo instalar 'Elastic beats' en las PC cliente con Ubuntu 16.04 y el sistema operativo CentOS 7.
Requisito previo
- Servidor Ubuntu 16.04 de 64 bits con 4 GB de RAM, nombre de host:elk-master
- Cliente Ubuntu 16.04 de 64 bits con 1 GB de RAM, nombre de host:elk-client1
- Cliente CentOS 7 de 64 bits con 1 GB de RAM, nombre de host:elk-client2
Paso 1 - Instalar Java
Se requiere Java para la implementación de la pila elástica. Elasticsearch requiere Java 8. Se recomienda utilizar Oracle JDK 1.8. Instalaremos Java 8 desde un repositorio PPA.
Instale el nuevo paquete 'python-software-properties' para que podamos agregar un nuevo repositorio fácilmente con un comando apt.
sudo apt-get update
sudo apt-get install -y python-software-properties software-properties-common apt-transport-https
Agregue el nuevo repositorio PPA de Java 8 con el comando 'add-apt-repository' y luego actualice el repositorio.
sudo add-apt-repository ppa:webupd8team/java -y
sudo apt-get update
Instale Java 8 desde el repositorio PPA webpub8.
sudo apt-get install -y oracle-java8-installer
Cuando finalice la instalación, asegúrese de que Java esté instalado correctamente en el sistema comprobando la versión de Java.
java -version
Paso 2:instalar y configurar Elasticsearch
En este paso, instalaremos y configuraremos Elasticsearch. Instale Elasticsearch desde el repositorio de Elastic y configúrelo para que se ejecute en la IP del host local.
Antes de instalar Elasticsearch, agregue la clave del repositorio elástico al servidor.
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
Agregue el repositorio elástico 5.x al directorio 'sources.list.d'.
echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list
Actualice el repositorio e instale Elasticsearch 5.1 con el siguiente comando apt.
sudo apt-get update
sudo apt-get install -y elasticsearch
Elasticsearch está instalado. Ahora ve al directorio de configuración y edita el archivo de configuración elasticsaerch.yml.
cd /etc/elasticsearch/
vim elasticsearch.yml
Habilite el bloqueo de memoria para Elasticsearch eliminando el comentario en la línea 43. Hacemos esto para deshabilitar el intercambio de memoria para Elasticsearch para evitar sobrecargar el servidor.
bootstrap.memory_lock: true
En el bloque 'Red', descomente las líneas network.host y http.port.
network.host: localhost
http.port: 9200
Guarde el archivo y salga de vim.
Ahora edite el archivo del servicio de búsqueda elástica para la configuración de bloqueo de memoria mlockall.
vim /usr/lib/systemd/system/elasticsearch.service
Descomente la línea LimitMEMLOCK.
LimitMEMLOCK=infinity
Guarde el archivo y salga.
Edite la configuración predeterminada de Elasticsearch en el directorio /etc/default.
vim /etc/default/elasticsearch
Descomente la línea 60 y asegúrese de que el valor sea 'ilimitado'.
MAX_LOCKED_MEMORY=unlimited
Guardar y salir.
La configuración de Elasticsearch ha finalizado. Elasticsearch se ejecutará bajo la dirección IP del host local con el puerto 9200 y deshabilitamos la memoria de intercambio al habilitar mlockall en el servidor de Ubuntu.
Vuelva a cargar el archivo del servicio Elasticsearch y permita que se ejecute en el momento del arranque, luego inicie el servicio.
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch
Espere un segundo para que se ejecute Elasticsearch, luego verifique el puerto abierto en el servidor, asegúrese de que el 'estado' para el puerto 9200 sea 'ESCUCHAR'.
netstat -plntu
Luego verifique el bloqueo de memoria para asegurarse de que mlockall esté habilitado. También verifique que Elasticsearch se esté ejecutando con los siguientes comandos.
curl -XGET 'localhost:9200/_nodes?filter_path=**.mlockall&pretty'
curl -XGET 'localhost:9200/?pretty'
Verá los resultados a continuación.
Paso 3:instalar y configurar Kibana con Nginx
En este paso, instalaremos y configuraremos Kibana detrás de un servidor web Nginx. Kibana escuchará solo en la dirección IP del host local y Nginx actuará como proxy inverso para la aplicación Kibana.
Instale Kibana con este comando apt:
sudo apt-get install -y kibana
Ahora edite el archivo de configuración kibana.yml.
vim /etc/kibana/kibana.yml
Descomente las líneas server.port, server.hos y elasticsearch.url.
server.port: 5601
server.host: "localhost"
elasticsearch.url: "http://localhost:9200"
Guarde el archivo y salga de vim.
Agregue Kibana para que se ejecute en el arranque e inícielo.
sudo systemctl enable kibana
sudo systemctl start kibana
Kibana se ejecutará en el puerto 5601 como aplicación de nodo.
netstat -plntu
La instalación de Kibana está lista, ahora necesitamos instalar Nginx y configurarlo como un proxy inverso para poder acceder a Kibana desde la dirección IP pública.
A continuación, instale los paquetes Nginx y apache2-utils.
sudo apt-get install -y nginx apache2-utils
Apache2-utils es un paquete que contiene herramientas para el servidor web que también funcionan con Nginx, usaremos la autenticación básica htpasswd para Kibana.
Se ha instalado Nginx. Ahora necesitamos crear un nuevo archivo de configuración de host virtual en el directorio de sitios disponibles de Nginx. Crea un nuevo archivo 'kibana' con vim.
cd /etc/nginx/
vim sites-available/kibana
Pegue la configuración a continuación.
server {
listen 80;
server_name elk-stack.co;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/.kibana-user;
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;
}
}
Guarde el archivo y salga de vim
Cree un nuevo archivo de autenticación básica con el comando htpasswd.
sudo htpasswd -c /etc/nginx/.kibana-user admin
TYPE YOUR PASSWORD
Active el host virtual de kibana creando un enlace simbólico desde el archivo de kibana en 'sitios disponibles' al directorio 'sitios habilitados'.
ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/
Pruebe la configuración de nginx y asegúrese de que no haya ningún error, luego agregue nginx para que se ejecute en el momento del arranque y reinicie nginx.
nginx -t
systemctl enable nginx
systemctl restart nginx
Paso 4:instalar y configurar Logstash
En este paso, instalaremos y configuraremos Logsatash para centralizar los registros del servidor desde las fuentes del cliente con filebeat, luego filtraremos y transformaremos todos los datos (Syslog) y los transportaremos al almacenamiento (Elasticsearch).
Instale Logstash 5 con el siguiente comando apt.
sudo apt-get install -y logstash
Edite el archivo de hosts con vim.
vim /etc/hosts
Agregue la dirección IP y el nombre de host del servidor.
10.0.15.10 elk-master
Guarde el archivo de hosts y salga del editor.
Ahora genere un nuevo archivo de certificado SSL con OpenSSL para que las fuentes del cliente puedan identificar el servidor elástico.
cd /etc/logstash/
openssl req -subj /CN=elk-master -x509 -days 3650 -batch -nodes -newkey rsa:4096 -keyout logstash.key -out logstash.crt
Cambie el '/CN ' valor al nombre de host del servidor elástico.
Los archivos de certificado se crearán en el directorio '/etc/logstash/'.
A continuación, crearemos los archivos de configuración para logstash. Crearemos un archivo de configuración 'filebeat-input.conf' como archivo de entrada de filebeat, 'syslog-filter.conf' para el procesamiento de syslog y luego un archivo 'output-elasticsearch.conf' para definir la salida de Elasticsearch.
Vaya al directorio de configuración de logstash y cree los nuevos archivos de configuración en el directorio 'conf.d'.
cd /etc/logstash/
vim conf.d/filebeat-input.conf
Ingrese la configuración, pegue la configuración a continuación.
input {
beats {
port => 5443
type => syslog
ssl => true
ssl_certificate => "/etc/logstash/logstash.crt"
ssl_key => "/etc/logstash/logstash.key"
}
}
Guardar y salir.
Cree el archivo syslog-filter.conf.
vim conf.d/syslog-filter.conf
Pegue la configuración a continuación.
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}" ]
}
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
}
}
Usamos un complemento de filtro llamado 'grok ' para analizar los archivos syslog.
Guardar y salir.
Cree el archivo de configuración de salida 'output-elasticsearch.conf'.
vim conf.d/output-elasticsearch.conf
Pegue la configuración a continuación.
output {
elasticsearch { hosts => ["localhost:9200"]
hosts => "localhost:9200"
manage_template => false
index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}
Guardar y salir.
Cuando haya terminado, agregue logstash para iniciar en el momento del arranque e inicie el servicio.
sudo systemctl enable logstash
sudo systemctl start logstash
Paso 5:instalar y configurar Filebeat en un cliente Ubuntu
Conéctese al servidor como root con una cuenta ssh.
ssh [email protected]
Copie el archivo del certificado al cliente con el comando scp.
scp [email protected]:/etc/logstash/logstash.crt .
Edite el archivo de hosts y agregue la dirección IP de elk-master.
vim /etc/hosts
Agregue la siguiente configuración al final del archivo.
10.0.15.10 elk-master
Guardar y salir.
Ahora necesitamos agregar la clave elástica al servidor elk-client1.
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
Usaremos el repositorio elástico con transporte de descarga https, por lo que debemos instalar el paquete 'apt-transport-https' en el servidor.
sudo apt-get install -y apt-transport-https
Agregue el repositorio elástico y actualice todos los repositorios de Ubuntu.
echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list
sudo apt-get update
Ahora instala 'filebeat' con el comando apt.
sudo apt-get install -y filebeat
A continuación, vaya al directorio de configuración de filebeat y edite el archivo 'filebeat.yml' con vim.
cd /etc/filebeat/
vim filebeat.yml
Agregue nuevos archivos de registro en la configuración de rutas.
paths:
- /var/log/auth.log
- /var/log/syslog
Establezca el tipo de documento en 'syslog'.
document-type: syslog
Deshabilite la salida de búsqueda elástica agregando comentarios a las líneas.
#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch:
# Array of hosts to connect to.
# hosts: ["localhost:9200"]
Habilite la salida de logstash, descomente la configuración y cambie el valor como se muestra a continuación.
output.logstash:
# The Logstash hosts
hosts: ["elk-master:5443"]
bulk_max_size: 2048
ssl.certificate_authorities: ["/etc/filebeat/logstash.crt"]
template.name: "filebeat"
template.path: "filebeat.template.json"
template.overwrite: false
Guardar y salir.
Mueva el archivo de certificado al directorio de filebeat.
mv ~/logstash.crt /etc/filebeat/
Inicie filebeat y agréguelo para que se ejecute en el momento del arranque.
sudo systemctl start filebeat
sudo systemctl enable filebeat
Consulta el estado del servicio.
sudo systemctl status filebeat
Paso 6:instalar y configurar Filebeat en un cliente CentOS
Los Beats son transportadores de datos, agentes livianos que se pueden instalar en los nodos del cliente para enviar grandes cantidades de datos desde la máquina del cliente al servidor de Logstash o Elasticsearch. Hay 4 beats disponibles, 'Filebeat' para 'Archivos de registro', 'Metricbeat' para 'Métricas', 'Packetbeat' para 'Datos de red' y 'Winlogbeat' para el 'Registro de eventos' del cliente de Windows.
En este tutorial, le mostraré cómo instalar y configurar 'Filebeat' para enviar datos de registro al servidor logstash a través de una conexión SSL segura.
Copie el archivo de certificado del servidor elástico al servidor cliente1. Inicie sesión en el servidor cliente1.
ssh [email protected]
Copie el archivo del certificado con el comando scp.
scp [email protected]:/etc/logstash/logstash.crt .
TYPE elk-server password
Edite el archivo de hosts y agregue la dirección del servidor elk-master.
vim /etc/hosts
Agregue la dirección del servidor elk-master.
10.0.15.10 elk-master
Guardar y salir.
A continuación, importe la clave elástica al servidor elk-client2.
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Agregar repositorio elástico al servidor.
cd /etc/yum.repos.d/
vim elastic.repo
Pegue la configuración a continuación.
[elastic-5.x]
name=Elastic repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
Guardar y salir.
Instale filebeat con este comando yum.
sudo yum -y install filebeat
Se ha instalado Filebeat, ahora ve al directorio de configuración y edita el archivo 'filebeat.yml'.
cd /etc/filebeat/
vim filebeat.yml
En la línea 21 de la sección de rutas, agregue algunos archivos de registro nuevos, agregaremos dos archivos aquí:'/var/log/secure' para la actividad ssh y '/var/log/messages' para el registro del servidor.
paths:
- /var/log/secure
- /var/log/messages
Agregue una nueva configuración en la línea 26 para definir el tipo de archivo en 'syslog'.
document-type: syslog
Por defecto, filebeat usa elasticsearch como salida. En este tutorial, lo cambiaremos a logshtash. Deshabilite la salida de búsqueda elástica agregando comentarios a las líneas 83 y 85.
Deshabilite la salida de búsqueda elástica.
#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch:
# Array of hosts to connect to.
# hosts: ["localhost:9200"]
Ahora agregue la nueva configuración de salida de logstash, descomente la configuración de salida de logstash y cambie todos los valores a los que se muestran en la configuración a continuación.
output.logstash:
# The Logstash hosts
hosts: ["elk-master:5443"]
bulk_max_size: 2048
ssl.certificate_authorities: ["/etc/filebeat/logstash.crt"]
template.name: "filebeat"
template.path: "filebeat.template.json"
template.overwrite: false
Guardar y salir.
Agregue filebeat para comenzar en el momento del arranque e inícielo.
sudo systemctl enable filebeat
sudo systemctl start filebeat
Ahora puede comprobar y ver el archivo de registro de Filebeat para asegurarse de que se está ejecutando correctamente.
tail -f /var/log/filebeat/filebeat
Paso 8 - Prueba
Abra su navegador web y visite el dominio de pila elástica que configuró en la configuración de nginx, el mío es 'elk-stack.co', escriba el nombre de usuario administrador con su contraseña y presione Entrar para iniciar sesión en el panel de control de Kibana.
Cree un nuevo índice predeterminado 'filebeat-* ' y haga clic en 'Crear '.
Se ha creado el índice predeterminado. Si tiene varios latidos en la pila elástica, puede configurar un latido predeterminado con solo hacer clic en la 'estrella botón '.
Ir a 'Descubrir ' y verá todos los archivos de registro de los servidores elk-client1 y elk-client2.
Un ejemplo de salida JSON del registro del servidor elk-client1 para un inicio de sesión ssh no válido.
Y hay mucho más que puede hacer con el panel de control de Kibana, ¡pruébelo!
Elastic Stack se instaló en un servidor Ubuntu 16.04, filebeat se instaló en servidores de cliente Ubuntu y CentOS.