node_exporter安裝及部署
Prometheus使用exporter工具來暴露主機和應用程序上的指標。有很多中類型的exporter。node_exporter下載地址
1.二進制安裝node_exporter
1.添加新的系統用戶
useradd --system node_exporter
2. 進行解壓縮下載的軟件,然后拷貝node_exporter文件到/usr/bin目錄中。
tar zxvf node_exporter-1.2.2.linux-amd64.tar.gz -C /usr/bin --strip-components=1 --wildcards */node_exporter
3.添加systemd unit文件
vim node-exporter.service
[Unit]
Description=Node Exporter
Documentation=https://github.com/prometheus/node_exporter
After=network.target
[Service]
User=node_exporter
ExecStart=/usr/bin/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target
install -m 0644 ./node-exporter.service /etc/systemd/system/
4. 啟動服務
systemctl daemon-reload
systemctl enable node-exporter
systemctl start node-exporter
node-exporter常用選項
默認情況下,node_exporter 在端口9100上運行,並在路徑/metrics上暴露指標。可以通過 --web.listen-address和 --web.telemetry-path參數來設置端口和路徑。
node_exporter --web.listen-address=":9222" --web.telemetry-path="/node_metrics"
以上的定義就是監聽端口為9222,暴露的路徑為node_metrics。
很多收集器默認都是啟用的,如果不想啟用某些收集器,可以通過使用no-前綴來修改狀態。
如:不要收集CPU相關信息
--no-collector.cpu
2.容器安裝node_exporter
參考node_exporter具體選項使用:https://github.com/prometheus/node_exporter
docker pull prom/node-exporter
#
# 容器啟動node-exporter:
docker run -d \
--net="host" \
--pid="host" \
-v "/:/host:ro,rslave" \
quay.io/prometheus/node-exporter:latest \
--path.rootfs=/host
# 編寫docker-compose啟動node-exporter容器文件:
vim docker-compse.yml
networks:
monitor:
driver: bridge
services:
node_exporter:
image: prom/node-exporter:latest
container_name: node_exporter
command:
- '--path.rootfs=/host'
#- '--web.telemetry-path=/node_metrics' # 修改默認的uri(/metrics)
network_mode: host
pid: host
hostname: node_exporter
restart: always
user: root
volumes:
- '/:/host:ro,rslave'
ports:
- "9100:9100"
networks:
- monitor
node_exporter使用案例
1.textfile收集器
textfile收集器在暴露自定義指標時特別有用。這些自定義指標可能是批處理或cron作業等無法抓取的,可能是沒有exporter的源,甚至可能是為主機提供上下文的靜態指標
收集器通過掃描指定目錄中的文件,提取所有格式為Prometheus指標的字符串,然后暴露它們以便抓取。
1.創建一個目錄來保存指標定義文件
mkdir -p /var/lib/node_exporter/textfile_collector
2.創建一個文件
echo "metadata{role='docker_server',datacenter='SH'} 1" > /var/lib/node_exporter/textfile_collector/metadata.prom
[注意]如果要啟用textfile收集器,由於它默認會被加載,所以可能需要我們指定它的加載目錄。 --collector.textfile.directory
2.systemd收集器
systemd收集器默認收集了眾多指標,如果只想收集某些服務的話,可以把他們加入白名單。使用 --collector.systemd.unit-whitelist 參數配置
docker.service
sshd.service
rsyslog.service
3.Node Exporter修改如下
vim /etc/systemd/system/node-exporter.service
[Unit]
Description=Node Exporter
Documentation=https://github.com/prometheus/node_exporter
After=network.target
[Service]
User=node_exporter
ExecStart=/usr/bin/node_exporter --collector.textfile.directory /var/lib/node_exporter/textfile_collector --collector.systemd --collector.systemd.unit-whitelist="(docker|sshd|rsyslog).service" # 在命令行直接執行node_exporter命令可以只抓取到自定義的這三個服務,但是寫到systemd,node_exporter就抓取不到了。嘗試把我們自定義收集的systemd(-collector.systemd.unit-whitelist="(docker|sshd|rsyslog).service" )給刪除掉,使用systemd(node_exporter.service),抓取所有的systemd,就可以了。
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl restart node-exporter
4.prometheus配置
# /etc/prometheus.yml配置中增加如下:
- job_name: 'node'
static_configs:
- targets: ["192.168.1.121:9100"]
5.過濾收集器
Node Exporter可以返回很多指標。除了使用Node Exporter 控制運行哪些收集器之外,Prometheus還提供一種方式來限制收集器從服務器端實際抓取的數據。
修改配置如下:
# /etc/prometheus.yml配置信息如下
- job_name: 'node'
sttic_configs:
- targets: ['192.168.1.121:9090']
params:
collect[]: # 限制只收集這五種指標
- cpu
- meminfo
- diskstats
- netdev
- systemd
現在去掉diskstats指標,查看prometheus抓取的數據就不包含disk相關的指標了。。。。。
# /etc/prometheus.yml配置信息如下
- job_name: 'node'
sttic_configs:
- targets: ['192.168.1.121:9090']
params:
collect[]: # 限制只收集這五種指標
- cpu
- meminfo
# - diskstats
- netdev
- systemd