CodeGym /Các khóa học /C# SELF /Thu thập logs: Seq và Application Insights

Thu thập logs: Seq và Application Insights

C# SELF
Mức độ, Bài học
Có sẵn

1. Giới thiệu

Trước khi nhảy vào phần thực hành, ta nên hiểu vì sao cần hệ thống thu thập logs bên ngoài. Giả sử app của bạn chạy không phải trên máy cá nhân mà ở production: hàng trăm server, microservices, nhiều user, có người kêu "ứng dụng bị ì". Tìm event cần thiết trong dòng logs khổng lồ như tìm kim giữa đống rơm. Không có việc thu logs tập trung thì debug và vận hành gần như bất khả thi. Đó là lúc Seq và Application Insights lên sàn.

Seq: UI dễ chịu, tìm cực nhanh, real-time

Seq là hệ thống thu và phân tích logs có cấu trúc, tối ưu cho .NET và Serilog. Không chỉ là cái nơi dump file log, nó là công cụ mạnh: bạn thấy luồng logs real-time, filter, tìm theo property, tạo alert. Seq có thể deploy local hoặc trên cloud.

Tại sao người ta chọn Seq?

  • Tối ưu cho .NET và Serilog, chạy "out of the box".
  • Tìm kiếm và lọc theo bất kỳ property nào cực nhanh.
  • Giao diện web đơn giản và trực quan.
  • Có thể deploy local nhanh gọn, thậm chí trên laptop để thử nghiệm.

Kiến trúc đơn giản nhìn thế nào?


+--------------+        +-------------+         +-------------+
| .NET-ứng dụng | --(log)| Serilog     | --(http)|     Seq     |
+--------------+        +-------------+         +-------------+
                                    |            ^ 
                                    |            | 
             (tìm kiếm, lọc,         <----[Web UI] 
              alert, tích hợp)

Ứng dụng viết logs có cấu trúc qua Serilog, Serilog gửi vào Seq. Trong web UI của Seq bạn làm mọi thứ bạn muốn.

2. Tích hợp Serilog với Seq

Cài đặt Seq

Seq có thể thử nhanh local cho mấy thí nghiệm cá nhân. Ví dụ trên Windows, tải Seq từ trang chính thức.

  1. Tải Seq và cài đặt.
  2. Sau khi cài mở giao diện web (thường http://localhost:5341).
  3. Xong! Giờ chỉ việc cấu hình gửi logs vào Seq thôi.

Tích hợp Serilog với Seq

Cài gói NuGet:

dotnet add package Serilog.Sinks.Seq

Ví dụ cấu hình logging trong Program.cs:

using Serilog;

public class Program
{
    public static void Main(string[] args)
    {
        // Cấu hình Serilog để gửi logs lên Seq
        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Information()
            .WriteTo.Console()
            .WriteTo.Seq("http://localhost:5341") // URL của server Seq của bạn
            .CreateLogger();

        Log.Information("Ứng dụng đang khởi động");
        // ... Phần code còn lại của ứng dụng ...

        Log.CloseAndFlush();
    }
}

Nếu cấu hình đúng, logs từ app của bạn sẽ bắt đầu chảy vào Seq.

Ví dụ event có cấu trúc

Log.Information("Người dùng {User} đã đăng nhập lúc {Time}", userName, DateTime.UtcNow);

Trong Seq giờ bạn có thể tìm tất cả login của user cụ thể:

User == 'vasya'

Lọc và tìm kiếm

Seq lọc sự kiện theo bất kỳ field và giá trị nào. Ví dụ muốn xem tất cả lỗi hôm nay? Dùng filter:

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

Bạn có thể kết hợp điều kiện — rất tiện!

Alerts và tích hợp

Seq có thể tạo alert: ví dụ nếu số lỗi vượt ngưỡng, nó gửi mail, gọi webhook, hoặc đẩy tin vào Slack.

Còn những khả năng gì nữa?

  • Tích hợp với CI/CD để thu thập logs test tự động.
  • Tạo custom Dashboards (có thể mất phí).
  • Plugins phân tích log, tự động hóa (ví dụ tạo bug ticket khi có crash).
  • Tích hợp với Grafana/Prometheus qua plugin.

Lỗi hay gặp khi cấu hình Seq

Một lỗi phổ biến là quên gõ đúng URL server Seq trong Serilog, hoặc Seq đang nghe ở cổng khác.

Lỗi khác là không mở port cho kết nối inbound nếu Seq chạy trong Docker hoặc trên server. Nên kiểm tra khả năng truy cập port từ app tới Seq.

3. Application Insights: telemetry cho .NET, cloud và "phù phép"

Application Insights (hay "App Insights") là nền tảng giám sát và phân tích ứng dụng trên Microsoft Azure. Không chỉ thu logs, mà còn phát hiện anomaly tự động, phân tích usage, monitor dependency, requests, API bên ngoài — và dĩ nhiên có visualization realtime. Azure Application Insights là chuẩn trong hệ enterprise .NET.

Ưu điểm của Application Insights

  • Không cần cài server riêng: mọi thứ trên cloud.
  • Tích hợp sâu với .NET, ASP.NET, Azure, Visual Studio.
  • Tự động thu không chỉ logs mà cả metrics, exceptions, requests, SQL queries.
  • Được build dashboard, monitor SLA, phát hiện anomaly, phân tích distributed tracing.

Application Insights hoạt động thế nào?


+--------------+        +-------------------+         +---------------------+
| .NET-ứng dụng | --(SDK)| AppInsights SDK   | --(https)| Azure Application   |
+--------------+        +-------------------+         | Insights (đám mây) |
                                                       +---------------------+
                          ^         |
                        (W3C Trace   +----> Phân tích, tìm kiếm, dashboard
                         Context)

Ứng dụng có SDK gửi telemetry lên Azure cloud, bạn phân tích và visualize trên portal Azure.

Tích hợp Application Insights với ứng dụng .NET

Option 1: Nhanh và đơn giản

Nếu bạn có app ASP.NET Core, cực kỳ đơn giản:

dotnet add package Microsoft.ApplicationInsights.AspNetCore

Trong Program.cs:

builder.Services.AddApplicationInsightsTelemetry("<khoa_cua_ban>");

Còn nếu bạn có app console hoặc desktop:

dotnet add package Microsoft.ApplicationInsights

Khởi tạo:

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

var telemetryConfig = TelemetryConfiguration.CreateDefault();
telemetryConfig.InstrumentationKey = "<khoa_cua_ban>";
var telemetryClient = new TelemetryClient(telemetryConfig);

telemetryClient.TrackTrace("Xin chào từ Application Insights!");
telemetryClient.TrackException(new Exception("Ối, có lỗi xảy ra!"));

Instrumentation key lấy được từ portal Azure sau khi tạo resource Application Insights.

Cách gửi dữ liệu có cấu trúc?

Bạn có thể thêm properties vào mỗi trace:

telemetryClient.TrackTrace("Người dùng đã đăng nhập", 
    new Dictionary<string, string> { ["User"] = userName }
);

Ví dụ: logging hành động người dùng

Giả sử bạn muốn log hành động login:

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

Bây giờ không chỉ có event mà mọi property đều hiển thị trong portal.

4. Mẹo hữu ích

Bạn thấy gì trong Application Insights?

  • Tổng quan ứng dụng: entry, exceptions, dependencies (ví dụ SQL queries).
  • Tìm kiếm logs: mọi event, filter theo properties.
  • Visualization: graphs, dashboards.
  • Tracing: thấy chuỗi gọi và thời gian từng operation.
  • Alerting: cấu hình alert theo bất kỳ điều kiện nào.

Tóm tắt cấu trúc Application Insights

Đối tượng Mô tả
Trace Message dạng chuỗi (log thông thường).
Event Sự kiện tùy ý (ví dụ "Purchase").
Exception Thông tin về lỗi/exception.
Dependency Gọi bên ngoài (SQL, HTTP request, v.v.).
Metric Các số liệu (ví dụ, counts).
Request Yêu cầu người dùng (đối với web apps).

Ví dụ: tìm lỗi trong Application Insights

Trên portal Azure bạn có thể viết truy vấn đơn giản (Kusto Query Language — KQL):

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

Truy vấn này sẽ show tất cả timeout trong 24 giờ gần nhất, kèm thông tin chi tiết.

Hạn chế/ghi chú của Application Insights

  • Cần tài khoản Azure. Có free tier nhưng có giới hạn.
  • Thỉnh thoảng có delay giữa lúc gửi log và khi nó hiện lên UI — vài phút có thể xảy ra.
  • Nếu muốn "rất private" thì đó là dịch vụ cloud, không phải cài local.
  • Gửi quá nhiều trace có thể nhanh chóng đốt hết quota ngày.

5. So sánh Seq và Application Insights

Seq Application Insights
Nơi lưu trữ Server local (hoặc cloud) Đám mây Azure
Chi phí Free/paid, nếu chạy local Có tier miễn phí, trả tiền theo Azure
Ứng dụng phù hợp .NET apps, CI local Mọi loại app, prod/enterprise
UI/Tìm kiếm Rất tiện, filter Mạnh mẽ, analytics, dashboards
Alerting Built-in Điều kiện phức tạp, tích hợp sâu với Azure
Tích hợp Serilog, các sinks khác SDK cho ASP.NET, .NET, JS, v.v.
Độ linh hoạt Bạn tự chủ hoàn toàn Microsoft quản lý hầu hết

Áp dụng kiến thức vào thực tế

Kiến thức về Seq và Application Insights hữu dụng không chỉ ở prod mà còn ở dev/test (ví dụ debug hành vi autottest), khi làm việc với microservices muốn thấy bức tranh tổng. Phỏng vấn thường hỏi "Bạn sẽ tổ chức thu logs thế nào để nhanh tìm sự cố ở prod?" — giờ bạn có câu trả lời rồi!

Hơn nữa, nhiều công ty hiện dùng những hệ này để dựng cả chuỗi DevOps: Continuous Delivery, tạo bug tự động khi có alert, v.v. Hệ thống thu logs không chỉ là "nơi đi của dòng Console.WriteLine", mà là "black box" và monitor thực thụ cho app của bạn.

2
Nhiệm vụ
C# SELF, mức độ, bài học
Đã khóa
Tích hợp Application Insights để thu thập telemetry
Tích hợp Application Insights để thu thập telemetry
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION