【流量监控 Docker】流量超额通知+自动关机

前言

论坛也有好多mjj分享过各种各样的监控方案,但是基本上没有docker版的,并且很多也没有自动关机
最近的GCP50刀和阿里云CDT都是流量很贵并且怕刷,自己用其实很少超,就怕被刷流量了,万一是在半夜刷的就算通知了也看不到,有自动关机还是保险一点

特点

基于vnstat + docker的流量监控,可以配置流量达标后自动关机和通知,有企业微信WebHook和邮件通知方案
取的是当月流量,需要注意:vnstat是启动后才会记录,当月vnstat启动前服务器到底消耗了多少流量vnstat其实是不知道的
源码和Dockerfile都在这里,可以自己修改和编译:Github


使用

1.启动vnstat容器(用于监控流量)

指定web端口为28685,首次开启数据会延迟5分钟显示,因为vnstat默认是5分钟统计一次流量

docker run -d --name vnstat \
    --restart=always \
    --network=host \
    -e HTTP_PORT=28685 \
    -e TZ=Asia/Shanghai \
    vergoh/vnstat

就是监控的红框中的月份流量

2.启动监控程序

注意:网卡名称参数INTERFACE一定要指定否则不知道监控哪个网卡,每个服务器网卡名称都不一样,可以用ip a查看网卡


挂载dbus关机方式 + 企业微信通知 + 邮件通知(不支持Alpine系统)

docker run -d --name network-monitor --net=host --restart=always \
    -v /proc/uptime:/proc/uptime \
    -v /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket \
    -e NAME=gcp \
    -e HOST=127.0.0.1:28685 \
    -e GB=180 \
    -e INTERFACE=ens4 \
    -e WXKEY=xxxxxxxxxxxx \
    -e SHUTDOWN=yes \
    -e [email protected] \
    -e SMTPPWD=xxxxxx \
    javaow/network-monitor

ssh关机方式 + 企业微信通知

docker run -d --name network-monitor --net=host --restart=always \
    -v /proc/uptime:/proc/uptime \
    -e NAME=gcp \
    -e HOST=127.0.0.1:28685 \
    -e GB=180 \
    -e INTERFACE=ens4 \
    -e WXKEY=xxxxxxxxxxxx \
    -e SHUTDOWN=yes \
    -e SHUTDOWNTYPE=ssh \
    -e [email protected] \
    -e SSHPWD=xxxxxx \
    javaow/network-monitor

参数

关机方式有三种,使用SHUTDOWNTYPE参数指定

1.host:二进制部署使用的方式,关机命令是 shutdown -h now(不能在容器环境使用)
2.dbus:挂载宿主机system_bus_socket,通过dbus给宿主机发送关机命令(不支持Alpine系统)
3.ssh:使用sshpass连接上ssh执行shutdown -h now(不局限于本机)

通知方式有二种

1.企业微信群机器人WebHook
	我比较喜欢的一种方式,可以直接通知到微信,设置好机器人后拿到WebHook的Key就行了
	设置方式参照这个:https://tower.im/help/articles/357
2.邮件通知
	用的是smtp协议,我只测了qq邮箱,其他邮箱自测


image

镜像-e 参数

选项 解释
NAME 自定义名称 用于通知时分辨机器
HOST vnstat的IP和端口 格式:IP:Port
GB 限额流量 单位GB 可小数 流量消耗到该参数时将触发通知和关机操作
MODEL 模式 默认为1(1:以上行流量为限制 2:上下行合并后限制 用于上下行都计算流量的vps)
INTERFACE 网卡名称 默认eth0 必填
INTERVAL 监听间隔 单位:秒 默认30秒(vnstat是5分钟记录一次 所以该参数默认即可)
PARDON 开机延迟时间 单位:秒 默认10分钟(开机后前10分钟不监听 避免开机就关机造成死循环)
SHUTDOWN 超额后是否关机 默认no
SHUTDOWNTYPE 关机方式 二进制使用host 容器使用ssh和dbus 默认dbus
SSHHOST 【ssh关机】ssh用户名和host 格式为:[email protected]
SSHPWD 【ssh关机】ssh密码
SSHPORT 【ssh关机】ssh端口 默认22
WXKEY 【微信通知】企业微信WebHook的key
SMTPHOST 【邮件通知】smtp服务器 默认为qq smtp.qq.com:587
SMTPEMAIL 【邮件通知】smtp发送邮箱和接收邮箱 发送给自己
SMTPPWD 【邮件通知】smtp密码
6 Likes

牛啊!感谢大佬!

这个不错,建议优化的更简单点。。。弄个steup脚本,比如网卡很多,但是可以获取出来,让用户选择。

好好好 先扔进收藏夹

大佬厉害啊,可以机子跑pt应该是用不到了

感谢分享,收藏备用