如何通过UpTimeRobot检测Python开发的Discord机器人是否正常运行?
UpTimeRobot 检测 Discord 机器人在线状态实现方案
最优方案选择
四种检测方式里HTTP(s) 检测是最简单的实现方案,其余三种方案的局限性如下:
- Ping 检测:仅能验证部署机器人的服务器网络连通性,无法判断机器人进程是否正常运行、是否成功连接Discord服务
- Port 检测:Discord机器人为主动连接官方网关的客户端模式,默认不会监听公网端口,自行开放端口仅能验证端口可用性,无法直接对应机器人在线状态,同时还会增加服务器安全风险
- Keyword 检测:本质为HTTP(s)检测的延伸功能,需要额外配置关键词匹配规则,实现成本高于基础HTTP(s)检测
具体操作步骤
第一步:给机器人新增健康检查接口
在你的机器人代码中加入一个轻量HTTP服务,仅当机器人成功连接Discord网关、处于正常运行状态时返回200状态码即可,以常用框架示例:
discord.js 示例代码
const express = require('express'); const app = express(); const CHECK_PORT = 8080; // 可自行替换为未被占用的端口 client.on('ready', () => { // 机器人就绪后启动健康检查接口 app.get('/health', (req, res) => { client.isReady() ? res.status(200).send('OK') : res.status(503).send('ERROR'); }); app.listen(CHECK_PORT, () => console.log(`健康检查接口已启动,端口:${CHECK_PORT}`)); });
discord.py 示例代码
from flask import Flask from discord.ext import commands import threading app = Flask(__name__) bot = commands.Bot(command_prefix='!') CHECK_PORT = 8080 @app.route('/health') def health_check(): return 'OK', 200 if bot.is_ready() else 'ERROR', 503 def run_http_server(): app.run(port=CHECK_PORT, host='0.0.0.0') @bot.event async def on_ready(): # 启动HTTP服务线程 threading.Thread(target=run_http_server, daemon=True).start()
配置完成后放开服务器对应端口的入站防火墙规则,确保公网可以访问该接口。
第二步:配置UpTimeRobot监控规则
- 进入UpTimeRobot后台新建监控项,监控类型选择
HTTP(s) - 监控地址填写部署机器人的服务器公网地址+接口路径,格式为
http://你的服务器公网IP:8080/health - 根据需求选择检测间隔,默认5分钟即可
- 告警判定规则保持默认,接口返回非200状态码时即判定为机器人离线,同步更新状态页数据即可
内容的提问来源于stack exchange,提问作者Razzer
相关产品推荐
相关产品推荐

