GLM-OCR赋能运维自动化:服务器日志截图的信息提取与告警
GLM-OCR赋能运维自动化服务器日志截图的信息提取与告警1. 引言当运维遇上“看图识字”想象一下这个场景凌晨三点你的手机突然响起刺耳的告警铃声。你睡眼惺忪地爬起来打开电脑登录到监控系统发现几十台服务器的状态图都标红了。你需要立刻知道发生了什么——是哪个服务挂了错误代码是什么影响范围有多大传统的做法是你一张张点开那些密密麻麻的监控截图用肉眼在像素点里寻找“ERROR”、“Failed”、“Timeout”这些关键词同时还得记下旁边的IP地址和时间戳。这个过程不仅耗时耗力还容易因为疲劳而看漏关键信息。等找到问题根源可能宝贵的处理时间已经溜走了。这就是很多运维工程师日常工作中的真实痛点。服务器监控面板、日志查看器、甚至是某些老旧系统只能导出的报表常常以图片的形式呈现关键信息。从这些图片里人工提取文本信息就像在玩一个既枯燥又容易出错的“找茬”游戏。有没有一种方法能让机器帮我们“看懂”这些图片自动把里面的文字信息提取出来并按照我们的规则进行分析和告警呢这就是我们今天要聊的主题用GLM-OCR这个“看图识字”的AI工具把运维从繁琐的“人肉OCR”中解放出来实现日志截图信息提取与告警的自动化。简单来说GLM-OCR是一个强大的光学字符识别模型。你给它一张带有文字的图片它就能准确地识别出图片里的文字内容。对我们运维来说这就相当于给监控系统装上了一双能“阅读”的“眼睛”。接下来我会带你看看这双“眼睛”具体能帮我们做什么以及怎么把它用起来。2. 为什么是GLM-OCR它能为运维解决什么在深入方案之前我们先聊聊为什么选择GLM-OCR以及它到底击中了运维工作的哪些“痒点”。2.1 运维场景下的独特挑战服务器日志和监控截图可不是普通的文档图片。它们有自己的“脾气”背景复杂深色终端背景、彩色状态指示灯、各种网格线和图表混杂在一起。字体特殊往往是等宽字体字符间距紧凑有时还有ASCII艺术字符或特殊符号。布局多样日志是流式的监控面板是表格或仪表盘没有固定版式。信息实时需要7x24小时不间断处理对识别速度和准确率要求高。一个通用的OCR工具处理标准扫描文档可能还行但面对这些“非主流”的运维图片往往就力不从心了容易出现乱码、串行、漏识别等问题。GLM-OCR这类大模型驱动的OCR在模型训练时可能接触过更广泛、更复杂的文本图像数据对于非常规排版、低对比度、小字体的文本识别通常表现出更强的适应性和鲁棒性这正是我们需要的。2.2 GLM-OCR带来的核心价值把GLM-OCR引入运维流程核心是解决三个问题效率、准确性和及时性。效率提升告别“人眼扫描”最直接的改变是把人从重复性劳动中解放出来。以前需要花半小时一张张查看的截图现在交给程序几分钟内就能完成所有文本的提取和初步分析。工程师可以把时间投入到更复杂的故障根因分析、性能优化和架构设计上。准确性保障减少人为疏漏再细心的工程师也有疲惫的时候。机器不会累它能严格按照规则检查每一张图片的每一个角落确保不会因为凌晨三点精神不济而漏掉一条关键的错误日志。GLM-OCR的高识别率为后续的分析提供了可靠的数据基础。及时告警从被动响应到主动发现这是智能化最关键的一步。我们不止于“识别”更要“理解”和“行动”。通过设定规则例如识别到“OutOfMemoryError”或“连接数 1000”系统可以在识别文本后立即触发告警通过钉钉、企业微信、短信等方式通知负责人。这意味着可能在用户感知到故障之前运维团队就已经开始行动了。3. 实战方案搭建你的智能日志分析流水线说了这么多具体该怎么落地呢下面我以一个典型的“监控截图 - 识别 - 告警”场景为例拆解整个实现流程。你可以把它看作一个自动化流水线。3.1 第一步准备“原料”——获取监控截图自动化始于稳定的数据源。你需要一个能定期、自动对监控页面或日志终端进行截图的方法。对于Web监控页面如Grafana、各类自研监控台可以使用Selenium、Playwright这样的浏览器自动化工具。它们能模拟真实用户操作登录、跳转到指定仪表盘然后执行截图。对于命令行日志或终端如果服务器本身支持或者你有权限安装工具可以用scrot、importImageMagick组件等命令行工具截图。更常见的做法是在一个集中的“监控机”上通过ssh连接到目标服务器执行日志查询命令如tail -n 100 /var/log/app.log并将输出重定向到文件再转换成图片例如使用text2image工具或者直接对虚拟终端会话进行截图。这里给出一个使用Playwright进行网页监控截图并保存的Python示例from playwright.sync_api import sync_playwright import datetime import os def capture_monitoring_screenshot(url, screenshot_path): 自动登录并截取监控仪表盘 with sync_playwright() as p: # 启动浏览器可设置为 headlessTrue 在无头模式下运行 browser p.chromium.launch(headlessTrue) context browser.new_context(viewport{width: 1920, height: 1080}) page context.new_page() try: # 1. 导航到登录页假设需要登录 page.goto(https://your-monitoring-system.com/login) page.fill(input[nameusername], your_username) page.fill(input[namepassword], your_password) page.click(button[typesubmit]) page.wait_for_url(**/dashboard**) # 等待跳转到仪表盘 # 2. 导航到目标监控面板 page.goto(url) page.wait_for_load_state(networkidle) # 等待页面完全加载特别是图表 # 3. 对特定区域或整个页面截图 # 例如截取某个具体的图表组件 # chart_element page.locator(div.chart-panel:has-text(CPU Usage)) # chart_element.screenshot(pathscreenshot_path) # 或者截取整个页面 page.screenshot(pathscreenshot_path, full_pageTrue) print(f截图已保存至{screenshot_path}) except Exception as e: print(f截图过程中发生错误{e}) finally: browser.close() # 使用示例 if __name__ __main__: # 目标监控面板URL target_url https://your-monitoring-system.com/dashboard/abc-123 # 生成带时间戳的截图文件名 timestamp datetime.datetime.now().strftime(%Y%m%d_%H%M%S) save_path f./screenshots/server_status_{timestamp}.png # 创建保存目录 os.makedirs(os.path.dirname(save_path), exist_okTrue) capture_monitoring_screenshot(target_url, save_path)这个脚本可以放到定时任务如Cron里每小时或每5分钟执行一次源源不断地产生待分析的“原料”。3.2 第二步核心处理——“喂”给GLM-OCR识别拿到截图后就是GLM-OCR大显身手的时候了。这里假设你已经通过CSDN星图镜像广场或其他方式部署好了GLM-OCR的API服务通常部署后会提供一个HTTP接口。我们需要写一个简单的客户端程序把截图图片发送给这个API并取回识别出的文本结果。import requests import base64 import json def ocr_with_glm(image_path, glm_ocr_api_url): 调用GLM-OCR API识别图片中的文字 # 1. 将图片转换为Base64编码 with open(image_path, rb) as image_file: image_base64 base64.b64encode(image_file.read()).decode(utf-8) # 2. 构造请求数据根据GLM-OCR API的实际要求调整 payload { image: image_base64, # 可能还有其他参数如语言、是否返回坐标等 task: ocr, return_coordinates: True # 如果需要知道文字在图片中的位置可以开启 } headers { Content-Type: application/json } # 3. 发送POST请求 try: response requests.post(glm_ocr_api_url, datajson.dumps(payload), headersheaders, timeout30) response.raise_for_status() # 检查HTTP错误 result response.json() # 4. 解析结果假设API返回结构中有‘text’字段 if result.get(code) 200 or text in result: # 返回完整的识别文本 extracted_text result.get(text, ) # 也可能返回带坐标的文本块列表 text_blocks result.get(blocks, []) return extracted_text, text_blocks else: print(fOCR识别失败{result.get(message, 未知错误)}) return None, None except requests.exceptions.RequestException as e: print(f请求GLM-OCR API失败{e}) return None, None # 使用示例 if __name__ __main__: api_endpoint http://your-glm-ocr-server:port/v1/ocr # 替换为你的实际API地址 test_image ./screenshots/server_status_20231026_030000.png full_text, blocks ocr_with_glm(test_image, api_endpoint) if full_text: print( 识别出的完整文本 ) print(full_text[:500] ...) # 打印前500字符预览 # 接下来就可以对 full_text 进行关键字分析了现在图片里的文字已经被“读”出来变成程序可以处理的字符串数据了。3.3 第三步赋予“智慧”——关键信息提取与告警规则匹配这是将“数据”转化为“洞察”的一步。我们需要从识别出的大段文本中提取出对我们有用的关键信息。信息提取通常使用正则表达式因为它非常灵活且高效。import re def extract_critical_info(text): 从OCR识别文本中提取关键运维信息 info { error_codes: [], ip_addresses: [], timestamps: [], error_keywords: [], high_load_indicators: [] } # 1. 提取错误码 (例如ERR-5001, HTTP 404, 0x80070005) error_code_pattern r(?:ERR|ERROR|FATAL|WARN)[\s\-:]*([A-Z0-9\-_]{3,})|HTTP\s(\d{3})|0x[0-9A-Fa-f]{6,8} matches re.finditer(error_code_pattern, text, re.IGNORECASE) for match in matches: code match.group(1) or match.group(2) or match.group(0) if code: info[error_codes].append(code) # 2. 提取IP地址 ip_pattern r\b(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b info[ip_addresses] re.findall(ip_pattern, text) # 3. 提取时间戳 (简化示例实际格式可能很多样) # 例如2023-10-26 03:00:15 或 26/Oct/2023:03:00:15 timestamp_pattern r\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}|\d{2}/[A-Za-z]{3}/\d{4}:\d{2}:\d{2}:\d{2} info[timestamps] re.findall(timestamp_pattern, text) # 4. 检测关键错误关键词 error_keywords [exception, failed, timeout, crash, fatal, out of memory, disk full, connection refused] for keyword in error_keywords: if re.search(rf\b{keyword}\b, text, re.IGNORECASE): info[error_keywords].append(keyword) # 5. 检测高负载指标 (例如CPU 95%, Load 10) # 这里假设文本中有类似“CPU: 98%”或“Load average: 15.2”的字符串 cpu_pattern rCPU[:\s]*(\d{1,3})% cpu_matches re.findall(cpu_pattern, text) high_cpu [m for m in cpu_matches if int(m) 90] if high_cpu: info[high_load_indicators].append(fCPU使用率过高: {high_cpu}%) load_pattern rload average:\s*([0-9]\.[0-9]) load_matches re.findall(load_pattern, text) high_load [m for m in load_matches if float(m) 10.0] if high_load: info[high_load_indicators].append(f系统负载过高: {high_load}) return info规则匹配与告警提取信息后根据预定义的规则判断是否需要告警并触发相应的通知。def check_and_alert(extracted_info, screenshot_path): 根据提取的信息判断是否触发告警 alert_messages [] # 规则1: 存在特定错误码 critical_errors {ERR-5001, HTTP 500, 0x80070005} found_critical set(extracted_info[error_codes]) critical_errors if found_critical: alert_messages.append(f⚠️ 发现严重错误码: {, .join(found_critical)}) # 规则2: 存在任何错误关键词 if extracted_info[error_keywords]: alert_messages.append(f⚠️ 发现错误关键词: {, .join(set(extracted_info[error_keywords]))}) # 规则3: 存在高负载指标 if extracted_info[high_load_indicators]: alert_messages.append(f 系统高负载: {, .join(extracted_info[high_load_indicators])}) # 如果触发任何告警 if alert_messages: # 构造最终告警内容附上截图路径便于复查 full_message \n.join(alert_messages) full_message f\n 相关截图: {screenshot_path} full_message f\n⏰ 识别时间: {extracted_info.get(timestamps, [N/A])[0]} # 调用告警发送函数 (示例发送到钉钉机器人) send_dingtalk_alert(full_message) # 也可以发送邮件、短信、企业微信等 # send_email_alert(full_message) print(告警已触发并发送。) return True else: print(状态正常未触发告警。) return False def send_dingtalk_alert(message): 发送告警到钉钉群机器人 (示例) webhook_url https://oapi.dingtalk.com/robot/send?access_tokenYOUR_TOKEN headers {Content-Type: application/json} data { msgtype: text, text: { content: f【运维OCR告警】\n{message} } } try: resp requests.post(webhook_url, jsondata, headersheaders) print(f钉钉消息发送状态: {resp.status_code}) except Exception as e: print(f发送钉钉告警失败: {e}) # 整合流程 def process_screenshot_pipeline(image_path): print(f开始处理截图: {image_path}) # 1. OCR识别 text, _ ocr_with_glm(image_path, http://your-glm-ocr-server:port/v1/ocr) if not text: print(OCR识别失败跳过。) return # 2. 信息提取 critical_info extract_critical_info(text) # 3. 规则检查与告警 check_and_alert(critical_info, image_path) # (可选) 4. 将结果存储到数据库或日志文件用于后续分析 # save_to_database(image_path, text, critical_info)把以上几个步骤串起来一个完整的自动化流水线就初具雏形了。你可以用定时任务调度整个脚本让它周期性地执行截图、识别、分析和告警。4. 还能做什么更多运维自动化场景畅想基础的告警只是开始。GLM-OCR识别出的结构化文本能打开更多自动化运维的大门。场景一日志归档与检索将所有定时截图的识别文本自动存入Elasticsearch或数据库。以后想找“上个月所有出现‘内存泄漏’的服务器和时间点”不再需要翻看海量图片一个简单的文本搜索就能搞定。场景二自动化报告生成每周或每月自动将关键指标如错误次数Top 10的服务、最常出现的错误类型从识别文本中统计出来用Python的Jinja2模板自动生成一份运维报告直接发送给团队。场景三与CMDB/工单系统联动当识别到某台服务器IP出现特定硬件错误码时不仅可以告警还能自动在CMDB中更新该服务器的状态为“异常”甚至可以在工单系统里自动创建一条维修单指派给相应的硬件团队。场景四配置变更核对在实施批量配置变更后对相关服务器的配置页面进行截图用OCR识别出当前的配置参数与预期的配置进行自动比对快速核实变更是否生效、是否一致避免人工核对的眼花缭乱。5. 总结回过头来看我们通过GLM-OCR这个工具做了一件很简单但很有效的事让机器去完成它擅长的事“看”和“读”让人去专注于更需要判断力和创造力的事“想”和“决断”。从一张张令人头疼的监控截图到一条条清晰的、可处理的文本告警这个转变带来的效率提升和风险降低是实实在在的。部署和实现的过程其实并没有想象中那么复杂。核心就是三步拿到截图、调用API识别、写规则分析。剩下的就是根据你自己的运维环境去填充细节比如监控哪些页面、关注哪些关键字、告警发给谁。当然在实际用的时候可能会遇到识别不准、图片格式特殊、网络延迟这些小问题。这就需要我们做一些调整比如优化截图区域、对识别结果做简单的后处理比如纠正明显的数字“0”和字母“O”的误识别、或者给告警规则加上一些频率限制和去重避免“告警风暴”。技术最终是为了解决问题。GLM-OCR在运维自动化中的应用就是一个很好的例子。它不一定是最炫酷的AI应用但却是能直接减轻工程师负担、提升系统稳定性的实用方案。如果你也在被大量的日志截图困扰不妨试着搭一个简单的原型跑跑看或许会有意想不到的收获。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

相关新闻

高数必备:三角代换解不定积分的5个实战技巧(附常见错误分析)

高数必备:三角代换解不定积分的5个实战技巧(附常见错误分析)

高数必备:三角代换解不定积分的5个实战技巧(附常见错误分析) 又到了期末季,翻开高数习题集,看到那些带着根号、平方和加减号的积分表达式,是不是感觉头皮发麻?对于很多大二、大三的同学来说&…

2026/6/29 23:55:18 阅读更多 →
掌握碧蓝幻想Relink伤害统计工具:从数据监控到战斗优化的全方位指南

掌握碧蓝幻想Relink伤害统计工具:从数据监控到战斗优化的全方位指南

掌握碧蓝幻想Relink伤害统计工具:从数据监控到战斗优化的全方位指南 【免费下载链接】gbfr-logs GBFR Logs lets you track damage statistics with a nice overlay DPS meter for Granblue Fantasy: Relink. 项目地址: https://gitcode.com/gh_mirrors/gb/gbfr-l…

2026/7/4 15:23:17 阅读更多 →
惊艳效果:Pi0具身智能v1实现3D视觉引导的精密装配

惊艳效果:Pi0具身智能v1实现3D视觉引导的精密装配

惊艳效果:Pi0具身智能v1实现3D视觉引导的精密装配 当误差要求小于0.1毫米,传统机器人束手无策时,Pi0具身智能v1如何用3D视觉重新定义精密装配的极限? 1. 突破性精度:重新定义装配标准 在精密制造领域,0.1毫…

2026/6/30 0:11:42 阅读更多 →

最新新闻

@Async异步线程:Spring 自带的异步解决方案

@Async异步线程:Spring 自带的异步解决方案

前言 在项目应用中,使用MQ异步调用来实现系统性能优化,完成服务间数据同步是常用的技术手段。如果是在同一台服务器内部,不涉及到分布式系统,单纯的想实现部分业务的异步执行,这里介绍一个更简单的异步方法调…

2026/7/6 21:30:26 阅读更多 →
揭秘HQTrack核心架构:InternT-MSDeAOTL-V2模型如何实现高精度实时追踪?

揭秘HQTrack核心架构:InternT-MSDeAOTL-V2模型如何实现高精度实时追踪?

揭秘HQTrack核心架构:InternT-MSDeAOTL-V2模型如何实现高精度实时追踪? 【免费下载链接】HQTrack Tracking Anything in High Quality 项目地址: https://gitcode.com/gh_mirrors/hq/HQTrack 你是否曾想过,如何让计算机像人类一样精准…

2026/7/6 21:28:26 阅读更多 →
从 0 新增一个 has.echo:我如何理解小程序容器里的 API 调用链路

从 0 新增一个 has.echo:我如何理解小程序容器里的 API 调用链路

从 0 新增一个 has.echo:我如何理解小程序容器里的 API 调用链路说明:本文是一次脱敏后的学习复盘。文中的 has.echo、EchoModule、system.demo 都是为了讲清楚调用链路而设计的最小示例,不包含公司内部源码、真实业务接口、真实模块路径和敏…

2026/7/6 21:28:26 阅读更多 →
151、RAG 检索增强生成(五):评估体系——RAGAS 指标、人工评测与线上监控

151、RAG 检索增强生成(五):评估体系——RAGAS 指标、人工评测与线上监控

151、RAG 检索增强生成(五):评估体系——RAGAS 指标、人工评测与线上监控 上周五凌晨两点,我被生产环境告警电话吵醒。用户反馈一个法律咨询机器人回答“根据《民法典》第X条,您需要承担全部责任”,但实际法条引用完全错误。我查了日志,发现RAG检索到的文档片段是某篇自…

2026/7/6 21:26:25 阅读更多 →
MySQL 联表查询性能对比:INNER JOIN vs 子查询 vs 临时表,3方案效率实测

MySQL 联表查询性能对比:INNER JOIN vs 子查询 vs 临时表,3方案效率实测

MySQL 联表查询性能优化实战:INNER JOIN vs 子查询 vs 临时表在数据库应用开发中,联表查询是最常见也最容易出现性能问题的操作之一。面对复杂的业务场景,开发者往往需要在多种实现方案中做出选择。本文将针对学生-课程-教师这一经典场景&…

2026/7/6 21:26:25 阅读更多 →
SDF在游戏开发中的创新应用:Dreams与Claybook技术案例分析

SDF在游戏开发中的创新应用:Dreams与Claybook技术案例分析

SDF在游戏开发中的创新应用:Dreams与Claybook技术案例分析 【免费下载链接】SDF Collection of resources (papers, links, discussions, shadertoys,...) related to Signed Distance Field 项目地址: https://gitcode.com/gh_mirrors/sdf/SDF 有符号距离场…

2026/7/6 21:22:23 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻