Конфигурация
Обязательные параметры
| Параметр | Тип | Описание |
|---|---|---|
| ApiToken | string | Токен аутентификации (формат sdk_...) |
| OrganizationId | Guid | ID организации |
| ProjectId | Guid | ID проекта |
| SdkClientId | Guid | ID приложения (SDK-клиента) |
Необязательные параметры
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
| BaseUrl | Uri | https://sdk.enma.tech | Базовый URL Ingest API |
| BatchSize | int | 50 | Событий в одном HTTP-запросе (макс. 200) |
| FlushInterval | TimeSpan | 5 сек | Интервал автоматической отправки |
| MaxQueueSize | int | 10 000 | Ёмкость ограниченной очереди |
| MaxRetries | int | 3 | Повторные попытки при 5xx / сетевых ошибках |
| DefaultTags | Dictionary<string, string> | {} | Глобальные теги для всех событий |
| OnError | Action | null | Callback при ошибке доставки пакета |
Полный пример
await using var enma = new EnmaClient(o =>
{
// Обязательные
o.ApiToken = "sdk_your_token";
o.OrganizationId = Guid.Parse("...");
o.ProjectId = Guid.Parse("...");
o.SdkClientId = Guid.Parse("...");
// Транспорт
o.BaseUrl = new Uri("https://sdk.enma.tech"); // по умолчанию
o.BatchSize = 100;
o.FlushInterval = TimeSpan.FromSeconds(10);
o.MaxQueueSize = 50_000;
o.MaxRetries = 5;
// Глобальные теги
o.DefaultTags["service"] = "order-api";
o.DefaultTags["env"] = "production";
// Middleware
o.Use(next => async (evt, ct) =>
{
evt.Tags ??= new Dictionary<string, string>();
evt.Tags["host"] = Environment.MachineName;
await next(evt, ct);
});
// Обработка ошибок
o.OnError = (events, ex) =>
{
logger.LogError(ex, "Ошибка отправки {Count} событий", events.Count);
};
});Конфигурация через appsettings.json
При использовании ASP.NET Core параметры можно вынести в конфигурационный файл или переменные окружения:
{
"Enma": {
"ApiToken": "sdk_your_token",
"OrganizationId": "...",
"ProjectId": "...",
"SdkClientId": "...",
"BatchSize": 100,
"MaxRetries": 5
}
}builder.Services.AddEnma(builder.Configuration.GetSection("Enma"));Подробнее — ASP.NET Core интеграция.