Configuración de Elasticsearch para Análisis de Logs
El stack ELK (Elasticsearch, Logstash, Kibana) es la solucion de codigo abierto mas popular para analisis centralizado de logs. Permite recopilar logs de cientos de servidores, aplicaciones y dispositivos de red, indexarlos para busqueda rapida y visualizarlos en dashboards interactivos. Esta guia cubre la instalacion completa del stack y su configuracion para entornos de produccion en Linux.
Instalación de Elasticsearch
Elasticsearch requiere Java y se distribuye como paquete autonomo que incluye su propia version de OpenJDK. La instalacion desde el repositorio oficial de Elastic garantiza actualizaciones de seguridad automaticas y compatibilidad entre componentes del stack.
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/elastic-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list
sudo apt update
sudo apt install elasticsearch
Despues de instalar, edita el archivo de configuracion principal para ajustar los parametros del cluster. La configuracion minima para un nodo unico incluye el nombre del cluster, la interfaz de red y las opciones de descubrimiento.
# /etc/elasticsearch/elasticsearch.yml
cluster.name: logs-produccion
node.name: es-node-01
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
discovery.type: single-node
xpack.security.enabled: true
Para produccion, configura al menos 3 nodos para garantizar alta disponibilidad. Cada nodo debe tener un nombre unico y todos deben compartir el mismo cluster.name. Ajusta el heap JVM en /etc/elasticsearch/jvm.options asignando como maximo la mitad de la RAM disponible, sin exceder 31GB.
Configuración de Logstash y Pipelines
Logstash actua como el motor de procesamiento del stack. Recibe datos de multiples fuentes, los transforma mediante filtros y los envia a Elasticsearch u otros destinos. Su arquitectura de pipeline es extremadamente flexible y soporta cientos de plugins de entrada, filtro y salida.
sudo apt install logstash
Un pipeline tipico para logs de sistema se configura en /etc/logstash/conf.d/:
# /etc/logstash/conf.d/syslog.conf
input {
beats {
port => 5044
}
}
filter {
if [fields][log_type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
}
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
}
}
output {
elasticsearch {
hosts => ["https://localhost:9200"]
index => "syslog-%{+YYYY.MM.dd}"
user => "elastic"
password => "${ES_PASSWORD}"
}
}
El filtro grok es el componente mas importante para parsing de logs. Usa expresiones regulares con nombre para extraer campos estructurados de lineas de log no estructuradas. Elasticsearch proporciona patrones predefinidos para formatos comunes como Apache, Nginx, syslog y aplicaciones Java.
Kibana y Dashboards de Monitoreo
Kibana proporciona la interfaz de visualizacion para explorar y analizar los datos almacenados en Elasticsearch. Su instalacion es directa y se conecta a Elasticsearch mediante una configuracion minima.
sudo apt install kibana
# /etc/kibana/kibana.yml
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["https://localhost:9200"]
elasticsearch.username: "kibana_system"
elasticsearch.password: "contraseña_segura"
Una vez iniciado Kibana, accede a la interfaz web en el puerto 5601. El primer paso es crear un index pattern que coincida con tus indices de logs (por ejemplo, syslog-*). A partir de ahi puedes usar Discover para explorar logs individuales, Lens para crear visualizaciones interactivas y Dashboard para combinar multiples graficos en una vista unificada.
Para analisis de logs en produccion, crea dashboards que muestren metricas clave como: tasa de errores por servicio, latencia de respuestas, top 10 de hosts con mas errores y tendencias de volumen de logs a lo largo del tiempo. Las alertas de Kibana pueden notificarte automaticamente cuando las metricas superan umbrales criticos.
Gestión del Ciclo de Vida de Índices
Sin una politica de retencion adecuada, los indices de logs crecen indefinidamente hasta llenar el disco. Index Lifecycle Management (ILM) automatiza la transicion de indices entre fases caliente, tibia, fria y eliminacion.
PUT _ilm/policy/logs-policy
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
"max_size": "50GB",
"max_age": "1d"
}
}
},
"warm": {
"min_age": "7d",
"actions": {
"shrink": { "number_of_shards": 1 },
"forcemerge": { "max_num_segments": 1 }
}
},
"delete": {
"min_age": "30d",
"actions": {
"delete": {}
}
}
}
}
}
Esta politica hace rollover de los indices cuando alcanzan 50GB o 1 dia de antiguedad, los optimiza despues de 7 dias y los elimina a los 30 dias. Ajusta estos valores segun tus requisitos de retencion y capacidad de almacenamiento. Para entornos con requisitos de cumplimiento, considera mover indices antiguos a almacenamiento frio o snapshots antes de eliminarlos.