监控神器vnStat初探

news2024/11/25 11:59:10

文章目录

  • 一、概述
  • 二、官方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-

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智慧监狱技术解决方案

1. **建设背景**:介绍了智慧监狱建设的战略部署,包括司法部提出的“数字法治、智慧司法”信息化体系建设,以及智慧监狱建设的总体目标、重点任务和实施步骤。 2. **建设需求**:分析了当前监狱系统存在的问题,如子系统…

Java新特性与性能调优

引言 Java不断演进,每个新版本都引入了新的特性和改进,帮助开发者在提高生产力的同时,也能更好地优化程序性能。本文将详细介绍Java新版本中的重要特性,如从Java 8到Java 17,并探讨性能调优的方法,包括JVM调…

沃尔玛自养号测评:优势与技术要求解析

沃尔玛自养号测评是一种卖家在沃尔玛平台上提升店铺权重和排名的营销手段。传统运营策略的局限性日益显现,如营销手段单一、难以应对市场竞争等。因此,许多卖家为了提升店铺权重和排名,选择了自养号测评这一技术手段。 以下是对沃尔玛自养号…

C++ 46 之 关系运算符的重载

#include <iostream> #include <string> using namespace std;class Students06{ public:string m_name;int m_age;Students06(string name, int age){this->m_name name;this->m_age age;}// 重载了 bool operator(Students06 &stu){if(this->m_na…

CNN学习(7):用C++实现简单不同参数的卷积模型

目录 一、参数说明和计算公式 1、符号约定 2、输出大小计算公式 二、不同类型的卷积 1、输入3*3*1&#xff0c;卷积核3*3*1&#xff0c;输出1*1*1 &#xff08;1&#xff09;实现代码 &#xff08;2&#xff09;代码说明 2、输入4*4*1&#xff0c;卷积核3*3*1&#xff…

如何避免销售飞单私单!教你如何巧妙避开陷阱,业绩飙升!

明明投入了大量的时间和精力&#xff0c;客户却悄无声息地消失了&#xff1f;或是突然有一天&#xff0c;你发现原本属于你的订单被同事悄悄抢走&#xff1f;这背后&#xff0c;很可能隐藏着销售飞单私单的陷阱。今天&#xff0c;就让我们一起探讨如何巧妙避开这些陷阱&#xf…

MySQL-----InnoDB的自适应哈希索引

InnoDB存储引擎监测到同样的二级索引不断被使用&#xff0c;那么它会根据这个二级索引&#xff0c;在内存上根据二级索引树(B树)上的二级索引值&#xff0c;在内存上构建一个哈希索引&#xff0c;来加速搜索。 查看是否开启自适应哈希索引 show variables like innodb_adapti…

2024年【安全生产监管人员】试题及解析及安全生产监管人员考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全生产监管人员试题及解析是安全生产模拟考试一点通总题库中生成的一套安全生产监管人员考试试题&#xff0c;安全生产模拟考试一点通上安全生产监管人员作业手机同步练习。2024年【安全生产监管人员】试题及解析及…

LLM资料大全:文本多模态大模型、垂直领域微调模型、STF数据集、训练微调部署框架、提示词工程等

前言 自ChatGPT为代表的大语言模型&#xff08;Large Language Model, LLM&#xff09;出现以后&#xff0c;由于其惊人的类通用人工智能&#xff08;AGI&#xff09;的能力&#xff0c;掀起了新一轮[自然语言处理]领域的研究和应用的浪潮。尤其是以ChatGLM、LLaMA等平民玩家都…

Qwen-Agent:Qwen2加持,强大的多代理框架 - 函数调用、代码解释器以及 RAG!

✨点击这里✨&#xff1a;&#x1f680;原文链接&#xff1a;&#xff08;更好排版、视频播放、社群交流、最新AI开源项目、AI工具分享都在这个公众号&#xff01;&#xff09; Qwen-Agent&#xff1a;Qwen2加持&#xff0c;强大的多代理框架 - 函数调用、代码解释器以及 RAG&…

全局解决SpringBoot框架中的application.properties/yml注解中文乱码问题(一劳永逸)

问题原因 Spring Boot在加载application.properties/yml配置文件时&#xff0c;默认使用ISO-8859-1编码。这种编码方式并不支持中文字符&#xff0c;因此当配置文件中包含中文字符时&#xff0c;就会出现乱码&#xff0c;现象如下&#xff1a; 问题解决 本解决方法是全局设置…

最快安装zabbix

部署zabbix 6.x 建议使用红帽系统。 https://download.rockylinux.org/pub/rocky/8/isos/x86_64/Rocky-8.9-x86_64-minimal.iso1> 配置安装yum源 [rootzabbix ~]# yum install https://mirrors.huaweicloud.com/zabbix/zabbix/6.2/rhel/8/x86_64/zabbix-release-6.2-3.el8…

PMS助力制造企业高效运营︱PMO大会

全国PMO专业人士年度盛会 北京易贝恩项目管理科技有限公司副总经理朱洪泽女士受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾&#xff0c;演讲议题为“PMS助力制造企业高效运营”。大会将于6月29-30日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#xff1a; …

DeepDriving | CUDA编程-05:流和事件

本文来源公众号“DeepDriving”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;CUDA编程-05&#xff1a;流和事件 1 CUDA流 在CUDA中有两个级别的并发&#xff1a;内核级并发和网格级并发。前面的文章DeepDriving | CUDA编程-04&…

基于System-Verilog点亮LED灯

文章目录 一、System-Verilog介绍1.1System-Verilog 二、简单的语法介绍2.1接口实例2.2全局声明和语句实例2.3时间单位和精度2.4用户定义的类型2.5 枚举类型 三、流水灯参考 一、System-Verilog介绍 1.1System-Verilog SystemVerilog是一种硬件描述和验证语言&#xff08;HDV…

数据分析必备:一步步教你如何用matplotlib做数据可视化(2)

1、Matplotlib Anaconda Anaconda是Python和R编程语言的免费开源发行版&#xff0c;用于大规模数据处理&#xff0c;预测分析和科学计算。 该分发使包管理和部署变得简单容易。 Matplotlib和许多其他有用的(数据)科学工具构成了分发的一部分。 包版本由包管理系统Conda管理。 …

50【Aseprite 作图】模糊工具 笔刷

1 模糊工具 2 笔刷 然后 选中 后 Ctrl B&#xff0c;就变成笔刷了 可以按住shift &#xff0c;像画一条线一样 或者用矩形、圆形工具、油漆桶工具 在上方可以选择笔刷的不同形式&#xff0c;如果是“图案与来源对齐”&#xff0c;就是来源不变&#xff0c;笔刷不会覆盖之前…

Vue3【十五】标签的Ref属性

Vue3【十五】标签的Ref属性 标签的ref属性 用于注册模板引用 用在dom标签上&#xff0c;获取的是dom节点 用在组件上&#xff0c;获取的是组件实例对象 案例截图 目录结构 代码 app.vue <template><div class"app"><h1 ref"title2">你…

uniapp开发微信小程序问题汇总

1. 自定义校验规则validateFunction失效 2. 微信小程序不支持<Br>换行 在 <text></text> 标签中使用\n(必须 text 标签&#xff0c;view 标签无效 ) 3. 微信小程序无法使用本地静态资源图片的解决方法 (1) 将图片上传到服务器&#xff0c;小程序访问该图片…

sql优化之利用聚簇索引减少回表次数:limit 100000,10

1. 问题描述 产品&#xff1a;我要对订单列表页做一个分页功能&#xff0c;每页10条数据&#xff0c;商家可以根据金额过滤订单 技术&#xff1a;好的&#xff0c;我写一个sql实现分页&#xff0c;x表示偏移页数&#xff0c;自测limit 10,10耗时200ms&#xff1a; SELECT * …