Recolectar y reenviar registros de Kubernetes de DigitalOcean (DOKS) a OpenSearch administrado por DigitalOcean

Introducción

Este tutorial muestra cómo recolectar y reenviar registros de un cluster DigitalOcean Kubernetes (DOKS) a una instancia DigitalOcean Managed OpenSearch utilizando AxoSyslog, un procesador de datos de seguridad escalable. Siga con este guía y aprenderá cómo configurar un sistema de registro robusto que capture y analice registros de sus aplicaciones Kubernetes, lo que facilita el monitoreo, la resolución de problemas y la seguridad de su infraestructura.

En este tutorial, utilizará AxoSyslog para reenviar registros de un cluster Kubernetes a OpenSearch.

Prerrequisitos

Antes de empezar, asegúrese de tener los siguientes prerequisitos en lugar:

  1. Necesitará acceso a una cuenta de Cloud de DigitalOcean para crear y administrar sus recursos de Kubernetes y OpenSearch.
  2. Debe instalar y configurar la herramienta de línea de comandos de DigitalOcean (CLI), doctl, en su máquina local.
  3. Un cluster Kubernetes de DigitalOcean (DOKS) en ejecución.
  4. Debe instalar el administrador de paquetes de Kubernetes, Helm, para administrar aplicaciones en Kubernetes.
  5. Debe tener familiaridad con Kubernetes, Helm, y los servicios administrados de DigitalOcean.

Caso de uso

Este proyecto es ideal para situaciones en las que necesita una solución de registro centralizado para monitorear y analizar los registros de varias aplicaciones que se ejecutan en un cluster de Kubernetes. Tanto si está administrando un pequeño conjunto de aplicaciones como una infraestructura a gran escala, recolectar y reenviar los registros a un cluster OpenSearch dedicado ayuda en:

  • Monitoreo de Seguridad: Detección y respuesta a incidentes de seguridad mediante el análisis de registros en tiempo real.
  • Solución de problemas: Identifique y resuelva rápidamente problemas en sus aplicaciones Kubernetes accediendo a registros detallados.
  • Cumplimiento de Regulaciones: Mantiene un registro de eventos para cumplir con las regulaciones de la industria.

Al integrar AxoSyslog con OpenSearch Gestionado de DigitalOcean, puede procesar y almacenar de manera eficiente grandes volúmenes de registros, lo que facilita extraer insights valiosos y mantener la salud y la seguridad de sus sistemas.

Paso 1 – Crear un clúster OpenSearch

En este paso, configurará el componente central de su sistema de registro, el clúster OpenSearch. OpenSearch será el destino para todos los registros que coleccione de su clúster Kubernetes. Creará una nueva instancia de OpenSearch en su región elegida en DigitalOcean ejecutando el siguiente comando.

doctl databases create opensearch-doks --engine opensearch --region lon1 --size db-s-1vcpu-2gb --num-nodes 1

Reemplace lon1 con su región deseada. Para listar los tamaños disponibles, visita nuestra documentación de referencia de la API.

Paso 2 – Generar algunos registros aleatorios

Antes de enviar los registros a OpenSearch, necesita tener algunos registros con los que trabajar. Si no tiene una aplicación que ya genere registros dentro de su clúster de Kubernetes, este paso le mostrará cómo desplegar un generador de registros. Este generador de registros producirá una corriente constante de registros de muestra que se pueden utilizar para probar y demostrar su tubería de registros.

Primero, agregue el repositorio de gráficos del generador de registros y instale el generador de registros:

helm repo add kube-logging https://kube-logging.github.io/helm-charts
helm repo update

A continuación, instale el generador de registros utilizando Helm:

helm install --generate-name --wait kube-logging/log-generator

Puede verificar que el generador de registros está funcionando consultando los registros que produce:

kubectl logs -l app.kubernetes.io/name=log-generator

Paso 3 – Preparar AxoSyslog Collector para la Instalación

En este paso, configurará el AxoSyslog Collector, que es responsable de recopilar registros de su clúster de Kubernetes y enviarlos a OpenSearch. Esto implica proporcionar los detalles de conexión correctos para su clúster OpenSearch (nombre de host, usuario y contraseña).

Usaremos helm para instalar el AxoSyslog Collector y pasar valores personalizados.

Para configurar el colector AxoSyslog con la dirección correcta, el usuario y la contraseña para su base de datos OpenSearch, siga los siguientes pasos:

Script Automatizado

Para simplificar la configuración, puede utilizar un script automatizado que obtiene los detalles de conexión necesarios de OpenSearch y actualiza su archivo de configuración AxoSyslog.

Guarde el siguiente script como update_axoflow_demo.sh:

update_axoflow_demo.sh
#!/bin/bash

# Extraer ID de Base de Datos para opensearch-doks
DB_ID=$(doctl databases list --format Name,ID --no-header | grep opensearch-doks | awk '{print $2}')

# Obtener Nombre de Host, Nombre de Usuario y Contraseña
OPENSEARCHHOSTNAME=$(doctl databases connection $DB_ID --no-header --format Host)
OPENSEARCHUSERNAME=$(doctl databases connection $DB_ID --no-header --format User)
OPENSEARCHPASSWORD=$(doctl databases connection $DB_ID --no-header --format Password)

# Actualizar axoflow-demo.yaml con los valores extraídos utilizando yq
yq eval ".config.destinations.opensearch[0].address = \"$OPENSEARCHHOSTNAME\"" -i axoflow-demo.yaml
yq eval ".config.destinations.opensearch[0].user = \"$OPENSEARCHUSERNAME\"" -i axoflow-demo.yaml
yq eval ".config.destinations.opensearch[0].password = \"$OPENSEARCHPASSWORD\"" -i axoflow-demo.yaml

echo "axoflow-demo.yaml has been updated."

Asegúrese de tener permiso de ejecución en su script antes de ejecutarlo:

chmod +x update_axoflow_demo.sh && ./update_axoflow_demo.sh

Este script obtendrá la información necesaria de su cuenta DigitalOcean mediante doctl y actualizará su archivo axoflow-demo.yaml de acuerdo.

Pasos Manuales para Actualizar axoflow-demo.yaml

Si prefiere configurar manualmente su colector AxoSyslog, siga estos pasos:

Ejecute el siguiente comando para extraer el ID de base de datos para opensearch-doks:

doctl databases list --format Name,ID --no-header | grep opensearch-doks | awk '{print $2}'

Para recuperar el hostname, el nombre de usuario y la contraseña, ejecute los siguientes comandos respectivamente:

doctl databases connection <id> --no-header --format Host
doctl databases connection <id> --no-header --format User
doctl databases connection <id> --no-header --format Password

Ahora, necesitará actualizar manualmente el archivo axoflow-demo.yaml:

Abra su archivo axoflow-demo.yaml en un editor de texto y reemplace los campos relevantes con los valores extraídos:

axoflow-demo.yaml
config:
  sources:
    kubernetes:
      # Recopilar logs de kubernetes
      enabled: true
  destinations:
    # Enviar logs a OpenSearch
    opensearch:
      - address: "x.k.db.ondigitalocean.com"
        index: "doks-demo"
        user: "doadmin"
        password: "AVNS_x"
        tls:
          # No validar el certificado TLS del servidor.
          peerVerify: false
        # Enviar los campos syslog + la metadata de .k8s.* en formato JSON
        template: "$(format-json --scope rfc5424 --exclude DATE --key ISODATE @timestamp=${ISODATE} k8s=$(format-json .k8s.* --shift-levels 2 --exclude .k8s.log))"

Paso 4 – Instalar AxoSyslog-collector

Ahora que la configuración está completa, el siguiente paso es deployar el AxoSyslog Collector en su cluster de Kubernetes. Esto habilitará la recolección y reenvío de logs a OpenSearch.

Agregue el repositorio de Helm de AxoSyslog y instale el AxoSyslog Collector usando el archivo de configuración personalizado:

helm repo add AxoSyslog https://axoflow.github.io/AxoSyslog-charts
helm repo update
helm install AxoSyslog -f axoflow-demo.yaml AxoSyslog/AxoSyslog-collector --wait

Para asegurarse de que los logs se están enviando al puerto correcto de OpenSearch, actualice la configuración del AxoSyslog Collector actualizando su configmap:

kubectl get configmap AxoSyslog-AxoSyslog-collector -o yaml | sed 's/9200\/_bulk/25060\/_bulk/' | kubectl apply -f -

Finalmente, elimine los pods existentes para aplicar la configuración actualizada:

kubectl delete pods -l app=AxoSyslog-AxoSyslog-collector

Conclusión

Configurar un pipeline de registro de DigitalOcean Kubernetes a OpenSearch mediante AxoSyslog no solo centraliza sus registros, sino que también mejora su capacidad para monitorizar, analizar y asegurar sus aplicaciones. Mediante los pasos proporcionados en este guía, puede implementar rápidamente esta solución, obteniendo una visibilidad más profunda en su entorno de Kubernetes y garantizando que su infraestructura permanezca resistente y conforme.

Source:
https://www.digitalocean.com/community/tutorials/collect-and-forward-kubernetes-logs-to-opensearch