前置说明
此Python脚本通过调用华为云官方API,实现对Flexus实例流量包使用情况的自动化监控,并通过Telegram Bot推送余量信息。设置定时任务后,可每日接收流量报告。
准备工作
执行脚本前,必须在华为云控制台完成前置配置。为确保账户安全,需创建专用于API调用的IAM用户并授予受限权限,而非直接使用根账户密钥。
第一步:创建IAM用户和用户组
访问华为云【统一身份认证服务(IAM)】控制台。
在左侧导航栏选择“用户组”,点击右上角“创建用户组”。设定名称,例如
ApiUserGroup
,点击“确定”。创建完成后,点击用户组名进入详情。在授权页面,切换至“策略”,在搜索框输入
ReadOnlyAccess
,勾选此策略并点击“下一步”,确认授权。此权限已满足查询流量信息的需求。授权成功后,返回用户组详情,在“权限”页签下检查
ReadOnlyAccess
策略是否已成功附加。返回IAM左侧导航,选择“用户”,点击“创建用户”。输入用户名,例如
api-user
。在“访问方式”选项中,必须勾选“编程访问”。下一步,将新用户添加至已创建的用户组
ApiUserGroup
,继续操作直至完成创建。为用户生成访问密钥(AK/SK)。在用户列表中点击已创建的
api-user
用户,进入用户详情。选择“管理访问密钥”页签,点击“新增访问密钥”。密钥生成后,必须立即下载CSV文件或复制并保存
Access Key Id(AK)
与Secret Access Key(SK)
。Secret Access Key
仅在创建时显示一次,页面关闭后无法找回。该密钥将用于脚本的API认证。
第二步:获取Flexus实例的资源ID
Flexus实例的流量包需要通过其 FREE_RESOURCE_IDS
进行查询。
访问华为云API Explorer。
在该页面,区域选择“cn-north-1”,其余参数保持默认,点击右侧“发送请求”。
在响应的JSON数据中,定位
provider_name
为bss.cloud-server-hws
的条目,复制其下的free_resource_ids
字段值。此ID将在后续配置中使用。
第三步:获取Telegram Bot的配置信息
脚本通过Telegram机器人发送通知,需准备机器人配置信息。
创建机器人并获取Token:
- 在Telegram中与官方机器人
@BotFather
对话。 - 发送
/newbot
命令。 - 按提示设置机器人的名称(Name)和用户名(Username)。
- 创建成功后,
@BotFather
将提供一串 HTTP API Token。复制并保存此Token。
- 在Telegram中与官方机器人
获取Chat ID:
- 在Telegram中与
@userinfobot
对话。 - 发送
/start
命令,该机器人将返回用户的 Chat ID。 - 前置条件:必须向新创建的机器人发送至少一条消息,否则机器人无法主动向用户推送消息。
- 在Telegram中与
脚本配置与运行
本程序专门用于监控华为云 Flexus L 实例的免费流量,并在流量低于预设阈值时通过 Telegram 发送告警。
功能
- 定期查询华为云免费资源的流量使用情况。
- 设置三级流量阈值,对应不同的告警级别。
- 流量过低时自动触发关机程序(可选)。
- 通过 Telegram Bot 发送实时通知。
- 支持调试模式,方便测试。
如何使用
环境准备
- 安装Python: 确保您的服务器上已安装 Python 3。
- 安装venv模块: 本项目依赖 Python 的虚拟环境。在某些系统(如 Debian/Ubuntu)上,
venv
模块需要单独安装。如果start.sh
脚本在创建虚拟环境时失败,并提示ensurepip is not available
,请根据您的 Python 版本执行相应的安装命令。例如:这个命令通常会自动为您的系统默认的 Python 3 版本安装1
2sudo apt update
sudo apt install python3-venvvenv
支持。如果您的系统上有多个 Python 版本,或者此命令无效,您可能需要根据python3 --version
的输出来安装一个特定版本的包(例如python3.11-venv
)。
克隆或下载项目
将项目代码下载到您需要监控的服务器上。说明
关机功能默认通过sudo shutdown
命令实现。华为云官方也提供了关机 API,如果您有兴趣,可以自行研究并修改main.py
中的shutdown_server
函数以实现更优雅的关机方式。配置环境变量
复制.env.example
文件为.env
,并填入您的配置信息:HUAWEICLOUD_SDK_AK
&HUAWEICLOUD_SDK_SK
: 您的华为云 Access Key ID 和 Secret Access Key。- 重要: 您使用的 Access Key 需要拥有 BSS ReadonlyAccess 权限。
- 获取方法请参考官方文档:如何获取AK/SK
FREE_RESOURCE_IDS
: 您要监控的免费资源ID。- 获取方法:访问华为云API Explorer中的
ListAllResources
接口(直达链接)。在响应结果中,找到logical_resource_type
为"huaweicloudinternal_cbc_freeresource"
的条目,其对应的physical_resource_id
即为您需要的ID。
- 获取方法:访问华为云API Explorer中的
TELEGRAM_BOT_TOKEN
: 您的 Telegram Bot Token。TELEGRAM_CHAT_ID
: 您的 Telegram Chat ID。SERVER_NAME
: 您的服务器名称(例如:华为新加坡)。THRESHOLD_LEVEL_1
: 关机阈值 (GB)。THRESHOLD_LEVEL_2
: 高频告警阈值 (GB)。THRESHOLD_LEVEL_3
: 普通告警阈值 (GB)。
首次运行与测试
在配置自动任务之前,请先手动执行一次start.sh
脚本。这将完成创建Python虚拟环境、安装所需依赖等初始化工作。1
bash start.sh
观察脚本输出,确保程序能够无误地运行并发送测试通知(如果流量低于阈值)。
(推荐)配置 Cron 定时执行
在手动测试成功后,为了实现自动化监控,您可以设置一个cron
定时任务来定期运行此脚本。首先,打开您的 crontab 编辑器:
1
crontab -e
然后,在文件末尾添加以下行。请确保将
/path/to/your/project
替换为start.sh
脚本所在的 绝对路径。例如,每小时执行一次:1
0 * * * * /bin/bash /path/to/your/project/start.sh >/dev/null 2>&1
0 * * * *
表示在每小时的第0分钟执行。>/dev/null 2>&1
会将脚本的所有输出(标准输出和错误输出)重定向到“黑洞”,避免cron
发送不必要的邮件通知。
故障排查
- 错误:
venv/bin/activate: No such file or directory
- 原因: 这个问题通常是因为上一次创建虚拟环境失败,但留下了一个不完整的
venv
目录。当start.sh
再次运行时,它检测到venv
目录存在,便跳过了创建步骤,直接尝试激活一个不存在的文件,从而导致错误。 - 解决方法:
- 手动删除损坏的虚拟环境目录:
rm -rf venv
- 重新运行脚本:
bash start.sh
- 手动删除损坏的虚拟环境目录:
- 预防: 最新版的
start.sh
脚本已包含修复逻辑,在创建虚拟环境失败时会自动清理残留目录,以防止此问题再次发生。
- 原因: 这个问题通常是因为上一次创建虚拟环境失败,但留下了一个不完整的
注意事项
- 关机功能默认在 Linux 系统下使用
sudo shutdown -h now
。如果您的系统不同,请修改main.py
中的shutdown_server
函数。 - 脚本会在临时目录创建一个
huaweicloud_traffic_state.json
文件来保存上次运行和通知的状态,请勿删除。