网络监控 
  
     
   
搭建好 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