2026/10/30 22:23:18

如何快速看懂 AUTO-MAS 日志采集管线 log_box:从采集到推送的完整指南

如何快速看懂 AUTO-MAS 日志采集管线 log_box:从采集到推送的完整指南 工作流自动化任务调度桌面应用【免费下载链接】AUTO-MAS多脚本多配置统一管理与自动化工具 | 轻松管理大量脚本并存储多个用户配置、设计自动化任务流、监看脚本日志大幅提高自动化代理效率与稳定性项目地址https://gitcode.com/gh_mirrors/au/AUTO-MAS点击查看免费下载AUTO-MAS 是一个多脚本多配置统一管理与自动化工具而log_box正是它背后的日志采集管线自动 tail 脚本日志、按规则匹配提取关键信息、清洗过滤后再推送到通知渠道。这篇指南带你在 10 分钟看懂「采集 → 前置处理 → 规则匹配 → 后置处理 → 推送」的完整流程无需阅读源码也能掌握它的每一步。1 分钟认识 log_box它负责什么、不负责什么log_box是 AUTO-MAS 中与具体游戏脚本解耦的通用日志组件位于 app/log_box/。它的定位可以用一句话概括调用方只提供「日志源 规则 处理器」剩下的采集、匹配、清洗、推送全部由 log_box 在内部完成。它不关心你跑的是哪个脚本只关心日志本身而采集结果的最终落点推送报告、调度台则由各个专项OK-WW、通用脚本等决定。整个管线可以抽象成一条 5 步流水线日志文件 ── ① 采集(LogSource) ── ② 前置处理(hooks/翻译) ── ③ 规则匹配($()提取) ── ④ 后置处理(去重/规整) ── ⑤ 推送(sink 或 LOGBOX 标记)第一步日志采集——tail 读取与轮转补偿采集由 app/log_box/sources.py 中的LogSource完成它是典型的主动拉取式 tail只读增量open()时记录起始位置默认start_from_endTrue即只采集会话开启之后新增的内容按完整行读取未闭合的半行会留到下次读取不会把一行日志切成两段轮转补偿亮点日志滚动时文件身份inode会变化log_box 会按 inode 在同目录找回被重命名的旧日志从原位置续读避免轮转前的内容静默丢失在不提供 inode 的文件系统如 FAT32上则按rotated_name模板如ok-script.%Y-%m-%d.log或.bak约定探测截断处理文件变小则重置到文件头重读。这意味着无论脚本把日志滚动成日期文件还是直接清空重建采集都不会漏、不会错。第二步前置处理——hooks 规则先于一切日志进入规则匹配之前会先经过 app/log_box/hooks.py 的钩子层支持两类规则规则类型作用典型场景drop命中正则即丢弃该行过滤心跳、进度刷屏等噪声行replace按正则改写该行日志脱敏、格式归一化规则以 JSON 数组形式配置例如[{type: drop, match: heartbeat}, {type: replace, match: IP地址, replace: ***}]关键语义被丢弃的行不进入任务日志、推送报告与成功/失败判定改写后的文本才是下游匹配的依据。配置drop时请务必避开成功/失败标志所在的行否则会误判任务状态。此外前置处理还常用于日志翻译——如 OK-WW 适配器用.po词条把英文日志翻成中文后再匹配规则只需按中文书写见 app/task/Okww/AutoProxy.py。第三步规则匹配——正则 $()表达式提取匹配与提取能力来自 app/utils/LogPatternExtractor.py每条采集规则由三部分组成匹配正则 提取表达式 日志类型。匹配正则为空则该规则不生效正则非法会fail-fast直接报错尽早暴露配置错误提取表达式使用$()语法支持同行拼接、;换行拼接以及cut/get/sub/upper/lower等函数链可从一行日志中精确抠出想要的字段除单行规则外还支持多行聚合multiline由起始/结束正则划定窗口从跨行内容中提取并拼接每条规则命中即产出(日志类型, 文本, 时间戳)三元组时间戳保留「规则命中的那一刻」供推送报告加时间前缀。日志类型只有两种见 app/log_box/logtype.py普通NORMAL任何推送报告都会包含失败FAIL仅当任务中存在未完成用户时才纳入报告。第四步结果推送——两种宿主、两条通道log_box 的结果落点由「宿主」决定这是它最巧妙的设计见 app/log_box/collect.py 与 app/log_box/markers.py① MAS 进程宿主注入 sink运行在 MAS 主进程内的专项如 OK-WW通过log_box.get_collect(paths..., sink...)创建采集会话命中结果直接经 sink 回调写入当前用户的push_log零 IPC 开销。② 脚本子进程宿主LOGBOX标记回传通用脚本以子进程运行无法直接写 MAS 内存。此时 log_box 把结果渲染为受控的 stdout 标记行回传LOGBOX{op:push,type:普通,text:✅ 成功: 节点A} LOGBOX{op:flush}MAS 侧在check_log回调中单行嗅探该前缀见 app/task/general/AutoProxy.py识别后写入用户推送日志非标记行则按普通日志处理。子进程正常退出时由atexit自动冲刷残留并完成最终推送保证收尾不遗漏。第五步采集结果如何变成推送报告进入push_log的条目最终由 app/tools/push_log.py 按用户的节点详情推送模式渲染关闭不输出节点详情只有结果行逐条每条独占一行带HH:MM采集时间前缀汇总按状态成功/跳过/失败聚合成一行多账号自动分块。报告还会镜像到调度台日志未配置推送的用户同样能在调度中心看到完整的节点详情。如何接入 log_box一个最小示例各专项都是「喂参数方」——只提供路径、规则与处理器核心逻辑全部复用。以 MaaEnd 为例app/task/MaaEnd/push_log.py接入四步创建会话log_box.get_collect(paths[日志路径], sink回调, rotated_name轮转模板)挂前置处理log_collect.open(处理器函数)如日志翻译声明规则log_collect.collect(匹配正则, 提取表达式, 日志类型)可注册多条收尾推送任务结束时调用close()自动冲刷多行残留、应用后置处理器并完成推送open()/close()均幂等可安全重复调用。工厂入口只有一个from app.log_box import log_box见 app/log_box/factory.py。路径参数为None时会回退读取环境变量MAS_SCRIPT_LOG_PATH方便脚本子进程宿主使用。小结为什么这条管线值得学职责单一只管日志与具体脚本解耦新增专项零重复代码不漏日志inode 轮转找回 截断重读 完整行读取三重保险先清洗后匹配hooks 丢弃/改写先于判定噪声不干扰成功/失败标志双宿主通道进程内 sink 直写、子进程LOGBOX标记嗅探一条管线通吃两种运行形态。想深入细节可以直接阅读 app/log_box/init.py 的模块说明或运行一次带推送日志配置的任务在调度台观察逐条/汇总两种模式的渲染效果——这就是整条管线的「用户视角」验证方式。赞分享工作流自动化任务调度桌面应用【免费下载链接】AUTO-MAS多脚本多配置统一管理与自动化工具 | 轻松管理大量脚本并存储多个用户配置、设计自动化任务流、监看脚本日志大幅提高自动化代理效率与稳定性项目地址https://gitcode.com/gh_mirrors/au/AUTO-MAS点击查看免费下载相关推荐如何快速掌握iLogtail新手必看的日志采集完整教程如何快速掌握iLogtail新手必看的日志采集完整教程 开篇痛点为什么我们需要专业的日志采集工具 在日常开发和运维工作中我们经常遇到这样的困扰服务器产运维云原生后端终极指南如何快速实现Docker与Containerd容器日志采集终极指南如何快速实现Docker与Containerd容器日志采集 想要轻松管理海量容器日志吗OpenObserve作为 高性能开源可观测性平台 提可观测性后端日志分析指标监控链路追踪Fluent Bit数据采样终极指南如何快速降低非关键日志采集压力Fluent Bit数据采样终极指南如何快速降低非关键日志采集压力 Fluent Bit是一款快速轻量级的日志和指标处理器专为Linux、BSD、OSX和W可观测性日志分析指标监控链路追踪云原生运维数据工程消息路由插件系统创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考