Grafana 使用 Prometheus 监控网络流量

网络监控

搭建好 node-exporter 后发现显示的下载/上传信息不对,明明有 40-50MB/s,只显示 1-2KB/s。在 Prometheus 中查询下载流量发现只能找到两个网口:

exec.png

我们在 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

相关内容

0%