自定义检测
编辑自定义检测编辑
要报告应用程序提供的交易的性能,请使用 Go 代理的 API。检测是指修改应用程序代码以报告
要报告这些,请使用 apm.Tracer - 通常是 apm.DefaultTracer()
,它通过环境变量配置。在下面的代码示例中,我们将引用 apm.DefaultTracer()
。有关类型和方法的更详细描述,请参阅 API 文档。
交易编辑
要报告交易,请使用交易名称和类型调用 apm.DefaultTracer().StartTransaction。这将返回一个 Transaction
对象;在调用其 End
方法以指示交易已完成之前,可以使用其他上下文自定义交易。一旦交易的 End
方法被调用,它将被排队以发送到 Elastic APM 服务器,并可供 APM 应用程序使用。
tx := apm.DefaultTracer().StartTransaction("GET /api/v1", "request") defer tx.End() ... tx.Result = "HTTP 2xx" tx.Context.SetLabel("region", "us-east-1")
代理支持对交易进行采样:未采样的交易仍将被报告,但上下文有限,并且不包含任何跨度。要确定交易是否被采样,请使用 Transaction.Sampled
方法;如果它返回 false,则应避免为设置交易上下文而进行的任何不必要的存储或处理。
启动交易后,可以将其包含在 context
对象中,以便在整个应用程序中传播。有关更多详细信息,请参阅 上下文传播。
ctx = apm.ContextWithTransaction(ctx, tx)
跨度编辑
要报告交易中的操作,请使用 Transaction.StartSpan 或 apm.StartSpan 来启动跨度,分别提供交易或包含交易的 context
。与交易类似,跨度也有名称和类型。跨度可以在同一交易中拥有父跨度。如果提供给 apm.StartSpan
的上下文包含跨度,则该跨度将被视为父跨度。有关更多详细信息,请参阅 上下文传播。
span, ctx := apm.StartSpan(ctx, "SELECT FROM foo", "db.mysql.query") defer span.End()
Transaction.StartSpan
和 apm.StartSpan
将始终返回一个非空 Span
,即使交易为空。始终可以安全地推迟对跨度的 End 方法的调用。如果设置跨度上下文会产生重大开销,则可能需要先检查跨度是否已丢弃,方法是调用 Span.Dropped
方法。
恐慌恢复和错误编辑
要恢复恐慌并将其与交易一起报告,请在恢复函数中使用 Tracer.Recovered 方法。还有一些方法可以报告非恐慌错误:Tracer.NewError、Tracer.NewErrorLog 和 apm.CaptureError。
defer func() { if v := recover(); v != nil { e := apm.DefaultTracer().Recovered() e.SetTransaction(tx) // or e.SetSpan(span) e.Send() } }()
有关其他方法的详细信息和示例,请参阅 错误 API。