Використання екземплярів
«Екземпляри» — це приклади точок даних для агрегованих даних. Вони надають конкретний контекст для загальних агрегацій. Одним із поширених випадків використання є можливість кореляції метрик із трейсами (та логами). У цьому посібнику показано, як використовувати екземпляри з OpenTelemetry .NET для зв’язування метрик і трейсів за допомогою Prometheus, Jaeger та Grafana.
Що таке екземпляри?
Екземпляри представляють собою окремі вимірювання, які є частиною агрегованої метрики. Вони дозволяють вам:
- Звʼязувати метрики з трейсами, які були активні під час зняття вимірювання
- Визначати викиди або цікаві точки даних у межах агрегованих метрик
- Краще розуміти причини змін метрик, досліджуючи асоційовані трейс
Компоненти, що використовуються в цьому посібнику
- OpenTelemetry .NET SDK: Інструментування для вашого застосунку
- Prometheus: Система зберігання метрик, яка підтримує екземпляри
- Jaeger: Система розподіленого трейсингу
- Grafana: Інтерфейс для запитів до метрик і трейсів, а також для навігації між ними за допомогою екземплярів
Налаштування
Встановлення та запуск Jaeger
- Завантажте останній бінарний дистрибутив Jaeger
- Розпакуйте його в локальну теку
- Запустіть виконуваний файл
jaeger-all-in-one(.exe):
./jaeger-all-in-one --collector.otlp.enabled
Встановлення та запуск Prometheus
- Завантажте останній реліз Prometheus
- Розпакуйте його в локальну теку
- Запустіть Prometheus з необхідними параметрами:
./prometheus --enable-feature=exemplar-storage --web.enable-otlp-receiver
Встановлення та налаштування Grafana
- Дотримуйтесь інструкцій, специфічних для операційної системи для встановлення Grafana
- Запустіть сервер Grafana
- Відкрийте http://localhost:3000/ у вашому вебоглядачі
- Увійдіть за допомогою облікових типових даних (admin/admin)
- Налаштуйте джерела даних:
Джерело даних Jaeger
- Перейдіть до Налаштування > Джерела даних
- Додайте джерело даних Jaeger
- Встановіть “URL” на
http://localhost:16686/ - Натисніть “Зберегти та протестувати”
Джерело даних Prometheus
- Перейдіть до Налаштування > Джерела даних
- Додайте джерело даних Prometheus
- Встановіть “URL” на
http://localhost:9090 - У розділі “Екземпляри” увімкніть “Внутрішнє посилання”
- Встановіть “Джерело даних” на
Jaegerі “Імʼя мітки” наtrace_id - Натисніть “Зберегти та протестувати”
Інструментуйте свій застосунок
Ось приклад того, як інструментувати .NET застосунок за допомогою OpenTelemetry, увімкнувши екземпляри:
using System;
using System.Diagnostics;
using System.Threading;
using OpenTelemetry;
using OpenTelemetry.Metrics;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;
// Створити ресурс з інформацією про сервіс
var resource = ResourceBuilder.CreateDefault()
.AddService(serviceName: "exemplars-demo", serviceVersion: "1.0.0");
// Створити постачальника трасувальника
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
.SetResourceBuilder(resource)
.AddSource("MyCompany.MyProduct.MyLibrary")
.AddOtlpExporter(options => options.Endpoint = new Uri("http://localhost:4317"))
.Build();
// Створити постачальника метричних даних з підтримкою екземплярів
using var meterProvider = Sdk.CreateMeterProviderBuilder()
.SetResourceBuilder(resource)
.AddMeter("MyCompany.MyProduct.MyLibrary")
.SetExemplarFilter(ExemplarFilterType.TraceBased) // Увімкнути екземпляри на основі трейсів
.AddOtlpExporter(options => options.Endpoint = new Uri("http://localhost:9090/api/v1/otlp"))
.Build();
// Створити джерело активності та вимірювач
var activitySource = new ActivitySource("MyCompany.MyProduct.MyLibrary");
var meter = new Meter("MyCompany.MyProduct.MyLibrary");
// Створити інструмент гістограми для запису вимірювань
var histogram = meter.CreateHistogram<double>("MyHistogram", unit: "ms", description: "Example histogram");
var random = new Random();
// Створити зразкові дані
for (int i = 0; i < 100; i++)
{
// Почати діяльність (відрізок)
using (var activity = activitySource.StartActivity("ProcessData"))
{
// Додати деякі атрибути до діяльності
activity?.SetTag("iteration", i);
// Симуляція роботи
var value = random.NextDouble() * 100;
Thread.Sleep((int)value);
// Записати вимірювання - це включатиме екземпляр з контекстом трейсування
// тому що ми встановили ExemplarFilterType.TraceBased і маємо активну діяльність
histogram.Record(value);
}
// Очікування між ітераціями
Thread.Sleep(100);
}
Console.WriteLine("Application running and sending data. Press any key to exit.");
Console.ReadKey();
Перегляд екземплярів в Grafana
- Відкрийте Grafana та перейдіть до розділу “Explore”
- Виберіть Prometheus як джерело даних
- Запросіть метрику
MyHistogram_bucket - Увімкніть опцію “Exemplars” та оновіть запит
Екземпляри будуть показані у вигляді ромбоподібних точок на графіку метрики. При натисканні на екземпляр ви побачите такі деталі:
- Часовий відбиток, коли було записано вимірювання
- Необроблене значення
- Контекст трасування (trace_id)
Ви можете натиснути на «Query with Jaeger» поруч із trace_id, щоб переглянути повʼязане трасування, яке дасть вам уявлення про те, що відбувалося під час конкретного вимірювання.
Як працюють екземпляри в OpenTelemetry .NET
Коли ви налаштовуєте SDK за допомогою SetExemplarFilter(ExemplarFilterType.TraceBased), SDK прикріплює інформацію про трасування (trace ID, span ID) до вимірювань метрик, які відбуваються в контексті активного відрізка. Це дозволяє бекенду метрик зберігати ці екземпляри та повʼязувати їх з відповідними трасуваннями.
Стандартно не всі вимірювання зберігаються як екземпляри (це було б неефективно). Бекенд зазвичай використовує стратегії вибірки, щоб вирішити, які вимірювання зберігати як екземпляри.
Дізнатись більше
- Специфікація OpenTelemetry Exemplar
- Prometheus Exemplars
- Jaeger Tracing
- Grafana Exemplars Documentation
Відгук
Чи це було корисним?
Дякуємо. Ми цінуємо ваші відгуки!
Будь ласка, дайте нам знати як ми можемо покращити цю сторінку. Ми цінуємо ваші відгуки!