如何魔改vnstat-docker项目使其支持每1分钟采样?

文章目录

  • 一、概述
  • 二、官网参考
    • 1. 官网地址
    • 2. 查看打包过程
    • 3.打包命令
  • 三、修改过的文件
  • 四、部署运行
    • 1. 编排文件
    • 2. 运行效果

一、概述

接前文 网络流量监控神器vnStat初探 我们已经了解了vnStat的作用、使用和docker部署。

同时也了解到官方版本支持的采样统计间隔最小为5分钟级,现在我们有一个需求希望将采样统计间隔修改为分钟级,我们该怎么做呢?

二、官网参考

1. 官网地址

点击 vnstat-docker 进入官网,我们看到:
在这里插入图片描述
下载Dockerfile文件,该文件定义了镜像打包过程。

2. 查看打包过程

Dockerfile

FROM alpine:latest AS base

LABEL org.opencontainers.image.authors="Teemu Toivola"
LABEL org.opencontainers.image.url="https://humdi.net/vnstat/"
LABEL org.opencontainers.image.source="https://github.com/vergoh/vnstat-docker"
LABEL org.opencontainers.image.title="vnStat"
LABEL org.opencontainers.image.description="vnStat (https://humdi.net/vnstat/) in a container with image output via http"

ENV HTTP_PORT=8685
ENV HTTP_BIND=*
ENV HTTP_LOG=/dev/stdout
ENV LARGE_FONTS=0
ENV CACHE_TIME=1
ENV RATE_UNIT=1
ENV INTERFACE_ORDER=0
ENV QUERY_MODE=0
ENV DARK_MODE=0
ENV PAGE_REFRESH=0
ENV RUN_VNSTATD=1

COPY favicon.ico /var/www/localhost/htdocs/favicon.ico
COPY start.sh /

RUN true \
    && set -ex \
    && apk add --no-cache \
        tzdata \
        gd \
        perl \
        lighttpd \
        sqlite-libs \
        curl


FROM alpine:latest AS builder

RUN true \
    && set -ex \
    && apk add --no-cache \
        gcc \
        make \
        musl-dev \
        linux-headers \
        gd-dev \
        sqlite-dev \
    && wget https://humdi.net/vnstat/vnstat-latest.tar.gz \
    && tar zxvf vnstat-latest.tar.gz \
    && cd vnstat-*/ \
    && ./configure --prefix=/usr --sysconfdir=/etc \
    && make \
    && make install


FROM base AS runtime

COPY --from=builder /usr/bin/vnstat /usr/bin/vnstat
COPY --from=builder /usr/bin/vnstati /usr/bin/vnstati
COPY --from=builder /usr/sbin/vnstatd /usr/sbin/vnstatd
COPY --from=builder /etc/vnstat.conf /etc/vnstat.conf
COPY --from=builder vnstat-*/examples/vnstat.cgi /var/www/localhost/htdocs/index.cgi
COPY --from=builder vnstat-*/examples/vnstat-json.cgi /var/www/localhost/htdocs/json.cgi
COPY --from=builder vnstat-*/examples/vnstat-metrics.cgi /var/www/localhost/htdocs/metrics.cgi

RUN true \
    && set -ex \
    && addgroup -S vnstat  \
    && adduser -S -h /var/lib/vnstat -s /sbin/nologin -g vnStat -D -H -G vnstat vnstat

VOLUME /var/lib/vnstat
EXPOSE ${HTTP_PORT}

CMD [ "/start.sh" ]

阅读此文件,注意到
在这里插入图片描述
此部分脚本实现了https://humdi.net/vnstat/vnstat-latest.tar.gz 源码下载与解压
我们提前下载源码,并修改脚本为:

COPY vnstat-latest.tar.gz \
&& tar zxvf vnstat-latest.tar.gz \

此代码与上面的管方代码功能基本等价,区别是我们需要提前将源码下载到本地

为啥这么做呢?

当然是为了方便我们在官方源码的基础上做修改

3.打包命令

在Dockerfile 文件同级目录新建build.sh文件,内容如下:

#!/bin/sh
docker build -t vergoh/vnstat:test .

执行下面的命令打包镜像

sh build.sh

三、修改过的文件

修改过程就不详细说明了,这边把修改结果文件放出来,方便有兴趣的同学研究! 阅读源码需要有一点C语言基础!

注意: vnstat-latest.bak.tar.gz 为官方原始文件,vnstat-latest.tar.gz为修改后的文件

https://gitcode.com/00fly/vnstat-docker/overview

在这里插入图片描述

四、部署运行

1. 编排文件

docker-compose.yml

version: "3.7"
services:
  vnstat-data:
    image: vergoh/vnstat:test
    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:test
    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'

2. 运行效果

http://124.71.129.204:8086/?s-0-5

在这里插入图片描述

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

-over-

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

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

相关文章

【Unity】unity学习扫盲知识点

1、建议检查下SystemInfo的引用。这个是什么 Unity的SystemInfo类提供了一种获取关于当前硬件和操作系统的信息的方法。这包括设备类型,操作系统,处理器,内存,显卡,支持的Unity特性等。使用SystemInfo类非常简单。它的…

Linux操作系统的引导过程

系统初始化进程与文件、systemd概述、单元类型、切换运行级别、查看系统默认默认运行、永久切换、常见的系统服务(centos)-CSDN博客 centos 7系统升级内核(ELRepo仓库)、小版本升级、自编译内核-CSDN博客 ss命令详细使用讲解文…

tongweb+ths6011测试websocket(by lqw)

本次使用的tongweb版本7049m4,测试包ws_example.war(在tongweb安装目录的samples/websocket下),ths版本6011 首先在tongweb控制台部署一下ws_example.war,部署后测试是否能访问: 然後ths上的httpserver.conf的參考配…

游戏服务器搭建选VPS还是专用服务器?

游戏服务器搭建选VPS,VPS能够提供控制、性能和稳定性。它不仅仅是让游戏保持活力。它有助于减少延迟问题,增强您的游戏体验。 想象一下:你正沉浸在一场游戏中。 胜利在望。突然,屏幕卡住——服务器延迟。 很崩溃,对…

PageCache页缓存

一.PageCache基本结构 1.PageCache任务 PageCache负责使用系统调用向系统申请页的内存,给CentralCache分配大块儿的内存,以及合并前后页空闲的内存,整体也是一个单例,需要加锁. PageCache桶的下标按照页号进行映射,每个桶里span的页数即为下标大小. 2.基本结构 当每个线程的…

文件、文本阅读与重定向、路径与理解指令——linux指令学习(一)

前言:本节内容标题虽然为指令,但是并不只是讲指令, 更多的是和指令相关的一些原理性的东西。 如果友友只想要查一查某个指令的用法, 很抱歉, 本节不是那种带有字典性质的文章。但是如果友友是想要来学习的,…

Python 空间和时间高效的二项式系数(Space and time efficient Binomial Coefficient)

这里函数采用两个参数n和k,并返回二项式系数 C(n, k) 的值。 例子: 输入: n 4 和 k 2 输出: 6 解释: 4 C 2 等于 4!/(2!*2!) 6 输入: n 5 和 k 2 输出: 10 解释: 5 C …

moonlight+sunshine+ParsecVDisplay ipad8-windows 局域网串流

1.sunshine PC 安装 2.设置任意账户密码登录 3.setting 里 network启用UPNP IPV4IPV6 save apply 4.ParsecVDisplay虚拟显示器安装 5.ipad appstore download moonlight 6.以ipad 8 为例 2160*1620屏幕分辨率 7.ParsecVDisplay里面 custom设置2160*1620 240hz,…

python conda查看源,修改源

查看源 conda config --show-sources 修改源 可以直接vim .condarc修改源,

CSS中 实现四角边框效果

效果图 关键代码 border-radius:10rpx ;background: linear-gradient(#fff, #fff) left top,linear-gradient(#fff, #fff) left top,linear-gradient(#fff, #fff) right top,linear-gradient(#fff, #fff) right top,linear-gradient(#fff, #fff) left bottom,linear-gradient(…

CentOS7安装Mysql8.4.0

简介 本文介绍了Linux CentOS系统下Mysql8.4.0的下载和安装方法 环境 (rpm -q centos-release) centos-release-7-2.1511.el7.centos.2.10.x86_64 正文 一、去官网下载Mysql8.4.0 下载参考我另一篇mysql5.7.4的安装 CentOS7.9安装Mysql5.7-m14_centos下mysql5.7下载-CSDN博客…

flutter开发实战-Webview及dispose关闭背景音

flutter开发实战-Webview及dispose关闭背景音 当在使用webview的时候,dispose需要关闭网页的背景音或者音效。 一、webview的使用 在工程的pubspec.yaml中引入插件 webview_flutter: ^4.4.2webview_cookie_manager: ^2.0.6Webview的使用代码如下 初始化WebView…

AJAX-个人版-思路步骤整理版

前置知识&#xff1a;老式的web创建工程方法就是创建项目然后添加web工件&#xff0c;然后添加lib依赖如&#xff1a;tomcat,servlet&#xff0c;等。 传统请求 对于传统请求操作&#xff1a;整体流程也就是创建静态页面&#xff0c; <!DOCTYPE html> <html lang&q…

每日一题~ leetcode 402 (贪心+单调栈)

click me! 这个贪心的推导在leetcode上已经很明确了。 click me! 删除k个数&#xff0c;可以先考虑删除一个数。这也是一种常见的思路。&#xff08;如果进行同样的操作多次&#xff0c;可以先只 考虑一次操作如何实现&#xff0c;或者他的影响。完成这一次操作后&#xff0c;…

MySQL基础篇(二)

如何创建一个数据库&#xff1a; create database 数据库名; 使用数据库&#xff1a; use 数据库名&#xff1b; 如何查看都有哪些数据库&#xff1a; use databases;//后面需要加s 容易忘 如何查看都有哪些表&#xff1a; use tables;//后面需要加s 如何清屏&#xff…

texStudio使用(小白)

原先使用overleaf在线编译&#xff0c;可能eps格式的图片太大导致需要充钱&#xff0c;所以考虑本地安装 安装教程参考B站视频&#xff1a;B站Latex本地编译器安装&#xff1a;TexLive TextStudio 踩到坑&#xff1a; 1. 编译器位置要选择对 因为BibTex选成了Biber导致出现无…

【反悔堆 优先队列 临项交换 决策包容性】630. 课程表 III

本文涉及知识点 贪心 反悔堆 优先队列 临项交换 Leetcode630. 课程表 III 这里有 n 门不同的在线课程&#xff0c;按从 1 到 n 编号。给你一个数组 courses &#xff0c;其中 courses[i] [durationi, lastDayi] 表示第 i 门课将会 持续 上 durationi 天课&#xff0c;并且必…

为什么建议 MySQL 数据库字段一定要设置 NOT NULL

1. 前言 建议 MySQL 数据库字段一定要设置 NOT NULL 这句建议你可能听好多人讲过&#xff0c;但是有没有仔细想过为什么别人这么说 &#xff1f; 在实际开发中&#xff0c;对使不使用 not null 很多人并没有一个明确的标准&#xff0c;要知道某个字段需不需要添加 not null&a…

深度学习:为什么说英伟达A100或RTX A6000等专业GPU比RTX 4090更适合深度学习呢?

目录 一、关键术语 CUDA cores&#xff08;CUDA内核&#xff09;&#xff1a; memory bandwidth&#xff08;内存带宽&#xff09;&#xff1a; 二、深度学习的显卡硬件要求 三、NVIDIA显卡A100、RTX A6000和RTX 4090对比 1、NVIDIA A100 2、NVIDIA RTX A6000 3、NVIDI…

BufferReader/BufferWriter使用时出现的问题

项目场景&#xff1a; 在一个文件中有一些数据&#xff0c;需要读取出来并替换成其他字符再写回文件中&#xff0c;需要用Buffer流。 问题描述 文件中的数据丢失&#xff0c;并且在读取前就为空&#xff0c;读取不到数据。 问题代码&#xff1a; File f new File("D:\\…