前言
论坛也有好多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邮箱,其他邮箱自测
镜像-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密码 |