Uptime Kuma cho chuỗi nhà hàng lẩu: bảng trực báo hệ thống nào đang ngừng
Đăng ngày 12/10/2026
Mục lục bài nghiên cứu

Uptime Kuma cho chuỗi nhà hàng lẩu: tấm bảng cho biết điểm nào đang tắt
Uptime Kuma tự giới thiệu là công cụ giám sát tự lưu trữ, dễ dùng [1]. Nó kiểm tra định kỳ xem một địa chỉ, một cổng, một bản ghi DNS hay một tiến trình còn đáp ứng không, rồi báo qua kênh nhắn tin khi có biến cố. Với một chuỗi nhà hàng lẩu có website đặt bàn, máy tính tiền ở từng chi nhánh và vài dịch vụ chạy sau quầy, đây là loại công cụ trả lời câu hỏi mà quản lý ca thường phải hỏi ngược: hệ thống nào đang không ổn, từ lúc nào.
Khuyến nghị gọn của bài: nên thử nếu chuỗi cần một lớp cảnh báo nhẹ, chi phí thấp, có trang trạng thái cho nội bộ, và có một người nhận trách nhiệm cập nhật phiên bản. Không nên coi nó là nền tảng quan sát đầy đủ.
Hai điều cần biết ngay. Thứ nhất, dự án đang ở dòng phiên bản 2, các thẻ Docker dòng 1 và thẻ latest được chính SECURITY ghi là bị loại bỏ dần [3]. Thứ hai, kho mã do một người duy trì chính nói bằng ngôi thứ nhất trong README, nên hãy tính đến rủi ro phụ thuộc vào ít người bảo trì khi đưa nó vào quy trình trực của chuỗi.
Một tối thứ Bảy, máy in bếp không nhận đơn và không ai biết
Giờ cao điểm của nhà hàng lẩu dồn vào vài khung tối cuối tuần. Một cổng thanh toán chậm, một máy chủ đặt bàn treo hay chứng chỉ bảo mật hết hạn có thể làm mất doanh thu ngay lúc đông khách nhất. Thông thường người đầu tiên biết là nhân viên đứng quầy, rồi mới đến quản lý, rồi mới đến người phụ trách kỹ thuật.
Nhu cầu ở đây không phải đo mọi thứ, mà là biết sớm vài điều cụ thể: trang đặt bàn có mở được không, địa chỉ của máy chủ nhận đơn ở chi nhánh có còn phản hồi không, chứng chỉ sắp hết hạn chưa, và một tác vụ chạy ban đêm như chốt doanh thu có báo là đã chạy xong không. README liệt kê đúng các nhóm kiểm tra như vậy, gồm HTTP, TCP, từ khóa trong trang, truy vấn JSON, ping, bản ghi DNS, push và container Docker, cùng thông tin chứng chỉ [1].
Điểm cần lưu ý là các tình huống trên là mô tả bài toán của chuỗi giả định, không phải số liệu khảo sát ngành. Công cụ chỉ phát hiện triệu chứng nhìn thấy được từ vị trí nó chạy.
Một ứng dụng Node.js, một giao diện Vue, và đường truyền WebSocket
Theo tài liệu đóng góp, giao diện được viết bằng Vue 3 dựng với vite, còn phần máy chủ nằm trong thư mục server và chủ yếu giao tiếp qua websocket. Frontend và backend dùng chung một package.json; khi chạy thật, giao diện được dựng vào thư mục dist và máy chủ express phục vụ thư mục đó [4]. README còn nêu động cơ ban đầu của tác giả là thử dùng WebSocket với ứng dụng một trang thay vì REST API [1].
Với người vận hành, hệ quả là cách triển khai khá gọn: một tiến trình, một thư mục dữ liệu. Lệnh Docker mẫu gắn một volume vào đường dẫn dữ liệu của ứng dụng và mở cổng 3001 [1]. Điều ít hiển nhiên hơn nằm ở lớp lưu trữ: hướng dẫn viết migration yêu cầu tránh cú pháp SQL gốc và dùng phương thức knex vì dự án hỗ trợ cả SQLite lẫn MariaDB [5].
Mỗi loại giám sát là một mô-đun trong server/monitor-types với hàm check, quy ước rằng ở nhánh thành công thì đặt trạng thái UP, ở nhánh lỗi thì ném ngoại lệ có thông điệp rõ ràng [4]. Nhà cung cấp thông báo cũng là mô-đun riêng trong server/notification-providers [4]. Các tài liệu đã đọc không mô tả cơ chế lập lịch kiểm tra chi tiết, nên bài không đi sâu vào phần đó.
Từ một lần kiểm tra thất bại tới tin nhắn ở nhóm chat của quản lý
Một monitor được cấu hình trong giao diện, gồm loại kiểm tra, địa chỉ, chu kỳ và kênh thông báo. README nêu chu kỳ kiểm tra ngắn nhất là 20 giây [1]. Mỗi lần chạy, mô-đun kiểu monitor thực hiện hàm check và trả về một nhịp (heartbeat) có trạng thái và thông điệp; theo quy ước đóng góp, lỗi nên được ném ra thay vì tự đặt DOWN, trừ khi muốn bỏ qua cơ chế thử lại [4].
Vì backend chủ yếu giao tiếp qua websocket, giao diện nhận cập nhật qua kênh này [4]. Khi trạng thái chuyển, nhà cung cấp thông báo được gọi với dữ liệu monitor và nhịp. Tài liệu đóng góp cho biết cả hai trường này có thể rỗng với một số sự kiện: nếu cả hai rỗng thì đó là tin nhắn thử, còn nếu chỉ nhịp rỗng thì đó là sự kiện chứng chỉ sắp hết hạn [4].
Loại push, được README liệt kê [1], theo cách hiểu thông thường là đảo chiều: ứng dụng bên ngoài tự gọi về Uptime Kuma để báo mình còn sống; cơ chế chi tiết nằm ở tài liệu bài không đọc. Kho mã có thư mục ví dụ push bằng TypeScript, hướng dẫn chạy với ts-node, Deno hoặc Bun [6]. Với chuỗi lẩu, đó là cách hợp lý cho tác vụ chốt ca nằm trong mạng chi nhánh không mở cổng ra ngoài.
Danh mục tính năng đã được tài liệu xác nhận
Phần tính năng của README liệt kê các loại giám sát: HTTP và HTTPS, TCP, từ khóa HTTP, truy vấn JSON, WebSocket, ping, bản ghi DNS, push, máy chủ game Steam và container Docker [1]. Ngoài ra có giao diện phản hồi nhanh, chu kỳ 20 giây, nhiều ngôn ngữ, nhiều trang trạng thái, ánh xạ trang trạng thái vào tên miền riêng, biểu đồ ping, thông tin chứng chỉ, hỗ trợ proxy và xác thực hai lớp [1].
Về thông báo, README nêu các kênh như Telegram, Discord, Gotify, Slack, Pushover, email SMTP và hơn 90 dịch vụ khác, kèm đường dẫn tới danh sách đầy đủ trong thư mục mã nguồn [1]. Cụ thể, tài liệu đã đọc không xác nhận có hỗ trợ Zalo hay không, nên nếu chuỗi dựa vào Zalo cần kiểm tra danh sách thực tế hoặc dùng webhook thông qua một lớp trung gian.
Quy trình đóng góp cho nhà cung cấp thông báo đòi hỏi chứng minh bằng ảnh chụp cho các sự kiện UP, DOWN, hết hạn chứng chỉ, hết hạn tên miền và nút thử [4].
Ai trong chuỗi sẽ tự nhiên là chủ sở hữu công cụ này
Đối tượng đầu tiên là quản lý hệ thống của chuỗi hoặc đối tác công nghệ gói chung cho nhiều thương hiệu, những người cần một bảng điều khiển trực quan mà không phải dựng một nền tảng quan sát đầy đủ.
Công cụ phù hợp với kiểm tra bề mặt có thể mô tả bằng địa chỉ, cổng hay từ khóa. Nó kém phù hợp nếu bạn cần phân tích nguyên nhân gốc trong ứng dụng, đo độ trễ từng giao dịch hay lưu nhật ký tập trung. Đó là nhận định từ phạm vi tính năng được liệt kê [1], không phải so sánh đo đạc.
Người dùng cuối không cần là kỹ sư. Trang trạng thái và thông báo nhắn tin cho phép quản lý ca đọc kết quả mà không cần quyền vào hệ thống. Tuy vậy, quyền thêm hoặc sửa monitor và kênh thông báo nên giới hạn cho người có trách nhiệm.
Giả định: chuỗi lẩu 12 chi nhánh ở miền Trung dùng một Uptime Kuma làm bảng trực
Tình huống giả định, chưa từng triển khai: một chuỗi nhà hàng lẩu có mười hai chi nhánh ở Đà Nẵng, Huế và Quảng Nam. Mỗi chi nhánh có máy tính tiền kết nối về một máy chủ trung tâm, một website đặt bàn, và một máy tính ở bếp nhận đơn. Phòng công nghệ gồm hai người. Sự cố điển hình trong giả định: chứng chỉ của trang đặt bàn hết hạn đúng cuối tuần, hoặc máy chủ nhận đơn của một chi nhánh mất kết nối mà quản lý chỉ biết khi khách hỏi vì sao món chưa lên.
Thiết kế đề xuất: một Uptime Kuma đặt ở máy chủ trung tâm, nhóm monitor theo chi nhánh. Với dịch vụ có địa chỉ nội bộ, dùng kiểm tra HTTP hoặc TCP; với trang đặt bàn công khai, dùng kiểm tra HTTP kèm thông tin chứng chỉ; với tác vụ chốt doanh thu đêm, dùng loại push để tác vụ tự báo [1][6]. Một trang trạng thái nội bộ liệt kê tình trạng từng chi nhánh để quản lý khu vực xem trong ca.
Cần phân định trách nhiệm. Người trực nhận cảnh báo là ai, ngoài giờ ai thay, và hành động đầu tiên là gì phải ghi thành quy trình ngắn. Bài không khẳng định chuỗi nào đang làm như vậy, và không đưa con số về giảm thời gian ngừng vì các nguồn đã đọc không có dữ liệu đó. Giá trị mong đợi chỉ được xác nhận qua thử nghiệm ở phần kế hoạch.
Triển khai và nâng cấp: Docker, volume cục bộ và kỷ luật cập nhật
README đưa hai đường chính. Đường Docker Compose tải tệp compose rồi chạy, ứng dụng nghe trên mọi giao diện mạng ở cổng 3001; muốn giới hạn chỉ máy cục bộ thì gắn cổng vào 127.0.0.1 [1]. Đường không dùng Docker yêu cầu Node.js từ 20.4 trở lên, Git và pm2, hỗ trợ các bản Linux phổ biến và Windows 10 hoặc Windows Server 2012 R2 trở lên, không hỗ trợ họ BSD hay Replit và Heroku [1].
Một cảnh báo quan trọng cho người triển khai: hệ thống tệp mạng như NFS không được hỗ trợ, hãy ánh xạ vào thư mục hoặc volume cục bộ [1]. Cấu hình reverse proxy và cách cập nhật được README dẫn sang wiki, nơi bài không đọc nên không mô tả [1]. SECURITY ghi các thẻ Docker 2, 2-slim, next, 2-rootless được hỗ trợ cho nâng cấp, còn thẻ dòng 1 và latest bị đánh dấu deprecated [3]. Vì vậy cố định thẻ 2 thay vì latest.
Về chất lượng, kho mã dùng trình chạy kiểm thử của Node.js cho phần backend, chạy bằng npm run test-backend, và có quy ước đặt tên kiểm thử [7]. Điều đó không bảo đảm chất lượng của một bản phát hành cụ thể, nên chuỗi vẫn nên thử bản mới trên môi trường phụ trước khi nâng cấp. Sao lưu cần dựa vào cơ sở dữ liệu đang dùng và thư mục dữ liệu; hướng dẫn chi tiết không nằm trong các tệp đã đọc.
Đặt máy ở đâu thì thấy được cái đó
Một công cụ giám sát chỉ thấy thế giới từ chỗ nó đứng. Nếu đặt Uptime Kuma trong mạng trung tâm, nó thấy được máy chủ và dịch vụ nội bộ, nhưng không biết khách ngoài Internet có truy cập được website hay không khi đường ra ngoài của trung tâm bình thường còn đường tới khách bị lỗi DNS. Ngược lại, đặt ở một máy thuê ngoài có thể thấy góc nhìn của khách nhưng không với tới địa chỉ nội bộ chi nhánh.
Vì vậy nên cân nhắc hai điểm quan sát cho hệ thống quan trọng nhất, là kiểm tra từ trong và từ ngoài, rồi so khớp: nếu cả hai cùng báo lỗi thì lỗi thuộc dịch vụ, còn nếu chỉ từ ngoài thì nghi ngờ đường truyền hoặc DNS. Đây là thiết kế đề xuất của bài; tài liệu đã đọc không mô tả cơ chế nhiều điểm quan sát của chính Uptime Kuma.
Loại push giúp xử lý phần nào: dịch vụ nằm sau tường lửa tự báo ra ngoài nên không cần mở cổng vào [1][6]. Nếu dịch vụ chết hoàn toàn, nó ngừng báo, và Uptime Kuma chỉ nhận ra khi quá hạn chờ, nên khoảng chờ cần đặt phù hợp chu kỳ.
Bảo mật: giám sát có quyền nhìn thấy nhiều thứ nên cũng là đích tấn công
Một Uptime Kuma được cấu hình tốt biết địa chỉ nội bộ, mã thông báo kênh nhắn tin và đôi khi cả thông tin xác thực kiểm tra. Vì vậy bảng điều khiển không nên mở thẳng ra Internet. README cho biết mặc định ứng dụng lắng nghe trên mọi giao diện mạng và đưa ví dụ giới hạn vào 127.0.0.1 [1]. README cũng liệt kê hỗ trợ 2FA [1], nên hãy bật cho mọi tài khoản quản trị.
Chính sách bảo mật yêu cầu báo lỗ hổng qua GitHub Security Advisories, kèm một issue bảo mật rỗng để tác giả được nhắc, không dùng kênh công khai [3]. Chính sách cũng nêu rằng báo cáo từ kết quả quét phụ thuộc thượng nguồn sẽ bị đóng nếu không có bằng chứng khai thác, và đừng báo các vấn đề SSRF [3]. Với người dùng, điều đó gợi ý nên coi khả năng gửi yêu cầu tới địa chỉ do quản trị viên cấu hình là chức năng cốt lõi, nên chỉ cấp quyền quản trị cho người tin cậy. Đây là suy luận của bài, không phải tuyên bố của dự án.
Về dữ liệu, monitor chủ yếu chứa địa chỉ và trạng thái, ít khi là dữ liệu khách hàng. Nếu kiểm tra các trang có thông tin khách, hãy xem lại cấu hình trước khi bật.
Giấy phép MIT và một thư mục có chủ bản quyền khác
LICENSE ở thư mục gốc là văn bản MIT License, ghi bản quyền năm 2021 của Louis Lam [2]. MIT cho phép dùng, sao chép, sửa đổi, hợp nhất, xuất bản, phân phối và bán bản sao, với điều kiện giữ thông báo bản quyền và nội dung giấy phép trong mọi bản sao hoặc phần đáng kể; phần mềm được cung cấp nguyên trạng, không bảo đảm [2].
Cây tài liệu tại commit này còn liệt kê tệp server/modules/axios-ntlm/LICENSE. Bài đã đọc tệp đó: cũng là văn bản MIT nhưng ghi bản quyền năm 2021 của CatButtes [8]. Nghĩa là phần mã trong thư mục đó có chủ bản quyền khác, nếu bạn phân phối lại bản dựng thì phải giữ thông báo tương ứng. Kết luận về giấy phép toàn kho không nên chỉ dựa trên trường giấy phép của GitHub.
Giấy phép chỉ áp dụng cho mã tại commit này. Nó không bao trùm các thư viện phụ thuộc cài kèm, dịch vụ của bên thứ ba mà các nhà cung cấp thông báo kết nối tới, tên và biểu tượng dự án, hay dữ liệu của bạn. Các tệp đã đọc không có CLA hay chính sách thương hiệu riêng, nên bài không kết luận về hai điểm này.
Chi phí: nhỏ về hạ tầng, đáng kể ở chỗ có người chịu trách nhiệm
Hạ tầng tối thiểu là một máy chủ hoặc máy ảo cỡ nhỏ chạy Docker hoặc Node.js, có ổ đĩa cục bộ cho dữ liệu, và kết nối ra các kênh thông báo. Bài không đưa con số tiền cụ thể hay khuyến nghị cấu hình CPU, bộ nhớ vì tài liệu đã đọc không cung cấp thông số tài nguyên.
Phần nguồn lực lớn hơn là nhân sự: một người dựng và nâng cấp dịch vụ, người nhận cảnh báo theo ca, và thời gian chỉnh các monitor cho đúng, tránh báo giả. SECURITY nói nên dùng phiên bản mới nhất và mọi bản đều nâng cấp được lên bản mới nhất [3], nên chu kỳ cập nhật thường xuyên là một khoản thời gian định kỳ phải dự trù.
Ngoài ra có chi phí của kênh thông báo, nếu chọn dịch vụ trả phí, và chi phí cơ hội của việc không có hỗ trợ chính thức. README hướng người dùng tới GitHub Issues và subreddit, đồng thời nói rõ tác giả không hỗ trợ qua email [1].
Đặt cạnh các hướng giám sát khác
So với dịch vụ giám sát thuê ngoài dạng SaaS, Uptime Kuma chuyển việc vận hành về phía chuỗi. Bù lại chuỗi giữ dữ liệu ở máy mình và không trả phí theo số monitor, nhưng tự chịu sao lưu, cập nhật và bảo vệ. Phần Motivation của README nói dự án khởi đầu từ việc tìm một công cụ tự lưu trữ giống Uptime Robot [1].
So với hướng thu thập số đo ứng dụng chi tiết theo chuỗi thời gian, Uptime Kuma theo README tập trung vào các phép kiểm tra còn sống, chứng chỉ và thông báo [1]. Hai hướng có thể đứng cạnh nhau: một bên cho trạng thái và trang thông báo, một bên cho phân tích sâu. Bài không so sánh hiệu năng.
So với việc tự viết script kiểm tra rồi gửi tin nhắn, Uptime Kuma cho giao diện, lịch sử, trang trạng thái và 90 kênh thông báo có sẵn [1]. Đổi lại phải chấp nhận cách làm của dự án.
Hạn chế và những trường hợp nên tránh
Thứ nhất, README nêu rõ không hỗ trợ NFS và một số nền tảng như FreeBSD hay Heroku [1]. Chuỗi dùng lưu trữ mạng cho dữ liệu hoặc nền tảng thuộc nhóm đó phải đổi cách triển khai. Thứ hai, quá trình chuyển từ dòng 1 sang 2 là một sự kiện thật: các thẻ cũ được ghi deprecated [3], và hướng dẫn di chuyển nằm ở wiki mà bài không đọc.
Thứ ba, mô hình duy trì tập trung vào ít người. Tài liệu đóng góp có cảm ơn cộng đồng và thừa nhận một phần mã chưa được cấu trúc hay chú thích tốt [4], còn README nhắc rằng có nhiều pull request mà tác giả chưa kịp kiểm tra [1]. Đây là thông tin trung thực nhưng cũng là tín hiệu cần cân nhắc cho hệ thống phục vụ vận hành quan trọng.
Cuối cùng, đừng dùng Uptime Kuma làm nguồn duy nhất cho cảnh báo an toàn thực phẩm hay an toàn cháy nổ. Nó không được mô tả như hệ thống đạt chuẩn cho các mục đích đó, và nếu chính máy chạy nó hỏng thì không có ai báo.
Thử nghiệm bốn tuần với ba chi nhánh
Tuần một: dựng bản thử trên máy phụ với thẻ Docker 2, volume cục bộ, chọn cơ sở dữ liệu và ghi rõ cách sao lưu. Chọn ba chi nhánh và khoảng mười monitor thuộc ba nhóm: trang đặt bàn, máy chủ nhận đơn, tác vụ chốt doanh thu bằng push. Tiêu chí: mỗi monitor cho trạng thái đúng khi cố ý ngắt dịch vụ thử, và tin nhắn tới đúng người trong dưới ngưỡng thời gian do chuỗi đặt.
Tuần hai và ba: chạy song song với cách báo hiện tại. Ghi lại số cảnh báo giả, số sự cố thật mà công cụ không bắt được, và chênh lệch thời gian giữa thông báo của công cụ với thời điểm nhân viên báo. Ngưỡng thành công đề xuất: không bỏ sót sự cố nào trong nhóm đã giám sát và cảnh báo giả đủ ít để người trực không tắt thông báo; con số cụ thể do chuỗi đặt trước khi chạy.
Tuần bốn: diễn tập hỏng hóc. Tắt chính máy giám sát, khôi phục từ bản sao lưu, nâng cấp lên một bản mới trên môi trường phụ, và kiểm tra quyền truy cập. Điều kiện dừng: không khôi phục được dữ liệu, nâng cấp làm mất cấu hình, hoặc người trực thấy công cụ làm tăng công việc hơn là giảm.
Kết luận: công cụ nhỏ cho một câu hỏi lớn, nếu có người cầm lái
Từ các tài liệu đã đọc, Uptime Kuma là ứng dụng giám sát tự lưu trữ, giao diện Vue, giao tiếp websocket, nhiều loại kiểm tra và kênh thông báo, dùng giấy phép MIT [1][2][4]. Với chuỗi nhà hàng lẩu giả định, nó phù hợp ở vai trò bảng trực và hệ thống báo động nhẹ.
Điều kiện đi kèm là có chủ sở hữu rõ ràng, cố định thẻ phiên bản, bảo vệ bảng điều khiển, và kiểm tra độc lập chính máy giám sát. Hãy bắt đầu ở quy mô nhỏ, đo cảnh báo giả và bỏ sót, rồi mới nhân rộng tới các chi nhánh khác.
Nếu một doanh nghiệp xây hệ thống tri thức nội bộ như phamvanthu.com, trang trạng thái và nhật ký sự cố của công cụ này có thể là nguồn dữ liệu để rút bài học vận hành, miễn là gắn với hồ sơ xử lý sự cố của con người.
Nguồn và phương pháp
Bài thuộc nhóm Hạ tầng và vận hành, chọn từ kho lưu GitHub Trending của cộng đồng bonfy. Theo tệp ứng viên, dự án xuất hiện 35 lần từ 2026-01-01 đến 2026-09-20; bằng chứng đầu tiên là trang lưu ngày 2026-01-01 [9]. Kho lưu này chỉ phủ các danh sách Python, Go, JavaScript và Swift, thiếu ngày 2026-09-03 và 2026-10-12, và không phải bảng xếp hạng top 100 chính thức.
Mã nguồn khóa tại commit 7982ce027248231ee6508e71d8c74e7109f96062, ngày 2026-10-11, kiểm tra 2026-10-12. Bản phát hành mới nhất trong dữ liệu thu thập là 2.5.6, ngày 2026-10-09; số này không nằm trong tài liệu được trích dẫn. Các tệp đã đọc gồm README, LICENSE, SECURITY, CONTRIBUTING, hướng dẫn migration, README ví dụ push, README kiểm thử backend và LICENSE của thư mục axios-ntlm [1][2][3][4][5][6][7][8].
Đây là nghiên cứu bàn giấy, không phải công bố khoa học đã bình duyệt. Bài không cài đặt, chạy hay đo phần mềm, và không đọc các trang wiki mà README dẫn tới. Tình huống chuỗi lẩu là đề xuất giả định; các nhận định về chi phí, rủi ro và kế hoạch thử nghiệm là phân tích của người viết.
Xem mã nguồn Uptime Kuma trên GitHub