Logo
Featured Image

Giám Sát Cụm K3s Trên VPS Bằng Grafana Cloud & Telegram Alert

Author
Tobi 02/04/2026 11 views

Để hệ thống chạy "ngon nghẻ" 24/7 và có thể kê cao gối ngủ, bạn cần một hệ thống cảnh báo tức thì. Bài viết này sẽ hướng dẫn bạn xây dựng một quy trình Monitoring chuẩn Production, báo động thẳng về Telegram.

1. Tạo tài khoản Grafana Cloud và Bot Telegram

Để hệ thống hoạt động, chúng ta cần chuẩn bị 2 "trạm trung chuyển" thông tin:

  • Tạo tài khoản Grafana Cloud (Miễn phí):

    • Truy cập trang chủ Grafana và đăng ký một tài khoản Free Tier (Gói này cho phép lưu trữ Metric, Log, Trace và sử dụng Synthetic Monitoring quá đủ cho các dự án cá nhân hoặc startup).

    • Sau khi tạo xong, bạn sẽ có một không gian làm việc (Workspace) riêng biệt trên Cloud.

  • Tạo Bot Telegram nhận cảnh báo:

    • Mở ứng dụng Telegram, tìm kiếm @BotFather và gõ lệnh /newbot để tạo một con bot mới.

    • Lưu lại đoạn mã HTTP API Token mà BotFather cung cấp.

    • Tạo một Group Chat (hoặc chat trực tiếp với con Bot), gửi một tin nhắn bất kỳ.

    • Lấy Chat ID của bạn (Có thể dùng các bot như @userinfobot hoặc gọi API GetUpdates của Telegram để lấy chuỗi số Chat ID).


2. Hướng dẫn setup kết nối Grafana Cloud và VPS K3s

Thay vì phải tự cài đặt nguyên một cụm Prometheus/Grafana nặng nề lên VPS làm tốn tài nguyên, chúng ta sẽ dùng mô hình Agent. Cụ thể là cài đặt Grafana Alloy (phiên bản nâng cấp của Grafana Agent) lên VPS K3s để nó thu thập dữ liệu và đẩy lên Cloud.

  • Cài đặt Agent: Trong giao diện Grafana Cloud, vào mục Connections > Add new connection > Kubernetes 

  1. Cluster name: Thay vì để mặc định là my-cluster, bạn nên đặt một cái tên rõ ràng hơn. Ví dụ: vps-com-quyenlt hoặc k8s-production. Sau này lỡ hệ thống phình to ra, bạn có thêm VPS thứ 2, thứ 3 thì khi nhìn vào Dashboard hoặc tin nhắn báo lỗi trên Telegram, bạn sẽ biết ngay vấn đề đang nằm ở con VPS nào.

  2. Namespace: Ô này đang để default, nghĩa là các công cụ giám sát sẽ bị cài lẫn lộn chung khu vực với các ứng dụng web bạn đang chạy. Bạn nên đổi thành monitoring hoặc grafana. Tách riêng namespace như vậy giúp hệ thống cực kỳ gọn gàng.

Sau khi sửa xong 2 ô đó, bạn cứ tự tin bấm Next nhé.

Nhớ bật Pod & Service Metrics by Annotation nhé, bạn setup như hình bên dưới :

Bấm nút màu xanh "Install" (Quan trọng nhất): Nút này nằm ở ngay dòng đầu tiên. Khi bạn bấm, Grafana Cloud sẽ tự động cài sẵn hàng loạt các quy tắc cảnh báo (Alert Rules) và các biểu đồ chuẩn mực nhất dành riêng cho Kubernetes vào tài khoản của bạn. Nhờ vậy, bạn không cần phải tự cấu hình tay sau này.

Tạo Token (Chìa khóa bảo mật):

  • Ở ô Access policy token name, bạn nhập một cái tên dễ nhớ để phân biệt. Ví dụ: token-vps-k8s hoặc com-quyenlt-k8s.
  • Ở ô Expiration date, bạn cứ để mặc định là No expiry (Không bao giờ hết hạn). Việc này giúp kết nối từ VPS lên Cloud luôn ổn định, bạn không bị mắc công vài tháng sau token hết hạn lại phải đi tạo lại từ đầu.

Xong xuôi, bạn bấm nút Create token.

Tiếp tục: Lúc này, nút Next ở góc dưới cùng bên phải sẽ sáng lên. Bạn bấm vào đó để sang bước cuối cùng.

Lúc này  Grafana Cloud sẽ sinh ra code Helm để bạn copy và dán trực tiếp vào VPS K8s của mình :

SSH vào VPS

Mở Terminal (hoặc phần mềm như PuTTY, MobaXterm) và SSH vào con VPS đang chạy cụm K8s của bạn.

Dán và chạy lệnh

Bạn copy toàn bộ đoạn code ở trên (từ chữ helm repo add... cho đến hết chữ EOF ở dòng cuối cùng), dán thẳng vào màn hình Terminal của VPS và nhấn Enter.

(Đoạn script này sẽ tự động tải các gói cài đặt của Grafana về và khởi tạo các thành phần thu thập dữ liệu vào một không gian riêng có tên là monitoring).

Kiểm tra trạng thái hoạt động

Quá trình khởi tạo sẽ mất khoảng 1-2 phút. Bạn gõ lệnh sau để kiểm tra xem các Agent đã sống dậy chưa:

kubectl get pods -n monitoring

Nếu bạn thấy các pod có tên chứa chữ alloy hoặc k8s-monitoring hiển thị trạng thái Running, nghĩa là kết nối đã thành công mỹ mãn!

Tận hưởng thành quả trên Dashboard

Bạn quay trở lại giao diện web của Grafana Cloud, bấm nút Complete setup (hoặc Test connection nếu có). Sau đó, điều hướng đến mục Dashboards > thư mục Kubernetes Integration. Bạn sẽ thấy các biểu đồ về CPU, RAM, Network, và trạng thái Pod của cụm vps-com-quyenlt bắt đầu nhảy số liên tục.

 


3. Thực chiến lên kế hoạch Monitoring

Ở đây mình sẽ lấy ví dụ về giám sát tài nguyên VPS và Check UpTime Website nhé.

3.1 Tạo Rule giám sát CPU

Vào Alert rules > New alert rule. Đặt tên: Canh-Bao-CPU-Cao.

Data source: Chọn kho số liệu grafanacloud-...-prom.

Bấm sang nút Code ở góc phải và dán đoạn mã tính toán % CPU sau vào:

100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

(Đoạn này tính trung bình % CPU đang phải làm việc trong 5 phút qua).

Condition (Điều kiện): Ngay bên dưới, bạn thiết lập WHEN A IS ABOVE 80 (kích hoạt khi CPU vượt 80%).

Add folder and labels : Tạo một folder mới (ví dụ: Telegram-Alerts) và một evaluation group để lưu rule này.

Set evaluation behavior: 

  • Evaluation group: Bấm vào nút + New evaluation group. Gõ tên là Quet-Loi-1-Phut và chọn thời gian (Evaluation interval) là 1m. (Hệ thống sẽ cứ 1 phút lôi log ra kiểm tra 1 lần).

  • Pending period: Đang để là 1m, bạn hãy đổi thành 0s (hoặc chọn chữ None ngay bên cạnh). Việc này giúp cho hệ thống hễ cứ thấy log lỗi là "bắn" Telegram ngay lập tức, không cần chờ đợi thêm.

  • Ở ô Alert state if no data..., nhớ chọn Normal 

Mục 5 Configure notifications : Đây là bước quan trọng để kết nối với Bot Telegram, bạn click vào View or create contact points 

Bấm vào đây để tạo mới :

Integration chọn Telegram sau đó điền thông tin Bot của bạn vào là được.

  • Kéo xuống dưới, tìm mục Optional Telegram settings (Cài đặt tùy chọn Telegram) và mở rộng nó ra.

  • Ở ô Parse mode, bạn bắt buộc phải chọn là HTML (để nó hiểu các lệnh in đậm).

  • Tại ô Message (đang để trống), bạn copy toàn bộ đoạn code dưới đây và dán vào:

{{ range .Alerts }}
{{ if eq .Status "firing" }}🔥 <b>[FIRING]</b>{{ else }}✅ <b>[RESOLVED]</b>{{ end }} <b>{{ .Labels.alertname | default "Alert" }}</b>

<b>Alert:</b> {{ .Annotations.summary | default "Có sự cố xảy ra!" }}
<b>Severity:</b> {{ .Labels.severity | default "critical" }}
<b>Description:</b> {{ .Annotations.description | default "Hệ thống com.quyenlt đang có biến, vui lòng kiểm tra ngay!" }}
{{ end }}

 

Sau đó nhớ save lại và quay lại với trang Edit alert rule lúc nãy nhé.

Message (Mục 6): Soạn tin nhắn cho bot: 🔥 CẢNH BÁO: CPU của cụm VPS đang chạy vắt kiệt sức (trên 80%)!

Save lại là xong rồi nhé.

3.2. Giám sát Uptime Website (Synthetic Monitoring)

Đứng từ bên ngoài Internet (các máy chủ nước ngoài) liên tục ping vào web của bạn.

  • Vào Testing & synthetics > Chọn API Endpoint.

  • Nhập Target URL (ví dụ: https://com.quyenlt).

  • Probes: Chỉ chọn 1-2 trạm gần Việt Nam như Singapore, Tokyo để tốc độ chính xác nhất.

  • Timeout: Kéo thanh trượt lên 10 - 15 giây (Tránh web load chậm 1 tí đã vội báo sập).

Tối ưu tin nhắn Telegram (Beautify Template)

Tin nhắn mặc định của Grafana rất dài và rối rắm. Chúng ta sẽ "độ" lại giao diện.

  • Vào Alerting > Contact points > Chọn sửa Telegram Bot.

  • Bật Optional Telegram settings > Đổi Parse Mode sang HTML.

  • Dán đoạn code thần thánh sau vào ô Message:

🚨 <b>Thông báo từ hệ thống:</b>
{{ range .Alerts }}
{{ if eq .Status "firing" }}🔥 <b>[FIRING]</b>{{ else }}✅ <b>[RESOLVED]</b>{{ end }} <b>{{ .Labels.alertname }}</b>

<b>Cảnh báo:</b> {{ .Annotations.summary }}
<b>Mô tả:</b> {{ .Annotations.description }}
{{ end }}

Kết quả :

Lưu Ý Quan Trọng 

Grafana có tích hợp sẵn AI chat, có thể hỏi nó bằng tiếng việt, nên nếu không rõ ở đâu bạn hoàn toàn có thể chat bằng tiếng việt với nó để nó hướng dẫn, ngay cả cách setup rules monitor theo nhu cầu của bạn.

4. Tổng Kết

Chỉ với vài bước thiết lập trên Grafana Cloud, cụm K3s của bạn đã sở hữu "tấm khiên" giám sát 3 lớp chuẩn Production: Log ứng dụng - Tài nguyên VPS - Uptime Website.

Kết hợp cùng bot Telegram được "độ" lại giao diện cực kỳ gọn gàng và thuần Việt, bạn sẽ luôn nắm thế chủ động trước mọi biến cố của hệ thống. Giáp đã lên, radar đã quét, chúc các anh em DevOps tự tin vận hành, giữ vững 100% Uptime và kê cao gối ngủ mỗi đêm nhé!

Bình luận (0)

+ =
Zalo