为什么选择Telegram作为服务器监控告警通道
服务器监控是运维工作的重要环节,传统的邮件告警往往存在延迟高、容易被忽略等问题。而Telegram凭借其即时推送、免短信费、API开放等优势,成为越来越多技术团队的告警首选。通过Telegram API,我们可以将服务器运行状态实时推送到群组或个人,即使在外出也能第一时间掌握异常。本文将带领你从零开始,打造一套实用的Telegram服务器监控系统。
准备工作:创建Telegram Bot和获取Chat ID
在开始之前,你需要先创建一个Telegram机器人,并获取用于接收消息的Chat ID。流程如下:
- 在Telegram中搜索@BotFather,发送
/newbot创建新机器人,得到Bot Token。 - 将你的机器人添加到需要接收告警的群组,或者直接与机器人私聊。
- 访问
https://api.telegram.org/bot<你的Token>/getUpdates,找到chat.id字段,记录下来。
有了Token和Chat ID,我们就可以通过HTTP API发送任意消息了。
方案一:用Python脚本+Bot API发送告警
最简单的实现方式是写一个Python脚本,定期采集服务器指标,当超过阈值时调用sendMessage接口推送告警。示例代码如下:
import requests
import psutil
import time
BOT_TOKEN = '你的Bot Token'
CHAT_ID = '你的Chat ID'
THRESHOLD = 80
def send_alert(text):
url = f'https://api.telegram.org/bot/sendMessage'
data = {'chat_id': CHAT_ID, 'text': text}
requests.post(url, data=data)
while True:
cpu_percent = psutil.cpu_percent(interval=1)
mem_percent = psutil.virtual_memory().percent
if cpu_percent > THRESHOLD or mem_percent > THRESHOLD:
alert = f'⚠️ 告警:CPU % / 内存 %'
send_alert(alert)
time.sleep(60)该脚本每60秒检查一次,若CPU或内存使用率超过80%,立即推送告警。你可以根据自己的需求调整指标和阈值。
方案二:使用Telethon库实现主动监控
Telethon是一个强大的Telegram客户端库,可以登录用户账号,甚至能监控其他频道的消息。对于服务器监控,我们可以利用Telethon向指定对话发送多媒体消息或更复杂的报告。安装方式:
pip install telethon以下代码演示如何用Telethon发送监控消息:
from telethon import TelegramClient
import asyncio
api_id = '你的API ID'
api_hash = '你的API Hash'
client = TelegramClient('session', api_id, api_hash)
async def send_monitor_message(text):
await client.send_message('me', text)
async def main():
await client.start()
await send_monitor_message('服务器启动,监控正常。')
await client.run_until_disconnected()
asyncio.run(main())Telethon的优点是支持会话式管理,可以方便地处理大量消息,并且能调用所有客户端API,适合构建更复杂的监控机器人。
实战:监控CPU、内存与磁盘,并附带Top进程
下面是一个完整的实战案例,它每天定时汇总服务器状态,并推送Top5资源占用进程,让你对服务器运行一目了然。
import psutil
import requests
from datetime import datetime
def get_top_processes(limit=5):
processes = []
for proc in psutil.process_iter(['pid', 'name', 'cpu_percent', 'memory_percent']):
try:
processes.append(proc.info)
except (psutil.NoSuchProcess, psutil.AccessDenied):
pass
processes.sort(key=lambda x: x['cpu_percent'] or 0, reverse=True)
return processes[:limit]
def format_message():
cpu = psutil.cpu_percent(interval=1)
mem = psutil.virtual_memory().percent
disk = psutil.disk_usage('/').percent
top = get_top_processes()
lines = [f'🕒 {datetime.now():%Y-%m-%d %H:%M:%S}',
f'CPU: % | 内存: % | 磁盘: %',
'Top进程:']
for p in top:
lines.append(f" {p['name']} (PID {p['pid']}) - CPU: {p['cpu_percent']}% / Mem: {p['memory_percent']}%")
return '\n'.join(lines)
# 调用sendMessage发送
requests.post(f'https://api.telegram.org/bot/sendMessage',
data={'chat_id': CHAT_ID, 'text': format_message()})你可以将这段代码放入cron定时任务,每天上午九点自动推送一次运行报告。
进阶:将监控扩展到网络与自定义服务
除了基础资源,我们还能通过API监控网络延迟、端口连通性,甚至Web服务的HTTP状态码。例如,利用fping或socket模块检测主机存活,用requests检查目标URL返回码。一旦异常,立即触发Telegram告警。这样,你的监控范围便覆盖了整个IT基础设施。
注意事项与安全建议
- 保护Token:不要把Bot Token和API密钥硬编码在脚本中,推荐使用环境变量或Vault。
- 会话管理:使用Telethon时,session文件要妥善保管,防止被窃取。
- 告警风暴:设置合理的阈值和冷却时间,避免频繁消息导致自己将其屏蔽。
- 控制权限:Bot只需要发送消息权限,不要授予管理员权限。
总结
利用Telegram API监控服务器运行状态,不仅免费高效,而且灵活可定制。通过本文的方案,你可以快速搭建属于自己的告警系统,将服务器异常事件实时掌握在手中。结合Telethon的高阶能力,还可以实现更复杂的自动化运维操作。立即动手,为你的服务器加上一道及时的安全防线吧。