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

Как использовать New Relic с PHP и WordPress

by
Difficulty:BeginnerLength:LongLanguages:
This post is part of a series called Performance Monitoring With New Relic.
Using New Relic to Monitor Your Android App
Optimizing Application Performance with New Relic for iOS
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 Ilya Nikov (you can also view the original English article)

Ранее мы рассмотрели, как настроить New Relic для приложения Rails, а также потратили много времени на то, как использовать New Relic UI. И хотя пользовательский интерфейс очень похож, независимо от языка и фреймворка, которые вы используете, на самом деле настройка New Relic может радикально отличаться. Сегодня мы рассмотрим, как мониторить PHP приложение с помощью New Relic. В частности, мы рассмотрим базовую установку WordPress и получим некоторые данные о производительности в панелях инструментов New Relic.

Настройка New Relic для Ruby практически не привязана к окружению. Мы просто добавляем gem агента к нашему приложению, независимо от того, как мы развертываем наше приложение (Passenger + Apache, Thin + Nginx и т.д.), gem выполнит оставшуюся часть работы, чтобы мы получили наши показатели производительности. С PHP-версией агента среда намного важнее, поскольку агент установлен и живет в боксе, где приложение будет развернуто, а не является частью какого-либо конкретного приложения.

Давайте создадим для этого песочницу (используя экземпляр EC2) и разверните базовую установку WordPress.

Настройка нашей песочницы

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

Нам нужно запустить экземпляр EC2 с Ubuntu Server 12.04 LTS. Если вы не хотите настраивать экземпляр EC2, вы можете просто создать виртуальную машину, вместо этого используя VirtualBox (или ваш VM инструмент на выбор). Если вы настраиваете экземпляр EC2, вам необходимо запомнить следующее:

  • загрузите свой ключ (если вы создали новый в процессе настройки), чтобы вы могли использовать SSH в своем экземпляре
  • добавьте дополнительное правило в любую группу безопасности, которую вы даете вашему экземпляру, чтобы разрешить HTTP-подключения к экземпляру (чтобы позже мы могли фактически получить доступ к нашему блогу WordPress через браузер позже)

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

Теперь нам нужно установить Apache, PHP и MySQL. С Ubuntu Server необходимо просто выполнить следующие команды:

Вам нужно будет выбрать LAMP в пользовательском интерфейсе, и вам также потребуется ввести MySQL пароль, когда будет предложено это сделать (я просто оставляю его пустым, так как мы не заботимся о том, чтобы этот бокс был защищен каким-либо образом). По завершении установки мы можем запустить несколько команд, чтобы убедиться, что все было установлено без проблем.

Сначала проверьте, установлен ли Apache:

Во-вторых, убедитесь, что у нас есть PHP:

И затем проверьте, что у нас есть MySQL:

Нам также может потребоваться проверить, действительно ли PHP включен в нашей конфигурации Apache, но поскольку мы установили lamp-server с помощью tasksel, мы можем быть уверены, что это так (и мы всегда можем сделать быстрый скрипт phpinfo(), если мы все же захотим проверить).

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

Я собираюсь назвать нашу новую установку myblog1 (так что для нее база данных также будет называться myblog1). Теперь нам нужно выполнить следующие команды, чтобы запустить наш блог (не забудьте, если нужно, sudo):

Теперь введите имя базы данных, имя пользователя и пароль в файл конфигурации (имя хоста - localhost, которое указано по умолчанию). На этом этапе вы сможете перейти в свой браузер, ввести нужный URL (в моем случае http://ec2-107-20-122-116.compute-1.amazonaws.com/myblog1), и WordPress готов (перед этим рекомендуется перезапускать Apache sudo apache2 service restart).

Теперь наша песочница завершена, и мы можем начать с установки New Relic.

Установка New Relic

Как я упоминал ранее, агент PHP New Relic находится в боксе, поэтому вы можете установить его с помощью диспетчера пакетов операционной системы (apt-get, так как мы используем Ubuntu). Первое, что нужно сделать, это импортировать ключ репозитория New Relic:

Теперь мы добавляем в систему репозиторий New Relic:

На данный момент мы можем использовать стандартные команды apt для установки агента:

Это извлекает пакет агента PHP из репозитория и помещает скрипт установки агента в систему. Сценарий называется newrelic-install, и он располагается в /usr/bin, поэтому вы можете выполнить его в любом месте. Сценарий, к сожалению, назван так как, что вы можете использовать его как для установки так и для удаления New Relic из вашей системы. Чтобы установить New Relic, нам нужно запустить:

Сценарий является интерактивным и попросит вас ввести свой лицензионный ключ. Вы можете найти его, нажав большую красную кнопку, когда вы настраиваете новое приложение PHP в новом пользовательском интерфейсе Relic.

Если у вас более одной установки PHP в вашей системе, она также попросит вас выбрать, для какой установки New Relic должен быть установлен (вы можете выбрать любое количество установок, включая все). Если в вашей системе есть только один PHP, сценарий будет использовать только его. Стоит отметить, что если ваша версия PHP старше 5.2, скрипт завершится неудачей, поскольку более старые версии не поддерживаются.

Если все пройдет хорошо, вы увидите следующее сообщение:

Затем скрипт распечатает дополнительную информацию для вас, включая расположение файлов журнала:

Кроме того, что вам необходимо будет перезагрузить веб-сервер (и PHP-FPM, если вы его используете).

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

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

В нашем случае, поскольку мы запускаем только одно приложение (наша установка WordPress), мы могли бы перейти в New Relic UI и получить хорошую статистику для нашего блога. Но, конечно, мы хотим дать нашему блогу лучшее имя и на всякий случай, мы хотим, чтобы наш сервер обслуживал более одного приложения. Мы также хотим понять, как отделять приложения друг от друга. Мы рассмотрим, как это сделать в ближайшее время, но прежде чем мы это сделаем, давайте посмотрим, что на самом деле представляет из себя агент PHP.

Как выглядит установка

В агенте New Relic PHP есть две части. Первая - это расширение PHP, это общий объект, называемый newrelic.so. Если мы посмотрим на файл конфигурации агента:

Мы можем видеть, что он перечислен справа вверху:

Это то, что на самом деле собирает статистику из ваших приложений, но не отправляет статистику в New Relic, это уже задание прокси-сервера.

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

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

Эта команда отправит сигнал останова в процесс мониторинга. Затем процесс мониторинга убьет рабочий процесс, а затем отключится. Если вам когда-либо понадобится убить демона вручную, убедитесь, что вы сначала прекратили процесс мониторинга, прежде чем убить работника (в противном случае новый работник будет порожден - это очевидно).

Настройка агента (и прокси-сервера)

Мы уже видели файл конфигурации агента New Relic PHP /etc/php5/cli/conf.d/newrelic.ini. И агент, и демон настроены с использованием этого файла.

Этот файл очень хорошо документирован со всеми параметрами и указанными по умолчанию значениями. Давайте поговорим о формате этого файла. Агент New Relic для Ruby можно настроить через YAML, который является широко известным форматом. Агент PHP - это просто текстовый файл, но нам нужна небольшая структура. Каждая переменная в файле имеет один из четырех типов (String, Boolean, Number, Duration). Строка и число не требуют пояснений, логические значения могут быть true, on или 1, чтобы указать правду и false, off или 0, чтобы указать на неверно. Длительность - это строки с определенным форматом, например: «1w3d23h10m» обозначает одну неделю, три дня, 23 часа и десять минут. Значения длительности могут быть очень детальными аж дл микросекунды.

Все переменные в файле также имеют «область». Существует три возможных области: SYSTEM, PERDIR и SCRIPT. Переменные, имеющие область SYSTEM, могут быть установлены только в глобальном файле конфигурации. Переменные с областью PERDIR могут быть установлены в глобальном файле конфигурации и также могут быть переопределены для каждого каталога. Переменные с областью сценария могут быть глобальными, для каждого каталога и также могут быть переопределены программно.

Например, наиболее распространенной конфигурационной переменной является `newrelic.appname`. Эта переменная является строковым типом, она имеет значение по умолчанию PHP Application (теперь мы знаем, почему мы увидели это значение в файле журнала после того, как мы установили агент и перезапустили сервер). Область этой переменной - PERDIR, которая дает нам представление о том, как переопределить имя приложения для нашего блога WordPress.

Есть много других переменных, контролирующих такие вещи, как расположение файлов журнала, писать или нет sql запросы, уровень детальности журнала и т.д. Я рекомендую вам изучить файл newrelic.ini, чтобы ознакомиться с этими параметрами.

Настройка отдельного приложения для нашего блога WordPress

Мы хотим увидеть отдельное приложение в New Relic UI для нашего блога WordPress, поэтому давайте посмотрим, как мы можем это сделать. Ваши параметры для каждой конфигурации каталога различаются в зависимости от вашего стека, если вы используете PHP-FPM, шаги будут отличаться от того, если бы вы использовали Nginx. В нашем случае, поскольку мы запускаем Apache, у нас есть два варианта.

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

Но у меня нет специального виртуального хоста отдельно для блога, поэтому другой вариант - использовать файл .htaccess. Убедитесь, что вы действительно разрешаете файлы .htaccess, добавив следующее на ваш основной виртуальный хост:

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

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

PHP Application все еще существует, но теперь у него есть друг, который является нашим блогом WordPress. И вот он в пользовательском интерфейсе:

Теперь мы будем получать показатели при просмотре нашего блога, как для фронтенда, так и для интерфейса администратора. Так как New Relic поддерживает WordPress из коробки, метрики будут грамотно разделены (когда фреймворк не поддерживается, метрики будут сгруппированы вместе).

Обновление агента и демонов

New Relic - сложная часть программного обеспечения, и хорошо держать ее постоянно обновленной, поскольку ошибки исправляются регулярно, а новые функции добавляются. Поскольку мы установили все, используя apt-get, то будет очень просто обновиться. Мы просто делаем то же самое, что делали при установке:

Если мы не установили еще один PHP в системе, нам просто нужно перезагрузить наш сервер, и мы на самой последней версии. Если есть новый PHP, нам может понадобиться перезапустить скрипт newrelic-install.

Это всего лишь одно предостережение. В определенных ситуациях вы можете запускать демон прокси-сервера New Relic отдельно от агента, а это означает, что перезапуск сервера автоматически не запускает демона, если он не работает (это называется режимом внешнего демона). Могут быть несколько причин, по которым вы хотели бы это сделать, например, вам может понадобиться, чтобы другой пользователь владел процессом демона, поэтому логи будут доступны только для этого пользователя. В этой ситуации вы должны помнить, что нужно перезапустить как сервер, так и демона прокси. Если вы этого не сделаете, вы увидите ошибки несоответствия протокола в логах.

Вывод

Как вы можете видеть, установка New Relic, настроенного для приложения PHP, сильно отличается от настройки для Ruby, ваше фактическое приложение даже не учитывает этот процесс, в то время как среда, в которой вы развертываете, является центральной. К счастью, это означает, что если вы используете какой-либо поддерживаемый фреймворк PHP, процесс настройки New Relic будет точно такой же. Помимо WordPress поддерживается большинство популярных фреймворков PHP, включая Cake, Symphony и Laravel (версия 4 и выше). Также возможно использовать 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.