[Homelab] #9 Cài đặt Glances nhưng không thành
Mình đang cần một thứ để có thể Monitor traffic mạng và các thông số như CPU, Memory. Có hai cái tên là Glances và Prometheus. Mình sẽ chọn Glances vì độ đơn giản của nó.
Các vấn đề và giải pháp
Vấn đề 1: Wireguard route toàn bộ traffic đi, không thể dùng với Cloudflared
Vấn đề này thì giải pháp có tailscale hoặc cloudlfared tunnel dùng trong wireguard. Tuy nhiên việc cài cloudflared trực tiếp trên windows server thì không được, vì traffic nó đang routing qua toàn bộ qua wireguard server mà wireguard server thì nó nằm ở vps. Vì vậy việc setup cloudflared tunnel thì không được.
Thế nên nghĩ một cái giải pháp là cloudflared tunnel nằm trong wireguard. Thì đó NAT vào trong wireguard server. Nhờ vậy có thể port từ mạng 10.66.66.66/24 (Máy server) đi trực tiếp vào wireguard, và có thể port ra ngoài thông qua cloudflared. Thế là vấn đề liền đã được giải quyết.
Vấn đề 2: Cài Glances kèm với password để authenticate
Cách cài đặt glances ban đầu sẽ bind port 0.0.0.0 ra ngoài. Nó tương đương với localhost:61208 và mình cũng thử truy cập với ip mà nó nằm trong wireguard 10.66.66.66:61208 và nó thực sự hoạt động. Ý tưởng sử dụng Wireguard để NAT bắt đầu từ đây.
Đầu tiên thử test bằng việc cho NAT qua IP WAN của VPS (Wireguard Server) Sau đó thử truy cập vào IP WAN:61208 xong thử với nó. Cho ufw allow 61208/tcp xong rồi thế là chạy được. Có thể truy cập vào WANVPS:61208 để truy cập vào Glances.
Từ đó thì việc sử dụng Cloudflared là hoàn toàn khả thi. Cài đặt cloudflared rồi, thì nó expose ra ngoài thì nó thật sự kỳ cục. Khi mà chỉ cần có domain thôi là ai cũng vô được. Trông cũng chẳng khác gì so với việc bị scan ip liên tục.
Trùng hợp thay, ở gethomepage có tham số username và password cho widget Glances. Từ đó cho thấy Glances có một đoạn authenticate cơ bản. Vậy thì sử dụng thôi.
Vì ai cũng có thể truy cập. Vấn đề lại nằm ở Glances khi không thể truyền hai tham số username và password cùng lúc
Ban đầu thì thử
glances -w --bind 10.66.66.66 --port 61208 --disable-autodiscover --username --password
Thế này thì phải config ban đầu
glances -w --bind 10.66.66.66 --port 61208 --disable-autodiscover --username=admin --password
Bằng cách nào đó thì nó nhận username=admin làm username chứ không phải cái bình thường
glances -w --bind 10.66.66.66 --port 61208 --disable-autodiscover -u=admin --password
Bằng cách này thì nó nhận đúng admin làm username. Và sau đó chỉ cần setting password một lần và lưu, sau đó không cần phải làm gì khác cả. Chạy lại cũng chỉ cần dòng lệnh đó.
Thế là xong Glances, quá tuyệt vời.
Tuy nhiên vẫn còn đang cân nhắc việc export dạng Prometheus hoặc Glances.
Glances thì bên gethomepage chỉ làm được một số thứ như hiện toàn bộ info, cpu, memory, disk, network. Tuy nhiên định dạng hiển thị của nó không phù hợp với định hướng của mình tí nào. Khi hiển thị bằng info thì nó sẽ hiện như thế này.

Nó sẽ hiện Memory ở dạng % và mình thực sự không thích điều này.
Còn nếu sử dụng memory thì nó sẽ có dạng

Hạn chế là nó chiếm mất luôn 1 cái widget. Điều này thật sự không hay. Trong khi định hướng của mình lại là

Vẫn còn phân vân quá...
Chắc là làm Glances thuần trước.
Vấn đề 3: File .env và declare trong Docker
https://github.com/gethomepage/homepage/discussions/4886 Mãi đến cái issue này mới resolve được.
Cách dùng các biến env trong gethomepage là dùng "{{VAR}}" chứ không phải dùng kiểu ${} như GPT chỉ.
Cả cái file mẫu của ông anh gửi cũng chỉ dùng là {{VAR}} chứ không có ""

Không hiểu lắm, lỗi syntax thôi nên cũng chẳng cần hiểu.
Vấn đề 4: Glances và Prometheus
Con quỷ Gethomepage nó không hỗ trợ loại metric Glances mà mình mong muốn, thế nên chắc phải tìm một giải pháp khác thay thế.
Có hai cách. Cách 1 là Fork rồi làm một cái mới luôn hỗ trợ. Cách 2 thì đơn giản hơn, dùng Prometheus để query. Có lẽ sẽ dùng cách 2 vì nó sẽ cho thêm kiến thức về Prometheus.
Vấn đề 5: Chuyển hướng port forward và masderaque
Vì các đường mạng của các Node đều routing qua VPN (Bị ép buộc) thế nên hệ thống sẽ trông như bị phân tán khá nhiều. Vì vậy cần phải thiết lập port forward đi thông cho Prometheus (Lúc trước là Glances cũng tương tự, nhưng đi qua Cloudflared Tunnel. Tuy nhiên được một thời gian thì hạn chế của Python xuất hiện khá rõ ràng. Gây chậm hệ thống và hệ thống web server bị time out, không bắt được data => Chuyển sang Windows Exporter (cho Prometheus) được viết bằng Golang nên chạy rất clean với hệ thống buộc phải chạy liên tục, không có dư tài nguyên.
Thêm vào đó việc sử dụng Prometheus cũng có một mặt lợi khác là có thể tổng hợp Data, cho thấy được sức mạnh của toàn bộ Data Center hiện đang có.
Vấn đề 6: Glances crash sau một khoảng thời gian hoạt động
Mình không nắm rõ được vì sao? Cơ bản là API lẫn WebUI của Glances đều không phản hồi. Phỏng đoán là do hệ thống của mình không có dư tài nguyên cho việc này. Thế nên mình đã chốt là từ bỏ Glances
All rights reserved