追踪传播
了解如何在应用程序/服务之间连接事件。
如果您希望使用 Sentry 观察的应用程序环境不仅仅包含单个服务或应用程序,分布式追踪可以带来很大的价值。
在跨分布式系统追踪事件的背景下,分布式追踪充当了一个强大的调试工具。想象一下,您的应用程序是一个由众多互连部分组成的庞大网络。例如,您的系统可能分布在不同的服务器上,或者您的应用程序可能分为不同的后端和前端服务,每个服务可能有自己的技术栈。
当错误或性能问题发生时,由于系统的复杂性,确定根本原因可能会非常困难。分布式追踪帮助您跟踪事件在其穿越这个复杂网络的过程中所经过的路径,记录每一步。通过检查这些追踪数据,您可以重建导致关注事件的事件序列,识别涉及的具体组件,并理解它们之间的交互。这种详细的可见性使您能够更有效地诊断和解决问题,最终提高分布式系统的可靠性和性能。
以下是一个在 Sentry 中显示的分布式追踪示例:
此分布式追踪展示了 Vue 应用的 pageload
请求发送到 Python 后端,后者再调用 Ruby 微服务的 /api
端点。
在后台发生的情况是,Sentry 在应用程序之间读取并进一步传播两个 HTTP 头:
sentry-trace
baggage
如果您在分布式系统中运行任何 JavaScript 应用程序,请确保这两个头被添加到您的 CORS 允许列表中,并且不会被代理服务器、网关或防火墙阻止或剥离。
服务器端 SDK 以每个请求为基础自动处理追踪。这意味着 SDK 会:
- 如果传入请求包含追踪头,则继续现有的追踪。
- 如果传入请求不包含追踪头,则启动一个新的追踪。此追踪在响应发送之前保持活动状态。
如有必要,您可以通过 手动启动新的追踪 来覆盖默认的追踪持续时间。
In version 8.0.0
and above of the Sentry Node SDK, distributed tracing will work out of the box.
Sentry.init({
dsn: "https://examplePublicKey@o0.ingest.sentry.io/0",
tracesSampleRate: 1,
});
If you don't want to use tracing, you can set up Custom Instrumentation for distributed tracing.
If you want to disable distributed tracing and ensure no Sentry trace headers are sent, you can configure your SDK like this:
Sentry.init({
dsn: "https://examplePublicKey@o0.ingest.sentry.io/0",
// Overwrite the defaults to ensure no trace headers are sent
tracePropagationTargets: [],
});
请记住,为了在整个分布式系统中传播追踪信息,您必须在所有涉及的服务和应用程序中使用 Sentry。请参阅各平台的 SDK 文档,了解如何为每个平台启用分布式追踪。