PHP
Агент мониторинга PHP от New Relic состоит из двух взаимодействующих частей:
- Расширение для PHP, которое занимается сбором метрик и трейсов.
- Прокси-демон (
newrelic-daemon), который отвечает за взаимодействие с бэкендом мониторинга (в данном случае — с GMONIT).
Ниже собрана полная инструкция по установке и настройке данного агента в различных окружениях (Ubuntu/Debian, CentOS, контейнерные среды). Если требуется дополнительная информация, обращайтесь к официальной документации.
Обязательные настройки агента
Заголовок раздела «Обязательные настройки агента»Независимо от окружения, в файле newrelic.ini (обычно располагается в /etc/php/7.x/mods-available/newrelic.ini, /etc/php.d/newrelic.ini или /etc/php/.../conf.d/newrelic.ini) обязательно должны быть прописаны (или эквивалентно заданы в переменных окружения) следующие параметры:
newrelic.license = 0123456789-123456789-123456789-123456789 #Ключ(заглушка, не меняем)newrelic.daemon.collector_host = gmonit-collector.<DOMAIN>.ru #Домен коллектора GMONITnewrelic.appname = "MY_AWESOME_APP" #Название приложенияnewrelic.logfile = stdout #Логирование агента в stdoutЕсли вы настраиваете агент через переменные окружения, то эквивалентом будут:export NEW_RELIC_LICENSE_KEY=0123456789-123456789-123456789-123456789 #Ключ(заглушка, не меняем) export NEW_RELIC_HOST=gmonit-collector.name.ru #Домен коллектора GMONIT export NEW_RELIC_APP_NAME=“MY_AWESOME_APP” #Название приложения export NEW_RELIC_LOG=stdout #Логирование агента в stdout
1. Установка агента New Relic для PHP на Ubuntu и Debian
Заголовок раздела «1. Установка агента New Relic для PHP на Ubuntu и Debian»- Добавление репозитория New Relic:echo ‘deb http://apt.newrelic.com/debian/ newrelic non-free’ | sudo tee /etc/apt/sources.list.d/newrelic.list
- Обновление списка пакетов:sudo apt-get update
- Установка PHP-агента:sudo apt-get install newrelic-php5Если вы используете вместо
glibcбиблиотекуmusl libc(например, в Alpine Linux), необходимо скачать и установить актуальную версию агента с поддержкойmuslпо ссылке. - Настройка конфигурации агента:
- Откройте файл
newrelic.iniи пропишите обязательные параметры, указанные выше в разделе «Обязательные настройки агента». - Если используются самоподписанные сертификаты (или Let’s Encrypt) для коллектора, необходимо явно указать это при конфигурации демона. Например, добавляя ключ к команде запуска
newrelic-daemon:newrelic-daemon —cafile /etc/ssl/certs/ca-certificates.crtили в конфигурационном файлеnewrelic.cfg:ssl_ca_bundle = /etc/ssl/certs/ca-certificates.crt
- Откройте файл
- Перезапуск веб-сервера:# Для Apache sudo systemctl restart apache2
Для NGINX + PHP-FPM
Заголовок раздела «Для NGINX + PHP-FPM»sudo systemctl restart nginx sudo systemctl restart php-fpm 6. Проверка работы Сгенерируйте трафик к вашему приложению и проверьте метрики в интерфейсе GMONIT.
2. Установка агента New Relic для PHP на CentOS
Заголовок раздела «2. Установка агента New Relic для PHP на CentOS»- Добавление репозитория New Relic:
- Для 64-битных систем:sudo rpm -Uvh http://yum.newrelic.com/pub/newrelic/el5/x86_64/newrelic-repo-5-3.noarch.rpm
- Установка PHP-агента:sudo yum install newrelic-php5
- Запуск скрипта установки:sudo newrelic-install install
- Настройка конфигурации агента:
- Откройте файл
newrelic.iniи пропишите обязательные параметры, указанные выше в разделе «Обязательные настройки агента». - Если используются самоподписанные сертификаты (или Let’s Encrypt), укажите путь к сертификату в конфигурации
newrelic-daemonилиnewrelic.cfg(аналогично Ubuntu/Debian).
- Откройте файл
- Перезапуск веб-сервера:# Для Apache sudo systemctl restart httpd
Для NGINX + PHP-FPM
Заголовок раздела «Для NGINX + PHP-FPM»sudo systemctl restart nginx sudo systemctl restart php-fpm 6. Проверка работы Сгенерируйте трафик к вашему приложению и проверьте метрики в интерфейсе GMONIT.
3. Установка агента New Relic для PHP в контейнерных средах (Docker и др.)
Заголовок раздела «3. Установка агента New Relic для PHP в контейнерных средах (Docker и др.)»- Выбор способа установки:
- Установка в разных контейнерах (рекомендуется):
- Настройте контейнер для демона: Используйте образ
newrelic/php-daemonиз Docker Hub или аналогичный подход, гдеnewrelic-daemonработает в отдельном контейнере. - Настройте контейнер для PHP-агента: Установите PHP и агент в контейнере:sudo apt-get install newrelic-php5
sudo newrelic-install installЗатем пропишите переменные окружения (или внесите настройки в
newrelic.ini) при запуске контейнера или в Dockerfile. Обязательные параметры описаны в начале инструкции.
- Настройте контейнер для демона: Используйте образ
- Установка в одном контейнере:
- Установите PHP и агент:sudo apt-get install newrelic-php5 sudo newrelic-install install
- Настройте параметры в
newrelic.iniили через переменные окружения. Не забудьте добавить обязательные:newrelic.license = 0123456789-123456789-123456789-123456789 #Ключ(заглушка, не меняем) newrelic.daemon.collector_host = gmonit-collector..ru #Домен коллектора GMONIT newrelic.appname = “MY_AWESOME_APP” #Название приложения newrelic.logfile = stdout #Логирование агента в stdout - При использовании самоподписанных сертификатов (или Let’s Encrypt) обязательно укажите путь к сертификату в конфигурации демона (либо с помощью ключа
--cafile, либо черезssl_ca_bundleвnewrelic.cfg).
- Установка в разных контейнерах (рекомендуется):
- Дополнительные действия для Alpine Linux
Если используется
musl libc(в Alpine Linux), скачайте и установите версию агента дляmuslпо ссылке. - Перезапуск веб-сервера Убедитесь, что выбранный веб-сервер (Apache, NGINX, PHP-FPM) перезапущен после установки:sudo systemctl restart apache2 || sudo systemctl restart httpd sudo systemctl restart nginx sudo systemctl restart php-fpm
- Проверка работы Сгенерируйте трафик к вашему приложению и проверьте метрики в интерфейсе GMONIT.
Дополнительная информация
Заголовок раздела «Дополнительная информация»- Подробная документация по установке и настройке агента для PHP: PHP Agent Configuration — New Relic Documentation
- Если требуются более тонкие настройки агента и прокси-демона (
newrelic-daemon), в том числе указание кастомногоcafile, использование дополнительных сетевых параметров и т. д., обратитесь к разделу конфигурации демона.
Добавление кастомного параметра
Заголовок раздела «Добавление кастомного параметра»Для добавления пользовательских параметров в текущую транзакцию PHP можно использовать функцию newrelic_add_custom_parameter. Это позволяет добавлять дополнительные данные, такие как идентификаторы пользователей, чтобы они были доступны в трассировках транзакций и в событиях Transaction.
Пример использования функции:
if (extension_loaded('newrelic')) { $user_id = 12345; // уникальный идентификатор пользователя newrelic_add_custom_parameter('user_id', $user_id);}Описание функции
Заголовок раздела «Описание функции»newrelic_add_custom_parameter(string $key, scalar $value)key— имя пользовательского параметра (до 255 символов). Например,user_id,client_name.value— значение, связанное с этим параметром. Допустимы скалярные типы (строки, числа, логические значения). Для float значенийNaN,Infinity,denormили отрицательного нуля поведение функции не определено.
Применение
Заголовок раздела «Применение»Вы можете использовать эту функцию для добавления данных, таких как:
- Идентификаторы пользователей
- Метки запросов
- Прочие специфичные данные
Эти параметры будут видны в трассировках транзакций в интерфейсе GMONIT.
Примечание
Заголовок раздела «Примечание»Убедитесь, что расширение New Relic для PHP загружено в вашу среду (проверьте через phpinfo() или php -m).
Подробности можно найти в официальной документации New Relic
Именование и управление транзакциями
Заголовок раздела «Именование и управление транзакциями»Для правильной идентификации и отслеживания транзакций в мониторинге вы можете задавать имена транзакций с помощью функции newrelic_name_transaction. Это позволяет организовать мониторинг и избежать избыточного числа уникальных имён транзакций, которые могут затруднить анализ данных.
Пример: Задание имени транзакции для Uri/index.php
Заголовок раздела «Пример: Задание имени транзакции для Uri/index.php»Для задания имени транзакции добавьте следующий сниппет в код обработчика запросов (вместо example подставьте имя вашей функции, вызываемой при обращении к Uri/index.php):
function example() { if (extension_loaded('newrelic')) { // Проверка, что PHP-агент доступен newrelic_name_transaction("Custom/index/*"); } // ... здесь остальной код функции}Таким образом, текущая транзакция станет называться Custom/index/.
Примечание: Уникальных имён транзакций не должно быть слишком много, и они не должны содержать идентификаторы.
Примеры:
Custom/index/— хорошо.Custom/index/ + product.id— нельзя.
Этот код безопасен и не вызовет ошибки при отключении агента, так как вызов функции обёрнут в проверку if (extension_loaded('newrelic')).
Подробности можно найти в официальной документации New Relic
Пример: Добавление имени транзакции для конкретного URI
Заголовок раздела «Пример: Добавление имени транзакции для конкретного URI»Для добавления транзакции, например для URI https://test.ru/doc/estimation следуйте этим шагам:
- В коде обработчика запросов для нужного URI добавьте следующий сниппет:function example() { if (extension_loaded(‘newrelic’)) { // Проверка, что PHP-агент доступен newrelic_name_transaction(“Custom/estimation”); } // … здесь остальной код функции }
- Таким образом, текущая транзакция станет называться
Custom/estimation.
Примечание: Как и в предыдущем примере, уникальных имён транзакций не должно быть слишком много, и они не должны содержать идентификаторы.
Примеры:
Custom/estimation— хорошо.Custom/estimation + product.id— нельзя.
Этот код безопасен и не вызовет ошибки при отключении агента, так как вызов функции обёрнут в проверку if (extension_loaded('newrelic')).
Подробности можно найти в официальной документации New Relic