当前位置: 首页 > news >正文

飞书设置服务器异常消息

-- 配置区域 local FEISHU_WEBHOOK = "https://open.feishu.cn/open-apis/bot/v2/hook/你的TOKEN" local CPU_THRESHOLD = 90 -- CPU 报警阈值 80% local MEM_THRESHOLD = 90 -- 内存报警阈值 85% local DISK_PATH = "/" -- 监控的磁盘分区 -- 获取 CPU 使用率 (读取 /proc/stat) local function get_cpu_usage() local f = io.open("/proc/stat", "r") local line = f:read("*l") f:close() -- 解析:user nice system idle ... local user, nice, system, idle = line:match("cpu%s+(%d+)%s+(%d+)%s+(%d+)%s+(%d+)") local total = user + nice + system + idle return total, idle end local last_total, last_idle = 0, 0 -- 获取内存和硬盘使用率 local function get_sys_info() -- 内存 (单位 MB) local f_mem = io.popen("free -m | grep Mem") local mem_str = f_mem:read("*a") f_mem:close() local total_m, used_m = mem_str:match("Mem:%s+(%d+)%s+(%d+)") local mem_per = (used_m / total_m) * 100 -- 硬盘 (单位 %) local f_disk = io.popen("df -h " .. DISK_PATH .. " | tail -1") local disk_str = f_disk:read("*a") f_disk:close() local disk_per = disk_str:match("(%d+)%%") return math.floor(mem_per), tonumber(disk_per) end -- 发送飞书消息 local function send_to_feishu(msg) local cfg_setting = cfg_query.data_setting local server_name = cfg_setting.config.server_name local body = { msg_type = "text", content = { text = "【服务器状态报警】\n" .. string.format("⚠️ %s \n", server_name) .. msg } } -- Skynet httpc 调用 body = json.encode(body) local host, path = util.get_url_host(FEISHU_WEBHOOK) local ok, status, res = pcall(httpc.post_json, host, path, body) if not ok then skynet.error("飞书发送失败:", status) end end local function monitor() skynet.error("系统监控服务已启动...") skynet.fork(function() while true do -- 1. 计算 CPU 使用率 (需要两次采样计算差值) local t1, i1 = get_cpu_usage() skynet.sleep(100) -- 间隔 1 秒 local t2, i2 = get_cpu_usage() local cpu_per = math.floor(100 * (1 - (i2 - i1) / (t2 - t1))) -- 2. 获取内存和硬盘 local mem_per, disk_per = get_sys_info() -- 3. 判断是否报警 local alert_msg = "" if cpu_per > CPU_THRESHOLD then alert_msg = alert_msg .. string.format("⚠️ CPU 占用过高: %d%%\n", cpu_per) end if mem_per > MEM_THRESHOLD then alert_msg = alert_msg .. string.format("⚠️ 内存占用过高: %d%%\n", mem_per) end if disk_per > MEM_THRESHOLD then alert_msg = alert_msg .. string.format("⚠️ 硬盘使用过高: %d%%\n", disk_per) end if alert_msg ~= "" then send_to_feishu(alert_msg) skynet.sleep(6000*5) -- 报警后冷却 5 分钟,避免刷屏 end skynet.sleep(500) -- 每 5 秒检测一次 end end) end

飞书机器人准备

在飞书群聊中:设置 -> 群机器人 -> 添加机器人 -> 自定义机器人。

复制产生的 Webhook URL。

安全设置建议勾选“自定义关键词”,例如设置关键词为 报警。

http://www.jsqmd.com/news/568229/

相关文章:

  • DMA传输效率翻倍秘籍:深入解析Burst/Transfer模式在TMS320系列DSP中的配置陷阱
  • intv_ai_mk11商业应用:营销文案润色、会议纪要提炼、邮件草稿生成案例
  • isaac lab5.0与ROS2通信
  • 阿里云无痕验证后台配置全解析:从测试参数trans到正式上线避坑
  • seo文章生成工具的原理是什么
  • 如何在3分钟内搭建Python自动化抢票系统:大麦网秒杀实战指南
  • 3D打印雕塑与玻璃钢雕塑的区别、工艺详解及定制雕塑相关疑问解答
  • Vivado ILA调试实战:当你的Zynq FPGA硬件行为与仿真不符时,如何快速定位问题
  • 模块化机械键盘的硬件设计与工程实践
  • 从模拟CPPLL到数字DPLL:手把手拆解‘比例-积分’双路径控制的实现与比特数权衡
  • 联想新品入局,AI智能终端市场格局生变
  • 本地Cookie管理工具:安全导出与高效应用指南
  • 如何让Windows 11告别臃肿:Win11Debloat终极优化指南
  • 二叉树必刷2题:中序遍历(统一迭代)+ 最大深度(极简递归)
  • 微信小程序授权登录与权限管理的实战指南
  • 基于 RK3576 的双模型联动火警识别系统设计与实现
  • 通信原理期末考点深度解析:从HDB3码到MQAM的实战应用
  • CentOS 7上PolarDB-X部署踩坑实录:从RPM包下载到远程访问的完整避坑指南
  • Openclaw案例之构建《全自动化、高适配、可定制”的AI绘画生产体系》
  • 养老压力下,这块小板子成了中年人的救兵
  • 基于PostGIS与SpringBoot构建高性能动态MVT矢量瓦片服务
  • 【立煌】G101STN01.2友达10.1寸LCD工业液晶屏参数
  • Fast-SCNN的‘学习下采样’模块拆解:如何用共享计算让分割网络跑在123.5 FPS?
  • Product Hunt 每日热榜 | 2026-03-31
  • 绕过支付权限!苍穹外卖项目微信支付模拟实战全流程(含Cpolar内网穿透)
  • NVM下载Node.js老版本总报错?别慌,手把手教你手动下载配置Node 14.21.3(附保姆级截图)
  • CentOS/Ubuntu国内镜像源一键切换脚本分享(附清华/阿里云源配置)
  • PCF8574驱动库深度解析:I²C扩展IO、中断与编码器集成
  • 3步实现完整保存:Full Page Screen Capture高效工具让长网页截图变简单
  • Mac mini M4 安装 Node.js 22 教程