Búsqueda de sitios web

Reenviar registros de Apache a OpenSearch a través de Logstash


Introducción

La gestión eficaz de los registros del servidor web es crucial para mantener el rendimiento de su sitio web, solucionar problemas y obtener información sobre el comportamiento del usuario. Apache es uno de los servidores web más populares. Genera registros de acceso y errores que contienen información valiosa. Para administrar y analizar de manera eficiente estos registros, puede usar Logstash para procesarlos y reenviarlos a Managed OpenSearch de DigitalOcean para su indexación y visualización.

En este tutorial, lo guiaremos a través de la instalación de Logstash en un Droplet, su configuración para recopilar sus registros de Apache y enviarlos a Managed OpenSearch para su análisis.

Requisitos previos

  1. Droplet/s con el servidor web Apache instalado.
  2. Clúster OpenSearch administrado

Paso 1: instalar Logstash

Logstash se puede instalar utilizando archivos binarios O mediante los repositorios de paquetes. Para facilitar la administración y las actualizaciones, generalmente se recomienda utilizar repositorios de paquetes.

En esta sección, lo guiaremos en la instalación de Logstash en su Droplet usando los administradores de paquetes APT y YUM.

Identifiquemos el sistema operativo:

cat /etc/os-release

Para sistemas basados en APT (Ubuntu/Debian)

Descargue e 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

Es posible que necesites instalar el paquete apt-transport-https en Debian antes de continuar:

sudo apt-get install apt-transport-https

Guarde la definición del repositorio en /etc/apt/sources.list.d/elastic-8.x.list:

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

Utilice el método echo descrito anteriormente para agregar el repositorio de Logstash. No utilice add-apt-repository ya que también agregará una entrada deb-src, pero no proporcionamos un paquete fuente. Si ha agregado la entrada deb-src, verá un error como el siguiente:

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

Simplemente elimine la entrada deb-src del archivo /etc/apt/sources.list y la instalación debería funcionar como se esperaba.

Ejecute sudo apt-get update y el repositorio estará listo para su uso. Puedes instalarlo con:

sudo apt-get update && sudo apt-get install logstash

Para sistemas basados en YUM (CentOS/RHEL)

Descargue e instale la clave de firma pública:

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

Agregue lo siguiente en su archivo /etc/yum.repos.d/logstash.repo. Puede utilizar "tee" para actualizar y crear el archivo.

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

Su repositorio está listo para usar. Puedes instalarlo con:

sudo yum install logstash

Para obtener más información, consulte la guía Instalación de Logstash.

Paso 2: configurar Logstash para enviar registros a OpenSearch

Una canalización de Logstash consta de tres etapas principales: entrada, filtro y salida. Las canalizaciones de Logstash utilizan complementos. Puede utilizar complementos de la comunidad o crear los suyos propios.

  • Entrada: Esta etapa recopila datos de varias fuentes. Logstash admite numerosos complementos de entrada para manejar fuentes de datos como archivos de registro, bases de datos, colas de mensajes y servicios en la nube.

  • Filtro: Esta etapa procesa y transforma los datos recopilados en la etapa de entrada. Los filtros pueden modificar, enriquecer y estructurar los datos para hacerlos más útiles y fáciles de analizar.

  • Salida: Esta etapa envía los datos procesados a un destino. Los destinos pueden incluir bases de datos, archivos y almacenes de datos como OpenSearch.

Paso 3: instalar el complemento de salida de búsqueda abierta

El complemento de salida de OpenSearch se puede instalar ejecutando el siguiente comando:

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

Puede encontrar más información en este repositorio logstash-output-opensearch-plugin.

Ahora creemos una tubería:

Cree un nuevo archivo en la ruta /etc/logstash/conf.d/ llamado apache_pipeline.conf y copie el siguiente contenido.

input {
  file {
    path => "/var/log/apache2/access.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => "apache_access"
  }

  file {
    path => "/var/log/apache2/error.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"
    tags => "apache_error"
  }
}

filter {
  if "apache_access" in [tags] {
    grok {
        match => { "message" => "%{HTTPD_COMBINEDLOG}" }
    }
    mutate {
        remove_field => [ "message","[log][file][path]","[event][original]" ]
      }
   } else {
   grok {
        match => { "message" => "%{HTTPD24_ERRORLOG}" }
    }
   }
}

output {
  if "apache_access" in [tags] {
  opensearch {
    hosts       => "https://<OpenSearch-Hostname>:25060"
    user        => "doadmin"
    password    => "<your_password>"
    index       => "apache_access"
    ssl_certificate_verification => true
  }

  } else {
  opensearch {
    hosts       => "https://<OpenSearch-Hostname>:25060"
    user        => "doadmin"
    password    => "<your_password>"
    index       => "apache_error"
    ssl_certificate_verification => true
  }
  }
}

Reemplace con el nombre de host de su servidor OpenSearch y con su contraseña de OpenSearch.

Analicemos la configuración anterior.

  • ENTRADA: Esto se utiliza para configurar una fuente para los eventos. Aquí se utiliza el complemento de entrada "archivo".

  • ruta => “/var/log/apache2/access.log”: especifica la ruta al archivo de registro de acceso de Apache que leerá Logstash.

    Asegúrese de que el servicio Logstash tenga acceso a la ruta de entrada.

  • { }

  • start_position => “comienzo”: Define dónde Logstash debe comenzar a leer el archivo de registro. "comienzo" indica que Logstash debe comenzar a procesar el archivo desde el principio, en lugar de desde el final.

  • sincedb_path => “/dev/null”: especifica la ruta a un archivo sincedb. Logstash utiliza los archivos Sincedb para realizar un seguimiento de la posición actual en los archivos de registro, lo que le permite continuar donde lo dejó en caso de reinicios o fallas.

  • tags => “apache_access”: Asigna una etiqueta a los eventos leídos desde esta entrada. Las etiquetas son útiles para identificar y filtrar eventos dentro de Logstash, y a menudo se usan en las etapas de salida o filtrado de la configuración. Estamos usando etiquetas para este último.

  • FILTRO: se utiliza para procesar los eventos.

    Empezando con condicionales:

    (if "apache_access" in [tags]):
    

    Esto verifica si la etiqueta apache_access existe en el campo [etiquetas] de los eventos de registro entrantes. Usamos este condicional para aplicar el filtro GROK apropiado para el acceso de Apache y los registros de errores.

  • Filtro Grok (para registros de acceso de Apache):

    grok {
        match => { "message" => "%{HTTPD_COMBINEDLOG}" }
    }
    

    El filtro grok %{HTTPD_COMBINEDLOG} es un patrón predefinido en Logstash que se utiliza para analizar el formato de registro de acceso combinado de Apache. Esto extrae campos como dirección IP, marca de tiempo, método HTTP, URI, código de estado, etc., del campo de mensaje de los eventos entrantes.

  • Filtro de mutación Eliminar (opcional): después de analizar los registros de Apache, usamos mutate-remove para eliminar ciertos campos.

    mutate {
        remove_field => [ "message","[log][file][path]","[event][original]" ]
    }
    
  • Condición más: el bloque else se ejecuta si la etiqueta apache_access no está presente en [etiquetas]. Este bloque else contiene otro filtro GROK para los registros de errores de Apache.

    grok {
        match => { "message" => "%{HTTPD24_ERRORLOG}" }
    }
    

    Este filtro grok %{HTTPD24_ERRORLOG} analiza mensajes que coinciden con el formato de registro de errores de Apache. Extrae campos relevantes para los registros de errores como marca de tiempo, nivel de registro, mensaje de error, etc.

    Los patrones de GROK se pueden encontrar en: https://github.com/logstash-plugins/logstash-patterns-core/tree/main/patterns.

  • SALIDA: El complemento de salida envía eventos a un destino particular.

    El bloque de salida comienza con una condición if. Estamos usando condicionales if aquí

    if "apache_access" in [tags] {}
    

    Este if condicional se utiliza para enrutar registros a OpenSearch a dos índices separados, apache_error y apache_access.

    Exploremos el complemento OpenSearch Output:

    hosts            => "https://XXX:25060"  Your Open search Hostname
    user             => "doadmin"            Your Open search Username
    password         => "XXXXX"              OpenSearch Password
    index            => "apache_error"       Index name in OpenSearch
    ssl_certificate_verification => true     Enabled SSL certificate verification
    

Paso 4: inicie Logstash

Una vez configurado el Pipeline, inicie el servicio Logstash:

systemctl enable logstash.service
systemctl start logstash.service
systemctl status logstash.service

Paso 5: solución de problemas

Verificar conectividad

Puede verificar que Logstash pueda conectarse a OpenSearch probando la conectividad:

curl -u your_username:your_password -X GET "https://your-opensearch-server:25060/_cat/indices?v"

Reemplace <su-servidor-opensearch> con el nombre de host de su servidor OpenSearch y <su_nombre de usuario>, <su_contraseña> con sus credenciales de OpenSearch.

Ingestión de datos

Asegúrese de que los datos estén indexados correctamente en OpenSearch:

curl -u your_username:your_password -X GET "http://your-opensearch-server:25060/<your-index-name>/_search?pretty"

Reemplace <su-servidor-opensearch> con el nombre de host de su servidor OpenSearch y <su_nombre de usuario>, <su_contraseña> con sus credenciales de OpenSearch. De manera similar, <tu-nombre-de-índice> con el nombre del índice.

Configuración de red y firewall

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

Registros

Los registros de Logstash se pueden encontrar en /var/log/logstash/logstash-plain.log

Para obtener más información, consulte Solución de problemas.

Conclusión

En esta guía, explicamos cómo configurar Logstash para recopilar y reenviar registros de Apache a OpenSearch. Aquí hay un resumen rápido de lo que cubrimos:

Instalación de Logstash: cubrimos cómo usar los administradores de paquetes APT o YUM, según su distribución de Linux, para instalar Logstash en su Droplet.

Configuración de Logstash: creamos y ajustamos el archivo de configuración de Logstash para garantizar que los registros de Apache se analicen y envíen correctamente a OpenSearch.

Verificación en OpenSearch: configuramos un patrón de índice en los paneles de OpenSearch para confirmar que sus registros se indexan correctamente y son visibles para su análisis.

Una vez completados estos pasos, ahora debería tener una configuración funcional donde Logstash recopila registros de Apache y los envía a OpenSearch.

Artículos relacionados: