2013-07-25 54 views
7

Tôi vừa thiết lập Relic mới trên ứng dụng web PHP của mình. Tất cả mọi thứ đang làm việc tuyệt vời ngoại trừ một điều ... Tất cả các giao dịch hiển thị như là đi qua "index.php".Newrelic không nhận ra các tuyến đường PHP Slim của tôi

Lý do cho điều này bởi vì tôi đang sử dụng Slim framework (có aremanyalternativesforrouting) với URL viết lại để tôi có thể có các URL con người tốt đẹp như "/ user/cài đặt" mà không có một thư mục cho mỗi bộ điều khiển và hành động.

Nhưng điều đó vẫn để lại cho tôi index.php làm tên cho mọi giao dịch web Relic mới.

Trả lời

8

Bạn có thể sử dụng móc để đặt tên giao dịch thành tên hoặc mẫu của bộ định tuyến.

Dưới đây là một ví dụ thiết lập nó để mô hình:

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

Nó đã cho tôi một số tìm kiếm, tuy nhiên tôi đã có thể tìm thấy một câu trả lời (available here) liên quan đến CodeIgniter.

Một thay đổi nhỏ làm cho nó làm việc cho tôi (với Slim), và tôi tưởng tượng router PHP khác và khung sẽ có khoảng cùng một giải pháp:

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

Edit: để tránh bao gồm bất kỳ thông số GET, sử dụng này trên dòng thứ hai:

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

Lưu ý: Emerson của câu trả lời, nơi ông khuyến cáo sử dụng các mô hình tuyến đường, là một lựa chọn tốt hơn nhiều so với sử dụng các URL đen nếu bạn đang sử dụng Slim.

+1

Bạn có thể muốn hãy xem xét điều này: "Bạn nên hoàn toàn * KHÔNG * bao gồm bất kỳ dữ liệu yêu cầu cụ thể nào trong tên giao dịch. Ví dụ: sử dụng URL yêu cầu thực tế là cực kỳ xấu". https://newrelic.com/docs/php/framework-developers-integrated-support-for-new-relic – msanford

+0

Họ nói rằng - nhưng họ không thực sự cung cấp một allternative – Mbrevda

+0

Tôi nghĩ rằng trong nhiều trường hợp url yêu cầu sẽ không hữu ích cho mọi người. Ví dụ: nếu bạn có trang web thương mại điện tử với 10.000 sản phẩm, bạn sẽ muốn 'trang sản phẩm' dưới dạng một hành động chứ không phải 10.000 trang riêng lẻ. Nếu không, sẽ rất khó khăn để thoát khỏi giao diện người dùng báo cáo. –

1

New Relic bây giờ đã out-of-the-box hỗ trợ cho khung Slim bắt đầu với phiên bản 6.7.0.174 của Agent PHP.

0

tôi cập nhật để các đại lý NewRelic 6.9.0.182 nhưng giao dịch vẫn chưa được đặt tên như vậy tôi đặt một middleware (kể từ Slim 3 không hỗ trợ móc nữa) thay vào đó và nó hoạt động tốt hơn:

$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(); 
Các vấn đề liên quan