Приложение создает диапазон с указанным мной именем службы, а затем другие диапазоны. Однако у первого диапазона также есть родительский элемент, который на самом деле является лямбда-службой, и по какой-то причине он не отправляется в другие службы, поэтому у вас всегда отсутствует диапазон. Проблема на самом деле определена в контенте Honeycomb, но она не предназначена для C#.
Как здесь и здесь
AWS имеет встроенную интеграцию XRay с Lambda. Это означает, что при вызове вашей функции в нее передается рентгеновская информация из службы Lambda. Это означает, что когда мы работаем с OTEL, у него уже будет родительский диапазон (лямбда-сервис). Проблема в том, что span не перейдет в Honeycomb, и Honeycomb подумает, что пробел отсутствует. Чтобы решить эту проблему, мы просто говорим, что наш первый диапазон является корневым.
Когда я отключаю трассировку XRay в конфигурации Lambda, она перестает публиковать диапазоны службы Lambda. в Xray, но у моего диапазона все еще есть ParentId. Изменение переменных среды после просмотра документации Honeycomb также не помогло.
Я определил OpenTelemetry в своем коде следующим образом: мой первый диапазон использует имя «lambda.otel.service». " и имеет родительский элемент из AWS Lambda Service.
Код: Выделить всё
readonly TracerProvider? _tracerProvider;
public Function()
{
_tracerProvider = Sdk.CreateTracerProviderBuilder()
.ConfigureResource(resource =>
{
resource
.AddService("lambda.otel.service")
.AddAttributes(new[]
{
new KeyValuePair("service.version",
Assembly.GetExecutingAssembly().GetName().Version!.ToString())
});
})
.AddAWSLambdaConfigurations()
.AddAspNetCoreInstrumentation()
.AddGrpcClientInstrumentation()
.AddHttpClientInstrumentation()
.AddSource(DiagnoticsConfig.SourceName)
.AddOtlpExporter()
.AddConsoleExporter()
.Build();
}


Подробнее здесь: https://stackoverflow.com/questions/789 ... arent-span
Мобильная версия