Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Monitoring

Как контролировать приложения на основе докера с использованием New Relic

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Performance Monitoring With New Relic.
How to Use New Relic Browser to Improve Your Web App's User Experience
How to Use New Relic Insights to Learn More About Your Customers
Sponsored Content

This sponsored post features a product relevant to our readers while meeting our editorial guidelines for being objective and educational.

Russian (Pусский) translation by Masha Kolesnikova (you can also view the original English article)

Введение

Докер - одна из самых быстрорастущих новых технологий на данный момент. Решение для развертывания программного обеспечения и построения масштабируемых архитектур веб-сервисов позволяет разбить архитектуру вашего приложения на контейнеры с определенными ролями и обязанностями. Используя Docker, вы также можете указать зависимости приложения на уровне операционной системы, что приблизит нас к оригинальному обещанию Java: «Напишите один раз, и запускайте где угодно».

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

Чтобы исправить это, New Relic занялась этой задачей и сделала свои серверные средства мониторинга (серверы и APM) c поддержкой Docker. В июне 2015 года поддержка Docker стала доступна для всех клиентов New Relic.

В сообщении, объявляющем о поддержке Docker, Эндрю Маршалл из New Relic пишет:

«Теперь вы можете перейти от приложения (которое действительно к вам относится) к отдельному контейнеру Docker, а затем к физическому серверу. Больше никаких слепых пятен!»

Контролируя приложение Docker с помощью набора инструментов New Relic, вы можете теперь анализировать приложение в целом, а затем, когда вы обнаружите проблемы в своем приложении, найдите контейнеры, в которых возникают проблемы, и устраните проблемы внутри них.

Кроме того, отслеживая приложение на уровне Docker, вы получите ценную информацию о своей настройке: разумно ли используете свои контейнеры, и работает ли разделение ресурсов между контейнерами так, как должно быть?

В этом учебнике

В этом уроке я покажу вам, как начать работу с мониторингом простого приложения на платформе Docker с помощью инструментов New Relic.

Вы узнаете:

  • как настроить мониторинг New Relic на веб-сервере, на котором запущен набор контейнеров Docker для сбора информации об общей среде Docker
  • как настроить мониторинг New Relic для приложения PHP, работающего внутри одного или нескольких контейнеров Docker, для контроля состояния приложения, а также отдельного контейнера Docker

Для этого мы создадим простой прототип для размещенного решения WordPress: три сайта WordPress, каждый из которых работает в контейнере Docker, и контейнер MySQL, разделенный между ними.

После установки мы затем включим мониторинг New Relic и просмотрим представления средств мониторинга и изучим данные, которые вы найдете в них.

Требования

Хотя я надеюсь, что вы узнаете что-то об использовании Docker, прочитав этот учебник, это не значит, что это учебник о Docker, а также использование инструментов мониторинга New Relic вместе с вашими приложениями на платформе Docker.

Вот почему, чтобы получить максимальную отдачу от учебника, вы должны хотя бы немного ознакомиться с Docker. Также ожидается базовое понимание командной строки Linux.

Настройка контейнеров Docker

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

Эти строительные блоки называются контейнерами - концепция, близкая к виртуальной машине, но не совсем. В то время как виртуальная машина запускает свою собственную операционную систему, все контейнеры работают на одной и той же операционной системе хоста, но каждая из них имеет свои собственные зависимости и библиотеки. Контейнеры также могут быть связаны друг с другом, чтобы они могли делиться, например, с их ресурсами.

Чтобы узнать больше о Docker, лучшим местом для начала является их онлайн-документация.

Затем, как только вам станет комфортно пробовать Docker в действии, давайте начнем с нашей установки!

Что мы будем строить?

Прежде чем мы начнем с реализации нашей установки Docker и New Relic, вот изображение, показывающее обзор базовой архитектуры, которую мы собираемся построить в этом уроке:

A simple WordPress stack build on Docker containers and reporting to New Relic

Как я упоминал во введении, это упрощенная служба WordPress: в трех контейнерах (произвольное число) мы будем запускать установку WordPress в каждом. Контейнеры WordPress связаны с контейнером с MySQL. Все это будет работать на одном сервере, который в этом примере будет размещен на веб-сервисах Amazon, но может быть любым сервером, способным работать с инструментами мониторинга Docker и New Relic.

Сервер и контейнеры, работающие внутри него, будут отслеживаться с помощью инструментов New Relic APM (мониторинг производительности приложений) и инструментов Servers.

Я разработал эту настройку в основном для демонстрационных целей, но на самом деле она смоделирована после того, что я создаю в своем собственном проекте: просто добавив инструмент администратора, правильную конфигурацию DNS и обратный прокси-сервер Nginx - все это работает в собственном докер-контейнере - установка может быть встроена в полностью функциональный хостинг WordPress. Это, однако, выходит за рамки этого руководства, поэтому давайте вернемся к запуску некоторых контейнеров WordPress.

Шаг 1: Запустите новую машину EC2

Мне нравится использовать Amazon Web Services, когда мне нужен веб-сервер для таких экспериментов: серверы дешевые для запуска, и вы платите только за то, что используете их (просто не забудьте остановить их, когда закончите!).

Тем не менее, нет ничего особенного в Amazon об использовании Docker с New Relic, поэтому, если вы предпочитаете какой-либо другой поставщик виртуального сервера или имеете собственный сервер, на котором вы можете установить инструменты мониторинга Docker и New Relic, все это хорошие варианты.

В этом случае вы можете пропустить этот шаг и перейти прямо к установке Docker на серверной машине (шаг 2).

В моем предыдущем учебном пособии «Начало работы с мониторингом вашего веб-приложения с использованием New Relic Alerts» я включил подробные пошаговые инструкции для запуска машины в облаке Amazon. Следуйте этим инструкциям в шаге 1 учебника, но не устанавливайте PHP или не запускайте Apache как раз на этот раз, потому что Apache и PHP войдут внутрь контейнеров Docker.

Если вы уже знакомы с AWS и просто хотите быстро запомнить, какие опции выбрать при запуске машины, этот короткий список проведет вас через весь процесс:

  1. Войдите в консоль AWS, создав учетную запись, если у вас ее еще нет.
  2. В главном меню выберите EC2. Вы заметите, что Amazon недавно запустила новую службу для запуска контейнеров Docker в облаке (EC2 Container Service), но на этот раз мы захотим сами управлять докером.
  3. Выберите «Запуск инстанса», чтобы запустить новую машину. Перейдите с параметром «Быстрый старт» и выберите 64-разрядный сервер Amazon Linux по умолчанию. Для тестирования размер машины t2.micro просто прекрасен.
  4. На странице группы безопасности откройте HTTP-порт и сделайте SSH доступным только с вашего IP-адреса, выбрав опцию My IP.
  5. Нажмите «Обзор и Запуск», чтобы запустить сервер. Когда вас попросят создать пару ключей, создайте ее (назовите ее, например, docker_test), и загрузите.

Через минуту или около того вы заметите, что ваша машина поднята.

Щелкните правой кнопкой мыши ее имя и выберите опцию Connect. Скопируйте IP-адрес устройства из всплывающего окна и используйте его для подключения к машине с помощью SSH (поместите IP-адрес, где указано INSERT_IP_HERE в приведенных ниже командах):

Шаг 2. Установка Docker на сервере.

Теперь, когда вы запустили сервер, и вы подключены к нему через SSH, пришло время установить движок Docker.

Инструкции на этом шаге предназначены для сервера Amazon Linux, который мы создали на шаге 1. Если вы используете другую операционную систему, см. Документацию Docker для инструкций по установке, характерных для вашей среды.

Начните с установки пакета докеров:

Опция -y позволяет yum автоматически отвечать yes на любые вопросы об установке. Это ускоряет работу, но если вы хотите оставаться в безопасности, не стесняйтесь оставлять ее.

После установки пакета Docker запустите его как службу:

Теперь Docker будет работать пока работает ваш сервер (или пока вы не остановите его самостоятельно).

Чтобы проверить установку, вы можете использовать команду docker ps, в которой перечислены используемые контейнеры Docker:

В настоящее время список по-прежнему пуст, так как мы еще не запускали какие-либо контейнеры:

The Docker process list shows no running containers

Наконец, добавьте пользователя по умолчанию в группу docker, чтобы вы могли управлять Docker без необходимости префикса всех своих команд Docker с помощью sudo. Это всего лишь четыре лишних буквы, но имеет большое значение, когда вам приходится писать это часто!

Чтобы применить изменения к вашему соединению, закройте соединение ssh и снова подключитесь.

Теперь вы готовы запустить некоторые контейнеры Docker.

Шаг 3: Запустите контейнер Docker

Если вы ищете WordPress и Docker (или MySQL и Docker), вы заметите, что на выбор есть много разных Docker образов. В вашем собственном приложении, это хорошая идея, чтобы пройти через самые популярные и посмотреть, какие из них лучше всего подходят для вас.

В этом уроке я решил начать с официальными образами: образ MySQL, предоставленный MySQL, и официальный образ WordPress от Docker.

Сначала запустите контейнер с использованием образа MySQL, mysql/mysql-server:5.5.

Команда загружает пакет и его зависимости, а затем запускает ваш контейнер MySQL, называя его db. Имя важно, поскольку мы будем использовать его для связывания наших контейнеров WordPress с базой данных.

Если вам нравится, используйте docker ps, чтобы проверить, работает ли новый контейнер. Для получения дополнительной информации о запуске вы можете проверить файл журнала контейнера с помощью docker logs db. Вы должны увидеть что-то вроде этого как последние несколько строк вывода:

Затем запустите контейнер WordPress с использованием образа WordPress от Docker, wordpress:latest (используя тег latest, вы всегда получите самую современную версию на базе Apache).

В приведенной выше команде вы заметите, что мы связываем контейнер с изображением MySQL выше (-link db: mysql) и передаем имя базы данных для использования в качестве переменной среды (-e WORDPRESS_DB_NAME = "wordpress_1"). Этот контейнер прослушивает стандартный HTTP-порт 80.

Пароль базы данных пользователя root автоматически используется при связывании контейнера db.

Как только образ будет загружен и контейнер будет запущен, перейдите на URL-адрес машины, чтобы проверить, работает ли контейнер как следует. При работе с AWS используйте Public IP из шага 1.

Visiting the site youll find WordPress running

Завершите установку WordPress, если хотите - это займет всего минуту или две.

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

Установите New Relic мониторинг с поддержкой Docker

Поддержка New Relic Docker разделена на две части:

  • В части «Servers» вы найдете общую информацию о Docker: такие вещи, как количество контейнеров разных типов или количество ресурсов, которые они используют на каждом из ваших серверов.
  • В части APM вы можете получить доступ к контейнерам Docker как к частям ваших веб-приложений, контролируя их вместе, а также индивидуально на уровне приложений.

Начнем с части « Servers».

Шаг 1. Установка  New Relic Server Monitor

Поскольку New Relic работает как онлайн-сервис, чтобы использовать инструменты мониторинга New Relic, вам сначала потребуется активная учетная запись New Relic. Вы можете начать с 14-дневной бесплатной пробной версии или использовать бесплатную версию - все функциональные возможности, представленные в этом учебнике, доступны в бесплатной версии.

Если у вас еще нет учетной записи New Relic, начните с регистрации.

После регистрации выберите «Servers» в верхнем меню, чтобы получить доступ к инструменту мониторинга сервера.

The New Relic menu bar

Если вы уже используете New Relic Servers, вы увидите список серверов, на которых отслеживается New Relic. Нажмите кнопку «Добавить еще» для получения инструкций по установке.

Если вы только что зарегистрировались, вас отправят прямо на страницу «Get started with New Relic Servers».

На этой странице вы найдете инструкции, относящиеся к различным средам. Выберите ту, которая соответствует вашему серверу. Для установки Amazon Linux, используемой в этом руководстве, мы перейдем к опции Red Hat or CentOS.

Get started with New Relic Servers

Прокрутите вниз и завершите установку в соответствии с инструкциями, соответствующими вашей серверной среде.

В случае с Amazon Linux начните с добавления репозитория New Relic yum. Обратите внимание, что это нужно сделать под root, поэтому мы будем использовать sudo.

Затем, добавив репозиторий yum, используйте его для установки пакета Server Monitor:

Опять-таки, параметр -y заставим yum отвечать yes на каждое приглашение. Если вы хотите быть более осторожным, не стесняйтесь идти без него и принимайте подсказки вручную.

Чтобы завершить установку, настройте агент мониторинга и установите лицензионный ключ. Вы найдете версию команды с вашим лицензионным ключом на странице «Начало работы с новыми серверами Relic Servers». Не забудьте указать команду sudo.

Перед запуском демонстрационного мониторинга мы немного отвлечемся от инструкций по установке на странице New Relic Servers и сделаем несколько дополнительных конфигураций для мониторинга Docker.

Шаг 2: Примените конфигурацию докера

Во-первых, чтобы позволить New Relic собирать данные о вашей настройке Docker, добавьте пользователя newrelic в группу Docker на вашем сервере:

Затем перезапустите Docker.

Обратите внимание: чтобы сделать перезапуск изящно и убедиться, что в ваших контейнерах ничего не ломается, рекомендуется сначала остановить все запущенные контейнеры.

По завершении перезагрузки все будет настроено, и вы можете запустить демон мониторинга сервера.

Настройка для сервера New Relic завершена. Запустите контейнеры Docker снова, и вы скоро увидите информацию о своем сервере в панели инструментов.

Давайте посмотрим, что вы можете там найти.

Что вы найдете внутри New Relic Servers

Внутри New Relic щелкните пункт меню «Servers», чтобы перезагрузить список серверов. Если все пойдет хорошо, теперь вы должны увидеть свой сервер в списке:

The server listing now shows our new server

Нажмите на имя машины, чтобы получить дополнительную информацию об этом. Если данные пока не показаны, дайте инструменту некоторое время и повторите попытку.

Первое, что вы увидите, это обзорная страница.

Обзор

На обзорной странице все выглядит примерно так же, как на обзорной странице New Relic Servers при мониторинге обычного сервера без Docker.

The New Relic Servers overview page

Присутствует использование ЦП, средняя загрузка сервера, объем используемой физической памяти, некоторая информация о дисках и использовании сети. Когда мы только запустили сервер, и пользователей, посещающих сайт, нет, большинство из этих данных по-прежнему низкие.

Если вы посмотрите на список процессов в правом нижнем углу, вы заметите, что Docker действительно работает на этом сервере:

The list of processes show Docker running on the server

Просмотр обрзов Docker

Общий взгляд важен, когда мы думаем о здоровье сервера в целом, но теперь нас интересует то, что мы можем узнать о настройке Docker. Для этого более интересной частью Servers является меню Docker.

Нажмите на пункт меню «Docker» слева.

The Docker Images view on New Relic Servers

На экране Docker отображается процент ресурсов сервера, которые используют ваши контейнеры Docker, сгруппированные по их образам.

В этом случае, например, вы увидите два образа: wordpress:latest и mysql/mysql-server:5.5, которые мы использовали для запуска наших двух контейнеров на предыдущих шагах. На сервере мало активности, но мы видим, что WordPress использует больше процессора, и оба используют примерно тот же объем памяти.

Вы можете использовать раскрывающийся список в верхнем левом углу для сортировки списка по CPU или Memory.

Позже, по мере того, как ваше приложение будет рости, результаты этой страницы расскажут вам больше о вашей настройке и о том, что вы должны с ней делать.

Например, если вы заметили, что MySQL использует большую часть памяти системы и вычислительной мощности, возможно, самое время подумать о переносе его на собственный выделенный сервер. Или, может быть, вы заметите, что на сервере работает больше чем нужно контейнеров WordPress, и решите разбить их на два ...

Более внимательный взгляд на образ одного докера

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

A closer look at the WordPress image

На экране отображается использование процессора и памяти из контейнеров с использованием этого образа и количество контейнеров с течением времени.

Чтобы увидеть, как добавление большего количества контейнеров влияет на представление, добавьте еще несколько контейнеров WordPress. Мы будем использовать ту же самую команду запуска докеров раньше, с небольшими изменениями:

  • Новые контейнеры будут называться wordpress-2 и wordpress-3 соответственно.
  • В новых контейнерах будут использоваться базы данных wordpress_2 и wordpress_3.
  • Новые контейнеры будут слушать разные порты, 8000 и 8001 вместо 80.

Вот две команды запуска с изменениями из приведенного выше списка:

На Amazon, чтобы сделать новые сайты WordPress доступными, вам все равно необходимо отредактировать настройки Security Group, чтобы разрешить входящий трафик с портов 8000 и 8001. Используйте опцию Custom TCP Rule и выберите Anywhere в качестве источника трафика.

Теперь посетите два новых сайта WordPress, нажав на некоторые из их пунктов меню.

Затем вернитесь к New Relic Servers, чтобы узнать, как изменились данные на странице Docker.

Первое и наиболее заметное изменение - количество запущенных контейнеров. Вместо одного есть три:

The Containers graph show the change in the number of running containers

Использование процессора и памяти по-прежнему остается низким, хотя использование памяти показывает рост:

CPU and memoery usage after adding two more WordPress containers

Добавление поддержки New Relic APM в ваших докер контейнерах

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

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

Обычно, когда вы запускаете PHP-код непосредственно на своем веб-сервере, вы просто устанавливаете агент мониторинга APM. Например, вы можете посмотреть прямо там, на сервере, на котором вы запускаете приложение (как это было в предыдущем учебнике New Relic Alerts).

Теперь все немного по-другому: мы разделили архитектуру на отдельные части - «микросервисы» - каждый работает в своих контейнерах, поэтому сам хост-сервер не запускает Apache или PHP. Поэтому, если вы должны были установить агент APM непосредственно на хост-сервер, вы бы не увидели никакой активности вообще.

Мониторинг должен проходить внутри контейнеров.

Шаг 1: Создайте свою собственную версию WordPress Image

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

Мы изменим образ WordPress, который мы использовали ранее в учебнике, включив в него мониторинг New Relic.

Вы можете загрузить исходный файл для образа Docker из связанного репозитория GitHub или создать его самостоятельно, следуя инструкциям в этом уроке. При работе с этим примером, вероятно, проще всего сделать это прямо на вашем сервере.

Начните с создания каталога для определения нового изображения, например, в домашнем каталоге ec2-user.

Затем в этом каталоге добавьте новый текстовый файл, называя его Dockerfile. Это файл, который будет содержать определение того, что входит в ваш образ Docker.

Внутри файла добавьте следующий код. Мы рассмотрим содержимое строки за строкой сразу после фрагмента.

Теперь давайте рассмотрим файл и посмотрим, что он делает.

Строка 1: файл начинается с указания образа Docker, на котором должен быть построен наш образ. Я выбрал конкретную версию образа wordpress, так что, если мы снова создадим этот образ через некоторое время, он не изменится между ними. 4.3.1-apache - последняя версия на момент написания статьи.

Строки 3-5: Включите скрипт для инициализации мониторинга New Relic. Скрипт будет запущен при запуске контейнера, чтобы мы могли использовать его для определения имени приложения и лицензионного ключа отдельно для каждого контейнера.

Мы рассмотрим содержимое этого файла на следующем шаге.

Строки 7-8. Если вы внимательно посмотрите на код, определяющий базовый образ WordPress, вы заметите, что скрипт apache -entrypoint.sh, определенный для запуска как его ENTRYPOINT, заканчивается строкой, которая выполняет команду, переданную в CMD (по умолчанию это apache2-foreground).

Строка выглядит так:

Поскольку я не хотел заменять оригинальный сценарий «entrypoint», но мне нужно было завершить его, вызвав новый скрипт run.sh, о котором мы упоминалось выше, я решил отредактировать файл ENTRYPOINT во время компиляции: команда sedстроке 8) заменяет строку exec сверху командой exec, которая вместо этого запускает run.sh.

Строки 10-11: Это, вероятно, не то, что вы захотите в производственной установке. Тем не менее, для тестирования очень удобно включать простой PHP-файл, который мы можем использовать для проверки правильности настройки New Relic.

Обязательно создайте файл с именем test.php со следующим содержимым:

Строки 13-20: Это та часть, где мы устанавливаем пакет мониторинга New Relic в образ.

Если вы посмотрите инструкции по установке на странице «Начинаем работу с New Relic» (первая страница, которую вы увидите при выборе опции APM после входа в систему), вы заметите, что команды здесь написано под установку в среде Debian. Это связано с тем, что образ WordPress по умолчанию основан на образе, использующем Debian.

Во-первых, скрипт устанавливает wget и использует его для загрузки ключа New Relic и добавления его в APT.

Затем скрипт добавляет репозиторий New Relic к APT.

И затем, наконец, в строках 19 и 20, он устанавливает пакет newrelic-php5 из этого репозитория.

Строки 22-25: Инструкции по установке New Relic на странице «Начало работы с New Relic» продолжаются с завершением установки и установкой лицензионного ключа.

Поскольку лицензионный ключ и имя приложения представляют собой специфическую для контейнера информацию, мы не можем включить этот последний шаг в образ. Он используется только при запуске, в нашем скрипте run.sh.

Чтобы подготовиться к этому, сценарий определяет три переменные среды:

  • NR_INSTALL_SILENT: эта переменная, если она присутствует (и установлена на любое значение), приведет к тому, что сценарий установки New Relic будет пропускать все пользовательские запросы и вместо этого использовать значения по умолчанию.
  • NR_INSTALL_KEY: Этот параметр указывает лицензионный ключ. Поскольку мы не хотим жестко закодировать лицензионный ключ в определении образа, он теперь установлен в **ChangeMe**. Эта переменная также автоматически считывается скриптом установки.
  • NR_APP_NAME: Это переменная, которую я добавил сам, которая будет использоваться в скрипте run.sh, чтобы изменить конфигурацию демона New Relic, чтобы использовать фактическое имя приложения контейнера вместо стандартного («Приложение PHP»).

Шаг 2. Создание пользовательского сценария запуска

Как будет готов файл Dockerfile нам по-прежнему необходимо реализовать сценарий запуска, run.sh, упомянутый выше. Сценарий завершит настройку New Relic и только затем запустит сервер, теперь уже с мониторингом New Relic.

Создайте файл и добавьте в него следующий код:

Теперь давайте пройдемся построчно по коду.

Строка 1: укажите, что сценарий должен запускаться с помощью интерпретатора bash.

Строка 2: укажите, что сценарий должен закончится, если возникла ошибка.

Строки 4-5: Запустите сценарий установки New Relic. Обратите внимание, что нам не нужно передавать какие-либо параметры, поскольку конфигурация выполняется с использованием переменных среды. NR_INSTALL_SILENT уже был указан в Dockerfile, а NR_INSTALL_KEY должен быть передан командой docker run.

Строки 7-8: поскольку сценарий установки не имеет переменной окружения для указания имени приложения, нам придется отредактировать конфигурацию вручную или фактически программно - в этом скрипте.

В файле конфигурации имя приложения указывается как:

Команда sed в строке 8 ищет эту строку и заменяет ее версией, которая включает имя, определенное в NR_APP_NAME.

Строка 10: Наконец, чтобы завершить запуск, вызовите apache2-foreground для запуска Apache и продолжите работу контейнера. Как вы помните, ранее это было сделано в конце скрипта точки входа.

Теперь все части для пополнения образа WordPress мониторингом New Relic готовы. Теперь мы можем создать образ и попробовать.

Шаг 3: Скомпилируйте и запустите новый образ

В директории, где вы разместили файлы, созданные на последних двух шагах, введите команду:

Это создает новый образ с именем tutsplus/wordpress-newrelic с тегом 4.3.1-apache и добавляет его в локальный репозиторий образов Docker.

Как только сборка завершится, пришло время посмотреть, все ли работает нормально.

Во-первых, остановите и удалите существующие контейнеры WordPress:

Затем запустите новые, начиная с одного и добавив затем остальные, как только вы проверили, что все работает.

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

-e NR_INSTALL_KEY="YOUR KEY HERE": здесь вы указываете ключ лицензии New Relic, который должен использоваться в скрипте установки. Вы можете найти их, перейдя на страницу APM «Начало работы с New Relic» и выбрав опцию PHP.

На этой странице, прямо перед инструкциями по установке, есть красная кнопка с надписью Reveal License Key. Нажмите на нее, а затем замените YOUR KEY HERE на показанный ключ.

Get your license key

-e NR_APP_NAME="wordpress-cloud": эта часть команды устанавливает переменную среды, используемую для указания имени приложения. Это имя используется для группировки данных внутри APM.

«Правильное» значение имени контейнера зависит от вашей настройки и того, как вы хотите его контролировать. Если на всех ваших контейнерах работают части одного и того же приложения, имеет смысл использовать для них одно и то же имя и собирать их все в одном представлении в инструменте мониторинга. С другой стороны, если контейнеры явно раздельны, разные названия - это верное решение. В этом примере я решил использовать одно и то же имя wordpress-cloud для всех трех контейнеров.

Ознакомьтесь с документацией New Relic для более подробного обсуждения именования ваших приложений.

tutsplus/wordpress-newrelic:4.3.1-apache: в конце команды вы заметите, что теперь мы используем только что созданный образ вместо wordpress:latest.

После того, как вы запустите команду и запустили свой сервер, зайдите на тестовую страницу WordPress, чтобы убедиться, что сервер запущен, и New Relic добавлен. Вы также можете проверить значение newrelic.appname.

The PHP test page showing New Relic configuration

Затем вы можете снова перейти на главную страницу, чтобы найти WordPress, работающий нормально. Теперь у вас есть контейнер Docker с WordPress и сообщение о его состоянии в New Relic APM.

Добавьте оставшиеся два контейнера, wordpress-2 и wordpress-3, а затем давайте посмотрим на данные, которые мы найдем в APM.

Что вы найдете в New Relic APM

Теперь, когда вы настроили мониторинг для каждого из ваших контейнеров Docker, давайте посмотрим на информацию, которую мы можем найти о них в APM.

Поскольку мы добавили все три контейнера WordPress с одним и тем же именем, при открытии страницы APM вы найдете только одно приложение wordpress-cloud. Когда вы поместите указатель мыши поверх имени приложения, вы увидите всплывающее сообщение «Приложение Php, работающее на 3 хостах (3 экземпляра)».

APM showing our Docker based application

Нажмите на имя, чтобы получить доступ к данным аналитики для этого приложения и его контейнеров.

Обзор

Первое представление, которое вы увидите в APM, - это Обзор. На этой странице приведен общий обзор производительности всех контейнеров в этом приложении: как долго выполняются запросы, поступающие в приложение, оценка Apdex приложения, его пропускная способность и список самых медленных транзакций приложения.

Overview of the wordpress-cloud application

В нижней части экрана вы найдете краткую информацию о структуре приложения: на каких серверах оно работает, а также на контейнерах внутри них запущено.

В более сложном, реальном приложении вы можете увидеть несколько серверов, а также несколько контейнеров. Теперь вы увидите наши три контейнера WordPress. Поскольку мы не установили New Relic в образ базы данных, мы не видим их в этом списке.

Фильтрация данных по контейнерам

Как и на обзорной странице, по умолчанию остальные экраны в APM покажут вам общее представление о производительности всего приложения в различных показателях, представленных в них.

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

Dropdown menu to choose a specific container

Если вы не знаете, что означают разные коды сервера в этом списке, вы можете использовать команду docker ps, чтобы найти сопоставление между этими идентификаторами докеров и вашими контейнерами.

Поиск и исправление ошибок PHP в контейнерах Docker

APM не только полезен для отслеживания производительности вашего веб-приложения. Это также отличная помощь в том, чтобы быстро заметить, что что-то пошло не так в вашем приложении и обнаружить проблему.

Чтобы проверить это в среде, основанной на Docker, я создал простой плагин WordPress, намеренно разместив несколько ошибок в коде и установив его на одном из контейнеров. Затем, просмотрев сайт некоторое время, это то, что я увидел на странице «Ошибки» в APM:

The Errors page shows the applications errors

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

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

Нажав на сообщение об ошибке, вы попадете на страницу с дополнительной информацией об ошибке:

More information about the error

Посмотрев на этот экран, вы увидите, что ошибка происходит на одном из контейнеров Docker, 402c389c0661, который просто является идентификатором контейнера wordpress-3, на котором я установил сломанный плагин.

Теперь, когда мы нашли контейнер, в котором произошла ошибка, мы можем использовать трассировку стека, чтобы исправить проблему и обновить рабочую версию плагина в сломанном контейнере. Проблема решена.

Вывод

Мы реализовали простую настройку веб-сервера на докере и включили мониторинг New Relic. Вы также видели, как вы можете использовать инструменты мониторинга, чтобы получить лучшую видимость и аналитику в приложении на основе Docker.

Тем не менее, мы только затронули лишь малую часть того, что вы можете сделать с инструментами мониторинга New Relic, поэтому, если вы еще не являетесь пользователем New Relic, просмотрите страницу мониторинга докер контейнеров в New Relic и начинайте работу.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.