Агент мониторинга 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 #Домен коллектора GMONIT
newrelic.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
-
Добавление репозитория 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 sudo systemctl restart nginx sudo systemctl restart php-fpm
-
Проверка работы
Сгенерируйте трафик к вашему приложению и проверьте метрики в интерфейсе GMONIT.
-
Добавление репозитория New Relic:
- Для 64-битных систем:
sudo rpm -Uvh http://yum.newrelic.com/pub/newrelic/el5/x86_64/newrelic-repo-5-3.noarch.rpm
- Для 64-битных систем:
-
Установка 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 sudo systemctl restart nginx sudo systemctl restart php-fpm
-
Проверка работы
Сгенерируйте трафик к вашему приложению и проверьте метрики в интерфейсе GMONIT.
-
Выбор способа установки:
- Установка в разных контейнерах (рекомендуется):
- Настройте контейнер для демона:
Используйте образ
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.<DOMAIN>.ru #Домен коллектора GMONIT newrelic.appname = "MY_AWESOME_APP" #Название приложения newrelic.logfile = stdout #Логирование агента в stdout
- При использовании самоподписанных сертификатов (или Let's Encrypt) обязательно укажите путь к сертификату в конфигурации демона (либо с помощью ключа
--cafile, либо черезssl_ca_bundleвnewrelic.cfg).
- Установите PHP и агент:
- Установка в разных контейнерах (рекомендуется):
-
Дополнительные действия для 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. Это позволяет организовать мониторинг и избежать избыточного числа уникальных имён транзакций, которые могут затруднить анализ данных.
Для задания имени транзакции добавьте следующий сниппет в код обработчика запросов (вместо 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 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