跳到主內容

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 告警通知,可略過此步驟直接使用預設值。但若有啟用上述功能,建議設定 domainroot_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;
    }
}

備註





參考相關網頁