Búsqueda elástica es un motor de búsqueda de código abierto basado en Lucene, desarrollado en Java. Proporciona un motor de búsqueda de texto completo distribuido y multiinquilino con una interfaz web HTTP Dashboard (Kibana). Los datos se consultan, recuperan y almacenan con un esquema de documento JSON. Elasticsearch es un motor de búsqueda escalable que se puede utilizar para buscar todo tipo de documentos de texto, incluidos los archivos 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. Proporciona canalización en tiempo real para la recopilación de datos. Logstash recopilará sus datos de registro, los convertirá en documentos JSON y los almacenará en Elasticsearch.
Kibana es una herramienta de visualización de datos de código abierto para Elasticsearch. Kibana proporciona una bonita interfaz web de tablero. Le permite administrar y visualizar datos de Elasticsearch. No solo es hermoso, sino también poderoso.
En este tutorial, le mostraré cómo instalar y configurar Elastic Stack en un servidor CentOS 7 para monitorear los registros del servidor. Luego, le mostraré cómo instalar 'Elastic beats' en un sistema operativo cliente CentOS 7 y Ubuntu 16.04.
Requisitos previos
- CentOS 7 de 64 bits con 4 GB de RAM - elk-master
- CentOS 7 de 64 bits con 1 GB de RAM - cliente1
- Ubuntu 16.04 de 64 bits con 1 GB de RAM - cliente2
Paso 1:preparar el sistema operativo
En este tutorial, deshabilitaremos SELinux en el servidor CentOS 7. Edite el archivo de configuración de SELinux.
vim /etc/sysconfig/selinux
Cambie el valor de SELinux de aplicar a deshabilitado.
SELINUX=disabled
Luego reinicie el servidor.
reboot
Vuelva a iniciar sesión en el servidor y compruebe el estado de SELinux.
getenforce
Asegúrate de que el resultado esté deshabilitado.
Paso 2: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. Instalaré Java 8 desde el paquete rpm oficial de Oracle.
Descargue Java 8 JDK con el comando wget.
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http:%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u77-b02/jdk-8u77-linux-x64.rpm"
Luego instálelo con este comando rpm;
rpm -ivh jdk-8u77-linux-x64.rpm
Por último, compruebe la versión de Java JDK para asegurarse de que funciona correctamente.
java -version
Verá la versión Java del servidor.
Paso 3:instalar y configurar Elasticsearch
En este paso, instalaremos y configuraremos Elasticsearch. Instalaré Elasticsearch desde un paquete rpm proporcionado por elastic.co y lo configuraré para que se ejecute en localhost (para que la configuración sea segura y garantizar que no se pueda acceder desde el exterior).
Antes de instalar Elasticsearch, agregue la clave elastic.co al servidor.
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
A continuación, descargue Elasticsearch 5.1 con wget y luego instálelo.
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.1.1.rpm
rpm -ivh elasticsearch-5.1.1.rpm
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 un comentario en la línea 40. Esto deshabilita el intercambio de memoria para Elasticsearch.
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 del editor.
Ahora edite el archivo elasticsearch.service para la configuración de bloqueo de memoria.
vim /usr/lib/systemd/system/elasticsearch.service
Descomente la línea LimitMEMLOCK.
LimitMEMLOCK=infinity
Guardar y salir.
Edite el archivo de configuración sysconfig para Elasticsearch.
vim /etc/sysconfig/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á en la dirección IP del host local en el puerto 9200, deshabilitamos el intercambio de memoria al habilitar mlockall en el servidor CentOS.
Vuelva a cargar systemd, habilite Elasticsearch para que se inicie en el momento del arranque y, a continuación, inicie el servicio.
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch
Espere un segundo para que se inicie Eelasticsearch, luego verifique los puertos abiertos en el servidor, asegúrese de que el 'estado' del puerto 9200 sea 'ESCUCHAR'.
netstat -plntu
Luego verifique el bloqueo de memoria para asegurarse de que mlockall esté habilitado y verifique que Elasticsearch se esté ejecutando con los comandos a continuación.
curl -XGET 'localhost:9200/_nodes?filter_path=**.mlockall&pretty'
curl -XGET 'localhost:9200/?pretty'
Verá los resultados a continuación.
Paso 4:instalar y configurar Kibana con Nginx
En este paso, instalaremos y configuraremos Kibana con un servidor web Nginx. Kibana escuchará en la dirección IP del host local y Nginx actuará como un proxy inverso para la aplicación Kibana.
Descarga Kibana 5.1 con wget, luego instálalo con el comando rpm:
wget https://artifacts.elastic.co/downloads/kibana/kibana-5.1.1-x86_64.rpm
rpm -ivh kibana-5.1.1-x86_64.rpm
Ahora edite el archivo de configuración de Kibana.
vim /etc/kibana/kibana.yml
Quite el comentario de las líneas de configuración para server.port, server.host y elasticsearch.url.
server.port: 5601
server.host: "localhost"
elasticsearch.url: "http://localhost:9200"
Guardar y salir.
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á terminada. Ahora necesitamos instalar Nginx y configurarlo como proxy inverso para poder acceder a Kibana desde la dirección IP pública.
Nginx está disponible en el repositorio de Epel, instale epel-release con yum.
yum -y install epel-release
A continuación, instale el paquete Nginx y httpd-tools.
yum -y install nginx httpd-tools
El paquete httpd-tools contiene herramientas para el servidor web, usaremos la autenticación básica htpasswd para Kibana.
Edite el archivo de configuración de Nginx y elimine el 'servidor { } ' para que podamos agregar una nueva configuración de host virtual.
cd /etc/nginx/
vim nginx.conf
Elimina el bloqueo del servidor { }.
Guarde el archivo y salga de vim.
Ahora necesitamos crear un nuevo archivo de configuración de host virtual en el directorio conf.d. Cree el nuevo archivo 'kibana.conf' con vim.
vim /etc/nginx/conf.d/kibana.conf
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;
}
}
Guardar y salir.
Luego cree un nuevo archivo de autenticación básica con el comando htpasswd.
sudo htpasswd -c /etc/nginx/.kibana-user admin
TYPE YOUR PASSWORD
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 e inicie Nginx.
nginx -t
systemctl enable nginx
systemctl start nginx
Paso 5:instalar y configurar Logstash
En este paso, instalaremos Logsatash y lo configuraremos para centralizar los registros del servidor de los clientes con filebeat, luego filtraremos y transformaremos los datos de Syslog y los moveremos al alijo (Elasticsearch).
Descarga Logstash e instálalo con rpm.
wget https://artifacts.elastic.co/downloads/logstash/logstash-5.1.1.rpm
rpm -ivh logstash-5.1.1.rpm
Genere un nuevo archivo de certificado SSL para que el cliente pueda identificar el servidor elástico.
Vaya al directorio tls y edite el archivo openssl.cnf.
cd /etc/pki/tls
vim openssl.cnf
Agregue una nueva línea en la sección '[ v3_ca ]' para la identificación del servidor.
[ v3_ca ]
# Server IP Address
subjectAltName = IP: 10.0.15.10
Guardar y salir.
Genere el archivo de certificado con el comando openssl.
openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout /etc/pki/tls/private/logstash-forwarder.key -out /etc/pki/tls/certs/logstash-forwarder.crt
Los archivos de certificado se pueden encontrar en los directorios '/etc/pki/tls/certs/' y '/etc/pki/tls/private/'.
A continuación, crearemos nuevos archivos de configuración para Logstash. Crearemos un nuevo archivo 'filebeat-input.conf' para configurar las fuentes de registro para filebeat, luego un archivo 'syslog-filter.conf' para el procesamiento de syslog y el 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 subdirectorio 'conf.d'.
cd /etc/logstash/
vim conf.d/filebeat-input.conf
Configuración de entrada:pegue la configuración a continuación.
input {
beats {
port => 5443
ssl => true
ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
ssl_key => "/etc/pki/tls/private/logstash-forwarder.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.
Finalmente, agregue logstash para comenzar en el momento del arranque e inicie el servicio.
sudo systemctl enable logstash
sudo systemctl start logstash
Paso 6:instalar y configurar Filebeat en el 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 transferir archivos de registro de datos al servidor Logstash a través de una conexión SSL.
Inicie sesión en el servidor cliente1. Luego copie el archivo de certificado del servidor elástico al servidor cliente1.
ssh [email protected]
Copie el archivo del certificado con el comando scp.
scp [email protected]:~/logstash-forwarder.crt .
TYPE elk-server password
Cree un nuevo directorio y mueva el archivo de certificado a ese directorio.
sudo mkdir -p /etc/pki/tls/certs/
mv ~/logstash-forwarder.crt /etc/pki/tls/certs/
A continuación, importe la clave elástica en el servidor cliente1.
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Descarga Filebeat e instálalo con rpm.
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.1.1-x86_64.rpm
rpm -ivh filebeat-5.1.1-x86_64.rpm
Filebeat se ha instalado, vaya al directorio de configuración y edite el archivo 'filebeat.yml'.
cd /etc/filebeat/
vim filebeat.yml
En la sección de rutas en la línea 21, agregue los nuevos archivos de registro. Agregaremos dos archivos '/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 los archivos de tipo syslog.
document-type: syslog
Filebeat utiliza Elasticsearch como destino de salida de forma predeterminada. En este tutorial, lo cambiaremos a Logshtash. Deshabilite la salida de Elasticsearch agregando comentarios en 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 la configuración que se muestra a continuación.
output.logstash:
# The Logstash hosts
hosts: ["10.0.15.10:5443"]
bulk_max_size: 1024
ssl.certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]
template.name: "filebeat"
template.path: "filebeat.template.json"
template.overwrite: false
Guarde el archivo y salga de vim.
Agregue Filebeat para iniciar en el momento del arranque e inícielo.
sudo systemctl enable filebeat
sudo systemctl start filebeat
Paso 7:instalar y configurar Filebeat en el cliente de Ubuntu
Conéctate al servidor por ssh.
ssh [email protected]
Copie el archivo del certificado al cliente con el comando scp.
scp [email protected]:~/logstash-forwarder.crt .
Cree un nuevo directorio para el archivo de certificado y mueva el archivo a ese directorio.
sudo mkdir -p /etc/pki/tls/certs/
mv ~/logstash-forwarder.crt /etc/pki/tls/certs/
Agregue la clave elástica al servidor.
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
Descargue el paquete .deb de Filebeat e instálelo con el comando dpkg.
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.1.1-amd64.deb
dpkg -i filebeat-5.1.1-amd64.deb
Vaya al directorio de configuración de filebeat y edite el archivo 'filebeat.yml' con vim.
cd /etc/filebeat/
vim filebeat.yml
Agregue las nuevas rutas del archivo de registro en la sección de 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 que se muestran a continuación.
#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch:
# Array of hosts to connect to.
# hosts: ["localhost:9200"]
Habilite la salida de logstash, descomente la configuración y cambie los valores como se muestra a continuación.
output.logstash:
# The Logstash hosts
hosts: ["10.0.15.10:5443"]
bulk_max_size: 1024
ssl.certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]
template.name: "filebeat"
template.path: "filebeat.template.json"
template.overwrite: false
Guarde el archivo y salga de vim.
Agregue Filebeat para iniciar en el momento del arranque e inícielo.
sudo systemctl enable filebeat
sudo systemctl start filebeat
Consulta el estado del servicio.
systemctl status filebeat
Paso 8:prueba de Elastic Stack
Abra su navegador web y visite el dominio de pila elástica que utilizó en la configuración de Nginx, el mío es 'elk-stack.co'. Inicie sesión como 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 el botón 'Crear'.
Se ha creado el índice predeterminado. Si tiene varios ritmos en la pila elástica, puede configurar el ritmo predeterminado con solo un clic en el botón 'estrella'.
Vaya a 'Descubrir ' y verá todo el archivo 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 de lo que puede hacer con el panel de control de Kibana, simplemente juegue con las opciones disponibles.
El Elastic Stack se ha instalado en un servidor CentOS 7. Filebeat se ha instalado en un CentOS 7 y un cliente de Ubuntu.