内网穿透的应用-服务器日志出现异常怎么办?Python监控、钉钉告警与远程处理教程
前言服务器运行过程中磁盘空间不足、程序连接失败或者服务异常通常都会在系统日志或应用日志中留下记录。但如果没有专门的监控工具这些信息往往要等到人工登录服务器检查时才会被发现。对于家庭服务器、测试主机和数量不多的小型服务来说部署一套完整的日志平台可能有些复杂。更直接的办法是持续读取关键日志文件在出现error、failed或者no space left on device等指定关键词时主动发送一条告警消息。本文会使用Python编写一个轻量日志监控脚本记录当前读取位置只处理后续新增的日志内容并在匹配到异常关键词后通过钉钉机器人将主机名、时间、日志路径和具体内容发送到群聊。完成日志告警后还会将脚本配置为systemd服务使其能够随系统启动并持续运行。最后通过cpolar映射服务器的SSH端口收到告警后可以从外部网络远程登录主机继续检查磁盘、进程和服务状态。1.测试效果效果预览当你的/var/log/syslog或应用日志中出现May 0815:30:01 server cpolar[1234]: Failed towritelog: no space left on device你将在钉钉群收到如下消息【服务器告警】主机Z4S-VJFL时间2026-05-08 15:30:01日志路径/var/log/cpolar/access.log.20260508内容Failed to write log: no space left on device磁盘空间不足请立即处理通过这个Python脚本你实现了实时监控任意日志文件关键词触发精准告警钉钉消息秒级触达手机低资源占用适合嵌入式设备零依赖复杂框架纯标准库 requests延伸场景监控Nginx错误日志 → 发现攻击行为监控数据库慢查询日志 → 优化SQL监控Docker容器日志 → 异常自动重启让机器替你“盯屏”你只管睡觉2.获取钉钉Webhook和Secret打开钉钉群 → 点击右上角设置找到智能群助手 → 添加机器人添加自定义机器人点击添加给机器人起个名字我这里是“服务器告警”设置发消息关键词因为现在钉钉对安全严格所以需要设置限制也可以设置加签或者IP地址点击“加签”复制生成的秘钥留着备用点击完成后复制生成的Webhook留着备用3.编写Python监控脚本创建要监控的日志文件mkdir/var/log/ceshi/touch/var/log/ceshi/access.log.20260508创建文件log_monitor.py#!/usr/bin/env python3# -*- coding: utf-8 -*-importosimporttimeimportjsonimporthmacimporthashlibimportbase64importurllib.parse from datetimeimportdatetime from pathlibimportPathimportrequests# 配置区请按需修改LOG_FILE/var/log/ceshi/access.log.20260508# 要监控的日志文件KEYWORDS[error,failed,exception,no space left on device,disk full]HOSTNAMEos.uname().nodename# 自动获取主机名# 钉钉机器人配置从钉钉后台获取DINGTALK_WEBHOOKhttps://oapi.dingtalk.com/robot/send?access_tokendbf63c2e3c2f2ddDINGTALK_SECRETSEC8bb4d908c1039a4# 钉钉签名函数 def get_dingtalk_sign(): timestampstr(round(time.time()*1000))secret_encDINGTALK_SECRET.encode(utf-8)string_to_sign{}\n{}.format(timestamp, DINGTALK_SECRET)string_to_sign_encstring_to_sign.encode(utf-8)hmac_codehmac.new(secret_enc, string_to_sign_enc,digestmodhashlib.sha256).digest()signurllib.parse.quote_plus(base64.b64encode(hmac_code))returntimestamp, sign# 发送钉钉消息 def send_dingtalk_alert(message): timestamp, signget_dingtalk_sign()webhook_urlf{DINGTALK_WEBHOOK}×tamp{timestamp}sign{sign}data{msgtype:markdown,markdown:{title:【服务器告警】,text:message}}try: responserequests.post(webhook_url,jsondata,timeout10)ifresponse.status_code!200: print(f[!] 钉钉发送失败: {response.text})except Exception as e: print(f[!] 钉钉请求异常: {e})# 监控日志主函数 def monitor_log(): log_pathPath(LOG_FILE)ifnot log_path.exists(): print(f[!] 日志文件不存在: {LOG_FILE})return# 获取文件初始大小用于断点续读file_sizelog_path.stat().st_size print(f[] 开始监控日志: {LOG_FILE} (初始大小: {file_size} bytes))whileTrue: try: current_sizelog_path.stat().st_sizeifcurrent_sizefile_size:# 日志被轮转如 logrotate重置位置print([] 检测到日志轮转重新开始读取)file_size0ifcurrent_sizefile_size: with open(LOG_FILE,r,encodingutf-8,errorsignore)as f: f.seek(file_size)# 从上次位置读起linesf.readlines()file_sizecurrent_size# 更新已读位置forlineinlines: line_lowerline.lower()forkeywordinKEYWORDS:ifkeywordinline_lower:# 构建告警消息nowdatetime.now().strftime(%Y-%m-%d %H:%M:%S)msg(f## **【服务器告警】**\n\nf- **主机**:{HOSTNAME}\nf- **时间**:{now}\nf- **日志路径**:{LOG_FILE}\nf- **内容**:{line.strip()}\n\nf ⚠️ **检测到关键词:{keyword}**)print(f[ALERT] {line.strip()})send_dingtalk_alert(msg)break# 避免重复告警同一行time.sleep(1)# 每秒检查一次except KeyboardInterrupt: print(\n[] 监控已停止)breakexcept Exception as e: print(f[!] 监控异常: {e})time.sleep(5)if__name____main__:monitor_log()4.安装依赖 赋予执行权限进入你的项目目录:cd/root/ceshi创建虚拟环境Python 3.6 自带 venvpython3-mvenv venv激活虚拟环境:sourcevenv/bin/activate此时提示符会变成 (venv)再安装包pipinstallrequests5.测试运行运行你的脚本python log_monitor.py编辑/var/log/ceshi/access.log.20260508监控文件viaccess.log.20260508May 0815:30:01 server cpolar[1234]: Failed towritelog: no space left on device钉钉成功发送告警6.运行 开机自启方式 1使用nohup临时运行nohuppython3 /path/to/log_monitor.py/var/log/log_monitor.log21方式 2创建systemd服务推荐支持开机自启创建服务文件sudovim/etc/systemd/system/log-monitor.service[Unit]DescriptionLog MonitorforServer AlertsAfternetwork.target[Service]TypesimpleUserrootExecStart/usr/bin/python3 /ceshi/log_monitor.pyRestartalwaysRestartSec10[Install]WantedBymulti-user.target启动服务sudosystemctl daemon-reloadsudosystemctlenable--nowlog-monitor.servicesudosystemctl status log-monitor在现实运维中很多开发者、创客甚至中小企业都把关键服务部署在家庭NAS、老旧服务器或内网测试机上——它们没有固定公网IP藏在路由器后面平时靠cpolar暴露个Web界面勉强够用。可一旦半夜磁盘爆满、Docker容器崩溃、系统日志里刷出“no space left on device”或“cpolar failed to reconnect”你却远在千里之外出差、旅游甚至正在熟睡。这时候人工巡检毫无意义而商业监控平台又太重、太贵。但如果你提前做了两件事第一在服务器上跑一个轻量Python脚本持续扫描/var/log/cpolar/或系统日志一旦发现关键词就通过钉钉机器人推送告警到手机第二用cpolar配置一条TCP隧道把本地22端口SSH映射到公网哪怕只是临时分配的地址。那么当故障发生时你的手机会立刻收到钉钉消息“【告警Z4S主机磁盘已满建议通过 cpolar SSH登录清理”。你只需打开终端输入ssh -p 22222 root192.xxx.xxx.xxx就能像坐在机器前一样删日志、重启服务、查进程——整个过程不到五分钟无需回家不用求人。这不仅是技术组合更是对“运维最后一公里”的真实补全让每一台沉默的内网设备都能在危急时刻主动呼救并为你留一扇随时可进的门。尤其对于用极空间、树莓派、旧笔记本搭建家庭实验室的人来说这套方案成本近乎为零却能极大提升系统的可靠性和你的安心感。7.安装cpolar实现随时随地开发7.1 什么是cpolarcpolar是一款安全高效的内网穿透工具无需公网IP或复杂配置只需一条命令即可将本地服务器、Web服务或任意端口映射到公网让你随时随地远程访问内网应用特别适合开发调试、远程运维和应急部署等场景。7.2 部署cpolarcpolar 可以将你本地电脑中的服务如 SSH、Web、数据库映射到公网。即使你在家里或外出时也可以通过公网地址连接回本地运行的开发环境。❤️以下是安装cpolar步骤使用一键脚本安装命令sudocurlhttps://get.cpolar.sh|sh安装完成后执行下方命令查看cpolar服务状态如图所示即为正常启动sudosystemctl status cpolarCpolar安装和成功启动服务后在浏览器上输入虚拟机主机IP加9200端口即:【http://ip:9200】访问Cpolar管理界面使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可打开浏览器访问本地9200端口使用cpolar账户密码登录即可,登录后即可对隧道进行管理。8.配置公网地址通过配置你可以在本地WSL或Linux系统上运行SSH服务并通过Cpolar将其映射到公网从而实现从任意设备远程连接开发环境的目的。隧道名称可自定义本例使用了:ssh注意不要与已有的隧道名称重复协议tcp本地地址22端口类型随机临时TCP端口地区China Top创建成功后打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址接下来就可以在其他电脑或者移动端设备异地上使用任意一个地址在终端中访问即可。tcp 表示使用的协议类型2.tcp.cpolar.top是 Cpolar 提供的域名12178是随机分配的公网端口号通过Cpolar提供的公网地址和端口就可以进行远程部署啦ssh-p12178root2.tcp.cpolar.top9.保留固定TCP公网地址使用cpolar为其配置TCP地址该地址为固定地址不会随机变化。选择区域和描述有一个下拉菜单当前选择的是“China VIP”。右侧输入框用于填写描述信息。保留按钮在右侧有一个橙色的“保留”按钮点击该按钮可以保留所选的TCP地址。列表中显示了一条已保留的TCP地址记录。地区显示为“China Top”。地址显示为“ 16.tcp.cpolar.top:14775”。登录cpolar web UI管理界面点击左侧仪表盘的隧道管理——隧道列表找到所要配置的隧道ssh点击右侧的编辑。修改隧道信息将保留成功的TCP端口配置到隧道中。端口类型选择固定TCP端口预留的TCP地址填写保留成功的TCP地址点击更新。创建完成后打开在线隧道列表此时可以看到随机的公网地址已经发生变化地址名称也变成了保留和固定的TCP地址。这样我们连接到目标主机就没有任何的阻碍啦总结完成以上配置后Python脚本就可以持续检查指定日志文件中新增加的内容。当某一行包含预设关键词时程序会整理当前主机、触发时间、日志路径和具体内容并通过钉钉机器人发送到群聊中。将脚本配置为systemd服务后不需要每次重启服务器都重新手动运行。服务意外退出时也可以根据配置自动重启更适合作为长期运行的基础日志提醒工具。通过cpolar将SSH端口映射为公网TCP地址后收到钉钉告警时还可以从其他网络环境远程登录服务器继续查看磁盘使用情况、相关进程和服务日志。配置固定TCP地址后远程入口不会随着临时隧道变化。需要注意的是这套方案本质上是基于关键词匹配的轻量告警脚本只能发现已经写入指定日志文件、并且符合预设关键词的异常。正式使用时应根据不同服务调整日志路径和关键词同时增加告警去重、频率限制、状态记录和日志轮转处理避免同类错误持续出现时重复发送大量通知。

相关新闻

Linux Optimizer常见问题解答:解决安装与使用中的10大难题

Linux Optimizer常见问题解答:解决安装与使用中的10大难题

Linux Optimizer常见问题解答:解决安装与使用中的10大难题 【免费下载链接】Linux-Optimizer Linux Optimizer 项目地址: https://gitcode.com/gh_mirrors/li/Linux-Optimizer Linux Optimizer是一款专为Linux服务器设计的自动化优化工具,支持Ubu…

2026/7/31 18:15:13 阅读更多 →
多角色对话系统部署实战:从环境配置到性能优化

多角色对话系统部署实战:从环境配置到性能优化

这次我们来看一个名为《舌战群儒》的项目。从名称来看,这很可能是一个基于语言模型或对话系统的技术实现,可能涉及多轮对话、辩论场景模拟或多人对话生成能力。这类项目通常关注语言模型的逻辑推理、上下文理解和多角色交互能力。对于这类语言对话项目&a…

2026/7/31 18:14:13 阅读更多 →
QtScrcpy跨平台Android设备控制架构深度解析

QtScrcpy跨平台Android设备控制架构深度解析

QtScrcpy跨平台Android设备控制架构深度解析 【免费下载链接】QtScrcpy Android real-time display control software 项目地址: https://gitcode.com/GitHub_Trending/qt/QtScrcpy QtScrcpy是一款基于Qt框架构建的跨平台Android设备实时显示与控制软件,采用…

2026/7/31 18:14:13 阅读更多 →

最新新闻

我与 IT 这三十年:2015,大数据平台的重与轻

我与 IT 这三十年:2015,大数据平台的重与轻

2015 年,互联网公司已经很难离开数据平台。 前一年写微博头条时,说过推荐系统不是一个算法点,而是一整套能力。到了 2015 年,我对这句话的感受更深。因为越是想快速迭代业务,越会发现数据平台既是发动机,也…

2026/7/31 18:50:23 阅读更多 →
从立体声到空间音频:Ambisonics与HRTF技术实战指南

从立体声到空间音频:Ambisonics与HRTF技术实战指南

如果你点开这篇文章,大概率是想找 (G)I-DLE 的《Gimme Dat Love》表演视频,或者被“10D立体环绕”这个音效标签吸引了过来。但你可能也会疑惑:为什么一个看似娱乐向的视频内容,会出现在 CSDN 这样的技术社区?这篇文章真…

2026/7/31 18:50:23 阅读更多 →
如何在10分钟内完成原本需要3小时的AI视频生成:自动化视频制作终极指南

如何在10分钟内完成原本需要3小时的AI视频生成:自动化视频制作终极指南

如何在10分钟内完成原本需要3小时的AI视频生成:自动化视频制作终极指南 【免费下载链接】auto-video-generateor 自动视频生成器,给定主题,自动生成解说视频。用户输入主题文字,系统调用大语言模型生成故事或解说的文字&#xff0…

2026/7/31 18:50:23 阅读更多 →
告别黄色感叹号!Windows安卓驱动一键安装终极方案

告别黄色感叹号!Windows安卓驱动一键安装终极方案

告别黄色感叹号!Windows安卓驱动一键安装终极方案 【免费下载链接】Latest-adb-fastboot-installer-for-windows A Simple Android Driver installer tool for windows (Always installs the latest version) 项目地址: https://gitcode.com/gh_mirrors/la/Latest…

2026/7/31 18:50:23 阅读更多 →
电动汽车与可再生能源协同调度的鲁棒优化实践

电动汽车与可再生能源协同调度的鲁棒优化实践

1. 项目背景与核心价值去年帮某新能源车企做充电桩调度优化时,我深刻体会到电动汽车规模化接入对电网的冲击。当30辆大巴同时快充时,变电站的负载曲线就像过山车——这正是我读到这个硕士论文选题时眼前一亮的原因。可再生能源发电与电动汽车的协同调度&…

2026/7/31 18:50:23 阅读更多 →
BilibiliDown音频提取终极指南:如何从B站视频轻松提取高质量音乐

BilibiliDown音频提取终极指南:如何从B站视频轻松提取高质量音乐

BilibiliDown音频提取终极指南:如何从B站视频轻松提取高质量音乐 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh…

2026/7/31 18:49:23 阅读更多 →

日新闻

物理复制比逻辑复制好在哪?数据库复制原理详解

物理复制比逻辑复制好在哪?数据库复制原理详解

数据库复制是把主库数据同步到备库的机制,分为逻辑复制和物理复制两种。逻辑复制传输的是 SQL 语句或行变更事件,物理复制传输的是存储引擎底层的物理日志。阿里云 PolarDB(云原生数据库)采用物理复制,在同步延迟、数据…

2026/7/31 0:00:34 阅读更多 →
BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bilib…

2026/7/31 0:00:34 阅读更多 →
有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

当前,游戏行业的“DataAI融合”已从概念验证进入价值落地阶段。根据IDC 2025年数据,中国AI游戏云市场规模已达18.6亿元;同时,游戏研发环节AI渗透率高达86%,生成式AI内容普及率超过50%。面对庞大的市场,游戏…

2026/7/31 0:00:34 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/31 4:19:39 阅读更多 →

月新闻