Collecter et transférer les journaux de Kubernetes de DigitalOcean (DOKS) vers OpenSearch géré par DigitalOcean

Introduction

Ce tutoriel montre comment collecter et transférer les journaux de configuration d’un cluster DigitalOcean Kubernetes (DOKS) vers une instance OpenSearch géré par DigitalOcean en utilisant AxoSyslog, un traitement de données de sécurité à échelle scalable. En suivant ce guide, vous apprendrez comment configurer un système de journalisation robuste capable de capturer et d’analyser les journaux de vos applications Kubernetes, facilitant ainsi le suivi, la détection des problèmes et la sécurisation de votre infrastructure.

Dans ce tutoriel, vous utiliserez AxoSyslog pour transférer les journaux d’un cluster Kubernetes vers OpenSearch.

Prérequis

Avant de commencer, veuillez s’assurer que vous avez les prérequis suivants en place :

  1. Vous aurez besoin d’un compte Cloud DigitalOcean pour créer et gérer vos ressources Kubernetes et OpenSearch.
  2. L’outil de ligne de commande DigitalOcean (CLI), doctl, doit être installé et configuré sur votre machine locale.
  3. Un cluster Kubernetes DigitalOcean (DOKS) en cours d’execution.
  4. Le gestionnaire de paquets Kubernetes, Helm, devrait être installé pour gérer les applications Kubernetes.
  5. Familiarité avec Kubernetes, Helm, et les services gérés par DigitalOcean.

Scénario d’utilisation

Ce projet est idéal pour les scénarios où vous avez besoin d’une solution de journalisation centralisée pour surveiller et analyser les journaux de différentes applications exécutées dans un cluster Kubernetes. Que vous gérez une petite série d’applications ou une infrastructure à grande échelle, la collecte et l’acheminement des journaux vers un cluster OpenSearch dédié aide à :

  • Surveillance de la sécurité : Détecter et répondre aux incidents de sécurité en analysant les journaux en temps réel.
  • Dépannage : Identifier et résoudre rapidement les problèmes dans vos applications Kubernetes en accédant aux journaux détaillés.
  • Compliance : Conserver un journal d’événements pour se conformer aux règlements industriels.

En intégrant AxoSyslog avec DigitalOcean Managed OpenSearch, vous pouvez traiter et stocker efficacement de grandes quantités de journaux, ce qui facilite l’extraction d’insights précieux et le maintien de la santé et de la sécurité de vos systèmes.

Étape 1 – Créer un cluster OpenSearch

Dans cette étape, vous configurerez le composant central de votre système de journalisation, le cluster OpenSearch. OpenSearch sera le lieu de destination pour tous les journaux que vous collectez depuis votre cluster Kubernetes. Vous créerez une nouvelle instance OpenSearch dans la région de votre choix sur DigitalOcean en exécutant la commande suivante.

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

Remplacez lon1 par votre région souhaitée. Pour lister les tailles de slug disponibles, consultez notre documentation de référence de l’API.

Étape 2 – Générez quelques journaux de traces aléatoires

Avant de transférer les journaux vers OpenSearch, vous devez avoir quelques journaux à traiter. Si vous n’avez pas déjà une application générant des journaux dans votre cluster Kubernetes, cette étape vous montrera comment déployer un générateur de journaux. Ce générateur de journaux produira une suite continue de journaux de trace exemple que vous pourrez utiliser pour tester et démontrer votre pipeline de journalisation.

D’abord, ajoutez le référentiel du diagramme de Helm du générateur de journaux et installez le générateur de journaux :

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

Ensuite, installez le générateur de journaux à l’aide de Helm :

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

Vous pouvez vérifier que le générateur de journaux fonctionne en consultant les journaux qu’il génère :

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

Étape 3 – Préparez le collecteur AxoSyslog pour l’installation

Dans cette étape, vous configurerez le collecteur AxoSyslog, responsable de rassembler les journaux de votre cluster Kubernetes et de les transférer vers OpenSearch. Cela implique de fournir les détails de connexion corrects pour votre cluster OpenSearch (nom d’hôte, utilisateur et mot de passe).

Nous utilisons helm pour installer le collecteur AxoSyslog et transmettre des valeurs personnalisées.

Pour configurer le collecteur AxoSyslog avec l’adresse correcte, l’utilisateur et le mot de passe pour votre base de données OpenSearch, suivez ces étapes :

Script Automatisé

Pour simplifier la configuration, vous pouvez utiliser un script automatisé qui récupère les détails de connexion OpenSearch nécessaires et met à jour votre fichier de configuration AxoSyslog.

Enregistrez le script suivant sous le nom de update_axoflow_demo.sh :

update_axoflow_demo.sh
#!/bin/bash

# Extrait l'ID de la base de données pour opensearch-doks
DB_ID=$(doctl databases list --format Name,ID --no-header | grep opensearch-doks | awk '{print $2}')

# Récupère le nom d'hôte, le nom d'utilisateur et le mot de passe
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)

# Met à jour le fichier axoflow-demo.yaml avec les valeurs extraites en utilisant 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."

Assurez-vous d’avoir les permissions d’exécution sur votre script avant de le lancer :

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

Ce script récupérera les informations nécessaires de votre compte DigitalOcean en utilisant doctl et mettra à jour votre fichier axoflow-demo.yaml en conséquence.

Étapes Manuelles pour Mettre à Jour axoflow-demo.yaml

Si vous préférez configurer manuellement votre collecteur AxoSyslog, suivez ces étapes :

Exécutez le commande suivante pour extraire l’ID de la base de données pour opensearch-doks :

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

Pour récupérer le nom d’hôte, le nom d’utilisateur et le mot de passe, exécutez les commandes suivantes respectivement :

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

Maintenant, vous devez mettre à jour manuellement le fichier axoflow-demo.yaml :

Ouvrez votre fichier axoflow-demo.yaml dans un éditeur de texte et remplacez les champs pertinents par les valeurs extraites :

axoflow-demo.yaml
config:
  sources:
    kubernetes:
      # Collect kubernetes logs
      enabled: true
  destinations:
    # Send logs to OpenSearch
    opensearch:
      - address: "x.k.db.ondigitalocean.com"
        index: "doks-demo"
        user: "doadmin"
        password: "AVNS_x"
        tls:
          # Do not validate the server's TLS certificate.
          peerVerify: false
        # Send the syslog fields + the metadata from .k8s.* in JSON format
        template: "$(format-json --scope rfc5424 --exclude DATE --key ISODATE @timestamp=${ISODATE} k8s=$(format-json .k8s.* --shift-levels 2 --exclude .k8s.log))"

Step 4 – Install AxoSyslog-collector

Maintenant que la configuration est terminée, le prochain pas est de déployer le AxoSyslog Collector sur votre cluster Kubernetes. Cela permettra de collecter et d’envoyer les journaux vers OpenSearch.

Ajoutez le référentiel Helm AxoSyslog et installez le AxoSyslog Collector en utilisant le fichier de configuration personnalisé :

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

Pour s’assurer que les journaux sont envoyés sur le port OpenSearch correct, mettez à jour la configuration du AxoSyslog Collector en modifiant votre configmap :

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

Enfin, supprimez les pods existants pour appliquer la configuration mise à jour :

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

Conclusion

En mettant en place un pipeline de journalisation depuis Kubernetes DigitalOcean vers OpenSearch en utilisant AxoSyslog, vous non seulement centralisez vos journaux, mais aussi améliorez votre capacité de surveillance, d’analyse et de sécurisation de vos applications. Avec les étapes fournies dans ce guide, vous pouvez rapidement déployer cette solution, obtenant ainsi une meilleure visibilité dans votre environnement Kubernetes et veillant à ce que votre infrastructure reste résiliente et conforme aux normes.

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