阿里云监控 Bot,实时监控你的CDT流量和ECS实例

mjjmjjyyds 2026-09-29 13:46 1

阿里云ECS监控 Bot


项目地址:https://github.com/passeway/aliyun-monitor


支持环境



  • Ubuntu / Debian:systemd。

  • Alpine Linux:OpenRC。

  • 使用 root 执行,安装时需要联网访问系统软件源和 PyPI。

  • 自动安装 Python 等运行依赖,并创建独立虚拟环境。

  • 需要 Python 3.10 或更新版本;如果旧系统软件源提供的版本过低,脚本会停止,不会自动升级整个系统。

  • 全新部署不需要备份包;发现 /opt/scripts 已存在时会拒绝覆盖。


默认行为















































项目 默认设置
流量监控 每 2 分钟执行一次
每日汇报 北京时间每天 09:00
定时开关机 支持每天重复的计划,按北京时间执行,每分钟检查
中国内地地域阈值 18 GiB,可修改
香港及其他境外地域阈值 180 GiB,可修改
流量统计 按账号、地域分别统计,同地域多实例共享该地域流量值
账单 实例 ECS 账单、账号当月税前总账单
CDT 网络 使用系统默认 DNS 和网络,不强制 IPv4 或 IPv6
安装完成后 不自动启用,执行 start 后启用

阈值是脚本的关机设置,不是免费额度承诺。CDT 数据可能延迟更新,每 2 分钟巡检并不代表流量数据每 2 分钟刷新。


实例监控启用、查询成功且流量低于阈值时,脚本会尝试启动处于 Stopped 状态的实例;达到阈值时会尝试停止运行中的实例。启动能否成功取决于云端资源及接口结果,不能恢复已删除的实例。


1. 上传安装脚本


将下载的 install-aliyun-monitor.sh 通过 SFTP 上传到新服务器:


/root/install-aliyun-monitor.sh

以下命令在服务器终端执行。不要使用 curl | sh,安装配置需要交互输入。


2. 安装与配置


Ubuntu、Debian、Alpine 都使用:


sh /root/install-aliyun-monitor.sh install

按提示填写:



  1. Telegram Bot Token。

  2. 接收通知的 Chat ID。

  3. 有权控制实例的 Telegram 用户 ID,多个用逗号分隔;这里不能填写群组 ID。

  4. Bark 推送 URL,可留空。

  5. 实例备注、地域代码和实例 ID。

  6. AccessKey ID、AccessKey Secret,以及国际站或中国站账号类型。

  7. 地域关机阈值、资源组 ID(可留空)。

  8. 是否继续添加实例;后续实例可复用上一实例的账号。


Token 和密钥输入时直接显示,配置保存在 /opt/scripts/config.json。不要公开分享该文件。


安装器内置独立实现的监控、日报和 Telegram Bot 运行代码,不下载或引用个人 GitHub 仓库。仅从系统软件源和 PyPI 安装运行依赖,使用阿里云官方核心 SDK 和 Telegram 官方 API。依赖安装失败时应先查看报错;不要删除现有目录后盲目重试。


3. 启用 Bot 和定时任务


同一个 Bot Token 和同一组自动开关机任务,只在一台服务器启用。如果是迁移,先停用旧机器上的 Bot 和本项目定时任务。


sh /root/install-aliyun-monitor.sh start

服务启动后,等待约 2 分钟查看监控日志。服务显示运行,不等于云 API、权限和网络检查已经通过。


4. 查看状态


sh /root/install-aliyun-monitor.sh status

5. 查看日志


查看最近 30 行监控日志:


tail -n 30 /opt/scripts/monitor.log

查看 Bot 日志:


tail -n 30 /opt/scripts/bot.log

查看日报日志:


tail -n 30 /opt/scripts/report.log

持续观察监控日志,按 Ctrl+C 退出:


tail -f /opt/scripts/monitor.log

查看定时任务启动时的错误输出:


tail -n 30 /opt/scripts/cron-monitor.log
tail -n 30 /opt/scripts/cron-report.log

首次执行前,部分日志文件可能还不存在。


6. 立即发送一次日报


以下命令会实际发送日报:


TZ=Asia/Shanghai /opt/scripts/venv/bin/python /opt/scripts/report.py

手动发送不受定时日报的每日标记限制。


7. 立即执行一次巡检


以下命令会执行实际监控逻辑,可能触发实例开机或超流量关机:


/opt/scripts/run-task.sh monitor

如果上一轮巡检仍在运行,监控脚本的锁会阻止重叠执行。


8. 修改配置


vi /opt/scripts/config.json

例如,traffic_limit 是关机阈值,paused 或 disabled 为 true 时会跳过该实例巡检。


修改后检查 JSON 语法,不输出配置中的密钥:


/opt/scripts/venv/bin/python -m json.tool /opt/scripts/config.json > /dev/null

仅在检查无报错后重新加载 Bot:


sh /root/install-aliyun-monitor.sh start

start 同时确保本项目定时任务已启用。监控和日报脚本在下次运行时读取新配置。


9. 查看定时任务


crontab -l

本项目的三条任务:


*/2 * * * * /opt/scripts/run-task.sh monitor >> /opt/scripts/cron-monitor.log 2>&1 #aliyun_monitor
* * * * * /opt/scripts/run-task.sh report >> /opt/scripts/cron-report.log 2>&1 #aliyun_monitor
* * * * * /opt/scripts/run-task.sh timers >> /opt/scripts/cron-timers.log 2>&1 #aliyun_monitor

日报入口每分钟检查一次北京时间,在 09:00—09:10 的窗口发送;每日最多尝试 3 次,任一通知渠道成功后当天不再自动发送。无需修改服务器系统时区。


窗口内恢复运行可以补发;超过 09:10 或三次尝试均失败后,当天不再自动补发,可用第 6 节命令手动发送。网络超时、消息分段发送失败或进程中断时,重试可能重复部分消息;不承诺通知严格只送达一次。


10. 停用整套监控


sh /root/install-aliyun-monitor.sh stop

该命令停用 Bot 和本项目定时任务,保留脚本、配置及其他 cron 任务。已经开始的巡检不会被强制中断,仍可能执行完当前动作。


重新启用:


sh /root/install-aliyun-monitor.sh start

11. 仅重启 Bot


仅重启 Bot 不改变定时任务。


Ubuntu / Debian


systemctl restart aliyun-ecs-bot
systemctl status aliyun-ecs-bot --no-pager

查看服务日志:


journalctl -u aliyun-ecs-bot -n 50 --no-pager

Alpine


rc-service aliyun-ecs-bot restart
rc-service aliyun-ecs-bot status

查看 Bot 日志:


tail -n 50 /opt/scripts/bot.log

12. 查看帮助


sh /root/install-aliyun-monitor.sh --help

Telegram 命令



































































命令 功能
/start 或 /help 显示帮助
/menu 选择实例,查看状态及操作按钮
/list 查看实例列表
/status 实例ID或唯一备注 查询状态、地域流量及账单
/start_instance 实例ID或唯一备注 检查流量阈值后开机,并恢复监控
/stop 实例ID或唯一备注 暂停自动监控并关机,避免下一轮自动拉起
/reboot 实例ID或唯一备注 提交重启请求
/pause 实例ID或唯一备注 暂停自动监控
/resume 实例ID或唯一备注 恢复自动监控,后续可能按阈值自动开关机
/timers 查看全部每日定时计划
/timers 实例ID或唯一备注 查看单台实例的计划
/timer_add 实例ID或唯一备注 start HH:MM 添加每日定时开机计划
/timer_add 实例ID或唯一备注 stop HH:MM 添加每日定时关机计划
/timer_del 计划ID 删除计划

仅配置中的管理员可使用。控制操作须点击确认按钮,确认在 2 分钟内有效。开关机与重启是异步请求,需刷新状态确认最终结果。


定时开关机示例


以下命令发送给 Telegram Bot。将“上海”换成配置中的唯一备注或实例 ID。


每天北京时间 08:00 开机:


/timer_add 上海 start 08:00

每天北京时间 23:00 关机:


/timer_add 上海 stop 23:00

添加后点击 Bot 返回的“确认”按钮,计划才会保存。


查看计划及计划 ID:


/timers

删除计划(替换为实际计划 ID,再点击确认):


/timer_del 计划ID

也可通过 /menu 选择实例,点击“定时计划”查看。


定时计划的行为



  • 全部按北京时间(UTC+8)每天重复,与服务器系统时区无关。

  • 每分钟检查一次,可能受接口耗时及巡检锁影响,不保证精确到秒。

  • 计划保存到 /opt/scripts/timers.json,Bot 或服务器重启后保留。

  • 定时关机先暂停自动监控,再提交停止请求,避免巡检立即重新开机。

  • 定时开机检查地域流量阈值;查询失败、暂无地域明细或达到阈值时不启动。请求处理成功后恢复自动监控。

  • 单独 /pause 只暂停流量巡检,不删除定时计划;如不希望计划再开机,请同时删除计划。

  • 同一实例、同一时刻不能添加重复或互相冲突的计划。

  • 计划执行失败会告警,本次不自动重放;下一天的计划保留。请按告警核对实例和监控暂停状态。

  • 若错过执行时间不超过 5 分钟,会在下一轮尝试执行;超过 5 分钟则跳过本次并通知,避免机器恢复后执行过时的开关机操作。

  • 删除计划不改变实例当前运行状态,也不改变监控的暂停设置。

  • stop 会停用包含定时计划调度在内的本项目 cron,但不会删除计划文件;再次 start 时按上述超时规则处理。

  • 这是新部署版本,不自动导入旧项目的计划文件。


查看定时计划运行日志:


tail -n 30 /opt/scripts/timers.log
tail -n 30 /opt/scripts/cron-timers.log

总账单按同一 AK 和账单节点去重;同一阿里云账号若使用不同 AK 配置,可能显示多组重复总账单,建议复用同一账号凭据。


sh /root/install-aliyun-monitor.sh check
sh /root/install-aliyun-monitor.sh start
sh /root/install-aliyun-monitor.sh status

check 只验证本机配置和定时文件,不能验证密钥权限、网络连通或余额接口权限。启动后检查日志,并用 /status 确认实际查询成功。默认的大陆 18 GiB、境外 180 GiB 是可修改的止损阈值;免费额度及计费请以账号控制台为准。


本文件和安装器用于全新服务器部署。现有 /opt/scripts 不会被覆盖,也不自动迁移旧版状态或计划。与原监控共存的展示面板应关闭自动启停,避免两个程序发出相反的操作。

最新回复 (9)
  • tudoubin 09-29 13:48
    1楼

    晚上回去试试

  • suarezFeng 09-29 13:50
    2楼

    支持,试用一下

  • mjjmjjyyds 楼主 09-29 13:50
    3楼

    @tudoubin #1 欢迎测试部署

  • mjjmjjyyds 楼主 09-29 13:50
    4楼

    @suarezFeng #2 欢迎测试部署

  • dapoolsea 09-29 14:10
    5楼

    又开始重复造车轮了 ^-^ ^-^

  • mjjmjjyyds 楼主 09-29 14:11
    6楼

    @dapoolsea #5 并不是,优化了的,你用过之前的就知道了。

  • dapoolsea 09-29 14:27
    7楼

    @mjjmjjyyds #6


    ^-^ 又折腾,等国庆节闲下来再弄,已给🍗

  • mjjmjjyyds 楼主 09-29 14:28
    8楼

    @dapoolsea #7

  • zaiye 09-29 20:37
    9楼

    bd

* 帖子来源NodeSeek
返回