Ресурси в OpenTelemetry .NET

Дізнайтеся про ресурси та способи їх використання в OpenTelemetry .NET

Ресурс представляє сутність, що продукує телеметрію, у вигляді атрибутів ресурсу. Наприклад, процес, що створює телеметрію у контейнері в Kubernetes, має імʼя процесу, імʼя пода, простір імен і, можливо, імʼя розгортання. Всі ці чотири атрибути можуть бути включені до ресурсу.

У вашому бекенді спостережуваності ви можете використовувати інформацію про ресурс, щоб краще дослідити поведінку, яка вас цікавить. Наприклад, якщо дані трасування або метрики вказують на затримку у вашій системі, ви можете звузити її до певного контейнера, подів або розгортання Kubernetes.

Що таке ресурси?

В OpenTelemetry ресурс — це незмінне подання сутності, що продукує телеметрію. Наприклад, ресурс може представляти контейнер Kubernetes, процес Linux або Windows, або застосунок, що працює в межах процесу.

Ресурси є фундаментальною концепцією в OpenTelemetry, і вони використовуються для опису джерела телеметричних даних. Ця інформація є цінною для налагодження та аналізу телеметричних даних.

Атрибути ресурсу

Атрибути ресурсу — це пари ключ-значення, які надають метадані про ресурс. OpenTelemetry визначає набір семантичних домовленостей для атрибутів ресурсу, які слід використовувати, коли це можливо.

Загальні атрибути ресурсу включають:

  • service.name: Назва сервісу, що генерує телеметрію
  • service.version: Версія сервісу
  • service.namespace: Простір імен для сервісу
  • service.instance.id: Унікальний ідентифікатор для екземпляра сервісу
  • host.name: Назва хосту
  • deployment.environment: Середовище розгортання (наприклад, production, staging)

Налаштування

Дотримуйтесь інструкцій у Початок роботи, щоб мати робочий .NET застосунок, який експортує дані до консолі.

Додавання ресурсів за допомогою змінних середовища

Ви можете використовувати змінну середовища OTEL_RESOURCE_ATTRIBUTES, щоб додати ресурси до вашого застосунку. .NET SDK автоматично виявить ці ресурси.

Наступний приклад додає атрибути ресурсів Service, Host та OS за допомогою змінних середовища, виконуючи unix програми, такі як uname, для генерації даних ресурсу.

$ env OTEL_RESOURCE_ATTRIBUTES="service.name=resource-tutorial-dotnet,service.namespace=tutorial,service.version=1.0,service.instance.id=`uuidgen`,host.name=`HOSTNAME`,host.type=`uname -m`,os.name=`uname -s`,os.version=`uname -r`" dotnet run

Activity.TraceId:          d1cbb7787440cc95b325835cb2ff8018
Activity.SpanId:           2ca007300fcb3068
Activity.TraceFlags:           Recorded
Activity.ActivitySourceName: tutorial-dotnet
Activity.DisplayName: SayHello
Activity.Kind:        Internal
Activity.StartTime:   2022-10-02T13:31:12.0175090Z
Activity.Duration:    00:00:00.0003920
Activity.Tags:
    foo: 1
    bar: Hello, World!
    baz: [1,2,3]
Resource associated with Activity:
    service.name: resource-tutorial-dotnet
    service.namespace: tutorial
    service.version: 1.0
    service.instance.id: 93B14BAD-813D-48EE-9FB1-2ADFD07C5E78
    host.name: myhost
    host.type: arm64
    os.name: Darwin
    os.version: 21.6.0

Додавання ресурсів у коді

Ви також можете додати власні ресурси у коді, приєднавши їх до ResourceBuilder.

Наступний приклад базується на [початковому прикладі] і додає два власні ресурси, environment.name та team.name у коді:

using System.Diagnostics;
using System.Collections.Generic;

using OpenTelemetry;
using OpenTelemetry.Trace;
using OpenTelemetry.Resources;

var serviceName = "resource-tutorial-dotnet";
var serviceVersion = "1.0";

var resourceBuilder =
    ResourceBuilder
        .CreateDefault()
        .AddService(serviceName: serviceName, serviceVersion: serviceVersion)
        .AddAttributes(new Dictionary<string, object>
        {
            ["environment.name"] = "production",
            ["team.name"] = "backend"
        });

var sourceName = "tutorial-dotnet";

using var tracerProvider = Sdk.CreateTracerProviderBuilder()
    .AddSource(sourceName)
    .SetResourceBuilder(resourceBuilder)
    .AddConsoleExporter()
    .Build();

var MyActivitySource = new ActivitySource(sourceName);

using var activity = MyActivitySource.StartActivity("SayHello");
activity?.SetTag("foo", 1);
activity?.SetTag("bar", "Hello, World!");
activity?.SetTag("baz", new int[] { 1, 2, 3 });

У цьому прикладі значення service.name та service.version також встановлюються у коді. Крім того, service.instance.id отримує стандартні значення.

Якщо ви виконаєте ту саму команду, що і в Додавання ресурсів за допомогою змінних середовища, але цього разу без service.name, service.version та service.instance.id, ви побачите ресурси environment.name та team.name у списку ресурсів:

$ env OTEL_RESOURCE_ATTRIBUTES="service.namespace=tutorial,host.name=`HOSTNAME`,host.type=`uname -m`,os.name=`uname -s`,os.version=`uname -r`" dotnet run

Activity.TraceId:          d1cbb7787440cc95b325835cb2ff8018
Activity.SpanId:           2ca007300fcb3068
Activity.TraceFlags:           Recorded
Activity.ActivitySourceName: tutorial-dotnet
Activity.DisplayName: SayHello
Activity.Kind:        Internal
Activity.StartTime:   2022-10-02T13:31:12.0175090Z
Activity.Duration:    00:00:00.0003920
Activity.Tags:
    foo: 1
    bar: Hello, World!
    baz: [1,2,3]
Resource associated with Activity:
    environment.name: production
    team.name: backend
    service.name: resource-tutorial-dotnet
    service.namespace: tutorial
    service.version: 1.0
    service.instance.id: 28976A1C-BF02-43CA-BAE0-6E0564431462
    host.name: pcarter
    host.type: arm64
    os.name: Darwin
    os.version: 21.6.0

Примітка: Якщо ви встановлюєте атрибути ресурсів як за допомогою змінних середовища, так і у коді, значення у коді мають пріоритет.

Наступні кроки

Є більше детекторів ресурсів, які ви можете додати до вашої конфігурації, наприклад, щоб отримати деталі про ваше Cloud середовище або Deployment.

Дізнатись більше

Для отримання додаткової інформації про ресурси в OpenTelemetry дивіться Resources SDK specification.


Востаннє змінено December 26, 2024: [uk] Ukrainian documentation for OpenTelemetry (2a3c5648)