Telegram API打造服务器监控告警系统:从零到实战的完整指南

本文详细介绍如何利用Telegram Bot API和Telethon库实现服务器运行状态监控,涵盖CPU、内存、磁盘、网络等指标采集,以及异常告警推送的完整实战方案。

阅读提示建议先浏览小标题,再根据需要深入阅读具体段落。

为什么选择Telegram作为服务器监控告警通道

服务器监控是运维工作的重要环节,传统的邮件告警往往存在延迟高、容易被忽略等问题。而Telegram凭借其即时推送、免短信费、API开放等优势,成为越来越多技术团队的告警首选。通过Telegram API,我们可以将服务器运行状态实时推送到群组或个人,即使在外出也能第一时间掌握异常。本文将带领你从零开始,打造一套实用的Telegram服务器监控系统。

准备工作:创建Telegram Bot和获取Chat ID

在开始之前,你需要先创建一个Telegram机器人,并获取用于接收消息的Chat ID。流程如下:

  1. 在Telegram中搜索@BotFather,发送/newbot创建新机器人,得到Bot Token。
  2. 将你的机器人添加到需要接收告警的群组,或者直接与机器人私聊。
  3. 访问 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状态码。例如,利用fpingsocket模块检测主机存活,用requests检查目标URL返回码。一旦异常,立即触发Telegram告警。这样,你的监控范围便覆盖了整个IT基础设施。

注意事项与安全建议

  • 保护Token:不要把Bot Token和API密钥硬编码在脚本中,推荐使用环境变量或Vault。
  • 会话管理:使用Telethon时,session文件要妥善保管,防止被窃取。
  • 告警风暴:设置合理的阈值和冷却时间,避免频繁消息导致自己将其屏蔽。
  • 控制权限:Bot只需要发送消息权限,不要授予管理员权限。

总结

利用Telegram API监控服务器运行状态,不仅免费高效,而且灵活可定制。通过本文的方案,你可以快速搭建属于自己的告警系统,将服务器异常事件实时掌握在手中。结合Telethon的高阶能力,还可以实现更复杂的自动化运维操作。立即动手,为你的服务器加上一道及时的安全防线吧。

FAQ

安装与配置指南

常见问题