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

news2024/11/18 6:41:09

文章目录

  • 一、概述
  • 二、官网参考
    • 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.coloradmin.cn/o/1900366.html

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

相关文章

Mysql数据库索引、事务相关知识

索引 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引, 并指定索引的类型,各类索引有各自的数据结构实现 查看索引 show index from 表名;创建索引对于非主键、非唯一约束、非外键的字段&#…

制作Ai 数字人和数字人带货全面拆解复盘

看了后不用再花高价钱去买怎么制作数字人 .数字人带货的相关教程了 市面上基本都是通过这几个方法制作的数字人 超级详细 值得注意的是 拆解的太详细 仅供正规个人用途哦 请勿用于任何非法操作 否则 就不用接着往下看了 点击获取完整版资料

Python基础小知识问答系列-高效遍历多个不同类型元素的迭代器

1. 问题: 当需要对多个迭代器进行相同遍历操作时,如何避免因为迭代器之间的类型或者迭代器元素 数量过大引发的问题? 2. 解决方法: 使用itertools模块中的chain函数。 示例: from itertools import chainlist_a [2,…

炫云云渲染平台:解锁设计师无限创意的魔法钥匙

在数字创意的浩瀚宇宙中,设计师们如同星辰般璀璨,他们以无尽的想象力和精湛的技能,绘制出一幅幅令人叹为观止的视觉盛宴。然而,在追求完美的道路上,复杂的渲染过程往往成为制约创意飞跃的瓶颈。这时,炫云云…

2024菜鸟春招笔试

第一题 解题思路: 签到题,把帖子按好评度降序排列,再将人按升序排列。 第二题 解题思路 从左到右遍历,如果当前元素没有错排,将其与后一个交换,这样两个元素一定都错排。 第三题 、 解题思路 这题当时暴力…

前端面试题21(js排序方法)

JavaScript 中有多种内置和自定义的排序方法。内置的 .sort() 方法是最直接的排序方式,而自定义排序算法如冒泡排序、选择排序、插入排序、希尔排序、快速排序等则提供了更深层次的学习和应用价值。下面我将详细介绍这些排序方法,并给出相应的示例代码。…

大学生电子设计大赛超全资料分享

超全大学生电子设计大赛项目合集免费分享 电赛竞赛资料大全,新增竞赛空间电子设计资料。包含嵌入式硬件和软件开发的学习资料,包括PCB教程,单片机例程, 单片机课程设计毕业设计参考资料、项目设计方案,源码和开发文档…

观察矩阵(View Matrix)、投影矩阵(Projection Matrix)、视口矩阵(Window Matrix)及VPM矩阵及它们之间的关系

V表示摄像机的观察矩阵(View Matrix),它的作用是把对象从世界坐标系变换到摄像机坐标系。因此,对于世界坐标系下的坐标值worldCoord(x0, y0, z0),如果希望使用观察矩阵VM将其变换为摄像机坐标系下的坐标值localCoord(x…

基于java+springboot+vue实现的流浪动物管理系统(文末源码+Lw)277

摘 要 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对流浪动物信息管理的提升&…

【Linux】:进程创建与终止

朋友们、伙计们,我们又见面了,本期来给大家解读一下有关Linux程序地址空间的相关知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从…

嵌入式开发者应该有的心态自信

各位开发者大家好,今天主要给大家分享一下,嵌入式开发者应该有的心态,缓解工作和生活中的压力,也是非常重要的。 真的。 世界就是个巨大的草台班子,自信点,别人没有你想象的那么厉害。 普通人最大的问题,就是过分高估别人,并且过分贬低自己。 一、对那些看似厉害的人…

算法设计练笔

T1、给定由n个整数&#xff08;可能为负数&#xff09;组成的序列a1,a2,...,an&#xff0c;求该序列子段和的最大值。当所有整数均为负数时&#xff0c;其最大子段和为0。 【输入】 第一行一个整数&#xff0c;表示n的值, 1<n<100; 第二行n个整数&#xff0c;表示a1,a2,.…

nacos源码 nacos注册中心1.4.x 源码 spring cloud alibaba 的discovery做了什么 nacos客户端是如何启动的(二)

spring-cloud-alibaba-nacos-discovery 老版本中如何调用nacos的 1. 整体结构&#xff1a; 2. 思考: 如果你来做&#xff0c;如何做client 向server注册服务&#xff1a; 1.2.1 读yml&#xff0c;或本地文件找到服务器地址&#xff0c;以及其他配置 1.2.2 向server注册服务 1.2…

【中项第三版】系统集成项目管理工程师 | 第 4 章 信息系统架构① | 4.1-4.2

前言 第4章对应的内容选择题和案例分析都会进行考查&#xff0c;这一章节属于技术相关的内容&#xff0c;学习要以教材为准。本章分值预计在4-5分。 目录 4.1 架构基础 4.1.1 指导思想 4.1.2 设计原则 4.1.3 建设目标 4.1.4 总体框架 4.2 系统架构 4.2.1 架构定义 4.…

encrypt decrypt CA

encrypt & decrypt & CA 加密解密证书

Cyuyan中的动态内存管理!!(对后面学习数据结构至关重要)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、为什么要进行动态内存分配二、实现动态内存分配的三种库函数&#xff08;一&#xff09;、malloc函数&#xff08;二&#xff09;、calloc函数&#xff08;…

Qt5.9.9 关于界面拖动导致QModbusRTU(QModbusTCP没有测试过)离线的问题

问题锁定 参考网友的思路&#xff1a; Qt5.9 Modbus request timeout 0x5异常解决 网友认为是Qt的bug&#xff0c; 我也认同&#xff1b;网友认为可以更新模块&#xff0c; 我也认同&#xff0c; 我也编译了Qt5.15.0的code并成功安装到Qt5.9.9中进行使用&#xff0c;界面拖…

可验证算法在招投标领域的专家“盲抽”中的标段识别码加密应用研究

摘要 在招投标过程中&#xff0c;标段&#xff08;包&#xff09;识别码的安全性至关重要。本文提出了一种基于可验证算法的标段识别码加密方法&#xff0c;以确保其在专家“盲抽”过程中的保密性和可信性。通过对不同表的标段识别码进行全量加密&#xff0c;并通过匹配验证其…

绿色金融相关数据合集(2007-2024年 具体看数据类型)

数据类型&#xff1a; 1.绿色债券数据&#xff1a;2014-2023 2.绿色信贷相关数据&#xff1a;2007-2022 3.全国各省及地级市绿色金融指数&#xff1a;1990-2022 4.碳排放权交易明细数据&#xff1a;2013-2024 5.绿色金融试点DID数据&#xff1a;2010-2023 数据来源&#…

RK3588 Android12实现UVC输出功能详解

首先需要在相关部分添加uvc的功能&#xff0c;这里参考一下&#xff1a;rockchip rk3588添加uvc及uvc,adb的复合设备_uvc.gs6-CSDN博客 setprop sys.usb.config none;setprop sys.usb.config uvc 或者setprop sys.usb.config none;setprop sys.usb.config uvc,adb 使rk3588 进…