Занимались ли вы мониторингом приложений?

«Занимались ли вы мониторингом приложений?» — вопрос из категории DevOps, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, я настраивал мониторинг для production-приложений. Основной стек: Prometheus для сбора метрик, Grafana для визуализации и дашбордов, и Application Insights для облачных .NET-сервисов.

Пример интеграции Prometheus в C# приложение:

using Prometheus;

// Создание метрики
private static readonly Counter RequestCounter = Metrics
    .CreateCounter("app_http_requests_total", "Total HTTP requests.");

// Инкремент метрики в middleware
app.Use(async (context, next) =>
{
    RequestCounter.Inc();
    await next();
});

// Запуск сервера метрик на порту 5000
var metricServer = new KestrelMetricServer(port: 5000);
metricServer.Start();

Для Azure-сервисов использовал Application Insights:

// В Program.cs или Startup.cs
builder.Services.AddApplicationInsightsTelemetry();

Что мониторил и настраивал:

  • Бизнес-метрики: Количество запросов, ошибок, время выполнения операций.
  • Системные метрики: Загрузка CPU, потребление памяти, дисковый I/O.
  • Алертинг: Настраивал правила в Grafana и Azure Monitor для уведомления о превышении порогов по ошибкам (5xx), высокой задержке или нехватке памяти.
  • Логирование и трейсинг: Интегрировал structured logging (Serilog/ILogger) с отправкой логов в центральное хранилище для корреляции с метриками.