Я вручную установил трассировку Datadog для моего * веб-приложения asp. net, отредактировав функции Application_BeginRequest () и Application_EndRequest () в global.asax, например:
protected void Application_BeginRequest(Object sender, EventArgs e) {
var scope = Tracer.Instance.StartActive("global.asax", serviceName: "...");
var span = scope.Span;
span.Type = SpanTypes.Web;
span.SetTag(...);
span.ResourceName = "..."
// do something
}
protected void Application_EndRequest(Object sender, EventArgs e) {
var scope = Tracer.Instance.ActiveScope;
if(scope != null) {
scope.Dispose();
}
}
Это успешно создает трассировки, содержащие "global.asax", охватывают интерфейс пользователя Datadog. Название ресурса также выглядит хорошо. Однако эти трассировки содержат только «global.asax» spans. Это не то, что я ожидал. Веб-приложение asp. net также использует ADO. NET для чтения / записи данных с / на мой сервер MS SQL. Поскольку Datadog автоматически отслеживает вызовы ADO. NET, я ожидаю, что sql диапазоны запросов будут включены как дочерние интервалы в мои инструментированные трассировки вручную.
После прочтения исходного кода библиотеки Datadog.Trace я понимаю, что каждая трасса имеет один основной диапазон и ноль или несколько дочерних диапазонов. В моем случае я запускаю основной диапазон в ApplicationBeginRequest и закрываю его в ApplicationEndRequest, в результате чего все ado. net span, которые происходят между beginRequest и endRequest, должны иметь основной span в качестве родительского и, таким образом, они будут появляться под одним следом. Я неправильно понял следы / пролеты Datadog здесь?
PS На данный момент пролеты asp. net и ado. net показаны на разных трассах.