插桩 HTTP 请求

了解如何手动插桩您的代码以使用 Sentry 的 Requests 模块。

Sentry 提供了一个 请求监控仪表板,可以通过我们的 Laravel SDKSymfony SDK 自动插桩。

如果您使用的是其他工具,可以通过以下设置说明手动插桩您的请求,并使用 Sentry 查看 API 请求的性能。

确保在创建跨度时有一个事务正在运行。更多信息请参阅 追踪

有关可以设置哪些数据的详细信息,请参阅 Requests Module 开发者规范HTTP Span 数据约定

如果您使用的是 Guzzle,可以将 Sentry 的 GuzzleTracingMiddleware 注入到您的 HandlerStack 中。

Copied
$stack = new \GuzzleHttp\HandlerStack();
$stack->setHandler(new \GuzzleHttp\Handler\CurlHandler());
$stack->push(\Sentry\Tracing\GuzzleTracingMiddleware::trace());

$client = new \GuzzleHttp\Client(['handler' => $stack]);
$response = $client->get('https://example.com/');

以下是一个插桩 HTTP 请求的示例:

Copied
$parentSpan = \Sentry\SentrySdk::getCurrentHub()->getSpan();

if ($parentSpan !== null) {
    $context = \Sentry\Tracing\SpanContext::make()
        ->setOp('http.client');
    $span = $parentSpan->startChild($context);

    // Set the span we just started as the current span
    \Sentry\SentrySdk::getCurrentHub()->setSpan($span);
    
    $client = new \Cake\Http\Client();
    $response = $client->get('https://example.com/');
    
    $span
        ->setDescription('GET https://example.com/')
        ->setStatus(\Sentry\Tracing\SpanStatus::createFromHttpStatusCode($response->getStatusCode()))
        ->setData([
            'http.request.method' => 'GET',
            'http.response.body.size' => $response->getBody()->getSize(),
            'http.response.status_code' => $response->getStatusCode(),
        ])
        ->finish();

    // Restore the span back to the parent span
    \Sentry\SentrySdk::getCurrentHub()->setSpan($parentSpan);
}