监控神器vnStat初探

文章目录

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

一、概述

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

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

运行效果先睹为快:https://http.00fly.online/在这里插入图片描述

二、官方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 已经提供了相关命令:

停止监控不必要的接口
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 结束的命令是添加监控。

下面我们可以拷贝运行需要的命令了。
我们运行全部的移除监控命令
最终执行效果如下:
在这里插入图片描述

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

-over-

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/712127.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微服务SpringCloud ES分布式全文搜索引擎简介 下载安装及简单操作入门

Elasticsearch ES简介 分布式全文搜索引擎 我们天天在用ES 搜索的时候 要与多个信息进行匹配查找 然后返回给用户 首先 ES会将数据库中的信息 先进行一个拆分 这个叫做分词 是按照词语关键词拆的 然后就能进行搜索的时候匹配对应的id 每一个关键字对应若干id 每一个…

算法day32

第一题 207. 课程表 步骤一: 通过下图的课程数组,首先画出DAG图(有向无环图) 步骤二: 其次我们按照DAG图,来构建该图的拓扑排序,等有效的点都按照规则排完序后,观察是否有剩下的点的入度不为0&…

【靶场搭建】-01- 在kali上搭建DVWA靶机

1.DVWA靶机 DVWA(Damn Vulnerable Web Application)是使用PHPMysql编写的web安全测试框架,主要用于安全人员在一个合法的环境中测试技能和工具。 2.下载DVWA 从GitHub上将DVWA的源码clone到kali上 git clone https://github.com/digininj…

远程问诊软件哪款好?选欣九康诊疗系统

近几年国家相继推出了支持发展“互联网医疗”的政策,如今随着相关政策的不断落实推进,市场上涌现出了一大批在线咨询、电子处方和远程问诊的医疗平台,而在面对种类如此繁多的医疗平台究竟选择哪款更好便成了医疗机构非常头疼的事情&#xff0…

Mac平台上公认的最好的下载工具Folx Pro 5 for Mac激活码

Folx是什么 Folx Pro 5 for Mac是Mac平台上公认的最好的下载工具,功能可以与迅雷相媲美。 Folx是一款老牌下载神器,可通过URL链接和种子文件下载文件,同时提供了便捷的下载管理和灵活的应用设置,Folx可以对下载的资源进行分类&a…

解决Qt的multimedia库在clion中依赖库补全的问题

解决Qt的multimedia库在clion中使用报错的问题 在clion中,使用Qt的multimedia库时会报如下错误: defaultServiceProvider::requestService(): no service found for - "org.qt-project.qt.mediaplayer" 我猜测出现这个错误的原因很可能是因为…

adb卸载系统应用

1.进入shell adb shell2.查看所有包 pm list packages3.查找包 如查找vivo相关的包 pm list packages | grep vivo发现包太多了,根本不知道哪个是我们想卸载的应用 于是可以打开某应用,再查看当前运行应用的包名 如下: 4.查找当前前台运行的包名 打开某应用,在亮屏状态输入 …

超超长篇 - 手把手带你用python玩转Excel

文章目录 pandas库读取excel1、按行读取 Excel 文件2、按列读取 Excel 文件3、总结示例 openpyxl操作excel1、基础使用创建一个新的 Excel 工作簿打开一个现有的 Excel 文件写入数据到工作表读取工作表中的数据操作行和列合并和拆分单元格 2、按行写入Excel3、按列写入Excel4、…

盘点国内外免费AI视频工具,助你先人一步拥抱AI

哈喽,各位小伙伴们好,我是给大家带来各类黑科技与前沿资讯的小武。 6月13日,Luma AI 在 X 平台(原 Twitter)宣布其视频生成模型 Dream Machine 开放测试,并提供免费试用,这在海外 AI 圈掀起了一…

有哪些常用ORM框架

ORM(Object-Relational Mapping,对象关系映射)是一种编程技术,它允许开发者使用面向对象的编程语言来操作关系型数据库。ORM的主要目的是将数据库中的数据表映射到编程语言中的对象,从而使得开发者可以使用对象的方式来…

Kotlin编程实践-【Java如何调用Kotlin中带默认值参数的函数】

问题 如果你有一个带有默认参数值的 Kotlin 函数,如何从 Java 调用它而无须为每个参数显式指定值? 方案 为函数添加注解JvmOverloads。 也就是为Java添加重载方法,这样Java调用Kotlin的方法时就不用传递全部的参数了。 示例 在 Kotlin …

【ARM-Linux篇】智能家居语音模块配置

1. pin脚配置: 2. 命令词自定义基本信息: 3. 命令词自定控制详情: • 测试:串口模块可先通过串口助手验证每个指令的准确性, 然后运行wiringOP中的serialTest程序(需把/dev/ttyS2改成/dev/ttyS5) 然后语音接收到指令后(比如喊你好…

【CTF Web】CTFShow 数据库恶意下载 Writeup(目录扫描+mdb文件泄露+Access脱库)

数据库恶意下载 10 mdb文件是早期aspaccess构架的数据库文件,文件泄露相当于数据库被脱裤了。 解法 用 dirsearch 扫描。 dirsearch -u 4b9b415f-4062-4bba-a6f5-3b107804043f.challenge.ctf.show找到一个 db 目录。 扫描 db 目录。 dirsearch -u 4b9b415f-4062-…

深入理解Java中的synchronized关键字

目录 前言 一、什么是synchronized 二、synchronized的底层实现 三、synchronized与其他同步机制的比较 四、synchronized的使用方式 1. synchronized的重入 2.synchronized的异常 前言 Java是一种面向对象的编程语言,以其强大的并发处理能力而闻名。在多线程…

mini web框架示例

web框架: 使用web框架专门负责处理用户的动态资源请求,这个web框架其实就是一个为web服务器提供服务的应用程序 什么是路由? 路由就是请求的url到处理函数的映射,也就是说提前把请求的URL和处理函数关联好 管理路由可以使用一个…

浅谈网络通信(3)

文章目录 一、TCP[!]1.1、TCP协议报文格式1.2、TCP十大机制1.2.1、确认应答机制1.2.2、超时重传机制1.2.3、连接管理机制1.2.3.1、三次握手[其流程至关重要,面试必考]1.2.3.2.1、那为啥要建立连接??建立连接的意义是啥?&#xff1…

数据库管理-第204期 数据库的IO掉速,也许是SSD的锅(20240615)

数据库管理204期 2024-06-15 数据库管理-第204期 数据库的IO掉速,也许是SSD的锅(20240615)1 SSD物理结构2 SSD颗粒类型3 DRAM & SLC Cache3.1 DRAM3.2 SLC Cache3.3 其他方式 4 缓外降速总结 数据库管理-第204期 数据库的IO掉速&#xff…

System-Verilog 实现DE2-115流水灯

文章目录 一、 SystemVerilog1. SystemVerilog简介2. 基本语法和特性 二、实验过程hello.v文件引脚分配 三、实验效果参考 一、 SystemVerilog 1. SystemVerilog简介 SystemVerilog是一种高级的硬件描述语言(HDL),它不仅继承了Verilog语言的…

Qt项目天气预报(2) - 重写事件函数

鼠标右键实现退出界面 知识点QMenu: QMenu 弹出对话框 --> 相对QMessageBox 更加轻量点 QMenu是Qt库中用于创建弹出式菜单的类,它通常出现在应用程序的顶部菜单栏、按钮的右键菜单或自定义上下文菜单中。以下是关于QMenu的详细介绍: 1. 类的基本特…

JUnit 5学习笔记

JUnit 5 学习笔记 1.JUnit5的改变2.JUnit5常用注解及测试2.1 DisplayName/Disabled/BeforeEach/AfterEach/BeforeAll/AfterAll2.2 Timeout2.3 RepeatedTest 3.断言3.1 简单断言3.2 数组断言3.3 组合断言3.4 异常断言3.5 超时断言3.6 快速失败 4.前置条件5.嵌套测试6.参数化测试…