Coletar e encaminhar logs de Kubernetes DigitalOcean (DOKS) para OpenSearch gerenciado DigitalOcean

Introdução

Este tutorial mostra como coletar e encaminhar registros de um cluster DigitalOcean Kubernetes (DOKS) para uma instância Gerenciada por DigitalOcean OpenSearch usando AxoSyslog, um processador de dados de segurança escalável. Seguindo este guia, você aprenderá a configurar um sistema de registro robusto que captura e analisa registros de suas aplicações Kubernetes, tornando mais fácil monitorar, resolver problemas e garantir sua infraestrutura.

Neste tutorial, você usará AxoSyslog para encaminhar registros de um cluster Kubernetes para OpenSearch.

Pré-requisitos

Antes de começar, certifique-se de que você tem os seguintes pré-requisitos em prática:

  1. Você precisará de acesso a uma conta DigitalOcean Cloud para criar e gerenciar seus recursos de Kubernetes e OpenSearch.
  2. O interface de linha de comando (CLI) do DigitalOcean, doctl, deve estar instalado e configurado em seu computador local.
  3. Um cluster DigitalOcean Kubernetes (DOKS) em execução.
  4. O gerenciador de pacotes do Kubernetes, Helm, deve ser instalado para gerenciar aplicações em Kubernetes.
  5. Familiaridade com Kubernetes, Helm, e serviços gerenciados do DigitalOcean.

Caso de Uso

Este projeto é ideal para situações onde você precisa de uma solução de log centralizada para monitorar e analisar logs de várias aplicações executadas em um cluster Kubernetes. Se você estiver gerenciando uma pequena coleção de aplicações ou uma infraestrutura de grande escala, coletar e encaminhar logs the um cluster OpenSearch dedicado ajuda a:

  • Monitoramento de Segurança: Detecção e resposta a incidentes de segurança através da análise de logs em tempo real.
  • Solução de problemas: Identifique e resolva problemas em seus aplicativos Kubernetes acessando logs detalhados.
  • Conformidade: Mantenha um registro de eventos para cumprir com as regulamentações da indústria.

Ao integrar o AxoSyslog com o OpenSearch Gerenciado por DigitalOcean, você pode processar e armazenar em volume eficiente de logs, tornando mais fácil extrair insigtenças valiosas e manter a saúde e a segurança de seus sistemas.

Passo 1 – Criar um cluster OpenSearch

Neste passo, você configurará o componente central de seu sistema de log, o cluster OpenSearch. O OpenSearch será o destino para todos os logs que você coleta de seu cluster Kubernetes. Você criará uma nova instância OpenSearch em sua região escolhida no DigitalOcean executando o seguinte comando.

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

Substitua lon1 pela sua região escolhida. Para listar os tamanhos de slug disponíveis, acesse nossa documentação de referência da API.

Passo 2 – Gera alguns logs aleatórios

Antes de encaminhar logs para o OpenSearch, você precisa de alguns logs para trabalhar. Se você não tiver um aplicativo já gerando logs dentro de seu cluster Kubernetes, este passo mostrará como implantar um gerador de logs. Este gerador de logs produzirá uma corrente constante de logs de exemplo que pode ser usada para testar e demonstrar seu pipeline de log.

Primeiro, adicione o repositório de gráfico de gerador de logs e instale o gerador de logs:

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

Em seguida, instale o gerador de logs usando o Helm:

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

Você pode verificar se o gerador de logs está funcionando visualizando os logs que ele produz:

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

Passo 3 – Preparar o AxoSyslog Collector para Instalação

Neste passo, você configurará o AxoSyslog Collector, responsável por coletar logs de seu cluster Kubernetes e encaminhá-los para o OpenSearch. Isso envolve fornecer os detalhes de conexão corretos para seu cluster OpenSearch (nome de host, usuário e senha).

Nós usaremos o helm para instalar o AxoSyslog Collector e passar valores personalizados.

Para configurar o coletor AxoSyslog com o endereço correto, usuário e senha para sua base de dados OpenSearch, siga estes passos:

Script Automatizado

Para simplificar a configuração, você pode usar um script automatizado que obtém os detalhes de conexão necessários para o OpenSearch e atualiza o arquivo de configuração do AxoSyslog.

Salve o seguinte script como update_axoflow_demo.sh:

update_axoflow_demo.sh
#!/bin/bash

# Extrai o ID da base de dados para opensearch-doks
DB_ID=$(doctl databases list --format Name,ID --no-header | grep opensearch-doks | awk '{print $2}')

# Obtém o hostname, nome de usuário e senha
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)

# Atualiza o arquivo axoflow-demo.yaml com os valores extraídos usando 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."

Certifique-se de que o seu script tenha permissão de execução antes de executá-lo:

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

Este script irá obter as informações necessárias de sua conta DigitalOcean usando doctl e atualizar o arquivo axoflow-demo.yaml em conformidade.

Passos Manuais para Atualizar axoflow-demo.yaml

Se você preferir configurar manualmente seu coletor AxoSyslog, siga estes passos:

Execute o seguinte comando para extrair o ID da base de dados para opensearch-doks:

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

Para recuperar o hostname, nome de usuário e senha, execute os seguintes 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

Agora, você precisará atualizar manualmente o arquivo axoflow-demo.yaml:

Abra seu arquivo axoflow-demo.yaml the um editor de texto e substitua os campos relevantes com os valores extraídos:

axoflow-demo.yaml
config:
  sources:
    kubernetes:
      # Coletar logs do kubernetes
      enabled: true
  destinations:
    # Enviar logs para OpenSearch
    opensearch:
      - address: "x.k.db.ondigitalocean.com"
        index: "doks-demo"
        user: "doadmin"
        password: "AVNS_x"
        tls:
          # Não validar o certificado TLS do servidor.
          peerVerify: false
        # Enviar os campos syslog + os metadados de .k8s.* no formato JSON
        template: "$(format-json --scope rfc5424 --exclude DATE --key ISODATE @timestamp=${ISODATE} k8s=$(format-json .k8s.* --shift-levels 2 --exclude .k8s.log))"

Passo 4 – Instalar AxoSyslog-collector

Com a configuração concluída, o próximo passo é implantar o AxoSyslog Collector no seu cluster Kubernetes. Isso permitirá a coleta e encaminhamento de logs para OpenSearch.

Adicione o repositório Helm do AxoSyslog e instale o AxoSyslog Collector usando o arquivo de configuração 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 garantir que os logs estão sendo enviados para a porta correta do OpenSearch, atualize a configuração do AxoSyslog Collector atualizando seu configmap:

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

Finalmente, exclua os pods existentes para aplicar a configuração atualizada:

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

Conclusão

A configuração de um pipeline de log de DigitalOcean Kubernetes para OpenSearch usando AxoSyslog não só centraliza seus logs quanto melhora a capacidade de monitoramento, análise e segurança dos seus aplicativos. Com os passos fornecidos neste guia, você pode rapidamente implantar essa solução, obtendo uma visão mais aprofundada do seu ambiente Kubernetes e garantindo que sua infraestrutura permaneça resiliente e conforme as normas.

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