Sau một thời gian “ngưng log” các request API và SQL query thì đã mạnh dạn tìm kiếm 1 SaaS log management vừa túi tiền để thử, bởi nếu các bạn cũng biết mấy ông này rất đắt tiền, bèo bèo cũng 50$/tháng và cũng lưu được vài GB.
Tìm việc làm it manager lương up to 50M
Syslog-Ng để nhận log local và đẩy lên UDP Server
Vô tình phát hiện ông LogDNA với chi phí khá cool 1.5$/GB/tháng. Thiết nghĩ chắc Teamcrop tầm 3, 4GB tháng là cùng. Cuối cùng đã quyết định đẩy toàn bộ log lên LogDNA, do hệ thống Teamcrop Microservices dùng docker và đang sử dụng Syslog-NG để ghi log local, nên chỉ cần mount 1 file config mới để trỏ tới UDP IP & Port mới là xong.
Sau khi kết nối và thấy raw log được thì khá là ưng ý và cũng đã apply lên production sau 1 ngày thử nghiệm. Ác mộng mới bắt đầu, sau 2 ngày chạy thiệt, hệ thống log đã ghi nhận gần 16 triệu line, và tổng dung lượng gần 4.5GB. Tính nhẩm nhẩm thì 1 tháng tầm 50GB là ít, tính ra chi phí cũng không ít, chả khác gì mấy ông như Loggly, Papertrail, Sematext…có vẻ không ổn nên lại tính cài lại Graylog hoặc ELK nhưng quá khứ cho thấy làm việc với các hệ thống này mặc dù tự cài nhưng khá chua, lỗi lên lỗi xuống, rườm rà và giao diện cũng phức tạp (performance tệ).
PHP 7 & Swoole Extension để dựng UDP Socket Server
Sau một ngồi suy nghĩ thì tính đến chuyện sao không viết 1 UDP server luôn và lắng nghe log và ghi xuống “một nơi nào đó”, và nơi này phải tối ưu cho truy vấn thống kê (chứ MySQL là nghe đến trăm triệu record là bỏ của chạy lấy người). Viết UDP Socket server khá dễ, chỉ vài phút là dựng được cũng như viết được parser cho log. Nhân đây giới thiệu với các đồng đạo extension Swoole của PHP, tìm hiểu để mở rộng thêm tầm nhìn về PHP nhé.
Kết hợp với Supervisord thì script PHP này chạy ngầm đỡ dở chứng.
Công đoạn thiếp theo là lưu log ở đâu để truy vấn cho lẹ, vô tình tìm ra Clickhouse, được sinh ra để tối ưu cho OLAP và trên nhiều dữ liệu. Lại tương thích với SQL nên hầu như khi sử dụng (truy vấn) sẽ không khác MySQL bao nhiêu. Cài đặt Clickhouse cũng dễ nên sau vài giờ là đã test đọc ghi dữ liệu. Cũng có PHP client để kết nối nên việc tích hợp vào code PHP khá nhẹ nhàng và không có vấn đề gì. Cho chạy thử nghiệm production thì dữ liệu đẩy vào khá smooth. Hiện tại được vài triệu record nhưng query khá nhanh.
Khâu cuối cùng là Select data & UI thì tùy mỗi người nhu cầu gì thì viết chart mà thôi, cái này dễ như làm việc với web bình thường. Bên Teamcrop thì sử dụng cơ chế insight có sẵn và UI trên React nên khâu này khá nhẹ nhàng, tha hồ làm chart mình thích.
Hoặc làm biếng thì có clickhouse-client, có thể vào và viết query để xem kết quả ngay như mysql client.
Toàn bộ giải pháp hiện đang chạy 1 con server 20$/tháng, nếu log nhiều thì có thể xóa record quá cũ hoặc thuê server bự hơn. Dù sao thì hiện tại log khá sướng, chủ động ở khâu parser và query data. Hy vọng những chia sẻ này sẽ giúp anh chị em tiết kiệm kha khá tiền cho log management. Khi nào xịn xịn xíu, có GUI sẽ viết blog hoặc open source phần setup này cho bà con triển khai nhé, đỡ tốn tiền và muốn log bao nhiêu log. Tất cả chỉ tốn 1 ngày R&D và tiết kiệm bộn tiền cho vụ log này.
—
Một số công nghệ đề cập:
– Syslog-Ng để nhận log local và đẩy lên UDP Server
– PHP 7 & Swoole Extension để dựng UDP Socket Server
– Supervisord để quản lý PHP Background Process
– Clickhouse để làm database và truy vấn dữ liệu
Bài viết được chia sẻ bởi tác giả Võ Duy Tuấn