Tạm biệt Nagios, chào Icinga2: Nâng cấp hệ thống giám sát không còn là ‘cực hình’

Monitoring tutorial - IT technology blog
Monitoring tutorial - IT technology blog

Cái kết của những đêm thức trắng ‘sửa lỗi cú pháp’ Nagios

Quản lý cụm 50 server bằng Nagios là trải nghiệm khá “thốn”. Mỗi lần thêm service hay đổi ngưỡng cảnh báo là một lần mình run tay. Nhớ thời mới vào nghề, mình thường xuyên mò mẫm trong hàng tá file .cfg rời rạc. Chỉ cần thiếu một dấu chấm phẩy, toàn bộ engine sẽ lăn đùng ra chết. Hệ thống giám sát bị “mù” vài phút, sếp đứng sau lưng – cảm giác đó thực sự không mấy dễ chịu.

Nagios dù là tượng đài nhưng đã bắt đầu hụt hơi. Giao diện Web 1.0 cũ kỹ, engine đơn luồng xử lý ì ạch khi số lượng check tăng lên. Đặc biệt, tư duy quản lý file phẳng (flat files) cực kỳ khó scale khi hệ thống phình to. Đó là lý do mình chọn Icinga2. Nó giữ được cái chất của Nagios (dùng chung plugin) nhưng mang trong mình tư duy của thời đại Cloud.

Vì sao Nagios dần hụt hơi trong hạ tầng hiện đại?

Vấn đề không nằm ở khả năng giám sát mà ở cách chúng ta vận hành. Khi hạ tầng của anh em chạm mốc 100+ node, Nagios bộc lộ 3 rào cản lớn:

  • Cấu hình lặp lại: Thiếu cơ chế kế thừa (inheritance) linh hoạt. Anh em sẽ thấy mình copy-paste code cấu hình đến phát nản.
  • Tự động hóa kém: Giữa lúc nhà nhà làm CI/CD, việc Nagios thiếu REST API mạnh mẽ khiến nó như một “ốc đảo” tách biệt.
  • Nghẽn cổ chai: Engine cũ khó gánh nổi 5000+ checks mỗi phút mà vẫn đảm bảo độ trễ thấp dưới 200ms.

Chúng ta cần một giải pháp vừa tận dụng được các script cũ, vừa có dashboard hiện đại. Icinga2 lấp đầy khoảng trống này bằng khả năng cấu hình dưới dạng mã (Configuration as Code) cực kỳ chuyên nghiệp.

Lên đời Icinga2 trên Ubuntu: Cứ chạy là ‘nuột’

Mình thường dùng Ubuntu Server vì cộng đồng Icinga trên đây rất đông đảo. Quy trình setup chia làm 3 phần chính: Engine, Database và Icinga Web 2.

1. Cài đặt Icinga2 Engine

Bước đầu, anh em hãy add repository chính thức. Đừng dùng bản cũ trong repo mặc định của Ubuntu để tránh lỗi vặt:

apt update && apt install -y apt-transport-https wget gnupg
wget -O - https://packages.icinga.com/icinga.key | apt-key add -
. /etc/os-release; if [ ! -z "$UBUNTU_CODENAME" ]; then DIST="$UBUNTU_CODENAME"; else DIST="$VERSION_CODENAME"; fi
echo "deb https://packages.icinga.com/ubuntu icinga-${DIST} main" > /etc/apt/sources.list.d/icinga.list

apt update
apt install -y icinga2

2. Cấu hình Database (IDO Module)

Để giao diện web có dữ liệu hiển thị, chúng ta cần một kho lưu trữ. MariaDB là lựa chọn hàng đầu vì tính ổn định cao:

apt install -y mariadb-server icinga2-ido-mysql

# Tạo database và cấp quyền nhanh
mysql -u root -p -e "CREATE DATABASE icinga2; GRANT ALL PRIVILEGES ON icinga2.* TO 'icinga2'@'localhost' IDENTIFIED BY 'your_password_here';"

Kích hoạt tính năng IDO để Icinga2 bắt đầu đẩy dữ liệu vào MySQL:

icinga2 feature enable ido-mysql
systemctl restart icinga2

3. Cài đặt Icinga Web 2

Giao diện Icinga2 là một bước nhảy vọt so với người tiền nhiệm. Nó sạch, hiện đại và hỗ trợ phân quyền user đến từng ngóc ngách.

apt install -y icingaweb2 icingacli

# Lấy mã token để setup qua trình duyệt
icingacli setup token create

Copy mã token vừa hiện ra, truy cập http://your-ip/icingaweb2/setup. Chỉ cần làm theo hướng dẫn, điền thông tin DB là hệ thống sẽ lên xanh mướt.

Kinh nghiệm cấu hình: Đừng tư duy kiểu ‘thợ nề’

Điểm đáng tiền nhất của Icinga2 là TemplatesApply Rules. Thay vì tạo 100 file cho 100 server, anh em chỉ cần định nghĩa luật chơi.

Ví dụ, mình muốn tự động check HTTP cho bất kỳ server nào có gắn nhãn web. Rule sẽ trông như thế này:

# File: /etc/icinga2/conf.d/services.conf

apply Service "http" {
  import "generic-service"
  check_command = "http"
  assign where host.vars.http_check == true
}

Khi thêm host mới, mình chỉ việc set biến đơn giản. Mọi thứ tự động kích hoạt, nhàn tênh:

object Host "web-server-01" {
  import "generic-host"
  address = "192.168.1.10"
  vars.http_check = true
}

Góc chia sẻ: Hệ thống của mình đang dùng Prometheus + Grafana cho các chỉ số metric. Tuy nhiên, với nhu cầu check trạng thái up/down truyền thống hoặc đọc log bằng script Python/Bash, Icinga2 vẫn là “trùm”. Nó giúp mình giảm 90% thời gian viết config so với Nagios.

Cảnh báo linh hoạt: Điện thoại ‘tinh tinh’ là biết ngay lỗi

Email cảnh báo giờ đã quá lỗi thời. Với Icinga2, mình thường tích hợp script đẩy alert về Telegram. Khi server gặp sự cố, điện thoại sẽ báo ngay kèm thông tin chi tiết lỗi. Đội kỹ thuật có thể phản ứng trong vài giây thay vì phải check mail liên tục.

Anh em cũng dễ dàng lọc bớt các cảnh báo rác (flapping) trong file notifications.conf. Khả năng tùy biến theo khung giờ trực cũng là điểm cộng lớn giúp anh em ngủ ngon hơn vào cuối tuần.

Lời kết

Nếu đang mệt mỏi với đống file config loằng ngoằng hay cái giao diện từ thập niên trước, hãy thử Icinga2. Nó không bắt anh em đập đi xây lại toàn bộ script cũ. Nó chỉ tặng anh em một chiếc “động cơ” phản lực để vận hành hạ tầng trơn tru hơn.

Công cụ nào không quan trọng bằng việc hiểu rõ hệ thống. Nhưng với Icinga2, ít nhất anh em sẽ bớt được những lỗi cú pháp ngớ ngẩn. Hãy dành thời gian đó để tối ưu hệ thống hoặc đơn giản là đi cafe với bạn bè.

Share: