网络监控
搭建好 node-exporter 后发现显示的下载/上传信息不对,明明有 40-50MB/s,只显示 1-2KB/s。在 Prometheus 中查询下载流量发现只能找到两个网口:
我们在 node-exporter 的 docker-compose.yml
中加入 network_mode: host
以获取所有网口的监控信息。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
services :
node-exporter :
volumes :
- /:/host:ro,rslave
- ./textfile:/var/lib/node_exporter/textfile_collector
command :
- '--path.rootfs=/host'
- '--collector.textfile.directory=/var/lib/node_exporter/textfile_collector'
network_mode : host
image : prom/node-exporter
restart : always
smartmon :
privileged : true
volumes :
- ./textfile:/var/lib/node_exporter/textfile_collector
network_mode : host
image : smartmon-1min:latest
restart : always
接下来我们在 Grafana 中建立面板,展示以下的监控数据:
上传速度 :max(rate(node_network_transmit_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[1m])) by (instance) / (1024 * 1024)
;
下载速度 :max(rate(node_network_receive_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[1m])) by (instance) / (1024 * 1024)
;
上传流量 :max(node_network_transmit_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}) by (instance) / (1024 * 1024 * 1024)
;
下载流量 :max(node_network_receive_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}) by (instance) / (1024 * 1024 * 1024)
。
其中,我们过滤了由虚拟网卡带来的统计信息。
更好的 Prometheus 配置
我们可以将 Prometheus 重新组织,使得一个 job 对应多个 instance,修改 prometheus.yml
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
global :
scrape_interval : 15s
evaluation_interval : 15s
scrape_configs :
- job_name : 'prometheus'
static_configs :
- targets :
- 'localhost:9090'
labels :
instance : 'master'
- job_name : 'basic'
static_configs :
- targets :
- '<MASTER-IP>:9100'
labels :
instance : 'master'
- targets :
- '<NAS0-IP>:9100'
labels :
instance : 'nas0'
- targets :
- '<NAS1-IP>:9100'
labels :
instance : 'nas1'
- targets :
- '<NAS2-IP>:9100'
labels :
instance : 'nas2'
- job_name : 'gpu'
static_configs :
- targets :
- '<NAS0-IP>:9835'
labels :
instance : 'nas0'
为了删除之前的 job 的数据,我们先修改 prometheus 的 docker 开启 web-api:
1
2
3
4
5
6
7
8
9
10
11
12
13
services :
prometheus :
ports :
- 9090 : 9090
volumes :
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- ./prometheus_data:/prometheus
command :
- "--config.file=/etc/prometheus/prometheus.yml"
- "--storage.tsdb.path=/prometheus"
- "--web.enable-admin-api"
image : prom/prometheus
restart : always
然后执行下面的命令即可:
1
2
curl -X POST -g 'http://localhost:9090/api/v1/admin/tsdb/delete_series?match[]={job="<JOB-NAME>"}'
curl -X POST http://localhost:9090/api/v1/admin/tsdb/clean_tombstones