Пропустити навігацію EPAM

Як налаштувати моніторинг користувацьких шляхів у .NET з Azure Monitor

Думка експерта
  • .NET

Чи знаєте ви, що Azure Monitor автоматично збирає метрики кожну хвилину та може зберігати їх до 93 днів для платформних та користувацьких метрик? Для .NET-інженерів це відкриває потужні можливості для всебічного моніторингу додатків.

На сьогодні, працюючи з .NET Core, .NET 8 чи .NET Framework, ми маємо доступ до комплексного набору інструментів моніторингу, які починають збирати дані одразу після створення ресурсу. Azure Monitor надсилає метрики з інтервалом у 60 секунд, що дозволяє нам відстежувати продуктивність, доступність та функціональність наших додатків практично в реальному часі.

У цій статті ми розглянемо, як налаштувати ефективний моніторинг користувацьких шляхів у .NET-додатках за допомогою Azure Monitor, включаючи конфігурацію метрик, трасування запитів та оптимізацію продуктивності. Особливу увагу приділимо практичним аспектам, які будуть корисні для досвідчених .NET-інженерів.

Azure Monitor: комплексне рішення для моніторингу хмарної інфраструктури

Azure Monitor — це потужний інструмент від Microsoft, який надає комплексне рішення для збору, аналізу та реагування на телеметричні дані з вашого хмарного та локального середовища.

Основні компоненти Azure Monitor

Azure Monitor складається з кількох ключових компонентів, які працюють разом для забезпечення повного огляду вашої інфраструктури:

1.     Збір даних:

a.     журнали (Logs): детальні записи про події та метрики;

b.     метрики (Metrics): числові значення, що описують певний аспект системи в певний момент часу.

2.     Аналіз:

a.     Log Analytics: потужний інструмент для аналізу журналів за допомогою запитів;

b.     метрики в реальному часі: для швидкого виявлення проблем продуктивності.

3.     Візуалізація та звітність:

a.     панелі моніторингу (Dashboards): настроювані інформаційні панелі;

b.     Workbooks: інтерактивні звіти з багатими візуалізаціями.

4.     Реагування:

a.     оповіщення (Alerts): автоматичні повідомлення про важливі події;

b.     автоматизовані дії (Action Groups): для швидкого реагування на проблеми.

5.     Інтеграція:

a.     Application Insights: для моніторингу вебдодатків;

b.     Container Insights: для контейнеризованих середовищ.

Порівняння з аналогами

Для об'єктивної оцінки Azure Monitor, варто порівняти його з іншими популярними рішеннями:

1.     Amazon CloudWatch (AWS):

a.     схожий функціонал для екосистеми AWS;

b.     Azure Monitor пропонує більш інтегрований підхід з іншими сервісами Azure.

2.     Google Cloud Monitoring (GCP):

a.     надає подібні можливості для середовища Google Cloud;

b.     Azure Monitor може бути більш привабливим для тих компаній, які вже використовують інші продукти Microsoft.

3.     Datadog:

a.     потужне рішення для моніторингу з підтримкою різних хмарних платформ;

b.     Azure Monitor більш тісно інтегрований з екосистемою Azure, що може спростити налаштування та використання.

4.     Prometheus + Grafana:

a.     популярне open-source рішення;

b.     Azure Monitor пропонує більш комплексний підхід "з коробки" та легшу інтеграцію з хмарними сервісами Azure.

Azure Monitor виділяється своєю глибокою інтеграцією з екосистемою Azure, що робить його особливо привабливим для компаній, які активно використовують сервіси Microsoft. Проте, вибір інструменту моніторингу завжди залежить від конкретних потреб проєкту, наявної інфраструктури та вимог до масштабованості.

Основи моніторингу .NET-додатків

Насамперед Azure Monitor забезпечує централізований моніторинг та діагностику для .NET-додатків, розгорнутих на Azure. Ця платформа надає дієві інсайти для оптимізації продуктивності додатків та підвищення їх надійності.

Огляд можливостей Azure Monitor для.NET

Azure Monitor пропонує всебічний моніторинг для .NET-додатків через три основні компоненти: метрики, журнали та розподілені трасування. Водночас платформа забезпечує централізовану агрегацію журналів та відстеження візуалізації через робочі книги Power BI.

Типи метрик та телеметрії

Azure Monitor підтримує такі типи телеметрії:

  • метрики платформи: збираються автоматично з ресурсів Azure з інтервалом в одну хвилину;
  • користувацькі метрики: визначаються розробниками для специфічних потреб додатка;
  • метрики Prometheus: збираються з кластерів Kubernetes та AKS;
  • розподілені трасування: відстежують шлях запитів через різні сервіси.

Крім того, Application Insights автоматично збирає дані про продуктивність, доступність та взаємодію з користувачами.

Налаштування SDK для .NET Core та .NET 8

Для інтеграції з Azure Monitor у .NET-додатках потрібно встановити відповідні пакети NuGet. Для .NET Core рекомендується використовувати Azure Monitor OpenTelemetry.

Процес налаштування включає:

  1. Встановлення пакета Azure.Monitor.OpenTelemetry.AspNetCore
  2. Додавання конфігурації OpenTelemetry у клас program.cs
  3. Налаштування строки підключення для визначення ресурсу телеметрії

Для .NET 8 OpenTelemetry є основним способом моніторингу, і в цьому випадку рекомендується використовувати AddOpenTelemetry() замість застарілих SDK.

Налаштування Користувацьких Метрик

Розробка власних метрик у .NET вимагає розуміння специфіки їх збору та обробки. Пакети SDK для Azure Monitor Application Insights пропонують два основні методи роботи з користувацькими метриками, кожен із яких має свої особливості.

Створення власних метрик у .NET

Для збору користувацьких метрик SDK надає два ключові методи:

  • GetMetric(): забезпечує локальну агрегацію даних та відправляє узагальнену статистику кожну хвилину;
  • TrackMetric(): відправляє необроблені дані телеметрії без попередньої обробки.

Зокрема, GetMetric() значно зменшує навантаження на мережу та витрати на зберігання, оскільки агрегує дані локально перед відправленням. Водночас TrackMetric() використовується для специфічних випадків, коли потрібен детальний аналіз кожного значення метрики.

Конфігурація Application Insights

Налаштування телеметрії починається з отримання екземпляра TelemetryClient через внесення залежностей. При цьому важливо використовувати один екземпляр TelemetryClient протягом життєвого циклу додатка для оптимальної продуктивності.

Для розширення даних телеметрії додатковою інформацією використовуються ініціалізатори телеметрії. Насамперед їх додають у контейнер DependencyInjection:

builder.Services.AddSingleton<ITelemetryInitializer, MyCustomTelemetryInitializer>();

Обробка помилок та винятків

Для ефективного відстеження помилок Application Insights автоматично збирає необроблені винятки з методів контролерів MVC 5+. Проте, для винятків, які обробляються додатком, потрібно налаштувати ручне відстеження.

Особливу увагу варто приділити тому, що користувацькі метрики не підлягають вибірці. Це гарантує надійність сповіщень при порушенні порогових значень.

Однак, при відстеженні метрик із високою частотою слід враховувати можливі обмеження:

  • збільшення витрат на зберігання даних;
  • підвищене навантаження на мережевий трафік;
  • ризик регулювання приймання даних при надмірній кількості точок телеметрії.

Імплементація Трасування Запитів

Трасування запитів становить один із трьох основних стовпів телеметрії, поряд із метриками та журналами. Сучасні .NET-додатки потребують ефективного відстеження та аналізу розподілених операцій для забезпечення надійності та продуктивності.

Distributed Tracing в.NET

Основою розподіленого трасування в .NET є клас Activity, який представляє операцію з контекстом для трасування. Зокрема, для створення трасування використовується ActivitySource, який забезпечує контекст та час виконання операцій.

Для автоматичного збору даних трасування Azure Monitor підтримує два підходи:

  • Application Insights SDK з вбудованою підтримкою для .NET, .NET Core та інших платформ;
  • OpenTelemetry з вендор-нейтральними інструментами для відправки трасувань в Application Insights.

Кореляція запитів між сервісами

Кореляція запитів відбувається автоматично після підключення додатка. Водночас .NET runtime забезпечує розподілене трасування за допомогою Activity та DiagnosticSource. Application Insights .NET SDK використовує ці компоненти для збору та зіставлення телеметрії.

Для HTTP-запитів кореляція забезпечується через спеціальні заголовки, які передаються між сервісами. Крім того, correlation id дозволяє зв’язати численні записи в логах у єдину операцію як для монолітних, так і для мікросервісних архітектур.

Логування контексту запитів

Для збагачення логів додатковими даними Serilog пропонує концепцію «збагачення». Наприклад, метод WithCorrelationIdHeader додає correlation id поточного вебзапиту до всіх повідомлень, що відправляються в Serilog.

Azure Monitor Log Analytics надає потужні можливості для аналізу зібраних даних:

  • витяг записів за визначеними умовами;
  • аналіз шаблонів та тенденцій;
  • інтерактивний аналіз результатів.

При роботі з контекстом запитів важливо звернути увагу на безпеку даних. Зокрема, інформація про користувача в логах має бути максимально знеособлена — рекомендується логувати лише ідентифікатор користувача, уникаючи збереження персональних даних.

Моніторинг Продуктивності

Моніторинг продуктивності в Azure Monitor надає повний набір інструментів для відстеження та аналізу роботи .NET-додатків. Платформа автоматично збирає кількісні дані в базу даних часових рядів, що дозволяє ефективно аналізувати тенденції продуктивності.

Відстеження використання ресурсів

Azure Monitor забезпечує комплексний збір метрик із кожного рівня та компонента системи.

Платформа відстежує такі ключові показники:

  • продуктивність додатків та їх здоров’я;
  • використання віртуальних машин та контейнерів;
  • стан баз даних та мережевих компонентів;
  • метрики безпеки та події системи.

Зокрема, для .NET-додатків Azure Monitor автоматично збирає платформні метрики, які не потребують додаткової конфігурації. Водночас розробники можуть налаштувати перенаправлення метрик у журнали Azure Monitor для подальшого аналізу.

Профілювання .NET-додатків

Application Insights Profiler для .NET попередньо встановлений у середовищі виконання служби Azure App Service.

Профайлер автоматично збирає трасування з трьома основними тригерами:

  • вибірковий тригер: запускається випадково щогодини на 2 хвилини;
  • CPU тригер: активується при використанні процесора понад 80 %;
  • тригер пам’яті: спрацьовує при використанні пам’яті понад 80 %;

Важливо зазначити, що профайлер додає лише 5–15 % навантаження на CPU та пам’ять сервера. Дані профілювання автоматично видаляються через 15 днів, що оптимізує використання ресурсів зберігання.

Оптимізація запитів

Azure Monitor використовує Azure Data Explorer для зберігання та аналізу даних журналів.

Для оптимізації запитів платформа пропонує кілька ключових метрик продуктивності.

Загальне використання CPU представляє обсяг обчислень при обробці запиту на всіх вузлах. Запити, що використовують понад 100 секунд CPU, вважаються такими, що надмірно споживають ресурси. При перевищенні 1000 секунд CPU запит може бути обмежений системою.

Найефективнішою оптимізацією є додавання умов where на початку запиту, що дозволяє відфільтрувати максимальну кількість записів перед виконанням функцій з інтенсивним використанням CPU. Водночас запити, що обробляють понад 2000 КБ даних, вважаються ресурсомістким, а при перевищенні 20000 КБ можуть бути обмежені.

Для забезпечення оптимальної продуктивності рекомендується обмежувати діапазон часу запиту. Зокрема, запити з інтервалом понад 15 днів вважаються такими, що надмірно споживають ресурси. При цьому запити не можуть охоплювати понад 100 робочих областей.

Практики Ефективного Моніторингу

Ефективний моніторинг у середовищі Azure вимагає збалансованого підходу до збору та обробки даних. Використовуючи правильні стратегії та інструменти, можна значно покращити якість моніторингу та оптимізувати витрати.

Стратегії семплінгу

Адаптивна вибірка (sampling) включена за замовчуванням в Application Insights для .NET-додатків. Цей механізм автоматично коригує обсяг телеметрії, що збирається, базуючись на поточному навантаженні.

Зокрема, при налаштуванні семплінгу варто звернути увагу на:

  • вибірку в джерелі: забезпечує першу лінію захисту від надмірних витрат, гарантуючи, що додатки передають лише необхідні дані;
  • адаптивна вибірка: автоматично регулює обсяг телеметрії залежно від навантаження;
  • фіксована вибірка: встановлює статичний відсоток для збору даних.

Водночас користувацькі метрики не підлягають вибірці, що гарантує надійність сповіщень при порушенні порогових значень.

Управління витратами на моніторинг

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

Для оптимізації витрат на моніторинг рекомендується впровадити наступні практики:

  • оптимізація збору даних: збирайте лише необхідні категорії журналів, уникаючи надмірного збору даних;
  • ефективне зберігання: впроваджуйте процеси архівування даних у дешевше сховище;
  • управління ресурсами: використовуйте динамічні порогові значення для правил генерації сповіщень.

Azure Monitor надає інструменти для аналізу витрат та оптимізації використання ресурсів. Зокрема, Azure Cost Management допомагає отримати уявлення про витрати та надає персоналізовані рекомендації щодо оптимізації.

Автоматизація сповіщень

Система сповіщень Azure Monitor допомагає виявляти та усувати проблеми ще до того, як їх помітять користувачі. При налаштуванні автоматизації сповіщень варто дещо врахувати.

Типи правил сповіщень:

  • оповіщення метрик оцінюють ресурси через регулярні інтервали;
  • оповіщення пошуку по журналах використовують запити Log Analytics;
  • оповіщення інтелектуального виявлення автоматично попереджають про аномалії.

Групи дій можуть містити до п’яти різних конфігурацій та виконуються одночасно.

Для ефективної автоматизації сповіщень рекомендується:

  1. Налаштувати чітко визначений обсяг сповіщень.
  2. Відрегулювати деталізацію для мінімізації шуму.
  3. Використовувати автоматизоване рішення замість активного пошуку проблем вручну.

Насамперед при налаштуванні правил сповіщень важливо використовувати політики Azure для розгортання агентів та призначення правил збору даних. Це забезпечує узгоджений підхід до моніторингу та автоматизації в масштабі всієї інфраструктури.

Azure Monitor також підтримує інтеграцію з різними системами управління інцидентами через вебперехоплювачі. Для .NET-додатків це особливо корисно при налаштуванні автоматичних відповідей на критичні події та аномалії в роботі системи.

Висновок

Налаштування моніторингу користувацьких шляхів у .NET через Azure Monitor надає потужний інструментарій для глибокого аналізу додатків. Платформа забезпечує всебічний контроль через метрики, журнали та розподілені трасування, що особливо цінно для складних систем.

Ключові аспекти, розглянуті в статті:

  • автоматичний збір метрик кожні 60 секунд із можливістю зберігання до 93 днів;
  • налаштування користувацьких метрик через GetMetric() та TrackMetric();
  • впровадження розподіленого трасування за допомогою Activity та DiagnosticSource;
  • оптимізація продуктивності через профілювання та моніторинг ресурсів;
  • стратегії семплінгу та управління витратами на моніторинг.

Azure Monitor разом з Application Insights створюють надійну основу для відстеження здоров’я .NET-додатків. Адаптивна вибірка, ефективне профілювання та автоматизація сповіщень дозволяють зосередитись на розробці, довіривши моніторинг платформі.

Застосування описаних практик допоможе значно покращити якість моніторингу та оптимізувати витрати на його підтримку. Насамперед це стосується правильного налаштування збору даних та автоматизації реагування на проблеми.

Підписатися на новини

Чудово! Ми вже готуємо добірку актуальних новин для вас :)

Вибачте, щось пішло не так. Будь ласка, спробуйте ще раз.

* Обов'язкові поля

*Будь ласка, заповніть обов’язкові поля

Вакансії EPAM Ukraine у Київ | Львів | Харків | Дніпро | Вінниця | Івано-Франківськ | Одеса | Чернівці | Хмельницький | Рівне | Ужгород | Тернопіль | Луцьк за напрямком Java | JavaScript | .NET | DevOps | Experience Design | Software Testing | Business Analysis | Python| Big Data | Mobile | Solution Architect | Ruby on Rails у містах за напрямком Java вакансії Київ | Java вакансії Харків | Java вакансії Львів | Java вакансії Вінниця | Java вакансії Одеса | Java вакансії Івано-Франківськ | Java вакансії Чернівці | Java вакансії Хмельницький | Java вакансії Рівне | Java вакансії Ужгород | Java вакансії Тернопіль | Java вакансії Луцьк | JavaScript вакансії Київ | JavaScript вакансії Харків | JavaScript вакансії Львів | JavaScript вакансії Вінниця | JavaScript вакансії Одеса | JavaScript вакансії Івано-Франківськ | JavaScript вакансії Чернівці | JavaScript вакансії Хмельницький | JavaScript вакансії Рівне | JavaScript вакансії Ужгород | JavaScript вакансії Тернопіль | JavaScript вакансії Луцьк | DevOps вакансії Київ | DevOps вакансії Харків | DevOps вакансії Львів | DevOps вакансії Вінниця | DevOps вакансії Одеса | DevOps вакансії Івано-Франківськ | DevOps вакансії Чернівці | DevOps вакансії Хмельницький | DevOps вакансії Рівне | DevOps вакансії Ужгород | DevOps вакансії Тернопіль | DevOps вакансії Луцьк