Как развернуть стек ELK на Kubernetes

Стэк ELK – это аббревиатура для Elasticsearch, Logstash и Kibana, который предлагает следующие возможности:

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

Инфраструктура Elasticsearch

Прежде чем мы погрузимся в развертывание стека ELK, давайте сначала разберемся с ключевыми компонентами инфраструктуры Elasticsearch:

  • Узлы: elasticsearch работает на специализированных серверах, называемых узлами, которые функционируют как бинарники для задач поиска и аналитики.
  • Части: пространство базы данных логически разделено на части, что позволяет ускорить доступность и распределение данных.
  • Индексы: elasticsearch организует хранимые данные в индексы, что облегчает эффективное управление данными.
  • Настройка стека ELK: вам потребуется кластер Kubernetes для развертывания стека ELK на Kubernetes. Если у вас уже есть один, вы можете приступить к развертыванию. В качестве альтернативы вы можете использовать предоставленный репозиторий GitHub с файлами Terraform для настройки кластера Kubernetes.
  • Развертывание Elasticsearch: используя Helm charts, мы можем эффективно развернуть Elasticsearch. Измените файл значений, чтобы он соответствовал вашим конкретным требованиям, таким как изменение количества реплик или включение/выключение определенных функций. Скачайте их с Artifactory Hub.

values-elasticsearch.yaml

YAML

clusterName: "itsyndicateblog"
replicas: 1 
minimumMasterNodes: 1 
createCert: true
secret:
  enabled: true
  password: "" # generated randomly if not defined
image: "docker.elastic.co/elasticsearch/elasticsearch"
imageTag: "8.5.1"
resources:
  requests:
    cpu: "200m"
    memory: "500Mi"
  limits:
    cpu: "300m"
    memory: "1Gi"
ingress:
  enabled: false # enable ingress only if you need external access to elasticsearch cluster
  hosts:
    - host: elastic.itsyndicate.org
      paths:
        - path: /

После того, как вы настроили значения, используйте Helm chart для установки Elasticsearch:

Shell

helm install elasticsearch -f elasticsearch-values.yaml <chart-name>

Примечание: Убедитесь, что вы настроили драйверы (EBS или EFS) для постоянных томов.

Развертывание Kibana

Развертывание Kibana с помощью Helm charts происходит просто. В файле значений укажите URL и порт сервиса Elasticsearch:

values-kibana.yaml

YAML

elasticsearchHosts: "https://elasticsearch-master:9200"
enterpriseSearch:
  host: "https://elasticsearch-master:9200"
Shell

helm install kibana -f kibana-values.yaml <chart-name>

Проверьте, установлен ли Kibana правильно, пробросьте порт контейнера в локальную сеть (я использую K8s Lens)

Развертывание Logstash и Filebeat

Для эффективного управления логами мы используем Logstash и Filebeat. Filebeat собирает записи из различных источников, а Logstash обрабатывает и отправляет их в Elasticsearch.

Развертывание Logstash

  1. Клонируйте репозиторий с конфигурациями: logstash-k8s
  2. Перейдите в tf-modules/eks/manifests/logstash-k8s
  3. Редактировать файл configmap.yaml
    1. добавить хост Elasticsearch, пользователя и пароль (их можно взять из ресурса “Secrets” Kubernetes)
  4. Применить шаблоны:
Shell

kubectl apply -f logstash-k8s -n $CHANGE_TO_ELASTIC_NS

Развернуть Filebeat

  1. Убедитесь, что конфигурация Filebeat указывает на правильные лог-файлы на ваших узлах. Обычно, в EKS, это папка /var/log/containers. Чтобы проверить это, войдите на один из ваших узлов и перейдите в директорию /var/log/containers; если файлов нет, попробуйте изменить директорию.
  2. Если все верно, примените шаблоны Kubernetes:
Shell

kubectl apply -f filebeat-k8s

Разверните простую приложение для проверки того, как логи передаются в Elasticsearch

  1. Перейдите в папку eks/manifests из клонированного репозитория.
  2. Выполните команду:
Shell

kubeclt apply -f app -n default

После завершения установки, вернитесь в Kibana и создайте индекс Elasticsearch.

Создание индекса:

Создайте шаблон индекса Logstash: logstash-[namespace]* 

Теперь вы должны видеть логи от развернутого приложения. Если нет, сделайте несколько запросов к этой апп и попробуйте устранить проблему; обратитесь к видео-руководству в случае необходимости помощи.

Заключение

Вы успешно развернули стек ELK в Kubernetes, что дает вашим приложениям мощный анализ логов и инсайты, основанные на данных. Elasticsearch, Logstash и Kibana безупречно обрабатывают большие потоки данных и предоставляют значимые визуализации.

Теперь, когда у вас есть надежное решение для ведения журналов, вы можете эффективно управлять своими логами и получать ценные знания. Удачного анализа!

Спасибо за прочтение этого руководства по развертыванию стека ELK. Не стесняйтесь обращаться, если у вас возникнут вопросы или потребуется дополнительная помощь. Удачного программирования!

Source:
https://dzone.com/articles/how-to-deploy-the-elk-stack-on-kubernetes