New Relic + Wordpress — игнорировать wp-cron.php

Мы установили New Relic на наш сервер, чтобы отслеживать производительность наших веб-сайтов. Но недавно мы хотели убрать wp-cron.php из мониторинга New Relic.

Я поместил следующий код в wp-cron.php:

[...]

if ( !defined('ABSPATH') ) {
/** Set up WordPress environment */
require_once('./wp-load.php');
}

if (extension_loaded('newrelic')) {
    newrelic_ignore_transaction();
    newrelic_ignore_apdex();
}

[...]

К сожалению, этот код не работает, и New Relic по-прежнему показывает в отчетах cronjobs wordpress с чрезмерным временем. Нам не нужно знать, сколько времени задания cron потребляют наше приложение WordPress.

Кто-нибудь знает, как удалить его из New Relic?


person Julio Vedovatto    schedule 01.01.2013    source источник


Ответы (2)


Наилучший способ установить переменные для каждого отдельного PHP-приложения или скриптов в приложении — это установить auto_prepend_file в PHP.ini, чтобы он указывал на PHP-файл, который устанавливает указанные переменные для вас.

Код, который я использую, опубликован на git, не стесняйтесь брать/улучшать /предлагать. Я также перечисляю его здесь для простоты:

###
# NewRelic PHP API central file
# Description: Allows PHP installs using mod-fgcid to set newrelic_set_appname
# Usage: Inside PHP.ini for each vhost in your server,
# point to this script using: auto_prepend_file = "newrelic.php"
# Where you place the script depends on your include_path setting.
# See http://www.php.net/manual/en/ini.core.php#ini.auto-prepend-file
# Version: 0.2
# Author http://MATTERmedia.com/
#
# This script is released under the GNU General Public License, version 2 (GPL).
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
###

if (extension_loaded('newrelic')) {
    if (!isset($_SERVER['HTTP_HOST'])) {
        newrelic_set_appname ("Unknown");
        } else {
            # If UseCanonicalName is set to Off, Apache will use (user inputted) HTTP_HOST for SERVER_NAME
            # Best is to rely on HTTP_HOST and validate it against a list of allowed hosts.
            # See http://shiflett.org/blog/2006/mar/server-name-versus-http-host
            $host = strtolower($_SERVER['HTTP_HOST']);
            # Easily disable any vhost from sending data to newrelic.
            $disabled_hosts = array('foo.example.com');
            $valid_hosts = array('bar.example.com');
            # Add a secondary AppName
            $secondary_appname = ';All Virtual Hosts';          
            if ((!in_array($host, $disabled_hosts)) && (in_array($host, $valid_hosts))) {
                    newrelic_set_appname($host.$secondary_appname);
                } else {                    
                    newrelic_ignore_transaction();
                    # technically you wouldn't need to disable_autorum when you ignore_transaction, but it's good practice.
                    newrelic_disable_autorum();
            }           
        }
}

Если конфигурация вашего сервера позволяет использовать каталог php.ini, отбросьте новый php.ini и настройте auto_prepend_file, указывающий на файл php, который вызывает newrelic_ignore_transaction().

Если конфигурация вашего сервера НЕ разрешает использование файла php.ini для каждого каталога (например, с mod_fcgid), измените предлагаемый код для обнаружения запускаемого сценария и вызовите newrelic_ignore_transaction(), когда это условие выполнено.

person Gaia    schedule 28.02.2013

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

Осматриваясь, я нашел этот фрагмент для Drupal, который связан с заданиями cron. Посмотрите на аргумент TRUE в строке 68. Может быть, вам это нужно...

Drupal-модуль, реализующий New Relic

57 /**
58 * Implementation of hook_cron().
59 *
60 * This is used to set cron tasks to be not tracked by RPM if so desired.
61 */
62 function new_relic_rpm_cron() {
63     $cron_tracking = variable_get('new_relic_rpm_track_cron', 'norm');
64     if ($cron_tracking == 'bg') {
65         newrelic_background_job(TRUE);
66     }
67     elseif ($cron_tracking == 'ignore') {
68         newrelic_ignore_transaction(TRUE); // pass TRUE to ignore
69     }
70 }
person Igor Parra    schedule 01.01.2013