[Prometheus] 在 Linux 上安裝 Node Exporter 示範

Node Exporter 是安裝在要被監視的主機上,Node Exporter 會建立一個文字網頁(預設 PORT 是 9100),讓 Prometheus 可以從這個網頁上面讀取資料。

安裝 Node Exporter

先到 node_exporter 的 GitHub 下載頁面,複製下載連結,筆者這裡複製的是 node_exporter-1.8.2.linux-amd64.tar.gz

使用 wget 指令下載檔案(貼上剛剛複製的連結):
    
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz
    

將下載的檔案解壓縮:
註: 記得替換檔名
    
tar xvfz node_exporter-*.*-amd64.tar.gz
    

解壓縮後會產生 node_exporter-1.8.2.darwin-amd64 資料夾,我們把他移動到 linux 中專門存放第三方軟體的 /opt 路徑
    
sudo mv node_exporter-1.8.2.linux-amd64 /opt/
    

進入到剛剛移動完畢的新路徑下:
    
cd /opt/node_exporter-1.8.2.linux-amd64
    

直接執行 node_exporter
    
./node_exporter
    

如果出現下面的錯誤訊息則很有可能是下載到錯誤的版本,請確認版本重新下載:
    
./node_exporter
-bash: ./node_exporter: cannot execute binary file: Exec format error
    

正常執行的範例輸出:
    
./node_exporter
ts=2024-12-05T16:07:26.598Z caller=node_exporter.go:193 level=info msg="Starting node_exporter" version="(version=1.8.2, branch=HEAD, revision=f1e0e8360aa60b6cb5e5cc1560bed348fc2c1895)"
ts=2024-12-05T16:07:26.598Z caller=node_exporter.go:194 level=info msg="Build context" build_context="(go=go1.22.5, platform=linux/amd64, user=root@03d440803209, date=20240714-11:53:45, tags=unknown)"
ts=2024-12-05T16:07:26.600Z caller=filesystem_common.go:111 level=info collector=filesystem msg="Parsed flag --collector.filesystem.mount-points-exclude" flag=^/(dev|proc|run/credentials/.+|sys|var/lib/docker/.+|var/lib/containers/storage/.+)($|/)
ts=2024-12-05T16:07:26.601Z caller=filesystem_common.go:113 level=info collector=filesystem msg="Parsed flag --collector.filesystem.fs-types-exclude" flag=^(autofs|binfmt_misc|bpf|cgroup2?|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|iso9660|mqueue|nsfs|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|selinuxfs|squashfs|sysfs|tracefs)$
ts=2024-12-05T16:07:26.601Z caller=diskstats_common.go:111 level=info collector=diskstats msg="Parsed flag --collector.diskstats.device-exclude" flag=^(z?ram|loop|fd|(h|s|v|xv)d[a-z]|nvme\d+n\d+p)\d+$
ts=2024-12-05T16:07:26.601Z caller=node_exporter.go:111 level=info msg="Enabled collectors"
ts=2024-12-05T16:07:26.601Z caller=node_exporter.go:118 level=info collector=arp
ts=2024-12-05T16:07:26.601Z caller=node_exporter.go:118 level=info collector=bcache
ts=2024-12-05T16:07:26.601Z caller=node_exporter.go:118 level=info collector=bonding
ts=2024-12-05T16:07:26.601Z caller=node_exporter.go:118 level=info collector=btrfs
ts=2024-12-05T16:07:26.601Z caller=node_exporter.go:118 level=info collector=conntrack
ts=2024-12-05T16:07:26.601Z caller=node_exporter.go:118 level=info collector=cpu
ts=2024-12-05T16:07:26.601Z caller=node_exporter.go:118 level=info collector=cpufreq
ts=2024-12-05T16:07:26.601Z caller=node_exporter.go:118 level=info collector=diskstats
    

如果有正常執行,是可以使用下面的網頁看到 node_exporter 暴露出來的資訊的:
註: 記得替換 IP
    
http://192.168.0.41:9100/metrics
    

設定 Node Exporter 自動執行

上面啟動 node_exporter 的方式是在指令介面中呼叫執行檔,並不會自動在背景執行。我們可以使用 Linux 內建的服務來自動執行 node_exporter。
建立服務檔:
    
sudo vim /etc/systemd/system/node_exporter.service
    

在服務檔中填入以下內容:
註: 記得替換 ExecStart 內的檔案路徑
    
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target

[Service]
Restart=always
ExecStart=/opt/node_exporter-1.8.2.linux-amd64/node_exporter

[Install]
WantedBy=multi-user.target
    

啟用服務:
    
sudo systemctl enable node_exporter
    

執行服務:
    
sudo systemctl start node_exporter
    

確認服務執行狀態:
    
sudo systemctl status node_exporter
    

這樣在開機後網路服務準備好時就會自動啟動 node_exporter 了

更新 Prometheus ,抓取 Node Exporter 資料

編輯 prometheus 的設定檔,加入以下資訊:
    
global:
  scrape_interval: 15s
  evaluation_interval: 15s
  
# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093
          
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"
scrape_configs:

  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]

  - job_name: node_exporter
    static_configs:
      - targets:
          - "localhost:9100"
    

上面增加了一個 Job ,會抓取本機的 9100 網頁資訊,也就是 Node Exporter 暴露出來的資料。

重新啟動 Prometheus 後就會看到已經讀取到資料了:

在 Prometheus 的設定檔中也可以替主機加上別名(alias),這樣未來在查詢時就可以比較簡單的辨識主機。
以下示範監視兩台主機並設定別名的設定檔:
    
global:
  scrape_interval: 15s
  evaluation_interval: 15s
  
# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093
          
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"
scrape_configs:

  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]

  - job_name: node_exporter
    static_configs:
      - targets:
          - "localhost:9100"
        labels:
          alias: prometheus

      - targets:
          - "192.168.0.30:9100"
        labels:
          alias: server
    



參考資料:
Prometheus - Monitoring Linux host metrics with the Node Exporter

留言