2013-07-25 13 views
7

Ho appena installato New Relic sulla mia app web PHP. Tutto funziona alla grande tranne una cosa ... Tutte le transazioni mostrano come "index.php".Newrelic non riconosce i miei percorsi Slim PHP

La ragione di questo perché sto utilizzando il Slim framework (ci aremanyalternativesforrouting) con la riscrittura degli URL in modo che io possa avere belle URL umani come "/ utente/Impostazioni", senza una cartella per ogni controller e azione.

Ma questo mi lascia ancora con index.php come il nome per ogni transazione web New Relic.

risposta

8

È possibile utilizzare un gancio per impostare il nome della transazione sul nome o sul modello del router.

Qui è un ambiente alla sequenza di esempio:

$app->hook('slim.before.dispatch', function() use ($app) { 
    newrelic_name_transaction($app->router()->getCurrentRoute()->getPattern()); 
}); 
8

Ci sono volute alcune ricerche, tuttavia sono riuscito a trovare una risposta (available here) correlata a CodeIgniter.

Una piccola modifica ha reso il lavoro per me (con Slim), e immagino altri router PHP e quadri avranno all'incirca la stessa soluzione:

if (extension_loaded ('newrelic')) { 
    newrelic_name_transaction($_SERVER['REQUEST_URI']); 
} 

Edit: per evitare di includere tutti i parametri GET, utilizzare questo sulla seconda riga:

newrelic_name_transaction(current(explode('?', $_SERVER['REQUEST_URI']))) 

Nota: la risposta di Emerson, dove consiglia di utilizzare il modello di percorso, è una scelta molto migliore che usare l'URL letterale se si utilizza Slim.

+1

Si potrebbe desiderare di date un'occhiata a questo: "Non dovresti assolutamente * NON * includere alcun dato specifico della richiesta nel nome della transazione.Ad esempio, l'utilizzo dell'URL della richiesta effettiva è estremamente negativo." https://newrelic.com/docs/php/framework-developers-integrated-support-for-new-relic – msanford

+0

Dicono che - ma in realtà non offrono un'allternativa – Mbrevda

+0

Penso che in molti casi l'url della richiesta non vada essere utile alle persone. Ad esempio, se si dispone di un sito di e-commerce con 10.000 prodotti, si desidera che la "pagina prodotto" sia una singola azione e non 10.000 singoli. Altrimenti sarebbe difficile ottenere molto dall'interfaccia utente di reporting. –

1

Nuovo Relic ha ora il supporto out-of-the-box per il Quadro Slim a partire dalla versione 6.7.0.174 del PHP Agent.

0

ho aggiornato all'agente NewRelic 6.9.0.182 ma le operazioni non sono ancora chiamato così ho messo un middleware (dal Slim 3 non supporta più gancio) al posto e funziona meglio:

$app = new \Slim\App(['settings' => [ 
    // to be able access to route within middleware 
    'determineRouteBeforeAppMiddleware' => true, 
]]); 

// middleware to send the correct route to NewRelic 
$app->add(function ($request, $response, $next) { 
    if (extension_loaded('newrelic') && $request->getAttribute('route')) { 
     newrelic_name_transaction($request->getAttribute('route')->getPattern()); 
    } 

    return $next($request, $response); 
}); 

// loads some routes 

$app->run();