Coletar e encaminhar registros de log do Kubernetes DigitalOcean (DOKS) para o OpenSearch gerenciado por DigitalOcean

Introdução

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

Neste tutorial, você usará AxoSyslog para encaminhar logs 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 de nuvem DigitalOcean para criar e gerenciar seus recursos Kubernetes e OpenSearch.
  2. O interface de linha de comando (CLI) DigitalOcean, doctl, deve estar instalado e configurado em sua máquina local.
  3. Um cluster Kubernetes DigitalOcean (DOKS) em execução.
  4. O gerenciador de pacotes Kubernetes, Helm, deve ser instalado para gerenciar aplicações Kubernetes.
  5. Familiaridade com Kubernetes, Helm, e serviços gerenciados por 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 em escala grande, 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 do分析 de registros em tempo real.
  • Resolução de problemas: Identifique e resolve problemas em seus aplicativos Kubernetes acessando registros detalhados.
  • Cumprimento de Regras: 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 grande de registros, tornando mais fácil extrair insights valiosos e manter a saúde e a segurança dos seus sistemas.

Passo 1 – Criar um cluster OpenSearch

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

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

Substitua lon1 com sua região desejada. Para listar os tamanhos de slug disponíveis, visite 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 deployar 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 do 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 do OpenSearch e atualiza o arquivo de configuração 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 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."

Verifique se você tem permissão de execução no seu script 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 seu 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ê precisa atualizar manualmente o arquivo axoflow-demo.yaml:

Abra seu arquivo axoflow-demo.yaml the um editor de texto e substitua os campos relevantes pelos 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 + as 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 habilitará a coleta e o 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 de OpenSearch correta, 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 podes 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 apenas centraliza seus logs, mas também melhora sua capacidade de monitorar, analisar e asegurar suas aplicações. Com os passos fornecidos neste guia, você pode rapidamente implementar essa solução, obtendo uma visão mais profunda do seu ambiente Kubernetes e garantindo que sua infraestrutura permaneça resistente e conforme as normas.

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