Collect and Forward DigitalOcean Kubernetes (DOKS) Logs to DigitalOcean Managed OpenSearch

Введение

Данный指南 показывает, как собрать и передать логи с кластера DigitalOcean Kubernetes (DOKS) в экземпляр DigitalOcean Managed OpenSearch с использованием AxoSyslog, скалярного процессора данных безопасности. following this guide, you’ll learn how to set up a robust logging system that captures and analyzes logs from your Kubernetes applications, making it easier to monitor, troubleshoot, and secure your infrastructure.

В этом руководстве вы будете использовать AxoSyslog для передачи логирующих данных кластера Kubernetes в OpenSearch.

Предварительные требования

Перед началом убедитесь, что у вас установлены следующие предварительные условия:

  1. Вам понадобится доступ к учетной записи DigitalOcean Cloud для создания и управления ресурсами Kubernetes и OpenSearch.
  2. Инструмент интерфейса командной строки DigitalOcean (CLI), doctl, должен быть установлен и настроен на вашем локальном компьютере.
  3. Запущенный кластер Kubernetes DigitalOcean (DOKS).
  4. Менеджер пакетов Kubernetes, Helm, должен быть установлен для управления приложениями Kubernetes.
  5. Знание Kubernetes, Helm и управляемых услуг DigitalOcean.

Случай использования

Этот проект идеально подходит для сценариев, где вам требуется централизованное решение для ведения логов для мониторинга и анализа логов различных приложений, работающих в кластере Kubernetes. Независимо от того, управляете ли вы небольшим набором приложений или крупномасштабной инфраструктурой, сбор и пересылка логов в выделенный кластер OpenSearch помогает в:

  • Система наблюдения за безопасностью: Обнаружение и оперативная реакция на Security Incidents путём анализа журналов в реальном времени.
  • Устранение неполадок: быстро идентифицировать и устранить проблемы в ваших приложениях Kubernetes, получив доступ к детальным журналам.
  • Соответствие требованиям регламентов: поддержание журнала событий для соответствия требованиям отрасльвых регламентов.

При интеграции AxoSyslog с DigitalOcean Managed OpenSearch вы можете эффективно обрабатывать и хранять большие объемы логов, что упрощает извлечение ценных Insights и поддержание здоровья и безопасности систем.

Шаг 1 – Создание кластера OpenSearch

В этом шаге вы настроите ключевую компоненту вашей системы отслеживания журналов – кластер OpenSearch. OpenSearch станет destiny для всех логов, которые вы собираете из вашего Kubernetes кластера. Вы создадите новый экземпляр OpenSearch в выбранном вами регионе на DigitalOcean, запустив следующую команду.

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

Замените lon1 на ваш выбор региона. Чтобы выбрать доступные размеры, посетите нашу документацию API.

Шаг 2 – Generate some random logs

Перед отправкой логов в OpenSearch вам необходимо создать несколько логов для работы. Если у вас еще нет приложения, генерирующего логи в вашем кластере Kubernetes, этот шаг показает, как установить генератор логов. Этот генератор логов будет выдавать непрерывный поток примерных логов, которые можно использовать для тестирования и демонстрации вашего канала логирования.

Сначала добавьте репозиторий гиперграммы для генератора логов Helm и установите генератор логов:

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

После этого установите генератор логов с помощью Helm:

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

Вы можете проверить, работает ли генератор логов, выводят ли они логи, которые он выдает:

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

Шаг 3 – Prepare AxoSyslog Collector for Installation

В этом шаге вы настроите AxoSyslog Collector, который отвечает за сбор логов из вашего кластера Kubernetes и их отправку в OpenSearch. Это включает предоставление правильных данных подключения для вашего кластера OpenSearch (имя хоста, пользователь и пароль).

Мы будем использовать helm для установки AxoSyslog Collector и передавать пользовательские значения.

Для настройки сборщика AxoSyslog с правильным адресом, пользователем и паролем для вашей базы данных OpenSearch, следуйте этим шагам:

Автоматизированный скрипт

Для упрощения настройки вы можете использовать автоматизированный скрипт, который забирает необходимые данные подключения к OpenSearch и обновляет вашу конфигурационную файл AxoSyslog.

Сохраните следующий скрипт как update_axoflow_demo.sh:

update_axoflow_demo.sh
#!/bin/bash

#Extract Database ID for opensearch-doks
DB_ID=$(doctl databases list --format Name,ID --no-header | grep opensearch-doks | awk '{print $2}')

# Get Hostname, Username, and Password
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)

# Update axoflow-demo.yaml with extracted values using 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."

Перед запуском скрипта убедитесь, что у вас есть разрешение на выполнение скриптов:

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

Этот скрипт будет забирать необходимые данные из вашего счета DigitalOcean с использованием doctl и соответственно обновлять ваш файл axoflow-demo.yaml.

Ручные шаги для обновления axoflow-demo.yaml

Если вы предпочитаете настраивать ваш сборщик AxoSyslog Collector вручную, следуйте этим шагам:

Выполните следующийCOMMANDto extract the database ID for opensearch-doks:

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

Чтобы получить имя хоста, имя пользователя и пароль, выполните соответствующие команды соответственно:

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

Теперь вам нужно вручную обновить файл axoflow-demo.yaml:

Откройте ваш файл axoflow-demo.yaml в текстовом редакторе и замените соответствующие поля полученными значениями:

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

После завершения настройки下一步是向Kubernetes集群部署AxoSyslog Collector。这将使您可以收集并转发日志到OpenSearch。

Добавьте репозиторий AxoSyslog Helm и установите AxoSyslog Collector с использованием настраиваемого конфигурационного файла:

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

Чтобы убедиться, что логи отправляются на correct OpenSearch порт, обновите конфигурацию AxoSyslog Collector, обновив ваш configmap:

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

В конечном итоге, удалите существующие pods, чтобы применить обновленную конфигурацию:

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

Заключение

Установка логического канала журналирования с DigitalOcean Kubernetes на OpenSearch с использованием AxoSyslog не только централизует ваши логи, но и улучшает возможности мониторинга, анализа и безопасности ваших приложений. Благодаря шагам, описанным в этой справочной статье, вы можете быстро установить эту решение, получив более глубокое понимание своего environment Kubernetes и обеспечивая, чтобы ваша инфраструктура оставалась устойчивой и соответствующей нормам.

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