Chuyển tới nội dung chính

Giám sát Windows Server hiệu quả với Zabbix và Prometheus

Giới Thiệu

Giám sát Windows Server là một phần thiết yếu trong quản lý hạ tầng CNTT, giúp đảm bảo hiệu suất ổn định, phát hiện sớm các sự cố và tối ưu hóa tài nguyên. Bài viết này sẽ hướng dẫn bạn cách thiết lập giám sát Windows Server bằng hai công cụ phổ biến và mạnh mẽ: Zabbix và Prometheus. Zabbix cung cấp giải pháp giám sát toàn diện với Agent-based, trong khi Prometheus mang lại sự linh hoạt với mô hình pull-based thông qua Node Exporter.

Chúng ta sẽ đi qua các bước cài đặt và cấu hình cho cả hai phương pháp, giúp bạn lựa chọn giải pháp phù hợp nhất với môi trường của mình.

📋 Thời gian: Khoảng 30-45 phút | Độ khó: Trung bình

Yêu Cầu

Để thực hiện theo hướng dẫn này, bạn cần có:

  • Một máy chủ Windows Server (phiên bản 2012 R2 trở lên) đã cài đặt và có quyền quản trị (Administrator).
  • Một Zabbix Server đã hoạt động và có thể truy cập từ Windows Server (đối với phương pháp Zabbix).
  • Một Prometheus Server đã hoạt động và có thể truy cập từ Windows Server (đối với phương pháp Prometheus).
  • Truy cập mạng giữa máy chủ giám sát (Zabbix/Prometheus) và Windows Server (đảm bảo các cổng cần thiết được mở).
  • Hiểu biết cơ bản về Windows Server và cách sử dụng dòng lệnh.

Các Bước Thực Hiện

Bước 1: Giám sát Windows Server bằng Zabbix Agent

Zabbix sử dụng Agent để thu thập dữ liệu từ Windows Server.

1.1 Cài đặt Zabbix Agent trên Windows Server

  1. Tải Zabbix Agent: Truy cóp trang tải Zabbix và chọn phiên bản Agent phù hợp với kiến trúc Windows Server của bạn (x64 hoặc x86). Tải gói MSI.

  2. Cài đặt Agent: Mở Command Prompt hoặc PowerShell với quyền Administrator. Điều hướng đến thư mục chứa file MSI đã tải về và chạy lệnh sau, thay thế <Zabbix_Server_IP> bằng địa chỉ IP của Zabbix Server của bạn và <Hostname_Windows> bằng tên máy chủ Windows mà bạn muốn hiển thị trong Zabbix.

    msiexec /i zabbix_agent-6.4.x-windows-amd64-openssl.msi /qn /norestart SERVER=<Zabbix_Server_IP> SERVERACTIVE=<Zabbix_Server_IP> HOSTNAME=<Hostname_Windows>
    • SERVER: Địa chỉ IP của Zabbix Server cho chế độ passive checks.
    • SERVERACTIVE: Địa chỉ IP của Zabbix Server cho chế độ active checks (Agent gửi dữ liệu đến Server).
    • HOSTNAME: Tên máy chủ mà Zabbix Agent sẽ sử dụng khi gửi dữ liệu. Tên này phải khớp với tên Host bạn sẽ tạo trong Zabbix Server.

    💡 Mẹo: Bạn có thể chỉnh sửa file zabbix_agentd.conf (thường nằm trong C:\Program Files\Zabbix Agent\) để tinh chỉnh cấu hình sau khi cài đt.

  3. Kiểm tra dịch vụ: Sau khi cài đặt, dịch vụ Zabbix Agent sẽ tự động khởi động. Bạn có thể kiểm tra trạng thái của nó qua Services Manager hoặc PowerShell:

    Get-Service | Where-Object {$_.DisplayName -like "*Zabbix Agent*"}

    ✅ Đảm bảo dịch vụ đang chạy (Status: Running). Nếu không, hãy khởi động nó: Start-Service "Zabbix Agent".

1.2 Cấu hình trên Zabbix Server

  1. Thêm Host mới:

    • Đăng nhập vào giao diện web của Zabbix Server.
    • Đi tới Configuration -> Hosts.
    • Nhấp vào Create host.
    • Nhập các thông tin sau:
      • Host name: Phải khớp với HOSTNAME bạn đã cấu hình trong Zabbix Agent (<Hostname_Windows>).
      • Visible name: Tên hiển thị trong Zabbix (có thể khác Host name).
      • Groups: Chọn một nhóm phù hợp (ví dụ: Windows servers).
      • Agent interfaces: Nhấp Add, chọn Agent, nhập địa chỉ IP của Windows Server và cổng mặc định 10050.
  2. Liên kết Template:

    • Chuyển sang tab Templates.
    • Nhấp Add và tìm Windows by Zabbix agent. Chọn nó và nhấp Select.
    • Nhấp Add để hoàn tất việc tạo Host.
  3. Kiểm tra kết nối: Sau vài phút, Zabbix Server sẽ bắt đầu thu thập dữ liệu. Bạn có thể kiểm tra trạng thái của Host trong Configuration -> Hosts. Biểu tượng ZBX nên chuyển sang màu xanh lá cây. Bạn cũng có thể kiểm tra kết nối từ Zabbix Server bằng lệnh zabbix_get:

    zabbix_get -s <Windows_Server_IP> -p 10050 -k "agent.ping"

    Nếu trả về 1, Agent đang hoạt động và giao tiếp được với Server. ⚠️ Lưu ý: Đảm bảo tường lửa trên Windows Server đã mở cổng 10050 (và 10051 nếu dùng Active checks) cho Zabbix Server.

Bước 2: Giám sát Windows Server bằng Prometheus Node Exporter

Prometheus sử dụng Node Exporter để thu thập metrics từ Windows Server.

2.1 Cài đặt Prometheus Node Exporter trên Windows Server

  1. Tải Node Exporter: Truy cập trang Prometheus download và tìm node_exporter cho Windows. Tải về file ZIP.

  2. Giải nén và cấu hình:

    • Giải nén file ZIP vào một thư mục cố định, ví dụ: C:\Program Files\node_exporter.
    • Bên trong thư mục, bạn sẽ thấy file node_exporter.exe.
  3. Cài đt Node Exporter như một dịch vụ Windows: Để Node Exporter chạy liên tục, bạn nên cài đặt nó như một dịch vụ. Chúng ta sẽ sử dụng nssm (Non-Sucking Service Manager) vì nó đơn giản và hiệu quả.

    • Tải NSSM: Tải nssm từ trang chủ. Giải nén và sao chép nssm.exe (phiên bản phù hợp với kiến trúc của bạn) vào một thư mục trong biến môi trường PATH của hệ thống, ví dụ: C:\Windows\System32.

    • Cài đặt dịch vụ: Mở Command Prompt hoặc PowerShell với quyền Administrator và chạy lệnh:

      nssm install node_exporter

      Một cửa sổ GUI sẽ xuất hiện:

      • Path: C:\Program Files\node_exporter\node_exporter.exe (đường dẫn đến file node_exporter.exe).
      • Arguments: (để trống hoặc thêm --web.listen-address=":9100" nếu bạn muốn chỉ định rõ cổng, mặc định là 9100).
      • Nhấp Install service.
    • Kiểm tra dịch vụ:

      Get-Service | Where-Object {$_.DisplayName -like "*node_exporter*"}

      ✅ Đảm bảo dịch vụ đang chạy. Nếu không, hãy khởi động nó: Start-Service "node_exporter".

  4. Mở cổng tường lửa: Node Exporter mặc định lắng nghe trên cổng 9100. Bạn cần mở cổng này trên Windows Firewall để Prometheus Server có thể truy cập.

    netsh advfirewall firewall add rule name="Prometheus Node Exporter" dir=in action=allow protocol=TCP localport=9100

2.2 Cấu hình trên Prometheus Server

  1. Chỉnh sửa prometheus.yml: Trên Prometheus Server, chỉnh sửa file cấu hình prometheus.yml (thường nằm trong thư mục cài đặt Prometheus). Thêm một job mới vào phần scrape_configs:

    - job_name: 'windows_servers'
    static_configs:
    - targets: ['<Windows_Server_IP>:9100']
    labels:
    instance: 'windows-server-01' # Tên hiển thị tùy chỉnh

    Thay thế <Windows_Server_IP> bằng địa chỉ IP của Windows Server.

  2. Tải lại cấu hình Prometheus: Bạn có thể tải lại cấu hình Prometheus mà không cần khởi động lại dịch vụ.

    # Gửi tín hiệu SIGHUP đến tiến trình Prometheus
    # Tìm PID của Prometheus và dùng lệnh kill -HUP <PID>
    # Hoặc nếu Prometheus chạy bằng systemd:
    sudo systemctl reload prometheus

    💡 Mẹo: Đảm bảo cú pháp YAML của bạn chính xác. Sử dụng công cụ kiểm tra YAML nếu cần.

2.3 Kiểm tra dữ liệu

  1. Kiểm tra trực tiếp Node Exporter: Mở trình duyệt trên bất kỳ máy nào có thể truy cập Windows Server và điều hướng đến http://<Windows_Server_IP>:9100/metrics. Bạn sẽ thấy một danh sách dài các metrics mà Node Exporter đang thu thập.

  2. Kiểm tra trên Prometheus UI: Truy cập giao diện web của Prometheus Server (thường là http://<Prometheus_Server_IP>:9090).

    • Đi tới Status -> Targets.
    • Bạn sẽ thấy windows_servers job và trạng thái của target <Windows_Server_IP>:9100 nên là UP.
    • Trong tab Graph, bạn có thể thử truy vấn các metrics như windows_cpu_total_idle_time_total hoặc windows_memory_physical_bytes_free.

Troubleshooting

Zabbix

  • ⚠️ Agent không kết nối được (ZBX màu đỏ):

    • Kiểm tra Firewall: Đảm bảo cổng 10050 (và 10051 nếu dùng Active checks) trên Windows Server đã được mở cho Zabbix Server.
    • Kiểm tra cấu hình Agent: Xác minh ServerServerActive trong zabbix_agentd.conf trỏ đúng đến IP cóa Zabbix Server. Đảm bảo Hostname khớp với tên Host trong Zabbix UI.
    • Kiểm tra dịch vụ Agent: Đảm bảo dịch vụ "Zabbix Agent" đang chạy trên Windows Server.
    • Kiểm tra Log Agent: Xem file log của Zabbix Agent (thường ở C:\Program Files\Zabbix Agent\zabbix_agentd.log) để tìm lỗi.
  • ⚠️ Dữ liệu không hiển thị:

    • Template: Đảm bảo bạn đã liên kết template "Windows by Zabbix agent" hoặc một template Windows phù hợp khác với Host.
    • Items/Triggers: Kiểm tra xem các Items và Triggers có được kích hoạt (Enabled) trong template hay không.

Prometheus

  • ⚠️ Node Exporter không trả về metrics:

    • Kiểm tra Firewall: Đảm bảo cổng 9100 trên Windows Server đã được mở cho Prometheus Server.
    • Kiểm tra dịch vụ Node Exporter: Đảm bảo dịch vụ node_exporter đang chạy trên Windows Server.
    • Truy cập trực tiếp: Thử truy cập http://<Windows_Server_IP>:9100/metrics từ trình duyệt. Nếu không thấy gì, có thể Node Exporter chưa chạy đúng cách hoặc bị chặn bởi firewall cục bộ của máy chủ.
    • Kiểm tra Log Node Exporter: Nếu bạn cài đặt bằng nssm, bạn có thể kiểm tra log trong NSSM GUI hoặc Event Viewer.
  • ⚠️ Prometheus Server không scrape được:

    • Cấu hình prometheus.yml: Kiểm tra lại cú pháp YAML và địa chỉ IP/port của target trong prometheus.yml. Một lỗi nhỏ cũng có thể khiến Prometheus không tải được cấu hình.
    • Reload Prometheus: Đảm bảo bạn đã reload cấu hình Prometheus sau khi thay đổi prometheus.yml.
    • Prometheus UI: Kiểm tra Status -> Targets trong Prometheus UI để xem trạng thái của target. Nó sẽ hiển thị lỗi nếu có vấn đề khi scrape.

Kết Luận

Giám sát Windows Server là một quá trình liên tục và cần thiết. Với Zabbix và Prometheus, bạn có hai lựa chọn mạnh mẽ để theo dõi hiệu suất và sức khỏe của các máy chủ Windows của mình.

  • Zabbix là một hệ thống giám sát toàn diện, cung cấp các tính năng như thu thập dữ liệu, biểu đồ, cảnh báo và báo cáo trong một giao diện người dùng thống nhất. Nó phù hợp cho các môi trường yêu cầu một giải pháp "tất cả trong một".
  • Prometheus nổi bật với mô hình thu thập dữ liệu pull-based, ngôn ngữ truy vấn linh hoạt PromQL và khả năng tích hợp tốt với các công cụ hiển thị như Grafana để tạo dashboard tùy chỉnh. Nó lý tưởng cho các môi trường DevOps và microservices.

Best practices:

  • Giám sát các chỉ số quan trọng: Luôn theo dõi CPU, RAM, Disk I/O, Network traffic, các dịch vụ quan trọng và không gian ổ đĩa trống.
  • Đặt ngưỡng cảnh báo phù hợp: Cấu hình cảnh báo dựa trên các ngưỡng thực tế để nhận thông báo kịp thời về các vấn đề tiềm ẩn mà không bị quá tải bởi các cảnh báo giả.
  • Sử dụng Grafana: Dù bạn chọn Zabbix hay Prometheus, việc tích hợp với Grafana sẽ giúp bạn tạo ra các dashboard trực quan và mạnh mẽ để dễ dàng theo dõi hệ thống.
  • Bảo mật: Đảm bảo các cổng giám sát chỉ mở cho các địa chỉ IP của máy chủ giám sát của bạn để tránh rủi ro bảo mật.

Xem thêm: