Logging
Logging là một phần không thể thiếu trong bất kì mạng lưới hệ thống nào, nó giúp tất cả chúng ta lưu lại dấu vết, hoạt động của ứng dụng, giúp phân tích, điều tra bugs, bla bla…
Việc quản lý log sao cho hiệu quả vẫn là một bài toán cần phải giải khi mà trong một mạng lưới hệ thống lớn thì file log có thể lên tới vài chục GB, hay là trong mô hình microservices thì tất cả chúng ta có rất nhiều servers tương ứng với rất nhiều file logs.
Vào trong 1 ngày đẹp trời chẳng may mạng lưới hệ thống dính bug, cần vào xem log để điều tra, chẳng nhẽ thời điểm hiện tại tất cả chúng ta phải mò vào trong từng cái server một và xem từng dòng log trong cái đống 💩 to tổ bố đấy ư?
Không, tất nhiên là không rồi, vì tất cả chúng ta đã có những dụng cụ giúp quản lý log tập trung, trong đó nổi cộm nhất đó chính là ELK Stack (hay Elastic Stack)
ELK Stack
“ELK” là từ viết tắt của ba dự án nguồn mở: Elaticsearch, Logstash và Kibana. Trong số đó:
-
Elaticsearch: là một search engine được rất nhiều bạn hữu sử dụng, trong bộ ba này thì nó đóng góp vai trò là một store để chứa logs kiêm vai trò tìm kiếm và phân tích mạnh mẽ vốn có.
-
Logstash: đây là một dụng cụ sử dụng để thu thập, xử lý log được viết bằng Java. Nhiệm vụ chính của logstash là thu thập log sau đó chuyển vào Elastichsearch. Mỗi dòng log của logstash được lưu trữ đưới dạng json.
-
Kibana: là dụng cụ được cho phép trực quan hoá tài liệu từ Elasticsearch, ở đây đó chính là đống logs của tất cả chúng ta.
Luồng hoạt động
- Trước nhất, log sẽ tiến hành đưa đến Logstash. (Thông qua nhiều hàng phố, ví dụ như server gửi UDP request chứa log tới URL của Logstash, hoặc Beat đọc file log và trình lên Logstash)
- Logstash sẽ đọc những log này, thêm những thông tin như thời kì, IP, parse tài liệu từ log (server nào, độ nghiêm trọng, nội dung log) ra, sau đó ghi xuống database là Elasticsearch.
- Khi muốn xem log, người dùng vào URL của Kibana. Kibana sẽ đọc thông tin log trong Elasticsearch, hiển thị lên giao diện cho những người dùng query và xử lý.
Với những mạng lưới hệ thống hoặc ứng dụng nhỏ, ta không cần giao mổ trâu đi giết gà làm gì, cứ ghi log ra file hoặc stdout của mạng lưới hệ thống là được
Tuy nhiên với mạng lưới hệ thống lớn, gồm nhiều services lại là mẩu chuyện khác.
- Quản lý log tập trung: Thay vì phải lọ mọ vào từng servers xem log thì tất cả chúng ta chỉ có mở kibana trên trình duyệt web là có thể xem được log của tất cả những servers rồi
- Dễ dàng tích hợp: dù bạn có dùng Nginx hay Apache, dùng MSSQL, MongoDB hay Redis, Logstash đều phải sở hữu thể đọc hiểu và xử lý log của bạn nên việc tích hợp rất dễ dàng.
- Search và filter mạnh mẽ: Elasticsearch được cho phép lưu trữ thông tin kiểu NoSQL, tương trợ luôn Full-Text Search nên việc query log rất dễ dàng và mạnh mẽ, trong cả với tài liệu log cực kì lớn.
- Scale dễ dàng: Khi muốn xử lý nhiều log hơn, tất cả chúng ta chỉ việc tăng số nodes của Elasticsearch hoặc Logstash lên là xong
- Dễ dàng triển khai và hoàn toàn miễn phí: Tất cả chúng ta có thể chạy bộ 3 này trên 1 server duy nhất, và k tốn tiền bản quyền vì các pm này đều là mã nguồn mở + miễn phí.
- Cộng đồng mạnh, tutorial nhiều.
Hi vọng qua nội dung bài viết này các bạn cũng có thể hiểu tổng quan ELK Stack là gì và vì sao tất cả chúng ta cần nó. Ở nội dung bài viết tiếp theo mình sẽ hướng dẫn cách setup một server chạy ELK stack ăn liền với Docker.