Giám sát hiệu suất phần cứng HomeLab: Hướng dẫn về TIG Stack (Telegraf, InfluxDB, Grafana)

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

Phát hiện các điểm nghẽn hiệu suất HomeLab

Đó là một kịch bản mà mọi người đam mê HomeLab đều quen thuộc: bạn đang chạy nhiều dịch vụ khác nhau – có thể là máy chủ Jellyfin, một vài Docker container được quản lý bởi Portainer, hoặc thậm chí là một tường lửa ảo hóa như pfSense. Mọi thứ vận hành trơn tru, rồi đột nhiên, mọi thứ chậm lại. Máy chủ media của bạn bị giật, các trang web cục bộ tải chậm chạp, hoặc một bản sao lưu hàng đêm kéo dài hàng giờ. Tại sao?

Vấn đề thực sự là gì? Có phải do CPU, RAM, I/O ổ đĩa hay tắc nghẽn mạng? Nếu không có cái nhìn rõ ràng, bạn sẽ phải đoán mò. Bạn có thể thử dùng top hoặc htop, hy vọng bắt được thủ phạm.

Vượt ra ngoài ảnh chụp nhanh: Hiểu rõ nguyên nhân gốc rễ của sự chậm chạp

Vấn đề cốt lõi không phải lúc nào cũng là thiếu tài nguyên; mà thường là thiếu ngữ cảnh lịch sử. Các công cụ dòng lệnh tiêu chuẩn như free -h, iostat hoặc netstat chỉ cung cấp một ‘ảnh chụp nhanh’ về hiệu suất hệ thống hiện tại. Mặc dù rất hữu ích để khắc phục sự cố tức thời, chúng không tiết lộ điều gì đã xảy ra một giờ trước, đêm qua hay tuần trước.

Việc thiếu dữ liệu dài hạn này khiến việc xác định xu hướng, phát hiện các sự cố không liên tục hoặc hiểu tác động của các dịch vụ hoặc cấu hình mới trở nên cực kỳ khó khăn. Các đợt tăng đột biến CPU đó có bình thường không, hay là dấu hiệu của một ứng dụng đang hoạt động sai? Ổ đĩa của bạn có thực sự là điểm nghẽn hay chỉ bận rộn trong các khoảng thời gian sao lưu dự kiến?

Hơn nữa, việc quản lý dữ liệu hiệu suất trên nhiều máy HomeLab nhanh chóng trở thành một cơn ác mộng phân mảnh. Bạn sẽ phải SSH vào từng máy chủ riêng lẻ, chạy các lệnh và cố gắng đối chiếu các điểm dữ liệu trong đầu. Phương pháp thủ công, phản ứng này không chỉ kém hiệu quả mà thường quá muộn để ngăn ngừa sự cố hoặc thực sự tối ưu hóa thiết lập của bạn.

Khám phá các giải pháp giám sát HomeLab

Khi nói đến giám sát, người dùng HomeLab có một vài lựa chọn. Đơn giản nhất là kiểm tra thủ công các công cụ cấp OS. Nó miễn phí và dễ dàng có sẵn, nhưng bị hạn chế nghiêm trọng về phạm vi và khả năng lưu trữ dữ liệu lịch sử.

Giám sát ứng dụng riêng lẻ

Nhiều ứng dụng cung cấp dashboard hoặc metrics tích hợp. Docker cung cấp số liệu thống kê, một số hypervisor máy ảo bao gồm giám sát cơ bản và các dịch vụ như Jellyfin có thể hiển thị mức sử dụng tài nguyên hiện tại. Mặc dù những thứ này hữu ích cho các ứng dụng cụ thể, chúng không cung cấp cái nhìn thống nhất về phần cứng bên dưới của bạn. Bạn vẫn đang ghép các mảnh ghép riêng lẻ lại thay vì nhìn thấy toàn bộ bức tranh.

Các Stack tập trung vào Log (ví dụ: ELK Stack, Grafana Loki)

Trước đây tôi đã tìm hiểu các giải pháp ghi log tập trung như ELK Stack (Elasticsearch, Logstash, Kibana) hoặc Grafana Loki. Những giải pháp này rất tuyệt vời để tổng hợp log của ứng dụng và hệ thống, cung cấp cái nhìn sâu sắc về các sự kiện, lỗi và hành vi của ứng dụng.

Tuy nhiên, chúng không được thiết kế chủ yếu cho các metrics số, độ phân giải cao như mức sử dụng CPU, tiêu thụ bộ nhớ hoặc băng thông mạng. Mặc dù bạn có thể đẩy một số metrics qua chúng, nhưng đó không phải là điểm mạnh chính của chúng và thường đòi hỏi nhiều công sức thiết lập hơn so với một giải pháp metrics chuyên dụng.

Lựa chọn tối ưu: TIG Stack cho Metrics phần cứng

Sau sáu tháng sử dụng liên tục, thực tế trong HomeLab của riêng tôi, tôi có thể tự tin khẳng định TIG Stack (Telegraf, InfluxDB và Grafana) đã trở thành cốt lõi thiết yếu trong chiến lược giám sát hiệu suất của tôi. Nó được xây dựng có mục đích để thu thập, lưu trữ và trực quan hóa dữ liệu chuỗi thời gian, làm cho nó hoàn toàn phù hợp với metrics phần cứng. Stack này đạt được sự cân bằng tuyệt vời giữa sức mạnh, tính linh hoạt và dễ triển khai cho mọi môi trường HomeLab.

Theo kinh nghiệm của tôi, việc thành thạo TIG Stack là một kỹ năng quan trọng đối với bất kỳ ai nghiêm túc trong việc duy trì một HomeLab đáng tin cậy và hiệu quả. Khả năng xem chính xác phần cứng của bạn đang làm gì, cả trong quá khứ và thời gian thực, biến việc khắc phục sự cố từ việc đoán mò thành phân tích chính xác, dựa trên dữ liệu. Hãy cùng phân tích từng thành phần và thiết lập chúng.

1. Telegraf: Công cụ thu thập dữ liệu hàng đầu của bạn

Telegraf là một agent máy chủ mã nguồn mở, hoạt động dựa trên plugin. Nó xuất sắc trong việc thu thập metrics từ nhiều nguồn khác nhau và gửi chúng đến nhiều đầu ra. Đối với HomeLab, điểm mạnh của nó nằm ở việc chạy trên hầu hết mọi OS (Linux, Windows, macOS, BSD) và thu thập metrics cấp hệ thống một cách hiệu quả. Nó nhẹ, sử dụng tài nguyên tối thiểu, ngay cả trên một Raspberry Pi chỉ với 1GB RAM.

Cài đặt (Ví dụ trên Ubuntu/Debian):


# Thêm khóa GPG của InfluxData
wget -qO- https://repos.influxdata.com/influxdata-archive_compat.key | sudo gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata.gpg > /dev/null

# Thêm kho lưu trữ của InfluxData
echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list

# Cập nhật và cài đặt Telegraf
sudo apt update
sudo apt install telegraf

Cấu hình cơ bản:

Tệp cấu hình chính thường nằm tại /etc/telegraf/telegraf.conf. Đối với một thiết lập cơ bản, bạn sẽ cần định nghĩa cả input (ví dụ: inputs.cpu, inputs.mem, inputs.disk) và output (InfluxDB).

Chỉnh sửa /etc/telegraf/telegraf.conf:


# Cấu hình output cho InfluxDB
[[outputs.influxdb]]
  urls = ["http://192.168.1.100:8086"] # Thay thế bằng IP và cổng của máy chủ InfluxDB của bạn
  database = "telegraf" # Cơ sở dữ liệu để ghi vào trong InfluxDB
  # username = "telegraf"
  # password = "mật khẩu của bạn"

# Ví dụ input CPU
[[inputs.cpu]]
  percpu = true
  totalcpu = true
  collect_cpu_time = false
  fielddrop = ["time_*"]

# Ví dụ input bộ nhớ
[[inputs.mem]]
  # không cần cấu hình

# Ví dụ input ổ đĩa
[[inputs.disk]]
  ignore_fs = ["tmpfs", "devtmpfs", "devfs", "overlay", "aufs", "squashfs"]

# Ví dụ input mạng
[[inputs.net]]
  # devices = ["eth0", "enp1s0"]

# Đừng quên khởi động lại Telegraf sau khi thay đổi
sudo systemctl restart telegraf

Bạn sẽ cài đặt Telegraf trên mỗi máy bạn muốn giám sát. Mỗi instance Telegraf sau đó sẽ chuyển tiếp các metrics đã thu thập của nó đến InfluxDB trung tâm của bạn.

2. InfluxDB: Cơ sở dữ liệu chuỗi thời gian chuyên dụng

InfluxDB là một cơ sở dữ liệu được xây dựng đặc biệt cho dữ liệu chuỗi thời gian. Không giống như các cơ sở dữ liệu quan hệ truyền thống, InfluxDB được tối ưu hóa để lưu trữ và truy vấn khối lượng lớn thông tin có dấu thời gian. Điều này làm cho nó cực kỳ hiệu quả để xử lý metrics. Đây là kho lưu trữ trung tâm nơi tất cả dữ liệu Telegraf của bạn sẽ cư trú.

Cài đặt (Ví dụ trên Ubuntu/Debian – thường là trên máy chủ HomeLab trung tâm của bạn):


# InfluxDB có thể được cài đặt tương tự như Telegraf bằng cách thêm kho lưu trữ InfluxData
# Giả sử bạn đã thêm khóa GPG và kho lưu trữ cho Telegraf:

sudo apt update
sudo apt install influxdb

# Khởi động và bật dịch vụ InfluxDB
sudo systemctl start influxdb
sudo systemctl enable influxdb

Cấu hình cơ bản và tạo cơ sở dữ liệu:

Sau khi cài đặt, bạn có thể sử dụng InfluxDB CLI để tạo cơ sở dữ liệu cho Telegraf. Hãy nhớ rằng, cổng mặc định cho các tương tác HTTP API là 8086.


# Kết nối với InfluxDB CLI
influx

# Tạo cơ sở dữ liệu cho metrics của Telegraf
CREATE DATABASE telegraf

# (Tùy chọn) Tạo người dùng kèm mật khẩu
# CREATE USER telegraf WITH PASSWORD 'mật khẩu của bạn' WITH ALL PRIVILEGES
# Nếu bạn tạo người dùng, hãy nhớ cập nhật telegraf.conf với tên người dùng và mật khẩu

# Thoát CLI
exit

3. Grafana: Công cụ trực quan hóa trực quan của bạn

Grafana là một nền tảng mã nguồn mở được thiết kế để giám sát và observability. Nó cho phép bạn truy vấn, trực quan hóa, cảnh báo và thực sự hiểu các metrics của mình, bất kể chúng được lưu trữ ở đâu. Với InfluxDB làm nguồn dữ liệu, Grafana biến các con số thô thành các dashboard trực quan, có thể hành động.

Cài đặt (Ví dụ trên Ubuntu/Debian – thường là trên cùng máy chủ với InfluxDB):


# Thêm khóa GPG của Grafana
sudo install -m a+r /usr/share/keyrings/grafana.asc
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/grafana.gpg > /dev/null

# Thêm kho lưu trữ Grafana
echo "deb [signed-by=/usr/share/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee /etc/apt/sources.list.d/grafana.list

# Cập nhật và cài đặt Grafana
sudo apt update
sudo apt install grafana

# Khởi động và bật dịch vụ Grafana
sudo systemctl start grafana-server
sudo systemctl enable grafana-server

Thiết lập ban đầu và tạo Dashboard:

  1. Tru cập Grafana: Mở trình duyệt web của bạn và điều hướng đến http://your_grafana_server_ip:3000. Tên đăng nhập mặc định là admin / admin. Bạn sẽ được nhắc thay đổi mật khẩu này ngay lập tức.
  2. Thêm nguồn dữ liệu:
    • Từ menu bên trái, đi tới ‘Connections’ > ‘Data sources’. Sau đó nhấp vào ‘Add new data source’.
    • Tìm kiếm ‘InfluxDB’ và chọn nó.
    • Cấu hình các cài đặt:
      • Tên: HomeLab InfluxDB (hoặc bất kỳ tên mô tả nào)
      • Ngôn ngữ truy vấn: Chọn InfluxQL cho hướng dẫn này. (Flux dành cho InfluxDB 2.x, nhưng chúng ta đang sử dụng InfluxDB 1.x.)
      • HTTP URL: http://localhost:8086 (nếu InfluxDB nằm trên cùng máy) hoặc http://your_influxdb_server_ip:8086.
      • Cơ sở dữ liệu: telegraf
      • (Tùy chọn) Nếu bạn đã tạo người dùng, hãy nhập tên người dùng và mật khẩu tương ứng.
    • Nhấp vào ‘Save & Test’. Thông báo ‘Data source is working’ sẽ xuất hiện.
  3. Tạo Dashboard đầu tiên của bạn:
    • Từ menu bên trái, điều hướng đến ‘Dashboards’ > ‘New dashboard’.
    • Nhấp vào ‘Add a new panel’.
    • Trong tab ‘Query’, chọn nguồn dữ liệu ‘HomeLab InfluxDB’ của bạn.
    • Viết một truy vấn InfluxQL. Ví dụ, để trực quan hóa mức sử dụng CPU, hãy sử dụng:
      
      SELECT mean("usage_idle") FROM "cpu" WHERE ("host" = 'your_server_hostname') AND $timeFilter GROUP BY time($__interval) fill(null)
      

      Hãy nhớ thay thế your_server_hostname bằng hostname thực tế được Telegraf báo cáo. Bạn có thể tìm thấy điều này bằng cách truy vấn InfluxDB trực tiếp (ví dụ: SELECT * FROM cpu LIMIT 10 trong influx CLI) hoặc bằng cách khám phá metrics trong trình tạo truy vấn của Grafana.

    • Bạn có thể thêm nhiều panel hơn cho bộ nhớ, I/O ổ đĩa, lưu lượng mạng và các metrics khác. Grafana cũng cung cấp nhiều dashboard dựng sẵn cho Telegraf/InfluxDB, có sẵn trên trang web Grafana Labs. Những dashboard này rất tuyệt để bắt đầu nhanh chóng; bạn có thể nhập chúng trực tiếp vào instance Grafana của mình.

Sau sáu tháng: Cái nhìn sâu sắc về HomeLab thực tế

Chạy TIG Stack trong nửa năm đã thay đổi cơ bản cách tôi quản lý HomeLab của mình. Thời kỳ khắc phục sự cố phản ứng đã qua, thay vào đó là giám sát chủ động.

Giờ đây tôi có thể dễ dàng phát hiện tình trạng cạn kiệt tài nguyên – như CPU liên tục trên 80% trong 15 phút – trước khi nó ảnh hưởng đến dịch vụ. Tôi có thể xác định hoạt động mạng bất thường và theo dõi tình trạng sức khỏe dài hạn của các ổ đĩa cứng của mình. Ví dụ, việc I/O ổ đĩa tăng liên tục trong vài tuần đối với một dịch vụ cụ thể ngay lập tức báo hiệu một cấu hình kém hiệu quả, mà sau đó tôi đã có thể tối ưu hóa, giảm mức sử dụng không tải xuống 15%.

Sức mạnh thực sự của thiết lập này nằm ở khả năng mở rộng và tính linh hoạt của nó. Tôi đã dễ dàng thêm các máy chủ mới, máy ảo và thậm chí cả thiết bị IoT vào stack giám sát chỉ bằng cách triển khai Telegraf và trỏ nó đến InfluxDB trung tâm của tôi.

Khả năng cảnh báo mạnh mẽ của Grafana đã tạo nên sự khác biệt lớn, thông báo cho tôi qua Telegram khi các ngưỡng quan trọng bị vượt quá – có thể là ổ đĩa gần đầy, mức sử dụng CPU cao liên tục hoặc một máy chủ bị ngoại tuyến. Mức độ hiển thị này mang lại sự an tâm đáng kể, cho phép tôi thực sự tối ưu hóa HomeLab của mình và đảm bảo hoạt động trơn tru cho tất cả các dịch vụ tự host của tôi.

Share: