您好,登錄后才能下訂單哦!
在Prometheus的架構設計中,Prometheus Server并不直接服務監控特定的目標,其主要任務負責數據的收集,存儲并且對外提供數據查詢支持。因此為了能夠能夠監控到某些東西,如主機的CPU使用率,我們需要使用到Exporter。Prometheus周期性的從Exporter暴露的HTTP服務地址(通常是/metrics)拉取監控樣本數據。
從上面的描述中可以看出Exporter可以是一個相對開放的概念,其可以是一個獨立運行的程序獨立于監控目標以外,也可以是直接內置在監控目標中。只要能夠向Prometheus提供標準格式的監控樣本數據即可。
這里為了能夠采集到主機的運行指標如CPU, 內存,磁盤等信息。我們可以使用Node Exporter。
Node Exporter同樣采用Golang編寫,并且不存在任何的第三方依賴,只需要下載,解壓即可運行。
下載軟件包:
mkdir -p /usr/local/prometheus/exporter/node
cd /usr/local/prometheus/exporter/node
curl -s -OL https://github.com/prometheus/node_exporter/releases/download/v0.18.0/node_exporter-$Version.linux-amd64.tar.gz
tar xf node_exporter-0.18.0.linux-amd64.tar.gz
cp -a node_exporter-0.18.0.linux-amd64/node_exporter /usr/local/bin/
cat > /usr/lib/systemd/system/node-exporter.service <<-'EOF'
[Unit]
Description=This is prometheus node exporter
After=docker.service
[Service]
Type=simple
ExecStart=/usr/local/bin/node_exporter
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload && systemctl enable node-exporter.service && systemctl start node-exporter.service
node_exporter 他的本質就是監控主機系統,所以我們不建議將其部署為 docker 容器,因為他需要訪問主機系統.
- job_name: node
metrics_path: /metrics
static_configs:
- targets: ['192.168.111.65:9100']
重啟 prometheus,查看狀態
圖表編號為8919
https://grafana.com/grafana/dashboards/8919
然后可以看到如下圖表
groups:
- name: hostStatsAlert
rules:
- alert: hostCpuUsageAlert
expr: (1- avg(irate(node_cpu_seconds_total{instance=~"$node",mode="idle"}[30m])))*100>85
for: 1m
labels:
level: disaster #定義一個等級標簽,用于altermanager 發送消息
annotations:
summary: "實例 {{ $labels.instance }} CPU使用率過高"
description: "{{ $labels.instance }} CPU 使用率大于 85% (當前值為: {{ $value }})"
- alert: hostMemUsageAlert
expr: (1 - (node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes)))* 100>85
for: 1m
labels:
level: disaster
annotations:
summary: "實例 {{ $labels.instance }} 內存使用率過高"
description: "{{ $labels.instance }} 內存使用率大于 85% (當前的值: {{ $value }})"
- alert: hostLoad
expr: sum(node_load15) >= sum(count(node_cpu_seconds_total{mode='system'}) by (cpu)) and node_load1 > node_load5 and node_load5 > node_load15
for: 1m
labels:
level: disaster
annotations:
summary: "實例 {{ $labels.instance }} 15 分鐘負載過高"
description: "{{ $labels.instance }} 15 分鐘負載大于其 cpu 核心數 (當前的值: {{ $value }})"
- alert: hostUp
expr: up{job="node"} == 0
for: 1m
labels:
level: disaster
annotations:
summary: "實例 {{ $labels.instance }} 不可達"
description: "{{ $labels.instance }} 實例不可達,請盡快解決"
參考文檔:
https://github.com/prometheus/node_exporter
https://yunlzheng.gitbook.io/prometheus-book/parti-prometheus-ji-chu/quickstart/prometheus-quick-start/use-node-exporter
https://grafana.com/grafana/dashboards/8919
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。