Ce bundle intègre l'API PHP Newrelic dans Symfony. Pour plus d'informations sur Newrelic, veuillez visiter http://newrelic.com. Le nouvel agent de relique intégré n'ajoute pas autant d'intégration Symfony qu'il le prétend. Ce paquet ajoute beaucoup plus d'essentiels. Voici une liste rapide:
Meilleure stratégie de dénomination des transactions : vos traces de transaction peuvent être nommées avec précision par les noms d'itinéraire, le nom du contrôleur ou vous pouvez décider d'une stratégie de dénomination personnalisée via une interface transparente qui utilise toute convention de dénomination que vous jugez. Lors de l'exécution des commandes de console, il définit également le nom de la transaction comme nom de commande.
Améliorations des commandes de la console : Lors de l'exécution des commandes de console, elle définit les options et les arguments passés via le CLI en tant que paramètres personnalisés à la trace de transaction pour un débogage plus facile.
Écoute des exceptions : il capture également toutes les exceptions Symfony dans les demandes Web et les commandes de console et les envoie à New Relic (quelque chose de nouveau Relic ne se porte pas trop bien car Symfony attrape agressivement toutes les exceptions / erreurs). Il garantit également que toutes les exceptions HTTP (codes 4xx) sont enregistrées en tant qu'avis dans une nouvelle relique et non des exceptions pour réduire le bruit dans la nouvelle relique.
Service d'interactor : il vous fournit la nouvelle API d'agent PHP Relic via une classe de service NewRelicInteractorInterface::class Donc, dans mon code, je peux l'injecter dans n'importe quelle classe, contrôleur, service et faire des choses comme -
// Bundle
$ this -> newRelic -> addCustomParameter ( ' name ' , ' john ' );
// Extension
if ( extension_loaded ( ' newrelic ' )) {
newrelic_add_custom_parameter ( ' name ' , ' john ' );
}Prise en charge de la journalisation : En développement, il est peu probable que vous ayez une nouvelle configuration de relique. Il y a une configuration pour activer la journalisation qui publie toutes les nouvelles actions de relique à votre journal Symfony, émulant donc ce qu'il ferait réellement en production.
Les routes, les chemins, les chemins, les commandes ignorés : vous pouvez configurer une liste de noms de route, de chemins d'url et de commandes de console à ignorer à partir de nouvelles traces de relique.
MISC : Il existe une autre configuration utile comme votre nouvelle touche API Relic, définissant explicitement le nom de votre application au lieu de Php.ini, notifiant une nouvelle relique sur les nouveaux déploiements via Capifony, etc.
Revoir http://newrelic.com ...
$ composer require ekino/newrelic-bundleEnsuite, enregistrez le bundle avec votre noyau:
<?php
// in AppKernel::registerBundles()
$ bundles = array (
// ...
new Ekino NewRelicBundle EkinoNewRelicBundle (),
// ...
);Dans l'interface Web de New Relic, assurez-vous d'obtenir une touche API valide (REST), à ne pas confondre avec votre clé de licence: Nouveau tableau de bord Relic> Paramètres du compte> Intégration> Clés d'API
# app/config/config.yml
ekino_new_relic :
enabled : true # Defaults to true
application_name : Awesome Application # default value in newrelic is "PHP Application", or whatever is set
# as php ini-value
deployment_names : ~ # default value is 'application_name', supports string array or semi-colon separated string
api_key : # New Relic API
api_host : ~ # New Relic API Host (default value is api.newrelic.com, for EU should be set to api.eu.newrelic.com )
license_key : # New Relic license key (optional, default value is read from php.ini)
xmit : false # if you want to record the metric data up to the point newrelic_set_appname is called, set this to true (default: false)
logging : false # If true, logs all New Relic interactions to the Symfony log (default: false)
interactor : ~ # The interactor service that is used. Setting enabled=false will override this value
twig : true # Allows you to disable twig integration (falls back to class_exists(Twig_Environment::class))
exceptions : true # If true, sends exceptions to New Relic (default: true)
deprecations : true # If true, reports deprecations to New Relic (default: true)
instrument : false # If true, uses enhanced New Relic RUM instrumentation (see below) (default: false)
http :
enabled : true
using_symfony_cache : false # Symfony HTTP cache (see below) (default: false)
transaction_naming : route # route, controller or service (see below)
transaction_naming_service : ~ # Transaction naming service (see below)
ignored_routes : [] # No transaction recorded for this routes
ignored_paths : [] # No transaction recorded for this paths
monolog :
enabled : false # When enabled, send application's logs to New Relic (default: disabled)
channels : [app] # Channels to listen (default: null). [See Symfony's documentation](http://symfony.com/doc/current/logging/channels_handlers.html#yaml-specification)
level : error # Report only logs higher than this level (see PsrLogLogLevel) (default: error)
service : app.my_custom_handler # Define a custom log handler (default: ekino.new_relic.monolog_handler)
commands :
enabled : true # If true, logs CLI commands to New Relic as Background jobs (>2.3 only) (default: true)
ignored_commands : [] # No transaction recorded for this commands (background tasks) Le bundle est livré avec une option pour améliorer la surveillance des utilisateurs réels. Habituellement, la nouvelle extension de relique (sauf si désactivée par configuration) ajoute automatiquement un code de suivi pour l'instrumentation du RUM à toutes les réponses HTML. En utilisant une instrumentation Rum améliorée, le bundle vous permet de désactiver sélectivement l'instrumentation sur certaines demandes.
Cela peut être utile si, par exemple, vous retournez HTML Verbatim pour un éditeur HTML.
Si une instrumentation Rum améliorée est activée, vous pouvez désactiver l'instrumentation pour une demande donnée en transmettant un paramètre de demande _instrument et en le définissant sur false . Cela peut être fait par exemple via la configuration de routage.
Le bundle est livré avec deux stratégies de dénomination des transactions intégrées. route et controller , nommant la nouvelle transaction de relique après l'itinéraire ou le contrôleur respectivement. Cependant, le bundle prend en charge les stratégies de dénomination des transactions personnalisées via l'option de configuration service . Si vous avez sélectionné l'option de configuration service , vous devez passer le nom de votre propre service de dénomination de transaction comme option de configuration transaction_naming_service .
La classe de service de dénomination des transactions doit implémenter l'interface EkinoNewRelicBundleTransactionNamingStrategyTransactionNamingStrategyInterface . Pour plus d'informations sur la création de vos propres services, consultez la documentation Symfony sur la création / la configuration des services dans le conteneur.
Lorsque vous utilisez le cache HTTP de Symfony, votre app/AppCache.php renforcera une réponse avec votre côté de bord inclut (ESI). Cela ressemblera à une transaction dans New Relic. Lorsque vous définissez using_symfony_cache: true , ces demandes ESI seront une transaction distincte qui améliore les statistiques. Si vous utilisez un autre cache proxy inversé ou pas du tout un cache, laissez-le faux.
Si TRUE est requis pour définir le application_name .
Vous pouvez utiliser la commande newrelic:notify-deployment pour envoyer des notifications de déploiement à une nouvelle relique. Cela nécessite que la configuration api_key soit définie.
La commande a un tas d'options, comme affiché dans les données d'aide.
$ app/console newrelic:notify-deployment --help
Usage:
newrelic:notify-deployment [--user[="..."]] [--revision[="..."]] [--changelog[="..."]] [--description[="..."]]
Options:
--user The name of the user/process that triggered this deployment
--revision A revision number (e.g., git commit SHA)
--changelog A list of changes for this deployment
--description Text annotation for the deployment — notes for you
Le bundle fournit une recette de capify pour automatiser les notifications de déploiement (voir Resources/recipes/newrelic.rb ).
Il fait une demande par app_name , les noms de déploiement dû ne sont pas pris en charge par l'API Data REST.
La clé de configuration ekino_new_relic.interactor acceptera un ID de service à un service implémentant NewRelicInteractorInterface . Ce bundle est livré avec quelques services qui peuvent vous convaincre.
| Valeur de configuration | Description |
|---|---|
EkinoNewRelicBundleNewRelicAdaptiveInteractor | Il s'agit de l'interacteur par défaut. Il vérifiera une fois par demande si l'extension PHP NewRelic est installée ou non. C'est un décorateur pour le NewRelicInteractor |
EkinoNewRelicBundleNewRelicNewRelicInteractor | Cet interacteur communique avec Newrelic. C'est le seul décorateur qui fait du travail. |
EkinoNewRelicBundleNewRelicBlackholeInteractor | Cet interacteur ne fait rien. |
auto | Cette valeur vérifiera si l'extension PHP NewRelic est installée lorsque vous créez votre conteneur. |
Notez que si vous définissez ekino_new_relic.enabled: false vous utiliserez toujours le BlackholeInteractor quelle que soit la valeur utilisée pour ekino_new_relic.interactor .
setApplicationName afin que nous utilisons la clé de licence et le nom corrects.RouterListener peut lancer un 404 ou ajouter des valeurs de routage à la demande.setIgnoreTransaction ce qui signifie que nous appelons NewRelicInteractorInterface::ignoreTransaction() si nous avons configuré pour ignorer l'itinéraire.setTransactionName pour utiliser notre TransactionNamingStrategyInterface pour définir un joli nom. Les 6 étapes seront exécutées pour une demande normale. Les exceptions à cela sont des réponses 404 et 403 qui seront créées respectivement à l'étape 2 et à l'étape 4. Si une exception à ces étapes se produit (je ne parle pas de Exception ), vous aurez la transaction enregistrée avec la clé de licence correcte, mais vous n'avez pas le nom de transaction approprié. Le setTransactionName peut avoir des dépendances sur les données définies par d'autres auditeurs, c'est pourquoi il a une priorité si faible.