服务器宕机、磁盘爆满、CPU飙高……每一个异常都可能让业务陷入困境。如果你已经习惯使用Telegram中文版作为日常沟通工具,何不把服务器监控告警也收进同一个聊天窗口?本文手把手教你用Telegram机器人监控服务器状态,并在异常时自动转发告警,从此告别邮件轰炸和短信延迟。
为什么选择Telegram机器人接收服务器告警
相比传统的邮件或第三方监控App,Telegram机器人有几个天然优势:
- 实时推送:Telegram消息通道延迟极低,机器人告警几乎秒达。
- 集中管理:多个服务器、多个监控项可以推送到同一个聊天或频道,一目了然。
- 轻量可扩展:机器人API开放,支持自定义命令和交互式按钮,方便快速处理。
- 多端同步:桌面、手机、网页版都能收到,不会漏掉关键告警。
准备工作:获取Bot Token和Chat ID
在配置监控之前,你需要先创建一个Telegram机器人并获取你的Chat ID。
步骤1:创建机器人
- 在Telegram中搜索 @BotFather(官方机器人之父),点击开始。
- 发送指令
/newbot,按照提示设置机器人显示名称和用户名(必须以bot结尾)。 - 创建成功后,BotFather会返回一个 HTTP API Token,形如
123456:ABC-DEF...,妥善保存。
步骤2:获取Chat ID
- 把你的机器人添加到你想要接收告警的群组或频道中(也可以私聊)。
- 在聊天中随便发一条消息(比如“/start”)。
- 访问以下URL(将 token 替换为你的实际值):
https://api.telegram.org/bot<你的TOKEN>/getUpdates - 在返回的JSON中查找
chat对象中的id,这就是你的Chat ID(如果是群组,通常以-100开头)。
核心方案:利用开源机器人监控服务器
你可以使用现成的开源项目,也可以自己写脚本。这里推荐两种主流方案。
方案A:使用 TelegramBot(Python脚本)
如果你有一点编程基础,可以写一个简单的Python脚本,使用 python-telegram-bot 库采集系统状态并发送告警。
示例核心逻辑:
import psutil
import requests
TOKEN = "你的BOT_TOKEN"
CHAT_ID = "你的CHAT_ID"
# 获取系统状态
cpu = psutil.cpu_percent(interval=1)
mem = psutil.virtual_memory().percent
disk = psutil.disk_usage('/').percent
message = f"⚠️ 服务器告警\nCPU: %\n内存: %\n磁盘: %"
url = f"https://api.telegram.org/bot/sendMessage"
requests.post(url, data={"chat_id": CHAT_ID, "text": message})
配合cron定时任务,即可实现定期检测。若检测值超过阈值,则触发发送。
方案B:使用现成监控机器人(如 UptimeRobot 集成)
对于不想写代码的用户,可以使用在线监控服务UptimeRobot,并添加Telegram告警渠道。在UptimeRobot后台添加监控项后,在“Alert Contacts”中选择Telegram,填入Bot Token和Chat ID即可。当服务器状态变化(离线、恢复)时,UptimeRobot会直接推送到Telegram。
进阶:设置告警规则与异常转发
监控不只是“看数字”,更重要的是在异常时触发转发。你可以自定义告警规则:
- 阈值触发:CPU > 90%、内存 > 85%、磁盘 > 90%时发送“危险”告警。
- 连续检查:连续3次超过阈值才告警,避免瞬时波动误报。
- 分级告警:WARNING和CRITICAL不同颜色/级别,配合Telegram的Markdown高亮。
- 自动转发:如果告警需要转发给其他成员,可以设置机器人将消息转发到另一个群组,或使用@alert频道。
将告警发送到群组或频道的具体设置
- 将机器人添加到目标群组,并设为管理员(通常需要发送消息权限)。
- 在脚本或监控服务的配置中,将Chat ID设为该群组的ID(负值)。
- 如果使用现成服务,可在“Alert Contacts”中为不同群组创建多个联系人。
- 若希望分组转发,比如“关键告警”到群A,“普通告警”到群B,可为每条规则指定不同的Telegram联系人。
常见问题与解决建议
1. 机器人无法发送消息?
检查是否已先发送过/start,或者机器人是否被移出群。另外,确认Chat ID是否正确,尤其群组ID是负数。
2. 告警信息无法正常换行?
在Telegram API中,换行需要 \n 转义,或使用Markdown的换行语法。建议发送时设置 parse_mode=HTML 并使用 <br>。
3. 如何防止告警轰炸?
加入“冷却时间”机制,例如同一监控项在10分钟内只发送一次告警,直到恢复后再重置。
总结
通过Telegram中文版机器人监控服务器状态,你可以将IT运维与日常聊天无缝融合。无论是个人VPS还是企业集群,只需一次配置,就能享受高实时性的告警体验。从创建Bot到设置规则,整个过程不超过十分钟,却能让你的运维效率迈上新台阶。现在就动手试试吧,让服务器“有事”第一时间告诉你。