تدمج هذه الحزمة واجهة برمجة تطبيقات Newrelic PHP في Symfony. لمزيد من المعلومات حول NewRelic ، يرجى زيارة http://newrelic.com. لا يضيف وكيل Relic الجديد المدمج الكثير من تكامل Symfony كما يدعي. هذه الحزمة تضيف الكثير من الضروريات. هذه قائمة سريعة:
استراتيجية تسمية أفضل للمعاملات : يمكن تسمية آثار المعاملات الخاصة بك بدقة بأسماء المسار ، أو اسم وحدة التحكم أو يمكنك اتخاذ قرار بشأن استراتيجية تسمية مخصصة عبر واجهة سلسة تستخدم أي اتفاقية تسمية تراها مناسبة. أثناء تشغيل أوامر وحدة التحكم ، يقوم أيضًا بتعيين اسم المعاملة كاسم الأوامر.
تحسينات أوامر وحدة التحكم : أثناء تشغيل أوامر وحدة التحكم ، يحدد الخيارات والوسائط التي تم تمريرها عبر CLI كمعلمات مخصصة إلى تتبع المعاملة لتسهيل تصحيح الأخطاء.
استثناء الاستماع : إنه يلتقط أيضًا جميع استثناءات Symfony في طلبات الويب وأوامر وحدة التحكم ويرسلها إلى New Relic (شيء جديد لا يعمل بشكل جيد للغاية لأن Symfony يمسك بجميع الاستثناءات/الأخطاء). كما يضمن تسجيل جميع استثناءات HTTP (رموز 4xx) كإشعارات في Relic الجديدة وليس استثناءات لتقليل الضوضاء في بقايا جديدة.
خدمة interactor : إنها توفر لك API API الجديد Relic PHP عبر فئة خدمة NewRelicInteractorInterface::class حتى في الكود الخاص بي ، يمكنني ضخه في أي فئة ، وحدة تحكم ، خدمة ، والقيام بأشياء مثل -
// Bundle
$ this -> newRelic -> addCustomParameter ( ' name ' , ' john ' );
// Extension
if ( extension_loaded ( ' newrelic ' )) {
newrelic_add_custom_parameter ( ' name ' , ' john ' );
}دعم التسجيل : في التطوير ، من غير المحتمل أن يكون لديك إعداد بقايا جديد. هناك تكوين لتمكين التسجيل الذي يخرج جميع إجراءات Relic الجديدة إلى سجل Symfony الخاص بك ، وبالتالي محاكاة ما سيفعله بالفعل في الإنتاج.
المسارات والمسارات والأوامر التي تم تجاهلها : يمكنك تكوين قائمة باسم المسار ومسارات URL وأوامر وحدة التحكم التي سيتم تجاهلها من آثار RELIC الجديدة.
MISC : هناك تكوين مفيد آخر مثل مفتاح API الجديد الخاص بك ، وتحديد اسم التطبيق الخاص بك بشكل صريح بدلاً من php.ini ، لإعلام بقايا جديدة حول عمليات النشر الجديدة عبر capifony ، إلخ.
مراجعة http://newrelic.com ...
$ composer require ekino/newrelic-bundleثم سجل الحزمة مع نواةك:
<?php
// in AppKernel::registerBundles()
$ bundles = array (
// ...
new Ekino NewRelicBundle EkinoNewRelicBundle (),
// ...
);في واجهة ويب New Relic ، تأكد من الحصول على مفتاح API (REST) ، لا يجب الخلط بينه وبين مفتاح الترخيص الخاص بك: إعدادات حساب ABI New Relic> Integration> API Keys
# 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) تأتي الحزمة مع خيار لمراقبة المستخدم الحقيقية المعززة. عادةً ما يضيف ملحق Relic الجديد (ما لم يتم تعطيله بالتكوين) تلقائيًا رمز تتبع لأجهزة Rum إلى جميع استجابات HTML. باستخدام أجهزة Rum المحسّنة ، تتيح لك الحزمة تعطيل الأجهزة بشكل انتقائي على بعض الطلبات.
يمكن أن يكون هذا مفيدًا إذا كنت تعيد HTML حرفيًا لمحرر HTML.
إذا تم تمكين أجهزة RUM المحسّنة ، فيمكنك تعطيل الأجهزة لطلب معين من خلال تمرير معلمة طلب _instrument ، ووضعها على false . يمكن القيام بذلك على سبيل المثال من خلال تكوين التوجيه.
تأتي الحزمة مع استراتيجيتين لتسمية المعاملات المدمجة. route ووحدة controller ، وتسمية معاملة بقايا الجديدة بعد المسار أو وحدة التحكم على التوالي. ومع ذلك ، تدعم الحزمة استراتيجيات تسمية المعاملات المخصصة من خلال خيار تكوين service . إذا قمت بتحديد خيار تكوين service ، فيجب عليك تمرير اسم خدمة تسمية المعاملة الخاصة بك كخيار تكوين transaction_naming_service .
يجب أن تنفذ فئة خدمة تسمية المعاملات واجهة EkinoNewRelicBundleTransactionNamingStrategyTransactionNamingStrategyInterface . لمزيد من المعلومات حول إنشاء الخدمات الخاصة بك ، راجع وثائق Symfony حول إنشاء/تكوين الخدمات في الحاوية.
عندما تستخدم ذاكرة التخزين المؤقت لـ Symfony's HTTP الخاصة بك app/AppCache.php سيقوم ببناء استجابة مع جانب الحافة الخاص بك يتضمن (ESI). هذا سيبدو مثل معاملة واحدة في New Relic. عندما تقوم بتعيين using_symfony_cache: true سيكون طلب ESI هذا معاملة منفصلة تعمل على تحسين الإحصائيات. إذا كنت تستخدم بعض ذاكرة التخزين المؤقت للوكيل العكسي أو عدم ذاكرة التخزين المؤقت على الإطلاق ، فاترك هذا إلى خطأ.
إذا كان هناك حاجة إلى تعيين application_name .
يمكنك استخدام أمر newrelic:notify-deployment لإرسال إشعارات النشر إلى New Relic. هذا يتطلب تعيين تكوين api_key .
يحتوي الأمر على مجموعة من الخيارات ، كما هو معروض في بيانات المساعدة.
$ 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
توفر الحزمة وصفة capifony لأتمتة إشعارات النشر (انظر Resources/recipes/newrelic.rb ).
إنه يقدم طلبًا واحدًا لكل app_name ، لا يتم دعم أسماء RELL-UP بواسطة API REST REST.
سيقبل مفتاح التكوين ekino_new_relic.interactor معرف الخدمة لخدمة تنفيذ NewRelicInteractorInterface . تأتي هذه الحزمة مع بعض الخدمات التي قد تكون مناسبة لك.
| قيمة التكوين | وصف |
|---|---|
EkinoNewRelicBundleNewRelicAdaptiveInteractor | هذا هو التفاعل الافتراضي. سيتم التحقق مرة واحدة لكل طلب إذا تم تثبيت امتداد PHP NewRelic أم لا. إنه ديكور NewRelicInteractor |
EkinoNewRelicBundleNewRelicNewRelicInteractor | يتواصل هذا المتفاعل مع Newrelic. هذا هو الديكور الوحيد الذي يقوم ببعض العمل بالفعل. |
EkinoNewRelicBundleNewRelicBlackholeInteractor | هذا المتفاعل لا يفعل شيئًا. |
auto | ستتحقق هذه القيمة مما إذا كان تمديد PHP NewRelic مثبتًا عند إنشاء الحاوية الخاصة بك. |
لاحظ أنه إذا قمت بتعيين ekino_new_relic.enabled: false فسوف تستخدم دائمًا المعامل BlackholeInteractor بغض النظر عن القيمة المستخدمة في ekino_new_relic.interactor .
setApplicationName حتى نستخدم مفتاح الترخيص الصحيحين والاسم.RouterListener 404 أو إضافة قيم التوجيه إلى الطلب.setIgnoreTransaction مما يعني أننا نسمي NewRelicInteractorInterface::ignoreTransaction() إذا قمنا بتكوينها لتجاهل المسار.setTransactionName لاستخدام معاملة TransactionNamingStrategyInterface لتعيين اسم لطيف. سيتم تنفيذ جميع الخطوات الست لطلب عادي. الاستثناءات لهذا هو 404 و 403 ردود سيتم إنشاؤها في الخطوة 2 والخطوة 4 على التوالي. في حالة حدوث استثناء من هذه الخطوة (لا أتحدث عن Exception ) ، فسيتم تسجيل المعاملة باستخدام مفتاح الترخيص الصحيح ولكن ليس لديك اسم المعاملة المناسب. قد يكون لـ setTransactionName تبعيات على البيانات التي يقوم بها المستمعون الآخرون وهذا هو السبب في أن لها أولوية منخفضة.