JavaRush /Курсы /C# SELF /Сбор логов: Seq и ...

Сбор логов: Seq и Application Insights

C# SELF
64 уровень , 2 лекция
Открыта

1. Введение

Прежде чем погружаться в практику, давайте разберёмся, зачем вообще нужны внешние системы для сбора логов. Представьте, что ваше приложение развернуто не на домашнем ПК, а в продакшене: сотни серверов, микросервисы, множество пользователей, кто-то жалуется на "приложение тупит". Найти нужное событие в таком потоке логов — как искать иголку в стоге сена. Без централизованного сбора логов отлаживать и сопровождать такие приложения практически невозможно. Именно тут на сцену выходят Seq и Application Insights.

Seq: приятный UI, быстрый поиск, реальное время

Seq — это система централизованного сбора и анализа структурированных логов, заточенная под .NET и Serilog. Это не просто сервис выгрузки лог-файлов, а мощный инструмент: в реальном времени вы видите потоки логов, фильтруете, ищете по свойствам, строите алерты. Seq можно развернуть локально или в облаке.

Почему выбирают Seq?

  • Заточен под .NET и Serilog, работает "из коробки".
  • Потрясающе быстрый поиск и фильтрация по любым свойствам сообщений.
  • Простой и удобный веб-интерфейс.
  • Можно развернуть локально без лишней бюрократии, даже на ноутбуке.

Как выглядит простая архитектурная схема?


+--------------+        +-------------+         +-------------+
| .NET-прилож. | --(лог)| Serilog     | --(http)|     Seq     |
+--------------+        +-------------+         +-------------+
                                    |            ^ 
                                    |            | 
             (поиск, фильтры,        <----[Web UI] 
              алерты, интеграции)

Приложение пишет структурированные логи через Serilog, Serilog отправляет их в Seq. В веб-интерфейсе Seq вы делаете всё, что душе угодно.

2. Интеграция Serilog с Seq

Установка Seq

Seq можно быстро попробовать локально даже для домашних экспериментов. Например, если вы используете Windows, скачайте Seq с официального сайта.

  1. Скачайте Seq и установите.
  2. После установки открывайте веб-интерфейс (обычно http://localhost:5341).
  3. Готово! Теперь осталось настроить отправку логов в Seq.

Интеграция Serilog с Seq

Установка NuGet-пакета:

dotnet add package Serilog.Sinks.Seq

Пример настройки логгирования в Program.cs:

using Serilog;

public class Program
{
    public static void Main(string[] args)
    {
        // Настройка Serilog для вывода логов в Seq
        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Information()
            .WriteTo.Console()
            .WriteTo.Seq("http://localhost:5341") // URL вашего Seq-сервера
            .CreateLogger();

        Log.Information("Приложение стартует");
        // ... Остальной код приложения ...

        Log.CloseAndFlush();
    }
}

Если всё настроено правильно, ваши логи из приложения начнут сыпаться в Seq.

Пример структурированного события

Log.Information("Пользователь {User} залогинился в {Time}", userName, DateTime.UtcNow);

В Seq теперь можно искать все входы конкретного пользователя:

User == 'vasya'

Фильтрация и поиск

Seq умеет фильтровать события по любому полю и значению. Например, хотите посмотреть все ошибки за сегодня? Просто задайте фильтр:

@Level = 'Error' and @Timestamp > today()

Можно комбинировать условия — это реально удобно!

Алерты и интеграции

Seq умеет создавать алерты: если, например, количество ошибок превышает порог, вам прилетит письмо, сработает webhook, или даже можно отправить сообщение в Slack.

Какие ещё возможности есть?

  • Интеграция с системами CI/CD, чтобы автоматически собирать логи тестов.
  • Возможность кастомных Dashboards (за дополнительную плату).
  • Плагины для анализа логов, автоматизация действий (например, автосоздание багов при падении).
  • Интеграция с Grafana/Prometheus через плагины.

Типичные ошибки при настройке Seq

Одна из частых проблем — забывают правильно указать URL сервера Seq в Serilog, или сервер Seq слушает не на том порту.

Ещё одна проблема — не открывают порт для входящих соединений, если Seq крутится в Docker или на сервере. Стоит проверить доступность порта из приложения до Seq.

3. Application Insights: телеметрия для .NET, облако и магия

Application Insights (или "App Insights") — облачная платформа мониторинга и анализа приложений от Microsoft Azure. Это не только сбор логов, но и автоматическое обнаружение аномалий, аналитика использования, мониторинг зависимостей, запросов, внешних API — и, конечно, визуализация в реальном времени. Azure Application Insights — стандарт в мире enterprise .NET.

В чём плюсы Application Insights?

  • Не требует установки отдельного сервера: всё в облаке.
  • Глубокая интеграция с .NET, ASP.NET, Azure, Visual Studio.
  • Автоматически собирает не только ваши логи, но и метрики, ошибки, запросы, SQL-запросы.
  • Возможность строить дашборды, мониторить SLA, искать аномалии, анализировать распределённые трассы (distributed tracing).

Как работает Application Insights?


+--------------+        +-------------------+         +---------------------+
| .NET-прилож. | --(SDK)| AppInsights SDK   | --(https)| Azure Application   |
+--------------+        +-------------------+         | Insights (облако)  |
                                                       +---------------------+
                          ^         |
                        (W3C Trace   +----> Аналитика, поиск, панели
                         Context)

Приложение с подключённым SDK отправляет телеметрию в облако Azure, анализируете и визуализируете вы её уже через веб-интерфейс портала Azure.

Интеграция Application Insights с .NET приложением

Вариант 1: Быстро и просто

Если у вас ASP.NET Core-приложение, всё очень просто:

dotnet add package Microsoft.ApplicationInsights.AspNetCore

В Program.cs:

builder.Services.AddApplicationInsightsTelemetry("<ваш_ключ_инструмента>");

А если у вас консольное или десктопное приложение:

dotnet add package Microsoft.ApplicationInsights

Инициализация:

using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.Extensibility;

var telemetryConfig = TelemetryConfiguration.CreateDefault();
telemetryConfig.InstrumentationKey = "<ваш_ключ_инструмента>";
var telemetryClient = new TelemetryClient(telemetryConfig);

telemetryClient.TrackTrace("Hello from Application Insights!");
telemetryClient.TrackException(new Exception("ООП, случилась ошибка!"));

Ключ инструмента нужно получить в портале Azure после создания ресурса Application Insights.

Как отправить структурированные данные?

Вы можете добавить свойства к каждой записи trace:

telemetryClient.TrackTrace("Пользователь залогинился", 
    new Dictionary<string, string> { ["User"] = userName }
);

Пример: логирование действий пользователя

Допустим, вы хотите логировать вход пользователя:

var props = new Dictionary<string, string>
{
    { "User", userName },
    { "Time", DateTime.UtcNow.ToString("o") }
};
telemetryClient.TrackEvent("UserLogin", props);

Теперь не только само событие, но и все свойства видны в портале.

4. Полезные нюансы

Что вы видите в Application Insights?

  • Обзор по приложениям: входы, ошибки, зависимости (например, SQL-запросы).
  • Поиск по логам: любые события, фильтрация по свойствам.
  • Визуализация: графики, дашборды.
  • Tracing: можно видеть цепочку вызовов и сколько времени заняла каждая операция.
  • Alerting: настройка алертов по любым условиям.

Коротко о структуре Application Insights

Объект Описание
Trace Строковое сообщение (обычный лог).
Event Произвольное событие (например, "Покупка").
Exception Информация об ошибке/исключении.
Dependency Внешний вызов (SQL, HTTP-запрос и т.д.).
Metric Числовые показатели (например, количество).
Request Запрос пользователя (для веб-приложений).

Пример: поиск ошибки в Application Insights

В портале Azure можно построить простой запрос (Kusto Query Language — KQL):

exceptions
| where timestamp > ago(1d)
| where outerMessage contains "Timeout"
| project timestamp, operation_Name, user_Id, outerMessage

Это покажет вам все тайм-ауты за последние сутки, с деталями.

Ограничения/нюансы Application Insights

  • Для использования нужен аккаунт Azure. Можно бесплатно, но с лимитами.
  • Иногда задержка между отправкой логов и их появлением в UI — до пары минут.
  • Для "очень приватных" проектов — это облако, а не локальная инсталляция.
  • Если злоупотреблять трейсами — можно быстро сжечь дневной лимит.

5. Сравнение Seq и Application Insights

Seq Application Insights
Где хранится Локальный сервер (или облако) Облако Azure
Стоимость Бесплатно/платно, локально Есть бесплатный тариф, платно за Azure
Лучшее применение .NET-приложения, локальные CI Любые приложения, прод/энтерпрайз
UI/Поиск Очень удобный, фильтры Мощный, аналитика, дашборды
Alerting Встроенный Сложные условия, интеграция с Azure
Интеграция Serilog, другие sinks SDK для ASP.NET, .NET, JS и др.
Гибкость Контролируете сами Всё под контролем Microsoft

Применение знаний на практике

Знания о Seq и Application Insights пригодятся вам не только в продакшене, но и на этапах разработки, тестирования (например, для анализа поведения автотестов), при работе с микросервисами, когда хочется видеть картину целиком. На собеседованиях часто спрашивают "Как вы бы организовали сбор логов, чтобы быстро находить проблемы на проде?" — теперь у вас есть, что ответить!

Более того, многие современные компании используют такие системы для построения целых цепочек DevOps-инструментов: Continuous Delivery, автоматическое создание багов по алертам и др. Система сбора логов — это не просто "куда уходит строка Console.WriteLine", а настоящая "черная коробка" и монитор вашего приложения.

2
Задача
C# SELF, 64 уровень, 2 лекция
Недоступна
Интеграция Application Insights для сбора телеметрии
Интеграция Application Insights для сбора телеметрии
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ