Официальное Elasticsearch Изображение на Докер Hub уже выработано более 1,6 млн тянет. Вероятно, это самый простой способ получить настройку разработки, которая включает Elasticsearch, в стек приложений. Причина этого сумасшедшего числа? Быстро растущее число организаций используют Elasticsearch и Docker в производстве. Нет необходимости говорить, что мониторинг Elasticsearch необходим в производственном процессе, и вы можете найти подробный анализ этой темы (включая «10 лучших метрик Elasticsearch для просмотра») в бесплатной электронной книге: ElasticsearchMonitoring Essentials . Docker подрывает во многих отношениях, и есть много вещей, которые немного отличаются и заслуживают упоминания. Это включает:
- Изменено развертывание для Elasticsearch и его инструментов мониторинга с использованием Dockerfile, Docker Compose или различных инструментов Orchestration.
- Существует новый уровень для мониторинга: Метрики и события контейнеров, см. Мониторинг событий и метрик Docker и SPM для Docker.
- Ведение журнала изменилось: контейнеры регистрируют журнал на консоли, и журналы должны быть получены из Docker-Daemon, а не получать их из файла журнала Elasticsearch. Проверьте наш пост на тему: Инновационный Docker Log Management
- Официальные изображения могут не предоставлять параметры для мониторинга (например, JMX). Однако официальный образ для Elasticsearch предоставляет возможность передавать параметры в среду выполнения Java. Мы будем использовать эту опцию для мониторинга Elasticsearch в этом посте. Вы также должны знать, что официальный образ Elasticsearch не содержит никаких плагинов, и коммерческий мониторинг от Elastic не может распространяться в этом образе по причинам лицензирования. Наш инструмент мониторинга — SPM . Если вы не знакомы с SPM — но слышали о нем — или если вы используете Marvel, взгляните на Marvel против SPM .
Далее я собираюсь продемонстрировать установку для мониторинга нескольких узлов Elasticsearch на одном хосте Docker. Окончательная установка будет предоставлять полный пакет мониторинга и ведения журнала :
- Подробные метрики приложений для Elasticsearch, развернутые в Docker
- Подробные метрики контейнера и события Docker
- Централизованные журналы для всех контейнеров по SPM для Docker
Итак, давайте сначала определимся с одним из следующих вариантов мониторинга Elasticsearch на Docker. Вы можете:
- Создайте свой собственный контейнер Elasticsearch с включенными компонентами мониторинга. Я не буду вдаваться в подробности об этом варианте сегодня; скорее я собираюсь сосредоточиться на официальной / доверенной сборке.
- Используйте автономный агент, который запрашивает метрики из контейнера Elasticsearch. Для этого требуется настройка сетевых конфигураций JMX и Docker для монитора и Elasticsearch. Метрики, собираемые удаленными агентами, ограничены, и в контексте Docker запуск процесса внешнего мониторинга плюс процессы Elasticsearch потребляют больше ресурсов. И следующий вариант…
- Внедрить агент мониторинга процесса SPM в Elasticsearch. Этот параметр имеет минимальное использование ресурсов и поддерживает расширенные функции мониторинга, такие как отслеживание транзакций и AppMap .
Я решил реализовать Вариант № 3 в этом сообщении в блоге, потому что он обеспечивает лучшее понимание Elasticsearch. Это означает, что контейнеру Elasticsearch необходим доступ файловой системы к агенту мониторинга SPM. Sematext предоставляет клиент SPM (который включает агент мониторинга и отправителя метрик), предварительно установленный в образе Docker, называемый «Образ / контейнер клиента SPM» в следующих инструкциях и опубликованный в Docker Hub как «sematext / spm-client» . Основной трюк заключается в том, чтобы подключить том из контейнера клиента SPM в контейнеры Elasticsearch для загрузки библиотеки мониторинга.
Давайте посмотрим на желаемую настройку и как туда добраться:
Настройка мониторинга для 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!
Обзор SPM для отслеживаемых контейнеров Elasticsearch
Статистика индекса для узлов 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.
Контейнерные журналы и метрики от Elasticsearch
Обратите внимание, что журналы из контейнеров автоматически отправляются и анализируются !
«Подожди, нет никаких настроек для грузоотправителей?» Вы могли бы сказать.
Это правильно — нет НИКАКИХ сложных настроек syslog, logstash, драйверов журналов Docker и т. Д. Все это выполняется SPM для Docker.
Например, каждая строка журнала имеет поле «имя_узла» для узла Elasticsearch. Он берет метки времени, серьезность и источник из журнала Elasticsearch, и каждый журнал автоматически помечается как container_id и именем изображения. Переход от метрик SPM к подробным журналам Elasticsearch — включая исключения и анализируемые трассировки стеков — является всего лишь одним щелчком мыши!
Фильтры по статистике полей в правой части экрана позволяют легко идентифицировать контейнеры с наибольшим количеством журналов, выбрав «container_name». Это лишь небольшая деталь в пользовательском интерфейсе Logsene, не стесняйтесь исследовать его и создавать оповещения или использовать инструментальные панели Kibana4 для журналов контейнеров.
Если вы хотите узнать больше о значении всех этих метрик Elasticsearch, проверьте Top 10 Elasticsearch Metrics или бесплатную электронную книгу, упомянутую выше. Я считаю, что Docker — отличная платформа для экспериментов с несколькими узлами, даже до того, как вы приступите к работе.
Как то, что вы видели здесь? Начать прямо сейчас с мониторинга Docker и Elasticsearch (и журналов!) Очень просто: просто подпишитесь на бесплатную 30-дневную пробную версию ( без кредитной карты ) SPM и Logsene. Заинтересованы в мониторинге других приложений на Docker с помощью SPM? Тогда, пожалуйста, свяжитесь с нами по электронной почте или напишите нам в Twitter с вопросами и отзывами.