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 необходимо просто выполнить следующие команды:
sudo apt-get install tasksel sudo tasksel install lamp-server
Вам нужно будет выбрать LAMP в пользовательском интерфейсе, и вам также потребуется ввести MySQL пароль, когда будет предложено это сделать (я просто оставляю его пустым, так как мы не заботимся о том, чтобы этот бокс был защищен каким-либо образом). По завершении установки мы можем запустить несколько команд, чтобы убедиться, что все было установлено без проблем.
Сначала проверьте, установлен ли Apache:
ubuntu@ip-10-145-246-196:~$ apache2 -V Server version: Apache/2.2.22 (Ubuntu) Server built: Jul 12 2013 13:37:10 Server's Module Magic Number: 20051115:30 Server loaded: APR 1.4.6, APR-Util 1.3.12 Compiled using: APR 1.4.6, APR-Util 1.3.12 Architecture: 64-bit Server MPM: Prefork threaded: no forked: yes (variable process count) ...
Во-вторых, убедитесь, что у нас есть PHP:
ubuntu@ip-10-145-246-196:~$ php -i phpinfo() PHP Version => 5.3.10-1ubuntu3.10 System => Linux ip-10-145-246-196 3.2.0-58-virtual #88-Ubuntu SMP Tue Dec 3 17:58:13 UTC 2013 x86_64 Build Date => Feb 28 2014 23:13:16 Server API => Command Line Interface Virtual Directory Support => disabled Configuration File (php.ini) Path => /etc/php5/cli Loaded Configuration File => /etc/php5/cli/php.ini ...
И затем проверьте, что у нас есть MySQL:
ubuntu@ip-10-145-246-196:~$ mysql --version mysql Ver 14.14 Distrib 5.5.35, for debian-linux-gnu (x86_64) using readline 6.2
Нам также может потребоваться проверить, действительно ли PHP включен в нашей конфигурации Apache, но поскольку мы установили lamp-server
с помощью tasksel
, мы можем быть уверены, что это так (и мы всегда можем сделать быстрый скрипт phpinfo()
, если мы все же захотим проверить).
Теперь мы можем установить WordPress. Прежде чем мы загрузим его, нам нужно настроить для него базу данных. Мы можем просто следовать инструкциям Codex:
ubuntu@ip-10-145-246-196:~$ mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 103 Server version: 5.5.35-0ubuntu0.12.04.2 (Ubuntu) Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> CREATE DATABASE myblog1; Query OK, 1 row affected (0.00 sec) mysql> GRANT ALL PRIVILEGES ON myblog1.* TO "myblog1_user"@"localhost" IDENTIFIED BY "abc123"; Query OK, 0 rows affected (0.00 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.01 sec) mysql> EXIT Bye
Я собираюсь назвать нашу новую установку myblog1
(так что для нее база данных также будет называться myblog1
). Теперь нам нужно выполнить следующие команды, чтобы запустить наш блог (не забудьте, если нужно, sudo
):
cd /var/www wget http://wordpress.org/latest.tar.gz tar -xzvf latest.tar.gz mv wordpress myblog1 cd myblog1 mv wp-config-sample.php wp-config.php
Теперь введите имя базы данных, имя пользователя и пароль в файл конфигурации (имя хоста - 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:
wget -O - https://download.newrelic.com/548C16BF.gpg | sudo apt-key add -
Теперь мы добавляем в систему репозиторий New Relic:
sudo sh -c 'echo "deb http://apt.newrelic.com/debian/ newrelic non-free" > /etc/apt/sources.list.d/newrelic.list'
На данный момент мы можем использовать стандартные команды apt
для установки агента:
sudo apt-get update sudo apt-get install newrelic-php5
Это извлекает пакет агента PHP из репозитория и помещает скрипт установки агента в систему. Сценарий называется newrelic-install
, и он располагается в /usr/bin
, поэтому вы можете выполнить его в любом месте. Сценарий, к сожалению, назван так как, что вы можете использовать его как для установки так и для удаления New Relic из вашей системы. Чтобы установить New Relic, нам нужно запустить:
newrelic-install install
Сценарий является интерактивным и попросит вас ввести свой лицензионный ключ. Вы можете найти его, нажав большую красную кнопку, когда вы настраиваете новое приложение PHP в новом пользовательском интерфейсе Relic.

Если у вас более одной установки PHP в вашей системе, она также попросит вас выбрать, для какой установки New Relic должен быть установлен (вы можете выбрать любое количество установок, включая все). Если в вашей системе есть только один PHP, сценарий будет использовать только его. Стоит отметить, что если ваша версия PHP старше 5.2, скрипт завершится неудачей, поскольку более старые версии не поддерживаются.
Если все пройдет хорошо, вы увидите следующее сообщение:
New Relic is now installed on your system. Congratulations!
Затем скрипт распечатает дополнительную информацию для вас, включая расположение файлов журнала:
/var/log/newrelic/newrelic-daemon.log /var/log/newrelic/php_agent.log
Кроме того, что вам необходимо будет перезагрузить веб-сервер (и PHP-FPM, если вы его используете).
Если вы перезагрузите свой сервер и просмотрите журнал демона, вы увидите что-то вроде этого:
ubuntu@ip-10-145-246-196:/var/www/myblog1$ cat /var/log/newrelic/newrelic-daemon.log 2014-03-23 05:30:41.063 (2008/main) warning: current file limit of 1024 is too low - attempting to increase it 2014-03-23 05:30:41.064 (2008/main) info: increased file limit to 2048 2014-03-23 05:30:41.064 (2008/main) info: New Relic 4.6 (release build 40 - "quetzalcoatlus" - "e3d29c5a2e5dc1ee455e831d589ecf5e18c7d6f0") [workers=1 listen='/tmp/.newrelic.sock' pid=2008 ppid=2007 uid=0 euid=0 gid=0 egid=0 backtrace=no os='Linux' rel='3.2.0-58-virtual' mach='x86_64' ver='#88-Ubuntu SMP Tue Dec 3 17' node='ip-10-145-246-196' startup=agent] 2014-03-23 05:30:41.069 (2008/main) info: RPM config: proto='https' collector='collector.newrelic.com' proxy='none' certfile='/etc/ssl/certs/ca-certificates.crt' certdir='/etc/ssl/certs' 2014-03-23 05:35:14.928 (2008/connector) info: ['PHP Application'] 'Reporting to: https://rpm.newrelic.com/accounts/232928/applications/3262356'
То, что называется PHP Application, пишет данные. Это что-то общее и полностью не похоже на наш блог WordPress, но это уже хорошее начало. Это означает, что все приложения на вашем веб-сервере запускаются и сообщают данные в New Relic в виде одного приложения. Это приложение имеет имя по умолчанию PHP Application.
В нашем случае, поскольку мы запускаем только одно приложение (наша установка WordPress), мы могли бы перейти в New Relic UI и получить хорошую статистику для нашего блога. Но, конечно, мы хотим дать нашему блогу лучшее имя и на всякий случай, мы хотим, чтобы наш сервер обслуживал более одного приложения. Мы также хотим понять, как отделять приложения друг от друга. Мы рассмотрим, как это сделать в ближайшее время, но прежде чем мы это сделаем, давайте посмотрим, что на самом деле представляет из себя агент PHP.
Как выглядит установка
В агенте New Relic PHP есть две части. Первая - это расширение PHP, это общий объект, называемый newrelic.so
. Если мы посмотрим на файл конфигурации агента:
/etc/php5/cli/conf.d/newrelic.ini
Мы можем видеть, что он перечислен справа вверху:
; This file contains the various settings for the New Relic PHP agent. There ; are many options, all of which are described in detail at the following URL: ; https://newrelic.com/docs/php/php-agent-phpini-settings ; ; If you use a full path to the extension you insulate yourself from the ; extension directory changing if you change PHP installations or versions. ; If you do not use an absolute path then the file must be installed in the ; active configuration's extension directory. extension = "newrelic.so"
Это то, что на самом деле собирает статистику из ваших приложений, но не отправляет статистику в New Relic, это уже задание прокси-сервера.
Демон агента является прокси-сервером между расширением PHP и серверами New Relic. По сути, расширение PHP дает данные, которые оно собирает для демона, а демон будет делать что-то вроде пакетной работы и выяснить, когда отправить данные на сервер. Вы должны всегда быть убеждены, что демон запущен, иначе данные в New Relic не будут отправлены. К счастью, по умолчанию, всякий раз, когда вы перезагружаете свой сервер, расширение PHP будет пытаться определить, работает ли демон и запустит его, если это не так.
У работающего прокси-сервера есть два процесса. Один - это процесс мониторинга, а второй - рабочий. Рабочий фактически выполняет работу по обмену данными с серверами New Relic, а процесс мониторинга просто наблюдает за воркером, и если тот умирает, по какой-то причине он будет порождать новый. Вы можете остановить демона, выполнив:
/etc/init.d/newrelic-daemon stop
Эта команда отправит сигнал останова в процесс мониторинга. Затем процесс мониторинга убьет рабочий процесс, а затем отключится. Если вам когда-либо понадобится убить демона вручную, убедитесь, что вы сначала прекратили процесс мониторинга, прежде чем убить работника (в противном случае новый работник будет порожден - это очевидно).
Настройка агента (и прокси-сервера)
Мы уже видели файл конфигурации агента 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
в наш виртуальный хост-блок и изменить там имя приложения:
... <IfModule php5_module> php_value newrelic.appname "My Blog 1" </IfModule> ...
Но у меня нет специального виртуального хоста отдельно для блога, поэтому другой вариант - использовать файл .htaccess
. Убедитесь, что вы действительно разрешаете файлы .htaccess
, добавив следующее на ваш основной виртуальный хост:
<Directory /var/www/myblog1> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory>
Теперь мы можем поместить файл .htaccess
в каталог верхнего уровня нашего блога и поместить в него следующее:
php_value newrelic.appname "My Blog 1"
Формат точно такой же, как если бы я помещал его в блок IfModule
. Теперь нам просто нужно отделиться от нашего сервера. Если мы закроем журналы демона при перезапуске сервера, мы увидим следующее:
ubuntu@ip-10-145-246-196:/var/www/myblog1$ cat /var/log/newrelic/newrelic-daemon.log 2014-03-23 05:30:41.063 (2008/main) warning: current file limit of 1024 is too low - attempting to increase it 2014-03-23 05:30:41.064 (2008/main) info: increased file limit to 2048 2014-03-23 05:30:41.064 (2008/main) info: New Relic 4.6 (release build 40 - "quetzalcoatlus" - "e3d29c5a2e5dc1ee455e831d589ecf5e18c7d6f0") [workers=1 listen='/tmp/.newrelic.sock' pid=2008 ppid=2007 uid=0 euid=0 gid=0 egid=0 backtrace=no os='Linux' rel='3.2.0-58-virtual' mach='x86_64' ver='#88-Ubuntu SMP Tue Dec 3 17' node='ip-10-145-246-196' startup=agent] 2014-03-23 05:30:41.069 (2008/main) info: RPM config: proto='https' collector='collector.newrelic.com' proxy='none' certfile='/etc/ssl/certs/ca-certificates.crt' certdir='/etc/ssl/certs' 2014-03-23 05:35:14.928 (2008/connector) info: ['PHP Application'] 'Reporting to: https://rpm.newrelic.com/accounts/232928/applications/3262356' 2014-03-23 06:07:58.768 (2008/connector) info: ['My Blog 1'] 'Reporting to: https://rpm.newrelic.com/accounts/232928/applications/3262424'
PHP Application все еще существует, но теперь у него есть друг, который является нашим блогом WordPress. И вот он в пользовательском интерфейсе:

Теперь мы будем получать показатели при просмотре нашего блога, как для фронтенда, так и для интерфейса администратора. Так как New Relic поддерживает WordPress из коробки, метрики будут грамотно разделены (когда фреймворк не поддерживается, метрики будут сгруппированы вместе).
Обновление агента и демонов
New Relic - сложная часть программного обеспечения, и хорошо держать ее постоянно обновленной, поскольку ошибки исправляются регулярно, а новые функции добавляются. Поскольку мы установили все, используя apt-get
, то будет очень просто обновиться. Мы просто делаем то же самое, что делали при установке:
apt-get update apt-get install newrelic-php5
Если мы не установили еще один PHP в системе, нам просто нужно перезагрузить наш сервер, и мы на самой последней версии. Если есть новый PHP, нам может понадобиться перезапустить скрипт newrelic-install
.
Это всего лишь одно предостережение. В определенных ситуациях вы можете запускать демон прокси-сервера New Relic отдельно от агента, а это означает, что перезапуск сервера автоматически не запускает демона, если он не работает (это называется режимом внешнего демона). Могут быть несколько причин, по которым вы хотели бы это сделать, например, вам может понадобиться, чтобы другой пользователь владел процессом демона, поэтому логи будут доступны только для этого пользователя. В этой ситуации вы должны помнить, что нужно перезапустить как сервер, так и демона прокси. Если вы этого не сделаете, вы увидите ошибки несоответствия протокола в логах.
Вывод
Как вы можете видеть, установка New Relic, настроенного для приложения PHP, сильно отличается от настройки для Ruby, ваше фактическое приложение даже не учитывает этот процесс, в то время как среда, в которой вы развертываете, является центральной. К счастью, это означает, что если вы используете какой-либо поддерживаемый фреймворк PHP, процесс настройки New Relic будет точно такой же. Помимо WordPress поддерживается большинство популярных фреймворков PHP, включая Cake, Symphony и Laravel (версия 4 и выше). Также возможно использовать New Relic и с неподдерживаемым фреймворком, но вам придется приложить некоторые серьезные усилия, чтобы получить метрику.
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Update me weeklyEnvato Tuts+ tutorials are translated into other languages by our community members—you can be involved too!
Translate this post