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ə Seq və Application 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.
- Seq-i yükləyin və quraşdırın.
- Quraşdırmadan sonra web-interfeysi açın (adətən http://localhost:5341).
- 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. Seq və Application 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
Seq və Application 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.
GO TO FULL VERSION