内网穿透的应用-服务器日志出现异常怎么办?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/10/18 3:02:45 阅读更多 →
多角色对话系统部署实战:从环境配置到性能优化

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

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

2026/10/18 22:02:19 阅读更多 →
QtScrcpy跨平台Android设备控制架构深度解析

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

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

2026/10/16 21:49:26 阅读更多 →

最新新闻

KSyntaxHighlighting编译指南:解决KF6依赖与CMake构建链问题

KSyntaxHighlighting编译指南:解决KF6依赖与CMake构建链问题

1. 项目概述:为什么一个语法高亮库的编译会卡住你一整天?“编译 KSyntaxHighlighting 的过程中遇到的一些问题”——这个标题看起来平平无奇,甚至有点枯燥,但它背后藏着的是无数 C 跨平台开发者的共同记忆:一个看似轻量…

2026/10/20 12:05:01 阅读更多 →
置信规则库BRB MATLAB实现:证据推理与可解释故障诊断

置信规则库BRB MATLAB实现:证据推理与可解释故障诊断

简介:压缩包内是杨剑波教授设计的置信规则库(BRB)MATLAB实现代码,共9个文件、以8个m脚本和1个asv自动保存副本组成,整体仅11KB。这些代码覆盖数据预处理、规则库构建、参数优化、模型验证等完整环节,核心脚…

2026/10/20 12:05:01 阅读更多 →
联通网络实测:BT Tracker响应速度排名与优化方案

联通网络实测:BT Tracker响应速度排名与优化方案

上周我折腾了一件事:趁着2026年3月1日这波全国网络测速的热度,我把手上能用的BT Tracker服务器全部拉出来,专门在联通网络环境下跑了一遍延迟和响应测试。不是为了炫技,而是因为最近在帮几个做开源镜像站的朋友调BT分发方案&#…

2026/10/20 12:05:01 阅读更多 →
SSM+Vue家乡旅游宣传册系统:毕设全流程实战指南

SSM+Vue家乡旅游宣传册系统:毕设全流程实战指南

每年到了毕设选题的时候,总有一批计算机专业的同学站在表格面前反复纠结。如果你看中了“基于SSM和Vue的家乡旅游宣传书册系统”这个方向,我可以直接告诉你:这个题目选得相当稳妥。它的难度不在某个单项技术上,而在于把Spring、Sp…

2026/10/20 12:05:01 阅读更多 →
C语言快速排序:以第一个元素为枢轴的实现与避坑指南

C语言快速排序:以第一个元素为枢轴的实现与避坑指南

先说一句掏心窝的话:这道题我在课程作业、面试手写代码、甚至帮人改代码时都见过无数次。“C语言实现快速排序,以第一个元素作为枢轴”,听起来像教科书里最经典的开篇案例,可真正动手写的时候,大多数人卡在了同一个地方…

2026/10/20 12:05:00 阅读更多 →
基于websocket++的C++ WebSocket通信demo与二次开发实战

基于websocket++的C++ WebSocket通信demo与二次开发实战

简介:基于WebSocket构建的客户端与服务端示例代码包,面向需要在C项目中快速实现实时双向通信的开发者,尤其适合结合Boost在Windows环境下搭建WebSocket应用的初学者。压缩包共2000个文件,大小约320.48MB,内容以hpp头文…

2026/10/20 12:04:00 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →