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 с официального сайта.
- Скачайте Seq и установите.
- После установки открывайте веб-интерфейс (обычно http://localhost:5341).
- Готово! Теперь осталось настроить отправку логов в 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", а настоящая "черная коробка" и монитор вашего приложения.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ