Serilog Sink - chọn Sink đúng để tối ưu Logging và tối ưu hệ thống!

Công nghệ - 01/07/2025 07:19:13

💡 Logging sai cách = Bottleneck cho hệ thống! 
Bạn hãy chắc chắn mình đang chọn đúng Sink Log cho ứng dụng.

Bài viết trước tôi đã chia sẻ về Serilog và logging cấu trúc, chúng ta đã tìm hiểu về cách Serilog hỗ trợ logging có cấu trúc và các lợi ích của nó. Hôm nay, chúng ta sẽ đi sâu vào các sink log mà Serilog cung cấp, mỗi loại có ưu điểm, nhược điểm, hiệu năng và yêu cầu riêng. Đây là thông tin quan trọng để bạn chọn sink phù hợp cho ứng dụng của mình, đặc biệt trong môi trường Production hoặc dev.

Sink log là nơi Serilog gửi hoặc lưu trữ log, từ console đơn giản đến các hệ thống phức tạp như Azure Application Insights hay ElasticSearch... việc chọn sink đúng không chỉ ảnh hưởng đến hiệu năng mà còn đến khả năng giám sát và phân tích log. Hãy cùng khám phá từng sink dưới đây nhé.


Các Sink Log phổ biến và phương án áp dụng

Các sink log phổ biến hay dùng có thể kể tới ở đây như:

  • Console: Ghi log ra console, hữu ích cho việc debug và theo dõi nhanh trong quá trình phát triển cũng như Production.
  • File: Ghi log vào một file văn bản, thường được sử dụng để lưu trữ log trong môi trường Production.
  • MSSqlServer: Ghi log vào bảng trong cơ sở dữ liệu MS SQL Server.
  • MongoDB: Ghi log vào MongoDB.
  • ApplicationInsights: Gửi log tới Azure Application Insights, một dịch vụ theo dõi ứng dụng của Microsoft.
  • Async: Một sink giúp ghi log bất đồng bộ, cải thiện hiệu năng ứng dụng.
  • Seq: Ghi log vào Seq, một công cụ thu thập và trực quan hóa log tập trung.
  • Elasticsearch: Ghi log vào Elasticsearch, và sử dụng Kibana để theo dõi log tập trung.
  • Slack, Discord: Gửi log lên chat message mà tôi thường hay sử dụng.
  • ...

 


Sink Console

Sink Console ghi log ra console (cửa sổ terminal), rất hữu ích cho việc debug và theo dõi nhanh trong quá trình phát triển. Đây là lựa chọn phổ biến khi bạn cần kiểm tra log ngay lập tức mà không cần lưu trữ lâu dài.

Trong trường hợp triển khai trên môi trường Production, bạn có thể sử dụng thêm công cụ lưu lại log console nếu cần thiết.

Ưu điểm

  • Dễ sử dụng, không cần cấu hình phức tạp, chỉ cần một dòng code.
  • Hữu ích cho việc debug nhanh, đặc biệt trong môi trường phát triển.
  • Hỗ trợ các theme màu sắc, dễ đọc hơn với .WriteTo.Console(theme: AnsiConsoleTheme.Code).

 

Nhược điểm:

  • Không phù hợp cho môi trường Production, vì log sẽ mất khi ứng dụng đóng.
  • Cần thêm công cụ ngoài để theo dõi log console trên Production.
  • Chỉ hữu ích cho việc theo dõi tạm thời, không hỗ trợ lưu trữ lâu dài.

 

Hiệu năng:

  • Hoạt động đồng bộ, có thể làm chậm ứng dụng nếu log quá nhiều, đặc biệt trong môi trường high-volume logging. Để cải thiện, có thể kết hợp với sink Async (xem phần sau).

 

Package: Serilog.Sinks.ConsoleSerilog.Sinks.ColoredConsole

Nội dung bài viết

Sink File

Sink File ghi log vào một file văn bản, thường được sử dụng để lưu trữ log trong môi trường sản xuất. Hỗ trợ rolling log dựa trên thời gian hoặc kích thước file, giúp quản lý dung lượng hiệu quả.

Ưu điểm:

  • Lưu trữ log lâu dài, phù hợp cho môi trường sản xuất.
  • Hỗ trợ rolling log (ví dụ: hàng ngày, hàng giờ) để quản lý dung lượng file, với các tùy chọn như fileSizeLimitBytes và retainedFileCountLimit.
  • Có thể xuất log dưới dạng JSON với package Serilog.Formatting.Compact.

 

Nhược điểm:

  • Cần quản lý dung lượng đĩa, đặc biệt nếu log không được rolling đúng cách.
  • Có thể bị mất log nếu file bị lỗi hoặc không có quyền ghi.
  • Cần quyền ghi file, và cần quản lý chính sách rolling log để tránh đầy đĩa.

 

Hiệu năng:

  • Có thể chậm nếu ghi log đồng bộ với file lớn. Có thể cải thiện bằng cách bật buffered: true hoặc kết hợp với sink Async để đẩy ghi log ra background thread.

 

Cài đặt package Serilog.Sinks.File, link repo

Nội dung bài viết

Hoặc thay vì viết trực tiếp trong code, ta có thể linh động hơn bằng cách sử dụng json file và đọc nó từ cấu hình.

Nội dung bài viết

Trong appsettings.json file, thêm node Serilog node, và viết thêm cấu hình log ra file:

Nội dung bài viết

Sink MSSqlServer

Sink MSSqlServer ghi log vào bảng trong cơ sở dữ liệu SQL Server hoặc Azure SQL, cho phép query và phân tích log bằng SQL, rất hữu ích cho DBA và các hệ thống cần tích hợp database.

Ưu điểm:

  • Cho phép query và phân tích log mạnh mẽ bằng SQL, tích hợp tốt với hệ thống database hiện có.
  • Hỗ trợ batching với kích thước mặc định 50 rows và timeout 5 giây, tối ưu cho high-volume logging.
  • Có thể tự động tạo bảng nếu bật AutoCreateSqlTable.

 

Nhược điểm:

  • Có thể chậm hơn so với file log do overhead của database.
  • Cần một server SQL Server hoặc Azure SQL, đòi hỏi chi phí và bảo trì.
  • Không hợp lý khi log lỗi cho database trong trường hợp database log lỗi lúc đó.

 

Hiệu năng:

  • Có thể tối ưu bằng cách tăng BatchPostingLimit (kích thước batch) và sử dụng UseSqlBulkCopy để cải thiện tốc độ ghi. Trong một bài kiểm tra, tăng batch size từ 50 lên 1000 đã tăng tốc độ từ 14,000 rows/giây lên gần 43,000 rows/giây

 

Package: cài đặt Serilog.Sinks.MSSqlServer

Nội dung bài viết

Sink MongoDB

Sink MongoDB ghi log vào cơ sở dữ liệu MongoDB, hỗ trợ cả JSON và BSON, phù hợp cho các hệ thống cần linh hoạt trong việc query và phân tích log.

Ưu điểm:

  • Linh hoạt trong việc query và phân tích log bằng MongoDB, đặc biệt phù hợp cho logging quy mô lớn.
  • Hỗ trợ capped collection để tối ưu hiệu năng, với tùy chọn như cappedMaxSizeMb và cappedMaxDocuments.

 

Nhược điểm:

  • Cần một server MongoDB, có thể gây overhead so với file log.
  • Cần cấu hình đúng để đảm bảo hiệu năng, đặc biệt với lượng log lớn.

 

Hiệu năng:

  • Có thể tối ưu bằng cách sử dụng capped collection và điều chỉnh batch size. Hỗ trợ rolling log collection và expire TTL để quản lý log cũ.

 

Package Serilog.Sinks.MongoDB

Nội dung bài viết

Nội dung bài viết

Sink ApplicationInsights

Sink ApplicationInsights gửi log tới Azure Application Insights, một dịch vụ giám sát ứng dụng của Microsoft, hỗ trợ monitoring thời gian thực và alerting.

Ưu điểm:

  • Tích hợp với Azure Application Insights cho monitoring và analytics nâng cao, hỗ trợ real-time alerting.
  • Gửi log dưới dạng EventTelemetry, TraceTelemetry hoặc ExceptionTelemetry, dễ dàng phân tích.

 

Nhược điểm:

  • Cần Azure subscription và setup Application Insights, có thể phát sinh chi phí dựa trên lượng log.
  • Yêu cầu cấu hình connection string hoặc instrumentation key.

 

Hiệu năng:

  • Hoạt động bất đồng bộ, nhưng cần đảm bảo flush log đúng cách khi shutdown để tránh mất log. Có thể mất log nếu ứng dụng kết thúc đột ngột

 

Package Serilog.Sinks.ApplicationInsights

Nội dung bài viết

Nội dung bài viết

Sink Seq

Sink Seq ghi log vào Seq, một công cụ thu thập và trực quan hóa log tập trung, hỗ trợ search, analysis và alerting mạnh mẽ.

Ưu điểm:

  • Centralized logging với khả năng query và visualization mạnh mẽ, hỗ trợ API key cho security và dynamic properties.
  • Hỗ trợ dynamic log level control với LoggingLevelSwitch, phù hợp cho môi trường sản xuất.

 

Nhược điểm:

  • Cần Seq server, có thể phát sinh chi phí cho license trong môi trường production.
  • Yêu cầu cấu hình server URL và API key nếu cần authentication.

 

Hiệu năng:

  • Sử dụng HTTP để gửi log, có thể cấu hình batching và buffering để tối ưu. Cần đảm bảo flush log khi shutdown

 

Cài đặt package Serilog.Sinks.Seq

Nội dung bài viết

Nội dung bài viết

Sink Discord

Sink Discord gửi log tới Discord, một nền tảng giao tiếp nhóm khác, hỗ trợ thông báo real-time trong server Discord.

Ưu điểm:

  • Cho phép thông báo real-time về log trong Discord, hữu ích cho giao tiếp nhóm và alerting trong server Discord.
  • Dễ cấu hình với webhook, hỗ trợ gửi log dưới dạng embed.

 

Nhược điểm:

  • Giới hạn bởi khả năng của Discord webhooks, có thể không hỗ trợ đầy đủ tính năng của Discord API.
  • Có thể gặp rate limit dựa trên API của Discord.

 

Hiệu năng:

  • Tương tự các sink dựa trên webhook, có thể tối ưu bằng cách kết hợp với sink Async để giảm tải.

 

Cài đặt package Serilog.Sinks.Discord

Nội dung bài viết

Nội dung bài viết

Sink ElasticSearch

Ưu điểm:

  • Tích hợp với ElasticSearch cho khả năng query, aggregation và visualization nâng cao với Kibana.
  • Phù hợp cho hệ thống logging quy mô lớn, hỗ trợ phân tích log sâu.

 

Nhược điểm:

  • Cần ElasticSearch instance, có thể phát sinh chi phí cho license trong môi trường production.
  • Yêu cầu cấu hình indexing và mapping để tối ưu hiệu năng.

 

Hiệu năng:

  • Có thể xử lý lượng log lớn, nhưng cần cấu hình đúng để tránh bottleneck, đặc biệt với index format và batch size.

 

Cài đặt package Serilog.Sinks.Elasticsearch

Nội dung bài viết

Lời kết

Mỗi sink trong Serilog có ưu điểm và nhược điểm riêng, phù hợp với các trường hợp sử dụng khác nhau. Tùy thuộc vào nhu cầu của ứng dụng, bạn có thể chọn sink phù hợp, ví dụ như Console cho debug nhanh, File cho lưu trữ lâu dài, hoặc ApplicationInsights, Seq, Elasticsearch+Kinana, hay Slack, Discord cho giám sát thời gian thực.

Với kinh nghiệm từ bản thân, tôi khuyến khích bạn cân nhắc hiệu năng, chi phí và yêu cầu bảo trì khi chọn sink. Hy vọng bài viết này sẽ giúp bạn tối ưu hóa hệ thống logging của mình.

Hãy chia sẻ ý kiến hoặc kinh nghiệm của bạn về Serilog và các sink log trong phần bình luận nhé! Tôi luôn sẵn sàng thảo luận để cùng nhau học hỏi và phát triển.

Happy coding :)

Tài liệu tham khảo:

 

/Son Do - I share real-world lessons, team building & developer growth.

#dotnet #dotnetcore #serilog #logging #observability #developers #techlead #seniorsoftwaredeveloper #wecommit100xshare #1percentbetter

Nguồn: Son Do

Công nghệ - 19/08/2025 21:13:07

Tìm hiểu cách xây dựng hệ thống phát hiện ngôn ngữ ký hiệu theo thời gian thực bằng AI, sử dụng DETR để tăng cường khả năng tiếp cận và đổi mới. Kết nối lời nói và cử chỉ.

Công nghệ - 18/08/2025 13:38:25

Tối ưu hóa các hệ thống RAG bằng cách tận dụng siêu dữ liệu để truy xuất thông tin chính xác và nhanh chóng hơn, giải quyết các thách thức về dữ liệu dư thừa hoặc lỗi thời với công cụ LangExtract nguồn mở. Khám phá cách LangExtract sử dụng các mô hình ngôn ngữ tiên tiến để trích xuất và cấu trúc siêu dữ liệu, tạo ra một quy trình truy xuất hợp lý và hiệu quả.

Công nghệ - 01/08/2025 07:00:00

Gỡ lỗi LLM rất quan trọng vì quy trình làm việc của chúng phức tạp và liên quan đến nhiều phần như chuỗi, lời nhắc, API, công cụ, trình truy xuất, v.v.

Công nghệ - 19/06/2025 03:05:09

Code xong chạy được là chưa đủ – phải biết khi nào nó "chết" nữa chứ 😅

Bạn đang triển khai ứng dụng trên Kubernetes, Docker hay môi trường production nào? Và bạn từng "toát mồ hôi" vì service chết mà không ai báo?

Công nghệ - 16/07/2025 13:41:17

Bạn có bao giờ tự hỏi tại sao trang web của mình tải chậm, đặc biệt là trên các thiết bị di động? Rất có thể, thủ phạm chính là những hình ảnh chưa được tối ưu. May mắn thay, có một công cụ miễn phí và cực kỳ hữu ích có thể giúp bạn giải quyết vấn đề này: Responsive Image Linter – một tiện ích mở rộng trên Chrome. Video này sẽ giới thiệu chi tiết về công cụ này, giúp bạn xác định và tối ưu hóa các hình ảnh gây tốn hiệu năng trên trang web của mình.

Công nghệ - 27/06/2025 03:15:44

⏳ Chậm 3 giây – Mất 50% người dùng. Đó không còn là lý thuyết, đó là thực tế.

Công nghệ - 11/12/2025 15:05:29

[Góc chuyện nghề] bán account game để đi học nghệ - bạn dám không?

Làm nghề 20 năm, gặp nhiều sinh viên, nhưng chiều qua tôi khá bất ngờ với một cậu em tên Quang. Em Quang muốn theo nghề BA và mong muốn lương 20 triệu sau khi làm việc 1.5 năm tới 2 năm trong nghề.

Công nghệ - 22/09/2025 08:59:20

Dừng ngay việc dùng DateTime.Now trong APIs, đó là ổ lỗi tiềm ẩn trong hệ thống của bạn

⏱️ Tôi từng nghĩ DateTime.Now là một thứ vô hại, đơn giản và tiện lợi, cho đến khi gặp những vấn đề về múi giờ. Những lỗi "tưởng chừng nhỏ" này lại chính là nguồn cơn của sự thất vọng và tốn kém thời gian cho nhiều đội ngũ phát triển.

Công nghệ - 14/03/2025 04:30:32

💡Bạn muốn tăng tốc tìm kiếm toàn văn nhưng hạ tầng hạn chế? Lucene có thể là giải pháp bất ngờ! Bài viết tiết lộ cách nó vượt trội hơn SQL Server, tối ưu truy vấn và những ứng dụng thực tế đáng khám phá.