Cảnh sếp “réo” lúc nửa đêm vì server sập không rõ lý do
Hồi mình mới vào nghề, có lần server chạy ứng dụng lõi của công ty lăn đùng ra chết ngay đêm giao thừa. Lúc đó, mình chỉ biết cuống cuồng SSH vào rồi gõ top, df -h trong vô vọng. Khổ nỗi, khi server đã sập, bạn chẳng thể lấy đâu ra dữ liệu quá khứ để biết nó quá tải từ lúc nào. Do RAM bị rò rỉ hay CPU bị chiếm dụng bởi một process lạ? Không ai biết.
Kinh nghiệm xương máu cho thấy: Quản trị hệ thống mà thiếu biểu đồ giám sát (monitoring) giống như lái xe ban đêm không đèn pha. Bạn chỉ biết mình đâm vào tường khi sự cố đã thực sự xảy ra.
Tại sao đọc log thủ công là “bẫy thời gian”?
Nhiều anh em IT vẫn giữ thói quen khi có biến mới vào lục lọi /var/log/messages hay journalctl. Cách này không sai, nhưng cực kỳ tốn sức vì những lý do sau:
- Mất tính dự báo: Bạn không thấy được xu hướng ngốn RAM. Ví dụ: RAM tăng đều 1% mỗi giờ là dấu hiệu rò rỉ bộ nhớ (memory leak) mà log file khó lòng chỉ ra ngay.
- Lãng phí nguồn lực: Việc dùng
greplọc hàng triệu dòng log trên file dung lượng 5-10GB là cực hình. - Khó thuyết phục cấp trên: Sếp sẽ không hiểu những dòng log khô khan. Họ cần một biểu đồ trực quan để duyệt chi ngân sách nâng cấp server.
Bộ đôi Grafana – Prometheus: Lựa chọn hàng đầu cho DevOps
Mình từng dùng Zabbix, nhưng nó khá nặng nề và giao diện hơi “cổ đại”. Khi chuyển sang làm việc với Docker và CentOS Stream 9, mình ưu tiên bộ đôi Prometheus và Grafana.
Prometheus đóng vai trò như một kho lưu trữ dữ liệu thời gian (Time Series Database) cực mạnh. Trong khi đó, Grafana là “hoa hậu” trong việc hiển thị, giúp biến những con số vô hồn thành dashboard lung linh. Thực tế, mình đã triển khai bộ đôi này để giám sát cụm 20 server Linux, giúp giảm thời gian tìm nguyên nhân sự cố từ 30 phút xuống còn 2 phút.
Các bước triển khai thực tế trên CentOS Stream 9
Chúng ta sẽ đi theo lộ trình: Cài đặt Node Exporter (lấy dữ liệu) -> Cài đặt Prometheus (lưu trữ) -> Cài đặt Grafana (vẽ biểu đồ) -> Cấu hình bảo mật.
Bước 1: Cài đặt Node Exporter và Prometheus
Node Exporter là công cụ nhỏ gọn chạy trên server để đẩy các thông số CPU, RAM, Disk về. Đầu tiên, hãy tạo user riêng để đảm bảo an toàn hệ thống:
# Tạo user chạy service
sudo useradd --no-create-home --shell /bin/false node_exporter
# Tải và cài đặt Node Exporter v1.7.0
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar -xvf node_exporter-1.7.0.linux-amd64.tar.gz
sudo mv node_exporter-1.7.0.linux-amd64/node_exporter /usr/local/bin/
Tạo file service để quản lý Node Exporter dễ dàng hơn:
sudo nano /etc/systemd/system/node_exporter.service
# [Nội dung file: User=node_exporter, ExecStart=/usr/local/bin/node_exporter]
sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter
Bước 2: Cài đặt Grafana từ Repository chính thức
Grafana hỗ trợ repo RPM rất tốt trên CentOS 9, giúp việc dnf update sau này cực nhàn. Hãy tạo file repo:
sudo nano /etc/yum.repos.d/grafana.repo
Thêm nội dung cấu hình repo chính thức của Grafana Labs, sau đó chạy lệnh cài đặt:
sudo dnf install grafana -y
sudo systemctl enable --now grafana-server
Bước 3: Chốt chặn bảo mật với Firewalld và SELinux
Đây là bước nhiều bạn Junior hay quên, dẫn đến việc không truy cập được Dashboard. CentOS Stream 9 mặc định chặn hầu hết các port lạ.
Cấu hình Firewalld: Mở port 3000 cho Grafana và 9090 cho Prometheus.
sudo firewall-cmd --permanent --add-port={3000,9090}/tcp
sudo firewall-cmd --reload
Xử lý SELinux: Đừng vội tắt SELinux. Nếu Grafana cần kết nối tới database ở server khác, hãy chỉ cho phép quyền cụ thể:
sudo setsebool -P httpd_can_network_connect 1
Lưu ý: Nếu bạn thấy lỗi “Permission Denied” trong log dù đã phân quyền file, 99% là do SELinux đang chặn access vào thư mục data.
Bước 4: Kết nối và tạo Dashboard trong 5 phút
Truy cập http://IP-server:3000 với tài khoản admin/admin. Sau khi đổi mật khẩu, hãy làm theo các bước sau:
- Tại menu Data Sources, chọn Prometheus.
- Nhập URL:
http://localhost:9090và nhấn Save & Test. - Mẹo nhỏ: Đừng tự vẽ biểu đồ từ đầu. Hãy vào mục Import, nhập ID 1860. Đây là template “Node Exporter Full” cực kỳ chi tiết được cộng đồng tin dùng.
Kinh nghiệm vận hành thực chiến
Sau nhiều năm quản lý hệ thống trên dòng RHEL, mình rút ra 3 lưu ý quan trọng:
- Tuyệt đối không tắt SELinux: Hãy dùng
audit2allowđể gỡ lỗi thay vìsetenforce 0. Tắt SELinux là bạn đã tự tháo bỏ lớp giáp cuối cùng của server. - Kiểm soát Retention: Prometheus mặc định giữ data 15 ngày. Nếu server chỉ có 20GB disk, hãy giảm xuống còn 7 ngày bằng tham số
--storage.tsdb.retention.time=7dđể tránh treo máy do đầy ổ cứng. - Ưu tiên Alerting: Dashboard đẹp chỉ để ngắm. Hãy cấu hình Alert qua Telegram hoặc Slack. Một thông báo “CPU > 90% trong 5 phút” gửi về điện thoại sẽ cứu nguy cho bạn nhanh hơn bất kỳ biểu đồ nào.
Việc làm chủ Grafana trên CentOS Stream 9 không chỉ giúp công việc nhàn hơn mà còn nâng tầm chuyên nghiệp của bạn trong mắt đồng nghiệp. Chúc anh em triển khai thành công!

