Статьи

Docker + Elasticsearch: как отслеживать официальный образ Elasticsearch на Docker

 Официальное Elasticsearch Изображение  на Докер Hub уже выработано более 1,6 млн тянет. Вероятно, это самый простой способ получить настройку разработки, которая включает Elasticsearch, в стек приложений. Причина этого сумасшедшего числа? Быстро растущее число организаций используют Elasticsearch и Docker в производстве. Нет необходимости говорить, что  мониторинг Elasticsearch  необходим в производственном процессе, и вы можете найти подробный анализ этой темы (включая «10 лучших метрик Elasticsearch для просмотра») в  бесплатной электронной книге: ElasticsearchMonitoring Essentials . Docker подрывает во многих отношениях, и есть много вещей, которые немного отличаются и заслуживают упоминания. Это включает:

  1. Изменено развертывание для Elasticsearch и его инструментов мониторинга с использованием Dockerfile, Docker Compose или различных инструментов Orchestration.
  2. Существует новый уровень для мониторинга: Метрики и события контейнеров, см.  Мониторинг событий и метрик Docker  и SPM для Docker.
  3. Ведение журнала изменилось: контейнеры регистрируют журнал на консоли, и журналы должны быть получены из Docker-Daemon, а не получать их из файла журнала Elasticsearch. Проверьте наш пост на тему:  Инновационный Docker Log Management
  4. Официальные изображения могут не предоставлять параметры для мониторинга (например, JMX). Однако официальный образ для Elasticsearch предоставляет возможность передавать параметры в среду выполнения Java. Мы будем использовать эту опцию для мониторинга Elasticsearch в этом посте. Вы также должны знать, что официальный образ Elasticsearch не содержит никаких плагинов, и коммерческий мониторинг от Elastic не может распространяться в этом образе по причинам лицензирования. Наш инструмент мониторинга —  SPM . Если вы не знакомы с SPM — но слышали о нем — или если вы используете Marvel, взгляните на  Marvel против SPM .

Далее я собираюсь продемонстрировать установку для мониторинга нескольких узлов Elasticsearch на одном хосте Docker. Окончательная установка будет предоставлять полный пакет мониторинга и ведения журнала :

  • Подробные метрики приложений для Elasticsearch, развернутые в Docker
  • Подробные метрики контейнера и события Docker  
  • Централизованные журналы для всех контейнеров по SPM для Docker

Итак, давайте сначала определимся с одним из следующих вариантов мониторинга Elasticsearch на Docker. Вы можете:

  1. Создайте свой собственный контейнер Elasticsearch с включенными компонентами мониторинга. Я не буду вдаваться в подробности об этом варианте сегодня; скорее я собираюсь сосредоточиться на официальной / доверенной сборке.
  2. Используйте автономный агент, который запрашивает метрики из контейнера Elasticsearch. Для этого требуется настройка сетевых конфигураций JMX и Docker для монитора и Elasticsearch. Метрики, собираемые удаленными агентами, ограничены, и в контексте Docker запуск процесса внешнего мониторинга плюс процессы Elasticsearch потребляют больше ресурсов. И следующий вариант…
  3. Внедрить агент мониторинга процесса SPM в Elasticsearch. Этот параметр имеет минимальное использование ресурсов и поддерживает расширенные функции мониторинга, такие как  отслеживание транзакций  и  AppMap .

Я решил реализовать Вариант № 3 в этом сообщении в блоге, потому что он обеспечивает лучшее понимание Elasticsearch. Это означает, что контейнеру Elasticsearch необходим доступ файловой системы к агенту мониторинга SPM. Sematext предоставляет клиент SPM (который включает агент мониторинга и отправителя метрик), предварительно установленный в образе Docker, называемый «Образ / контейнер клиента SPM» в следующих инструкциях и опубликованный в  Docker Hub как «sematext / spm-client» . Основной трюк заключается в том, чтобы подключить том из контейнера клиента SPM в контейнеры Elasticsearch для загрузки библиотеки мониторинга.

Давайте посмотрим на желаемую настройку и как туда добраться:

Elasticsearch-Monitoring-On-Docker

Настройка мониторинга для Elasticsearch на Docker

1) Вытащите образ Docker для клиента SPM

Вот  образ клиента SPM  — важно знать об этом образе то, что он предоставляет VOLUME (/ opt / spm), который можно монтировать из контейнера Elasticsearch. Загрузить изображение SPM-клиента:

docker pull sematext/spm-client

2) Сконфигурировать и запустить контейнер SPM-Client

Маркер SPM является уникальным идентификатором для отслеживаемых приложений. Если вы еще не создали приложение SPM для Elasticsearch,  создайте его здесь.

# Save the SPM Token in an Environment Variable
export SPM_TOKEN=4feb144c-4da8-xxxx-xxxx-b0b8e06e743a
# Choose name for the Elasticsearch nodes
export ES1=ES_1
export ES2=ES_2
# Create SPM Config String - let's configure 2 nodes in this example
export SPM_CONFIG="${SPM_TOKEN} es javaagent jvmname:${ES1}"
export SPM_CONFIG="${SPM_CONFIG};${SPM_TOKEN} es javaagent jvmname:${ES2}"
# Start SPM-Client with the defined configurations
docker run -d --name spm-client -h spm-client -e SPM_CONFIG="$SPM_CONFIG" sematext/spm-client

3) Запустите Elasticsearch Контейнеры

Мы готовы запустить несколько узлов Elasticsearch (в нашем примере это узлы ES_1 и ES_2). В этой команде мы видим параметры для монитора SPM In-Process для внедрения файла .jar из тома клиента SPM — строка ES_JAVA_OPTS берется из инструкций по установке SPM — с использованием токена SPM и именования JVM (потому что нам нравится запускать N экземпляров) на том же хосте).

# start first node
export ES_JAVA_OPTS_1="-Dcom.sun.management.jmxremote -javaagent:/opt/spm/spm-monitor/lib/spm-monitor-es.jar=${SPM_TOKEN}::${ES1} -Des.node.name=${ES1}"
docker run --name $ES1 -h $ES1 -e ES_JAVA_OPTS -p 9200:9200 -d --volumes-from spm-client elasticsearch
# start second node
export ES_JAVA_OPTS_2="-Dcom.sun.management.jmxremote -javaagent:/opt/spm/spm-monitor/lib/spm-monitor-es.jar=${SPM_TOKEN}::${ES2} -Des.node.name=${ES2}"
docker run --name $ES2 -h $ES2 -e ES_JAVA_OPTS -d --volumes-from spm-client elasticsearch

Почти готово! Примерно через минуту показатели для Docker Host, JVM и узлов Elasticsearch поступят в наше приложение SPM.

Обратите внимание, поскольку мы выбрали непротиворечивые имена для узлов Elasticsearch (-Des.node.name), имени хоста контейнера (-h) и имени JVM ( -javaagent:/opt/spm/spm-monitor/lib/spm-monitor-es.jar=${SPM_TOKEN}::${ES1}) на каждом графике можно сразу увидеть соответствующие фильтры с именем «ES_1 / ES_2» — гораздо лучше чем некоторые случайные идентификаторы контейнеров или автоматически сгенерированные имена узлов Elasticsearch!

ES_DOCKER_OVERVIEWОбзор SPM для отслеживаемых контейнеров Elasticsearch

ES_DOCKER_INDEX_STATSСтатистика индекса для узлов Elasticsearch ES1 и ES2

Но как насчет моих журналов Elasticsearch и метрик контейнера?

Просто запустите  SPM для Docker  — он собирает журналы (и может анализировать журналы Elasticsearch ) и сохраняет их в  Logsene  (ранее не использовался Logsene? См.  Logsene 1-Click ELK Stack ). Сначала мы  создаем приложение SPM  с типом «Docker» и создаем приложение Logsene  для получения журналов. Затем мы используем сгенерированные токены приложений для запуска  SPM для Docker.

docker run -d  --name spm-agent --restart=always -e SPM_TOKEN=SPM_DOCKER_APP_TOKEN -e LOGSENE_TOKEN=LOGSENE_APP_TOKEN

Через несколько минут вы увидите метрики хоста и контейнера вместе с событиями и журналами в SPM.

ES_DOCKER_CONTAINER_METRICS_AND_LOGSКонтейнерные журналы и метрики от Elasticsearch

Обратите внимание, что журналы из контейнеров  автоматически отправляются и анализируются !
«Подожди, нет никаких настроек для грузоотправителей?» Вы могли бы сказать.
Это правильно — нет НИКАКИХ сложных настроек syslog, logstash, драйверов журналов Docker и т. Д. Все это выполняется SPM для Docker.

Например, каждая строка журнала имеет поле «имя_узла» для узла Elasticsearch. Он берет метки времени, серьезность и источник из журнала Elasticsearch, и каждый журнал автоматически помечается как container_id и именем изображения. Переход от метрик SPM к подробным журналам Elasticsearch — включая исключения и анализируемые трассировки стеков — является всего лишь одним щелчком мыши!

ES_DOCKER_LOGSENE_ES_EXCPETION

Фильтры по статистике полей в правой части экрана позволяют легко идентифицировать контейнеры с наибольшим количеством журналов, выбрав «container_name». Это лишь небольшая деталь в пользовательском интерфейсе Logsene, не стесняйтесь исследовать его и  создавать оповещения  или использовать инструментальные панели Kibana4 для журналов контейнеров.

Если вы хотите узнать больше о значении всех этих метрик Elasticsearch, проверьте  Top 10 Elasticsearch Metrics  или бесплатную  электронную книгу,  упомянутую выше. Я считаю, что Docker — отличная платформа для экспериментов с несколькими узлами, даже до того, как вы приступите к работе.

Как то, что вы видели здесь? Начать прямо сейчас с мониторинга Docker и Elasticsearch (и журналов!) Очень просто: просто подпишитесь на  бесплатную 30-дневную пробную версию  ( без кредитной карты ) SPM и Logsene. Заинтересованы в мониторинге других приложений на Docker с помощью SPM? Тогда, пожалуйста,  свяжитесь с нами по электронной почте  или  напишите нам в Twitter  с вопросами и отзывами.