Grafana 監控儀表板 - Debian
因為 BUBU 有使用 Prometheus 服務,可以透過 Grafana 面板將監控資料視覺化呈現,方便分析與檢視。Grafana 官方提供企業版與社群版兩種版本,BUBU 使用的是社群版,本篇將記錄社群版的安裝流程,只要參考官方文檔即可完成安裝。
更新系統環境為 Debian 13 及 Ubuntu 22.04,並修改安裝流程。
運行環境
環境皆架設於「Proxmox VE」虛擬系統,預設以「LXC」模式為主,除非有特殊狀況才會改用「VM」模式。
- 系統環境:Debian 11、13
安裝過程
- 安裝必要的套件
sudo apt-get install -y apt-transport-https wget gnupg
- 匯入
Grafana安裝包的key
sudo mkdir -p /etc/apt/keyrings
sudo wget -O /etc/apt/keyrings/grafana.asc https://apt.grafana.com/gpg-full.key
sudo chmod 644 /etc/apt/keyrings/grafana.asc
- 設定
Grafana套件來源
echo "deb [signed-by=/etc/apt/keyrings/grafana.asc] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
- 更新套件清單並安裝 Grafana 服務
sudo apt-get update && sudo apt-get install grafana -y
- 啟動服務(以下兩種方式擇一執行即可)
sudo systemctl daemon-reload
sudo systemctl start grafana-server && sudo systemctl enable grafana-server
sudo systemctl daemon-reload && sudo systemctl enable --now grafana-server
- 檢查服務狀態
sudo systemctl status grafana-server
- 於瀏覽器輸入
http://grafana連線位置:3000,系統預設帳號與密碼皆為admin。
- 首次登入後系統會要求修改密碼。
- 登入成功後的畫面如下圖所示。
補充說明 1:重置管理員密碼
BUBU 曾忘記登入密碼,剛好查到可以透過指令重置密碼,順便記錄一下重置的方式。
- 登入該站台後輸入以下指令,即可將密碼還原為預設值。指令後方的
admin可替換為您自行設定的密碼;若維持預設值,登入後系統仍會要求修改密碼。
grafana-cli admin reset-admin-password admin
- 修改成功後重新啟動
grafana服務,再使用剛剛設定的密碼即可正常登入。
systemctl restart grafana-server
補充說明 2:透過網域進行反向代理
BUBU 因專案上有需要透過網域連線,因此記錄如何透過 Nginx 反向代理進行連線。
- (選用)修改 Grafana 設定檔
vim /etc/grafana/grafana.ini
若僅為內部使用且未啟用 OAuth 登入或 SMTP 告警通知,可略過此步驟直接使用預設值。但若有啟用上述功能,建議設定 domain 與 root_url,否則 OAuth callback 與通知信件中的連結會指向 localhost:3000。
[server]
# 對外的網域名稱(不含 http:// 與路徑)
domain = 網域名稱
# 瀏覽器實際存取 Grafana 的完整網址
root_url = https://網域名稱/
# 根路徑模式維持預設 false
serve_from_sub_path = false
- 修改完成後重新啟動
grafana服務
sudo systemctl restart grafana-server
- 新增 Nginx 設定檔
vim /etc/nginx/conf.d/xxx.conf
# This is required to proxy Grafana Live WebSocket connections.
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream grafana {
server localhost:3000;
}
server {
listen 80;
server_name 網域名稱; # 請輸入您的網域名稱
rewrite ^(.*)$ https://${server_name}$1 permanent; # 將 HTTP 請求自動轉為 HTTPS
}
server {
# 使用 HTTPS 與 HTTP/2 協定
listen 443 ssl;
http2 on;
# 同時監聽 IPv6
listen [::]:443 ssl;
server_name 網域名稱; # 請輸入您的網域名稱
# SSL 憑證路徑
ssl_certificate /etc/nginx/ssl/fullchain.pem;
# 私鑰路徑
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
# Session 快取有效期
ssl_session_timeout 1d;
# Session 快取類型與大小
ssl_session_cache shared:SSL:50m;
# 使用的加密協定
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ecdh_curve X25519:prime256v1:secp384r1;
# 加密演算法,越前面的優先順序越高
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
# 交握過程由 Client 決定加密演算法的優先順序
ssl_prefer_server_ciphers off;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
proxy_set_header Host $host;
proxy_pass http://grafana;
}
# Proxy Grafana Live WebSocket connections.
location /api/live/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_pass http://grafana;
}
}
補充說明 3:透過子目錄進行反向代理
BUBU 因專案上有需要透過子目錄方式連線(例如 https://網域/grafana/),因此記錄如何透過 Nginx 反向代理進行連線。此範例環境是與 LibreNMS 搭配使用,若要套用於其他環境請自行調整。
- 修改 Grafana 設定檔
vim /etc/grafana/grafana.ini
domain = grafana-dev.net
# 使用子目錄模式時,root_url 必須包含子路徑
root_url = https://grafana-dev.net/grafana/
# 預設為 false,需改成 true
serve_from_sub_path = true
- 新增 Nginx 設定檔
vim /etc/nginx/conf.d/xxx.conf
# This is required to proxy Grafana Live WebSocket connections.
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream grafana {
server localhost:3000;
}
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
server_name 網域名稱; # 請輸入您的網域名稱
rewrite ^(.*)$ https://${server_name}$1 permanent; # 將 HTTP 請求自動轉為 HTTPS
}
server {
# 使用 HTTPS 與 HTTP/2 協定
listen 443 ssl;
http2 on;
# 同時監聽 IPv6
listen [::]:443 ssl;
server_name 網域名稱; # 請輸入您的網域名稱
root /opt/librenms/html;
index index.php;
# SSL 憑證路徑
ssl_certificate /etc/nginx/ssl/freedomstu.com/fullchain.pem;
# 私鑰路徑
ssl_certificate_key /etc/nginx/ssl/freedomstu.com/privkey.pem;
# Session 快取有效期
ssl_session_timeout 1d;
# Session 快取類型與大小
ssl_session_cache shared:SSL:50m;
# 使用的加密協定
ssl_protocols TLSv1.3 TLSv1.2;
# 加密演算法,越前面的優先順序越高
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
# 交握過程由 Server 決定加密演算法的優先順序
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/librenms_access.log;
error_log /var/log/nginx/librenms_error.log;
charset utf-8;
gzip on;
gzip_types text/css application/javascript text/javascript application/x-javascript image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon;
location /grafana/ {
proxy_set_header Host $host;
proxy_pass http://grafana;
}
# Proxy Grafana Live WebSocket connections.
location /grafana/api/live/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_pass http://grafana;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ [^/]\.php(/|$) {
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass unix:/run/php-fpm-librenms.sock;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}


