CodeGym /Kurslar /C# SELF /Logların toplanması: Seq

Logların toplanması: SeqApplication Insights

C# SELF
Səviyyə , Dərs
Mövcuddur

1. Giriş

Praktikaya keçməzdən əvvəl, niyə xarici sistemlərə log toplama üçün ehtiyac olduğunu anlayaq. Tutaq ki, sizin tətbiq ev PC-də yox, production-da yerləşdirilib: yüzlərlə server, mikroxidmətlər, minlərlə istifadəçi, kiminsə şikayəti var ki "tətbiq ləngiyir". Belə log axınında lazım olan hadisəni tapmaq — saman yığınında iynə axtarmaq kimidir. Mərkəzləşdirilmiş log toplanması olmadan belə tətbiqləri debug etmək və dəstəkləmək demək olar ki, mümkün deyil. Elə məhz burada səhnəyə SeqApplication Insights çıxır.

Seq: rahat UI, sürətli axtarış, real vaxt

Seq — strukturlaşdırılmış logların mərkəzləşdirilmiş toplanması və analizi üçün sistemdir, .NET və Serilog-a uyğunlaşdırılıb. Bu sadəcə log fayllarını yığan servis deyil, güclü alətdir: real vaxtda log axınlarını görürsünüz, filterləyirsiniz, sahələr üzrə axtarış edirsiniz, alertlər qurursunuz. Seq-i həm lokal, həm də buludda işlədə bilərsiniz.

Niyə Seq-i seçirlər?

  • .NET və Serilog üçün optimallaşdırılıb, "qutudan çıxan kimi" işləyir.
  • Hər hansı mesaj xüsusiyyəti üzrə heyrətamiz sürətli axtarış və filtrasiya.
  • Sadə və istifadəsi rahat web-interfeys.
  • Lazımsız bürokratiya olmadan lokalda, hətta notebook-da da işə salmaq olur.

Sadə arxitektura necə görünür?


+--------------+        +-------------+         +-------------+
| .NET-tətbiq  | --(log)| Serilog     | --(http)|     Seq     |
+--------------+        +-------------+         +-------------+
                                    |            ^ 
                                    |            | 
             (axtarış, filtrlər,     <----[Web UI] 
              alertlər, inteqrasiyalar)

Tətbiq Serilog vasitəsilə strukturlaşdırılmış log yazır, Serilog onları Seq-ə göndərir. Seq-in web-interfeysində istədiyiniz hər şeyi edə bilərsiniz.

2. Serilog-ın Seq-lə inteqrasiyası

Seq-in quraşdırılması

Seq-i lokalda sürətlə sınamaq olar, hətta ev təcrübələri üçün. Məsələn, Windows istifadə edirsinizsə, rəsmi saytdan Seq-i yükləyin.

  1. Seq-i yükləyin və quraşdırın.
  2. Quraşdırmadan sonra web-interfeysi açın (adətən http://localhost:5341).
  3. Hazırdır! İndi Seq-ə log göndərməyi konfiqurasiya edin.

Serilog-ın Seq-lə inteqrasiyası

NuGet paketin quraşdırılması:

dotnet add package Serilog.Sinks.Seq

Program.cs-də logging konfiqurasiyasına nümunə:

using Serilog;

public class Program
{
    public static void Main(string[] args)
    {
        // Serilog-i Seq-ə log göndərmək üçün konfiqurasiya edin
        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Information()
            .WriteTo.Console()
            .WriteTo.Seq("http://localhost:5341") // Sizin Seq-serverin URL-i
            .CreateLogger();

        Log.Information("Tətbiq işə düşür");
        // ... Tətbiqin qalan kodu ...

        Log.CloseAndFlush();
    }
}

Əgər hər şey düzgün qurulubsa, tətbiqdən gələn loglarınız Seq-ə axmağa başlayacaq.

Strukturlaşdırılmış hadisə nümunəsi

Log.Information("İstifadəçi {User} daxil oldu {Time}", userName, DateTime.UtcNow);

İndi Seq-də müəyyən istifadəçinin bütün daxilolmalarını axtarmaq olar:

User == 'vasya'

Filtrləmə və axtarış

Seq hadisələri istənilən sahə və dəyərə görə filtrasiya edə bilir. Məsələn, bu günün bütün xəta mesajlarını görmək istəyirsiniz? Sadəcə belə bir filter qoyun:

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

Şərtləri kombinə etmək olar — çox rahatdır!

Alerlər və inteqrasiyalar

Seq alertlər yaratmağı dəstəkləyir: məsələn, əgər xətaların sayı müəyyən həddi keçərsə, sizə email gələcək, webhook çağırılacaq və ya Slack-ə mesaj göndərmək olar.

Hansı başqa imkanlar var?

  • CI/CD sistemləri ilə inteqrasiya, test loglarını avtomatik toplamaq üçün.
  • Özəl Dashboards yaratmaq imkanı (əlavə ödənişlə).
  • Logların analizi üçün pluginlər, əməliyyatların avtomatlaşdırılması (məsələn, çökmə zamanı avtomatik bug yaratmaq).
  • Grafana/Prometheus ilə inteqrasiya pluginləri vasitəsilə.

Seq-i qurarkən tipik səhvlər

Tez-tez rast gəlinən problemlərdən biri — Serilog-də Seq serverinin URL-ini düzgün göstərməmək, ya da Seq serverinin yanlış portda dinləməsidir.

Başqa bir problem — əgər Seq Docker-da və ya serverdə işləyirsə, daxil olan əlaqələr üçün port açılmır. Tətbiqdən Seq-ə portun əlçatan olub-olmadığını yoxlamaq lazımdır.

3. Application Insights: .NET üçün telemetriya, bulud və bir az sehr

Application Insights (və ya "App Insights") — Microsoft Azure tərəfindən təqdim olunan tətbiq monitorinqi və analizinin bulud platformasıdır. Bu sadəcə log toplamaq deyil, həm də anomaliyaların avtomatik aşkarlanması, istifadəçi analitikası, asılılıqların monitorinqi, sorğular, xarici API-lər və əlbəttə ki, real vaxtda vizuallaşdırmadır. Azure Application Insights enterprise .NET dünyasında standartdır.

Application Insights-ın üstünlükləri nədir?

  • Ayırıcı server quraşdırmağa ehtiyac yoxdur: hər şey buludda.
  • .NET, ASP.NET, Azure, Visual Studio ilə dərin inteqrasiya.
  • Avtomatik olaraq yalnız loglarınızı deyil, metrikləri, xətaları, sorğuları, SQL sorğularını da toplayır.
  • Dashboardlar qurmaq, SLA izləmək, anomaliyaları tapmaq, distributed tracing analiz etmək imkanı.

Application Insights necə işləyir?


+--------------+        +-------------------+         +---------------------+
| .NET-tətbiq  | --(SDK)| AppInsights SDK   | --(https)| Azure Application   |
+--------------+        +-------------------+         | Insights (bulud)   |
                                                       +---------------------+
                          ^         |
                        (W3C Trace   +----> Analitika, axtarış, panellər
                         Context)

SDK ilə qoşulmuş tətbiq telemetriyayı Azure buluduna göndərir, analitika və vizuallaşdırmanı Azure portalında edirsiniz.

Application Insights-ı .NET tətbiqinə inteqrasiya etmək

Variant 1: Tez və asan

Əgər sizin ASP.NET Core tətbiqiniz varsa, hər şey çox sadədir:

dotnet add package Microsoft.ApplicationInsights.AspNetCore

Program.cs-də:

builder.Services.AddApplicationInsightsTelemetry("<sizin_instrument_açarınız>");

Əgər konsol və ya desktop tətbiqiniz varsa:

dotnet add package Microsoft.ApplicationInsights

İnitializasiya:

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

var telemetryConfig = TelemetryConfiguration.CreateDefault();
telemetryConfig.InstrumentationKey = "<sizin_instrument_açarınız>";
var telemetryClient = new TelemetryClient(telemetryConfig);

telemetryClient.TrackTrace("Hello from Application Insights!");
telemetryClient.TrackException(new Exception("Ups, səhv baş verdi!"));

Instrumentation key-i Azure portalında Application Insights resursunu yaratdıqdan sonra almalısınız.

Strukturlaşdırılmış məlumatı necə göndərmək olar?

Hər trace-ə property əlavə edə bilərsiniz:

telemetryClient.TrackTrace("İstifadəçi daxil oldu", 
    new Dictionary<string, string> { ["User"] = userName }
);

Nümunə: istifadəçi əməliyyatlarının loglanması

Tutaq ki, istifadəçinin daxil olmasını loglamaq istəyirsiniz:

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

İndi həm hadisə, həm də bütün property-lər portalda görünəcək.

4. Faydalı nüanslar

Application Insights-da nə görürsünüz?

  • Tətbiqlərə ümumi baxış: daxilolmalar, xətalar, asılılıqlar (məsələn, SQL sorğuları).
  • Log axtarışı: istənilən hadisə, property üzrə filtrasiya.
  • Vizuallaşdırma: qrafiklər, dashboardlar.
  • Tracing: çağırış zəncirini və hər əməliyyatın nə qədər vaxt apardığını görmək mümkündür.
  • Alerting: istənilən şərtlərə görə alertlər qurmaq.

Application Insights-ın strukturuna qısaca

Obyekt Təsvir
Trace Mətn mesajı (sadə log).
Event Sərbəst hadisə (məsələn, "Alış").
Exception Səhv / istisna haqqında məlumat.
Dependency Xarici çağırış (SQL, HTTP sorğu və s.).
Metric Say və ya digər ədədi göstəricilər (məsələn, count).
Request İstifadəçi sorğusu (veb tətbiqləri üçün).

Nümunə: Application Insights-da səhv axtarışı

Azure portalında sadə bir sorğu (Kusto Query Language — KQL) qurmaq olar:

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

Bu sizə son sutkada baş verən bütün timeout-ları, onların detalları ilə göstərəcək.

Application Insights-ın məhdudiyyətləri/nüansları

  • İstifadə üçün Azure hesabı lazımdır. Pulsuz variant var, amma limitlərlə.
  • Bəzən log göndərmə ilə UI-da görünməsi arasında bir neçə dəqiqə gecikmə ola bilər.
  • Çox "xüsusi gizli" layihələr üçün bu buluddur, lokal installasiya deyil.
  • Trace-ləri həddindən artıq çox istifadə etsəniz, günlük limitləri tez yeyə bilərsiniz.

5. SeqApplication Insights-ın müqayisəsi

Seq Application Insights
Harada saxlanılır Lokal server (və ya bulud) Azure buludu
Qiymət Lokalda pulsuz/ödənişli Pulsuz plan var, Azure üçün ödənişli
Ən uyğun istifadə .NET tətbiqləri, lokal CI Hər növ tətbiq, prod/enterprise
UI/Axtarış Çox rahat, filtrasiya Güclü, analitika, dashboardlar
Alerting Daxili Mürəkkəb şərtlər, Azure ilə inteqrasiya
İnteqrasiya Serilog, digər sinks SDK-lar üçün ASP.NET, .NET, JS və s.
Fleksibilik Siz özünüz idarə edirsiniz Hər şey Microsoft-un nəzarətində

Bilikləri praktikaya tətbiq etmək

SeqApplication Insights haqqında bilikləriniz yalnız production üçün faydalı olmayacaq, eyni zamanda development və test mərhələlərində (məsələn, autotest davranışını analiz etmək üçün), mikroxidmətlə işləyərkən bütün mənzərəni görmək üçün əvəzsizdir. Müsahibələrdə tez-tez belə sual verirlər: "Prod mühitində problemləri tez tapmaq üçün log toplamağı necə təşkil edərdiniz?" — indi cavabınız olacaq!

Üstəlik, bir çox müasir şirkətlər belə sistemlərdən istifadə edərək tam DevOps zəncirləri qururlar: Continuous Delivery, alert-lərə görə avtomatik bug yaradılması və s. Log toplama sistemi sadəcə "Console.WriteLine sətiri hara gedir" deyil — o, tətbiqinizin həqiqi "qara qutusu" və monitorudur.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION