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.
- Tải Seq và cài đặt.
- Sau khi cài mở giao diện web (thường http://localhost:5341).
- 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.
GO TO FULL VERSION