Відправлення телеметрії з програми Asp.Net Core до Scaleway Cockpit

💡 Усі статті, обговорення, новини про Mobile — в одному місці. Приєднуйтесь до Mobile спільноти!

Scaleway — один із європейських хмарних провайдерів, який пропонує недорогу альтернативу американським провайдерам, який має датацентри у Парижі, Амстердамі та Варшаві. Cockpit — це сервіс Scaleway для моніторингу інфраструктури та програм. Він дозволяє моніторити послуги Scaleway (Scaleway data) та ваші власні додатки (Custom data). Cockpit використовує Grafana для візуалізації та використовує:

  • Mimir для метрик (metrics)
  • Loki для журналів (logs)
  • Tempo для трасування (traces)

Щоб надсилати телеметричні сигнали з вашого власного додатка, вам потрібно створити власні джерела даних (endpoints) для кожного типу сигналу (метрики, журнали, трасування). Scaleway надає документацію для налаштування та конфігурації власних джерел даних та створення токена.

Після налаштування ви повинні отримати такі значення:

  • API Token
  • URL для кожного типу телеметричного сигналу, який ви хочете надіслати, шо виглядають таким чином:
  • https://<traces-datasource-id>.traces.cockpit.<scaleway-region>.scw.cloud/
  • https://<metrics-datasource-id>.metrics.cockpit.<scaleway-region>.scw.cloud/
  • https://logs-datasource-id.logs.cockpit.<scaleway-region>.scw.cloud/

Всі джерела даних підтримують протокол OpenTelemetry (OTLP) для збору даних за адресою /otlp/v1/[traces,metrics,logs].

  1. Дотримуйтесь інструкцій, щоб створити приклад програми Asp.Net Core, налаштованої для OpenTelemetry
  2. Мінімальна конфігурація для Scaleway у Program.cs повинна виглядати так:
using OpenTelemetry.Logs;
using OpenTelemetry.Metrics;
using OpenTelemetry.Trace;

// ...

var otlpHeader = "X-Token=<API Token>";

builder.Logging.AddOpenTelemetry(otelLoggerOptions =>
{
    otelLoggerOptions.AddOtlpExporter(otlpExporterOptions =>
    {
        otlpExporterOptions.Endpoint = new Uri("https://<logs_datasource_id>.logs.cockpit.<scaleway_region>.scw.cloud/otlp/v1/logs");
        otlpExporterOptions.Headers = otlpHeader;
        otlpExporterOptions.Protocol = OpenTelemetry.Exporter.OtlpExportProtocol.HttpProtobuf;
    });
});

builder.Services.AddOpenTelemetry()
    .WithTracing(tracing => tracing
        .AddAspNetCoreInstrumentation()
        .AddOtlpExporter(otlpExporterOptions =>
        {
            otlpExporterOptions.Endpoint = new Uri("https://<traces_datasource_id>.traces.cockpit.<scaleway_region>.scw.cloud/otlp/v1/traces");
            otlpExporterOptions.Headers = otlpHeader;
            otlpExporterOptions.Protocol = OpenTelemetry.Exporter.OtlpExportProtocol.HttpProtobuf;
        }))
    .WithMetrics(metrics => metrics
        .AddAspNetCoreInstrumentation()
        .AddOtlpExporter(otlpExporterOptions =>
        {
            otlpExporterOptions.Endpoint = new Uri("https://<metrics_datasource_id>.metrics.cockpit.<scaleway_region>.scw.cloud/otlp/v1/metrics");
            otlpExporterOptions.Headers = otlpHeader;
            otlpExporterOptions.Protocol = OpenTelemetry.Exporter.OtlpExportProtocol.HttpProtobuf;
        }));

// ...

var app = builder.Build();

// ...

З такою конфігурацією програму можно запускати і переглядати телеметрію в Cockpit.

Для простоти в цьому прикладі використовуються жорстко задані значення, а в реальному додатку слід використовувати звичайні методи конфігурації .Net.

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Scaleway — один із європейських хмарних провайдерів, який пропонує недорогу альтернативу американським провайдерам

А нічо так.
І набір гідний (тільки шкода шо руснявий клікхаус вибрали), і ціни.

Як вони загалом, які враження?
Як сапорт?

Враження дуже непогані. Ми зараз розглядаємо можливости використання якоїсь із європейських хмар, кілька варіантів відпали одразу бо не надають достатній вибір сервісів (Hetzner, на жаль також), це поки що перше що сподобалось тому домовились про трохи довший період на випробування. IaC через OpenTofu працює — налаштував деплоймент приватного managed K8s кластера, приватних container registry, пуш контейнерів із azure DevOps pipeline, деплоймент Helm charts звідті ж. Тепер от дійшла черга до OTel, документації спеціально під .Net у них нема, тому і вірішив зробити цей пост (на майбутне і для себе також).
Із сапортом поки що не було потреби спілкуватись, за винятком першої допомоги в початковому налаштуванні организації — відповідали швидко, перше враження краще ніж підтримка від Microsoft в Azure.

Дякую.
Занотував собі.

ійшла черга до OTel, документації спеціально під .Net у них нема

Ну так в самих OTel є — в тому-то і сенс стандарту шо воно має бути стандартним незалежно хто провайдер.

До речі, може порадити їм якусь альтернативу клікхаусу коли наступного разу буду з ними розмовляти? Бо сам я взагалі не знаю що воно таке, які існують альтернативи, і використовувати його не планую.

Підписатись на коментарі