Prometheus: 從 Linux 獲取指標
如何使用 Node Exporter 在 Prometheus 中獲取 Linux 伺服器指標
👋 歡迎來到 Stackhero 文件!
Stackhero 提供一個即用型的 Prometheus cloud 解決方案,帶來多項好處,包括:
- 包含
Alert Manager,可發送警報至Slack、Mattermost、PagerDuty等。- 專用電郵伺服器發送無限電郵警報。
Blackbox用於探測HTTP、ICMP、TCP等。- 使用線上配置文件編輯器進行簡易配置。
- 只需點擊即可輕鬆完成更新。
- 由專用私有 VM提供的最佳性能和強大安全性。
節省時間並簡化您的生活:只需 5 分鐘即可嘗試 Stackhero 的 Prometheus cloud hosting 解決方案!
什麼是 Prometheus Node Exporter
Node Exporter 是一種軟件,您可以安裝在 *NIX 核心(如 Linux、OpenBSD、FreeBSD 或 Darwin)上,以便為 Prometheus 暴露系統指標。它是監控伺服器性能和基礎設施健康狀況的重要組件。
在 Prometheus 的術語中,Node Exporter 作為一個 exporter,並在您的 Prometheus 配置中作為目標添加。Prometheus 通過 HTTP 使用 TCP 端口 9100 定期連接到 Node Exporter 以檢索指標。
總之,Node Exporter 允許您監控基於 Linux 的系統。 對於 Windows 系統,您可以使用 Windows Exporter。
Stackhero for Prometheus 的大圖
在 Linux 伺服器上安裝 Prometheus Node Exporter
您可以從其 GitHub 發佈頁面 下載 Node Exporter。它以二進制形式分發,直接在您的系統上運行。由於它設計為持續運行,建議您配置它在伺服器啟動時自動啟動。
默認情況下,Node Exporter 在沒有身份驗證或加密的情況下向世界開放端口 9100。強烈建議您添加身份驗證和 TLS 加密(見下文),並設置防火牆以限制對端口 9100 的訪問,以便只有您的 Prometheus 伺服器或其他授權的 IP 地址可以連接。
如何在 Ubuntu 上安裝 Prometheus Node Exporter
您可以在 Ubuntu 上按照以下步驟進行:
# 前往 https://github.com/prometheus/node_exporter/releases 獲取最新版本號。
node_exporter_version="1.2.0"
node_exporter_release="linux-amd64"
# 下載並安裝 node_exporter
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v${node_exporter_version}/node_exporter-${node_exporter_version}.${node_exporter_release}.tar.gz
tar xvfa node_exporter-${node_exporter_version}.${node_exporter_release}.tar.gz
sudo mv node_exporter-${node_exporter_version}.${node_exporter_release}/node_exporter /usr/local/bin/
rm -rf node_exporter-${node_exporter_version}.${node_exporter_release} node_exporter-${node_exporter_version}.${node_exporter_release}.tar.gz
# 創建用戶 "node_exporter"
sudo useradd -rs /bin/false node_exporter
# 創建 systemd 服務以在啟動時自動啟動 node_exporter
sudo bash -c 'cat << EOF > /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter --web.config=/etc/prometheus_node_exporter/configuration.yml
[Install]
WantedBy=multi-user.target
EOF'
# 創建配置目錄和文件
sudo mkdir -p /etc/prometheus_node_exporter/
sudo touch /etc/prometheus_node_exporter/configuration.yml
sudo chmod 700 /etc/prometheus_node_exporter
sudo chmod 600 /etc/prometheus_node_exporter/*
sudo chown -R node_exporter:node_exporter /etc/prometheus_node_exporter
sudo systemctl daemon-reload
sudo systemctl enable node_exporter
# 啟動 node_exporter 守護進程並檢查其狀態
sudo systemctl start node_exporter
sudo systemctl status node_exporter
此時,node_exporter 二進制文件應該在您的伺服器上運行。要確認它是否正常工作,您可以連接到它並檢查它是否返回指標:
curl http://localhost:9100/metrics
Node Exporter 向公共網絡開放端口 9100。這意味著任何人都可以連接並檢索您的伺服器指標! 至少,您應該添加身份驗證和 TLS 加密(見下文),並強烈建議設置防火牆以阻止來自非 Prometheus 伺服器的 IP 的端口 9100 請求。
如何在 Debian 上安裝 Prometheus Node Exporter
在 Debian 上安裝 Node Exporter 的過程與上面描述的 Ubuntu 方法相同。只需按照相同的說明進行操作。
如何在其他系統上安裝 Prometheus Node Exporter
Node Exporter 的安裝步驟取決於您使用的系統。雖然未提供每個平台的詳細文檔,但基本過程涉及下載與您的系統匹配的二進制文件並配置它在啟動時啟動。
為 Prometheus Node Exporter 添加身份驗證
默認情況下,Node Exporter 不進行身份驗證,這意味著任何人都可以檢索暴露的指標。為了保護訪問,您可以為用戶添加基本身份驗證。
生成隨機密碼
使用以下命令生成密碼:
password=`openssl rand -base64 32`
passwordHashed=`echo ${password} | htpasswd -inBC 10 "" | tr -d ':'`
echo "保留給 Prometheus 伺服器的明文密碼:${password}"
如果您沒有
htpasswd二進制文件,您可以使用apt-get install --no-install-recommends apache2-utils在 Debian/Ubuntu 上安裝它。
請妥善保管明文密碼,因為在配置 Prometheus 時您將需要它。
添加用戶並重啟 Node Exporter
將以下行附加到配置文件中,以添加一個名為 "prometheus" 的用戶,並使用生成的密碼哈希:
sudo cat << EOF >> /etc/prometheus_node_exporter/configuration.yml
basic_auth_users:
prometheus: ${passwordHashed}
EOF
# 重啟 Node Exporter
sudo systemctl restart node_exporter
最後,驗證身份驗證是否正常工作:
- 執行
curl http://localhost:9100/metrics應返回 "Unauthorized"。 - 執行
curl -u prometheus:${password} http://localhost:9100/metrics應返回指標列表。
為 Prometheus Node Exporter 添加 TLS 加密
默認情況下,Node Exporter 不加密通信。這意味著包括先前定義的密碼在內的憑據以明文形式傳輸。為了保護通信,您可以按以下方式啟用 TLS 加密。
創建 TLS 證書
運行以下命令以創建 TLS 證書和密鑰:
# 創建 TLS 證書
cd /tmp
sudo openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 \
-keyout /etc/prometheus_node_exporter/tlsCertificate.key \
-out /etc/prometheus_node_exporter/tlsCertificate.crt \
-subj "/CN=`hostname`" \
-addext "subjectAltName = DNS:`hostname`"
sudo chmod 600 /etc/prometheus_node_exporter/*
sudo chown -R node_exporter:node_exporter /etc/prometheus_node_exporter
更新配置
將以下行附加到配置文件中以添加 TLS 設置,然後重啟 Node Exporter:
sudo cat << 'EOF' >> /etc/prometheus_node_exporter/configuration.yml
tls_server_config:
cert_file: /etc/prometheus_node_exporter/tlsCertificate.crt
key_file: /etc/prometheus_node_exporter/tlsCertificate.key
EOF
# 重啟 Prometheus Node Exporter
sudo systemctl restart node_exporter
您可以通過以下命令使用 HTTPS 連接來驗證 TLS 是否啟用:
curl -k -u prometheus:${password} https://localhost:9100/metrics
請注意,此方法不使用 CA 證書,因此您需要將 "-k" 選項傳遞給 cURL 以繞過證書驗證。
配置 Prometheus 伺服器以從 Node Exporter 獲取數據
安裝並保護 Node Exporter 後,配置您的 Prometheus 伺服器以定期獲取指標。
在 Stackhero 上,選擇您的 Prometheus 服務並轉到 "Prometheus configuration" URL。然後將以下內容添加到您的 scrape_configs 部分:
scrape_configs:
- job_name: "My servers pool"
static_configs:
- targets: [ "<yourLinuxServerDomain>:9100" ]
basic_auth:
username: "prometheus"
password: "<password>"
scheme: https
tls_config:
insecure_skip_verify: true
# 重命名 "instance" 以移除 ":9100" 部分
relabel_configs:
- source_labels: [__address__]
target_label: instance
regex: '([^:]+)(:[0-9]+)?'
replacement: '${1}'
保存文件並檢查您的 Prometheus 日誌以確認它已成功重新加載(您可以從 Stackhero 儀表板中選擇您的 Prometheus 服務並點擊 "Logs" 標籤查看日誌)。
最後,通過訪問 Stackhero 儀表板上的 Prometheus UI 並導航到 Status > Targets,驗證 Prometheus 是否正在獲取指標。您的 Linux 伺服器應在目標列表中顯示為 UP。
目標 "myLinuxServer" 是 UP
在 Prometheus 上顯示數據
要查看從 Node Exporter 獲取的指標,請通過 Stackhero 儀表板使用 "Prometheus UI" URL 或直接在 https://<prometheusDomain>/ 登錄到 Prometheus。
在 "Expression" 欄位中,輸入 node_memory_MemTotal_bytes 並按 Enter。如果一切配置正確,您將看到伺服器的總 RAM 以字節顯示。
此伺服器的總 RAM 為 4068794368 字節,即 3.78GB
配置 Grafana 顯示從 Node Exporter 獲取的 Prometheus 數據
Grafana 可以輕鬆生成基於 Prometheus 數據的儀表板。有關配置 Grafana 以顯示 Prometheus 數據的詳細說明,請參閱 Grafana 的文檔。
基於 Prometheus Node Exporter 數據生成的 Grafana 儀表板示例