Configuración de Logstash en Droplet para reenviar logs de Nginx a OpenSearch administrado

Introducción

El mantenimiento de los registros de los servidores web es fundamental para que tu sitio web funcione sin problemas, resolver dificultades y comprender el comportamiento de los usuarios. Si estás utilizando Nginx, genera registros de acceso y errores llenos de información valiosa. Para administrar y analizar estos registros, puedes utilizar Logstash para procesar y reenviarlos, y DigitalOcean OpenSearch para indexar y visualizar la información.

En este tutorial, nos guiará a través de la instalación de Logstash en una Droplet, configurándola para recolectar tus registros de Nginx y enviándolos a DigitalOcean OpenSearch.

Prerrequisitos

Caso de Uso

Puede que necesite esta configuración si quiere:

  • Monitorear y resolver problemas: Rastrear el rendimiento y los errores del servidor web analizando los registros en tiempo real.
  • Analizar el rendimiento: Obtener insumos sobre los patrones de tráfico web y las métricas del servidor.
  • Centralizar los registros: Agrupar los registros de varios servidores Nginx en una sola instancia de OpenSearch para un manejo más fácil.

Nota: El tiempo de configuración debería ser de alrededor de 30 minutos.

Paso 1 – Instalar Logstash en los Droplet

Logstash se puede instalar utilizando archivos binarios disponibles aquí o repositorios de paquetes personalizados para tu sistema operativo. Para un manejo y actualizaciones más fáciles, generalmente se recomienda utilizar repositorios de paquetes. Puedes usar el gestor de paquetes APT en sistemas basados en Debian, como Ubuntu, mientras que en sistemas basados en Red Hat, como CentOS o RHEL, puedes usar yum. ambos métodos aseguran que Logstash se integre correctamente en la infraestructura de gestión de paquetes de tu sistema, simplificando la instalación y el mantenimiento.

En esta sección, nos guiará a través de la instalación de Logstash utilizando tanto el gestor de paquetes apt como yum, asegurándonos de que puedas configurar Logstash en tu Droplet sin importar tu distribución de Linux.

Para encontrar el Sistema Operativo, ejecute el siguiente comando:

cat /etc/os-release

Para Sistemas Basados en APT (Ubuntu/Debian)

1.Descargue y instale la Clave de Firma Pública:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic-keyring.gpg

2.Instale apt-transport-https si todavía no está instalado:

sudo apt-get install apt-transport-https

3.Agregue y guarde la definición del repositorio de Logstash en su lista de fuentes apt:

echo "deb [signed-by=/usr/share/keyrings/elastic-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list

Nota: Asegúrese de no utilizar los comandos add-apt-repository ya que pueden agregar una entrada deb-src que no es compatible. Si encuentra un error relacionado con una entrada deb-src, elimínela del archivo /etc/apt/sources.list. Si ha agregado la entrada deb-src, verá un error similar al siguiente:

Unable to find expected entry 'main/source/Sources' in Release file (Wrong sources.list entry or malformed file)

Si simplemente elimina la entrada deb-src del archivo /etc/apt/sources.list, la instalación应该 funcione como esperado.

4. Actualice el índice de paquetes para incluir el nuevo repositorio:

sudo apt-get update

5. Instale Logstash usando el gestor de paquetes apt:

sudo apt-get install logstash

6. Inicie Logstash y active automáticamente en arranque:

sudo systemctl start logstash
sudo systemctl enable logstash

Ahora Logstash está instalado y corriendo en su sistema.

Para Sistemas Basados en YUM (CentOS/RHEL)

1. Descargue e instale la clave de firma pública para el repositorio de Logstash:

sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

2. Cree un archivo de repositorio para Logstash en /etc/yum.repos.d/. Por ejemplo, cree un archivo llamado logstash.repo. Puede copiar y pegar el contenido de abajo para crear el archivo y actualizar su contenido:

sudo tee /etc/yum.repos.d/logstash.repo > /dev/null <<EOF
[logstash-8.x]
name=Elastic repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF

El repositorio está listo para usar.

3. Instale Logstash usando el gestor de paquetes YUM:

sudo yum install logstash

4. Inicie Logstash y active para arrancar automáticamente:

sudo systemctl start logstash
sudo systemctl enable logstash

Logstash ya está instalado y ejecutándose en su sistema.

Paso 2 – Instalar el complemento de salida de Open Search

Puede instalar el complemento de salida de OpenSearch ejecutando el siguiente comando:

/usr/share/logstash/bin/logstash-plugin install logstash-output-opensearch

Puede encontrar más información sobre el complemento en este repositorio de complementos logstash-output-opensearch.

Paso 3 – Configurar Logstash para enviar los registros de Nginx a OpenSearch

Un pipeline de Logstash consta de tres etapas principales: entrada, filtro y salida. Los pipelines de Logstash utilizan plugins. Puede utilizar plugins de la comunidad o crear sus propios.

  • Entrada: Esta etapa recoge datos de varias fuentes. Logstash admite varios plugins de entrada para manejar fuentes de datos como archivos de registros, bases de datos, colas de mensajes y servicios en la nube.
  • Filtro: Esta etapa procesa y transforma los datos recogidos en la etapa de entrada. Los filtros pueden modificar, enriquecer y estructurar los datos para hacerlos más útiles y facilitar su análisis.
  • Salida: En esta etapa se envían los datos procesados a un destino. Los destinos pueden incluir bases de datos, archivos y almacenes de datos como OpenSearch.

Ahora vamos a crear un pipeline.

1.Cree un archivo de configuración de Logstash en /etc/logstash/conf.d/nginx-to-opensearch.conf con el siguiente contenido:

input {
  file {
    path => "/var/log/nginx/access.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => ["nginx_access"]
  }
  file {
    path => "/var/log/nginx/error.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => ["nginx_error"]
  }
}
filter {
  if "nginx_access" in [tags] {
    grok {
      match => { "message" => "%{IPORHOST:client_ip} - %{USER:ident} \[%{HTTPDATE:timestamp}\] \"%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:http_version}\" %{NUMBER:response} %{NUMBER:bytes} \"%{DATA:referrer}\" \"%{DATA:user_agent}\"" }
    }
    mutate {
      remove_field => ["message", "[log][file][path]", "[event][original]"]
    }
  } else if "nginx_error" in [tags] {
    grok {
      match => { "message" => "\[%{TIMESTAMP_ISO8601:timestamp}\] \[%{LOGLEVEL:level}\] \[%{DATA:pid}\] \[%{DATA:tid}\] %{GREEDYDATA:error_message}" }
    }
    mutate {
      remove_field => ["message", "[log][file][path]", "[event][original]"]
    }
  }
}
output {
  if "nginx_access" in [tags] {
    opensearch {
      hosts => ["https://<OpenSearch-Hostname>:25060"]
      user => "doadmin"
      password => "<your_password>"
      index => "nginx_access-%{+YYYY.MM.dd}"
      ssl => true
      ssl_certificate_verification => true
    }
  } else if "nginx_error" in [tags] {
    opensearch {
      hosts => ["https://<OpenSearch-Hostname>:25060"]
      user => "doadmin"
      password => "<your_password>"
      index => "nginx_error-%{+YYYY.MM.dd}"
      ssl => true
      ssl_certificate_verification => true
    }
  }
}

Reemplace:

  • OpenSearch-Hostname por el hostname del servidor OpenSearch.
  • <your_password> con su contraseña de OpenSearch.

2.Aplique la nueva configuración reiniciando Logstash:

sudo systemctl restart logstash

3.Revise los registros de Logstash para asegurarse de que está procesando y reenviando los datos correctamente:

sudo tail -f /var/log/logstash/logstash-plain.log

Resumen de la configuración de nginx-to-opensearch.conf

ENTRADA

El bloque input configura dos entradas de archivo para leer registros:

Registros de Nginx:
Rutas:
/var/log/nginx/access.log (para registros de acceso)
/var/log/nginx/error.log (para registros de error)
Posición de Inicio: beginning – Lee desde el principio de los archivos de registro.
Ruta de Sincedb: /dev/null – Deshabilita el seguimiento para la lectura continua.
Etiquetas:
["nginx_access"] para registros de acceso
["nginx_error"] para registros de error.

Nota: Asegúrese de que el servicio de Logstash tenga acceso a las rutas de entrada.

FILTRAR

El bloque filter procesa los registros de acceso según sus etiquetas:

Procesamiento de Registros:
Registros de Acceso:
Utiliza un filtro grok para parsear el formato de los registros de acceso, extraendo campos como client_ip, timestamp, method, request, http_version, response, bytes, referrer y user_agent.
Elimina la message original y ciertos campos de metadatos.

Registros de Error:
Busca la etiqueta nginx_error y aplica un filtro grok para extraer campos como timestamp, level, pid, tid y error_message.
También elimina los campos message y de metadatos.

SALIDA

El bloque output dirige eventos a OpenSearch según sus etiquetas:

Enrutamiento a OpenSearch:
Para ambos registros de acceso y de error, especifica:
Hosts: URL de la instancia de OpenSearch.
Usuario: doadmin para la autenticación.
Contraseña: Su contraseña de OpenSearch.
Índice:
nginx_access-%{+YYYY.MM.dd} para los registros de acceso
nginx_error-%{+YYYY.MM.dd} para los registros de error
Configuración de SSL: Habilita SSL y la verificación del certificado.

Paso 4 – Configurar OpenSearch

1.Abre su navegador web y vaya a la URL de la tabla de OpenSearch:

https://<OpenSearch-Hostname>

Reemplaza OpenSearch-Hostname con el nombre de host del servidor OpenSearch.

2.Cree un patrón de índice.
a. En el panel izquierdo, vaya a Gestión > Gestión de tableros > Patrones de índice.
b. Haga clic en Crear patrón de índice en la parte superior derecha.
c. Introduzca nginx_access-* o nginx_error-* como el patrón de índice para coincidir con todos los índices creados por Logstash y haga clic en Siguiente paso.
d. Haga clic en Crear patrón de índice.

3.Asegúrese de que el patrón de índice se haya creado correctamente y esté visible en la lista de patrones de índice.

4.En el panel izquierdo, vaya a Descubrir y seleccione el patrón de índice que ha creado (nginx_access-* o nginx_error-*). Verifique que las entradas de registro estén visibles y indexadas correctamente.

5.Cree visualizaciones y tableros. Consulte Cómo crear un tablero en OpenSearch para obtener más detalles.

Solución de problemas

Comprobar Conexión

Puede verificar que Logstash puede conectarse a OpenSearch probando la conexión:

curl -u doadmin:your_password -X GET "https://<OpenSearch-Hostname>:25060/_cat/indices?v"

Reemplace:

  • OpenSearch-Hostname con el hostname del servidor de OpenSearch.
  • <your_password> con su contraseña de OpenSearch.

Ingestión de Datos

Puede asegurarse que los datos se indexan correctamente en OpenSearch utilizando el siguiente comando curl:

curl -u doadmin:your_password -X GET "http://<OpenSearch-Hostname>:25060/nginx-logs-*/_search?pretty"

Reemplace:

  • OpenSearch-Hostname con el hostname de su servidor de OpenSearch.
  • <your_password> con su contraseña de OpenSearch.

Configuración de la Firewall y Red

Asegúrese de que las reglas de la firewall y la configuración de la red permitan el tráfico entre Logstash y OpenSearch en el puerto 25060.

Conclusión

En este guía, aprendiste a configurar Logstash para recolectar y reenviar los logs de Nginx a OpenSearch.

Revisaste cómo utilizar los gestores de paquetes apt o yum, dependiendo de tu distribución de Linux, para poner a Logstash en funcionamiento en tu Droplets. También creaste y ajustaste el archivo de configuración de Logstash para asegurarte de que los logs de Nginx se analizan correctamente y se envían a OpenSearch. A continuación, configuraste un patrón de índice en los Paneles de OpenSearch Dashboards para verificar que los logs están siendo indexados correctamente y son visibles para análisis. Con estos pasos completados, ahora deberías tener una configuración funcional donde Logstash recolecta logs de Nginx y los envía a OpenSearch. Esta configuración te permite utilizar las potentes herramientas de búsqueda y visualización de OpenSearch para analizar los logs de tu servidor.

Si encuentras algún problema, revisa las recetas para la solución de problemas que hemos proporcionado y consulta la documentación de Logstash y la documentación de OpenSearch para más ayuda. El monitoreo periódico mantendrá a tu sistema de registro funcionando smooth y efectivamente.

Source:
https://www.digitalocean.com/community/tutorials/forward-nginx-logs-to-opensearch-using-logstash