监控神器vnStat初探

作者 : admin 本文共5009个字,预计阅读时间需要13分钟 发布时间: 2024-06-16 共1人阅读

文章目录

  • 一、概述
  • 二、官方docker部署
    • 1. vnStat守护进程和HTTP服务器在同一容器中运行
    • 2. 双容器运行,vnstat容器收集数据,vnstati容器提供web服务
  • 三、修改后的编排文件
  • 四、运行结果
  • 五、停止监控不感兴趣的网卡

一、概述

vnStat是一款网络流量监测工具,它利用内核提供的网络接口统计数据作为信息来源。这意味着vnStat并不会实际嗅探任何流量,同时也确保了无论网络流量大小,系统资源的轻量级使用。

默认情况下,流量统计以五分钟级别保存最近48小时的数据,以小时级别保存最近4天,以日级别保存过去两个完整月,以年级别永久保存。数据保留期限完全可由用户配置。同时提供总流量和最活跃日期列表。

运行效果先睹为快:https://http.00fly.online/监控神器vnStat初探插图

二、官方docker部署

1. vnStat守护进程和HTTP服务器在同一容器中运行

这个示例对于大多数用户来说可以直接使用,但会导致HTTP服务器也使用主机网络,这可能不是某些用户所期望的功能。

docker-compose.yml

version: "3.7"
services:

  vnstat:
    image: vergoh/vnstat:latest
    container_name: vnstat
    restart: unless-stopped
    network_mode: "host"
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - vnstatdb:/var/lib/vnstat
    environment:
      - HTTP_PORT=8685
      - HTTP_BIND=*
      - HTTP_LOG=/dev/stdout
      - LARGE_FONTS=0
      - CACHE_TIME=1
      - RATE_UNIT=1
      - INTERFACE_ORDER=0
      - QUERY_MODE=0
      - DARK_MODE=0
      - PAGE_REFRESH=0

volumes:
  vnstatdb:

2. 双容器运行,vnstat容器收集数据,vnstati容器提供web服务

vnStat守护进程在一个容器(vnstat)中运行,使用主机网络来访问所有网络接口,但不提供任何服务或绑定端口。第二个容器(vnstati)不使用主机网络,而是提供HTTP服务器,使用只读共享卷访问统计信息。

docker-compose.yml

version: "3.7"
services:

  vnstat:
    image: vergoh/vnstat:latest
    container_name: vnstat
    restart: unless-stopped
    network_mode: "host"
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - vnstatdb:/var/lib/vnstat
    environment:
      - HTTP_PORT=0

  vnstati:
    image: vergoh/vnstat:latest
    container_name: vnstati
    restart: unless-stopped
    ports:
      - "8685:8685"
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - vnstatdb:/var/lib/vnstat:ro
    environment:
      - HTTP_PORT=8685
      - HTTP_LOG=/dev/stdout
      - LARGE_FONTS=0
      - CACHE_TIME=1
      - RATE_UNIT=1
      - INTERFACE_ORDER=0
      - QUERY_MODE=0
      - DARK_MODE=0
      - PAGE_REFRESH=0
      - RUN_VNSTATD=0

volumes:
  vnstatdb:

三、修改后的编排文件

本人部署使用的编排文件内容如下:

docker-compose.yml

version: "3.7"
services:
  vnstat-data:
    image: vergoh/vnstat:latest
    container_name: vnstat
    deploy:
      resources:
        limits:
          cpus: '1.0'
          memory: 10M
        reservations:
          cpus: '0.80'
          memory: 6M
    restart: unless-stopped
    network_mode: "host"
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - ./vnstatdb:/var/lib/vnstat
    environment:
      - HTTP_PORT=0
      - EXCLUDE_PATTERN=^docker|^veth|^br-
    logging:
      driver: 'json-file'
      options:
        max-size: '5m'
        max-file: '1'

  vnstat-web:
    image: vergoh/vnstat:latest
    container_name: vnstat-web
    deploy:
      resources:
        limits:
          cpus: '1.0'
          memory: 20M
        reservations:
          cpus: '0.80'
          memory: 10M
    restart: unless-stopped
    ports:
      - 8086:8685
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /etc/timezone:/etc/timezone:ro
      - ./vnstatdb:/var/lib/vnstat:ro
    environment:
      - HTTP_PORT=8685
      - HTTP_LOG=/dev/stdout
      - LARGE_FONTS=0
      - CACHE_TIME=1
      - RATE_UNIT=1
      - INTERFACE_ORDER=0
      - QUERY_MODE=0
      - DARK_MODE=0
      - PAGE_REFRESH=30
      - RUN_VNSTATD=0
    logging:
      driver: 'json-file'
      options:
        max-size: '5m'
        max-file: '1'

四、运行结果

部署完成后,等待5分钟,访问:http://124.71.129.204:8086/
我们看到如下页面
监控神器vnStat初探插图(1)
我们看到的是全部网卡的监控信息。

五、停止监控不感兴趣的网卡

有些情况下,我们不希望监控全部网卡的流量信息,只监控我们感兴趣的网卡流量信息,怎么办呢?

其实vnstat 已经提供了相关命令:

停止监控不必要的接口
shell docker exec vnstat vnstat -i br-20f8582bfc70 --remove --force
这边的br-20f8582bfc70就是我们希望去除监控的网卡名。

我们知道ifconfig 命令可以列出全部网卡信息,我们借助这个命令
新建 interface-update.sh
内容如下:

#!/bin/bash
echo '-----------'
echo  'ifconfig'
echo '-----------'

cmd="`ifconfig`"
array=($cmd)
IFS=" "

#打印命令,替换:为空字符串
echo '-----remove------'
for i in "${!array[@]}"; do
  if [[ ${array[i]} == br-* || ${array[i]} == veth* || ${array[i]} == docker* ]]
  then
    echo  "docker exec vnstat vnstat -i ${array[i]/:/} --remove --force"
  fi
done

#打印命令,替换:为空字符串
echo '----- add ------'
for i in "${!array[@]}"; do
  if [[ ${array[i]} == br-* || ${array[i]} == veth* || ${array[i]} == docker* ]]
  then
    echo  "docker exec vnstat vnstat -i ${array[i]/:/} --add"
  fi
done

我们在服务器上运行此脚本,运行结果如下:

-----------
ifconfig
-----------
-----remove------
docker exec vnstat vnstat -i br-1f52297f917e --remove --force
docker exec vnstat vnstat -i br-67ff2e42d10c --remove --force
docker exec vnstat vnstat -i br-78d4a3c0bf47 --remove --force
docker exec vnstat vnstat -i br-b9a03c41aaa2 --remove --force
docker exec vnstat vnstat -i br-be58b50c950a --remove --force
docker exec vnstat vnstat -i docker0 --remove --force
docker exec vnstat vnstat -i veth19d0a30 --remove --force
docker exec vnstat vnstat -i veth2e43779 --remove --force
docker exec vnstat vnstat -i veth5e0cc71 --remove --force
docker exec vnstat vnstat -i veth6049f23 --remove --force
docker exec vnstat vnstat -i veth79b6a3e --remove --force
docker exec vnstat vnstat -i veth83276c4 --remove --force
docker exec vnstat vnstat -i veth980b40a --remove --force
docker exec vnstat vnstat -i vethb2df867 --remove --force
docker exec vnstat vnstat -i vethf775220 --remove --force
docker exec vnstat vnstat -i vethf1f6950 --remove --force
----- add ------
docker exec vnstat vnstat -i br-1f52297f917e --add
docker exec vnstat vnstat -i br-67ff2e42d10c --add
docker exec vnstat vnstat -i br-78d4a3c0bf47 --add
docker exec vnstat vnstat -i br-b9a03c41aaa2 --add
docker exec vnstat vnstat -i br-be58b50c950a --add
docker exec vnstat vnstat -i docker0 --add
docker exec vnstat vnstat -i veth19d0a30 --add
docker exec vnstat vnstat -i veth2e43779 --add
docker exec vnstat vnstat -i veth5e0cc71 --add
docker exec vnstat vnstat -i veth6049f23 --add
docker exec vnstat vnstat -i veth79b6a3e --add
docker exec vnstat vnstat -i veth83276c4 --add
docker exec vnstat vnstat -i veth980b40a --add
docker exec vnstat vnstat -i vethb2df867 --add
docker exec vnstat vnstat -i vethf775220 --add
docker exec vnstat vnstat -i vethf1f6950 --add

–remove –force 结束的命令是移除监控,–add 结束的命令是添加监控。

下面我们可以拷贝运行需要的命令了。
我们运行全部的移除监控命令
最终执行效果如下:
监控神器vnStat初探插图(2)

有任何问题和建议,都可以向我提问讨论,大家一起进步,谢谢!

-over-

本站无任何商业行为
个人在线分享 » 监控神器vnStat初探
E-->