Trong khoảng năm năm qua, tôi đã đối mặt với nhiệm vụ thu thập logs, thường từ các codebase nhỏ đến trung bình. Gửi logs từ code không phải là vấn đề: Java và Go có sẵn thư viện cho việc này ngay từ đầu. Nhưng triển khai một hệ thống để thu thập chúng lại là một cơn đau đầu. Tôi hiểu rằng đây là một nhiệm vụ có thể giải quyết được (ngay cả trước ChatGPT, và bây giờ thậm chí còn dễ hơn). Tuy nhiên, tất cả các hệ thống ghi log chủ yếu hướng đến thế giới doanh nghiệp lớn và các yêu cầu của họ, thay vì các đội nhỏ hoặc các nhà phát triển đơn lẻ với một vài công cụ đơn giản, keo dán, và thời hạn "ngày hôm qua".
Khởi chạy ELK là một thách thức đối với tôi mỗi lần: một loạt các cài đặt, triển khai không đơn giản, và khi tôi vào giao diện người dùng, mắt tôi chạy loạn từ các tab. Với Loki và Graylog, nó dễ dàng hơn một chút, nhưng vẫn có nhiều tính năng hơn tôi cần. Đồng thời, việc phân tách logs giữa các dự án và thêm người dùng khác vào hệ thống để họ không thấy những gì họ không nên thấy, cũng không phải là quá trình rõ ràng nhất.
Vì vậy, khoảng một năm trước, tôi quyết định tạo hệ thống thu thập log của riêng mình. Một hệ thống dễ sử dụng và khởi chạy nhất có thể. Nó sẽ được triển khai trên máy chủ với một lệnh duy nhất, không cần cấu hình hoặc các tab không cần thiết trong giao diện. Đó là cách Log Bull ra đời, và bây giờ nó là mã nguồn mở: một hệ thống thu thập log cho các nhà phát triển với các dự án cỡ trung bình.
Mục lục:
Log Bull là một hệ thống thu thập log với trọng tâm là dễ sử dụng (cấu hình tối thiểu, tính năng tối thiểu, không cần cấu hình khi khởi động). Dự án hoàn toàn mã nguồn mở theo giấy phép Apache 2.0. Ưu tiên chính của tôi là tạo ra một giải pháp cho phép một nhà phát triển junior dễ dàng hiểu cách khởi động hệ thống, cách gửi logs đến nó và cách xem chúng trong khoảng 15 phút.
Các tính năng chính của dự án:
https://www.youtube.com/watch?v=8H8jF8nVzJE&embedable=true
Dự án được phát triển bằng Go và xây dựng trên OpenSearch.
Website dự án - https://logbull.com
GitHub dự án - https://github.com/logbull/logbull
P.S. Nếu bạn thấy dự án hữu ích và có tài khoản GitHub, vui lòng cho nó một sao ⭐️. Những ngôi sao đầu tiên rất khó thu thập. Tôi sẽ vô cùng biết ơn sự hỗ trợ của bạn!
Có ba cách để triển khai dự án: thông qua script .sh (mà tôi khuyên dùng), thông qua Docker và thông qua Docker Compose.
Phương pháp 1: Cài đặt qua script
Script sẽ cài đặt Docker, đặt dự án trong thư mục /opt/logbull, và cấu hình tự động khởi động khi hệ thống khởi động lại. Lệnh cài đặt:
sudo apt-get install -y curl && \ sudo curl -sSL https://raw.githubusercontent.com/logbull/logbull/main/install-logbull.sh \ | sudo bash
Phương pháp 2: Khởi chạy qua Docker Compose
Tạo file docker-compose.yml với nội dung sau:
services: logbull: container_name: logbull image: logbull/logbull:latest ports: - "4005:4005" volumes: - ./logbull-data:/logbull-data restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:4005/api/v1/system/health"] interval: 5s timeout: 5s retries: 30
Và chạy lệnh docker compose up -d. Hệ thống sẽ khởi động trên cổng 4005.
Phương pháp 3: Khởi chạy qua lệnh Docker
Chạy lệnh sau trong terminal (hệ thống cũng sẽ khởi động trên cổng 4005):
docker run -d \ --name logbull \ -p 4005:4005 \ -v ./logbull-data:/logbull-data \ --restart unless-stopped \ --health-cmd="curl -f http://localhost:4005/api/v1/system/health || exit 1" \ --health-interval=5s \ --health-retries=30 \ logbull/logbull:latest
Tôi thiết kế dự án với sự tiện lợi trong tâm trí, chủ yếu cho các nhà phát triển. Đó là lý do tại sao tôi tạo ra các thư viện cho hầu hết các ngôn ngữ phát triển phổ biến. Tôi đã làm điều này với ý tưởng rằng Log Bull có thể được kết nối với bất kỳ thư viện phổ biến nào như một bộ xử lý mà không cần thay đổi codebase hiện tại.
Tôi rất khuyên bạn nên xem các ví dụ trên trang web, vì có một bảng điều khiển tương tác để chọn ngôn ngữ:

Hãy lấy Python làm ví dụ. Đầu tiên, bạn cần cài đặt thư viện (mặc dù bạn cũng có thể gửi qua HTTP; có các ví dụ cho cURL):
pip install logbull
Sau đó gửi từ code:
import time from logbull import LogBullLogger # Initialize logger logger = LogBullLogger( host="http://LOGBULL_HOST", project_id="LOGBULL_PROJECT_ID", ) # Log messages (printed to console AND sent to LogBull) logger.info("User logged in successfully", fields={ "user_id": "12345", "username": "john_doe", "ip": "192.168.1.100" }) # With context session_logger = logger.with_context({ "session_id": "sess_abc123", "user_id": "user_456" }) session_logger.info("Processing request", fields={ "action": "purchase" }) # Ensure all logs are sent before exiting logger.flush() time.sleep(5)
Tất cả logs được hiển thị ngay lập tức trên màn hình chính. Bạn có thể:
Giảm kích thước của tin nhắn (bằng cách cắt dòng xuống ~50-100 ký tự).
Mở rộng danh sách các trường đã gửi (user_id, order_id, v.v.).
Nhấp vào một trường và thêm nó vào bộ lọc. Tìm kiếm logs với điều kiện:



Bạn cũng có thể thu thập các nhóm điều kiện (ví dụ: tin nhắn bao gồm văn bản nhất định, nhưng loại trừ địa chỉ IP máy chủ cụ thể).
Tôi hy vọng hệ thống thu thập log của tôi sẽ hữu ích cho những nhà phát triển không muốn hoặc không thể (do nguồn lực dự án hạn chế) triển khai các giải pháp "nặng ký" như ELK. Tôi đã sử dụng Log Bull trong các dự án sản xuất, và mọi thứ đều diễn ra tốt đẹp. Tôi hoan nghênh phản hồi, đề xuất cải tiến và các vấn đề trên GitHub.


