Skip to content

ashllll/log-analyzer_rust

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

840 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Log Analyzer

面向开发、测试与运维场景的本地桌面日志分析工具,技术栈为 Rust + Tauri 2 + React 19 + TypeScript。它的目标不是把日志“收上云”,而是让你直接在本地导入目录或归档包,完成搜索、筛选、归类和问题定位。

以下界面截图来自当前仓库程序界面的实际运行画面,用来帮助你快速上手。

你可以用它做什么

  • 导入日志目录、单文件或压缩包,建立可持续使用的工作区
  • 对大体量日志做本地搜索,支持 | 表示 OR 多关键词匹配
  • 按日志级别、时间范围、文件模式组合过滤结果
  • 维护关键词组,把常见告警词和故障模式沉淀下来
  • 对目录开启监听,持续观察新增日志并刷新工作区
  • 在不依赖外部服务的情况下完成问题排查与结果导出

程序界面预览

1. 工作区总览

工作区页是日常入口。你可以在这里导入目录或文件、查看工作区状态、刷新索引、开启或停止监听。

工作区总览

2. 搜索与过滤

搜索页支持多关键词搜索、时间范围过滤、日志级别过滤和文件模式过滤。结果区会直接展示命中文本和文件位置。

搜索结果页

3. 关键词组管理

关键词组页用于沉淀常见故障模式,适合把团队内反复出现的关键告警词整理成可复用配置。

关键词组页

首次使用流程

1. 安装并启动程序

先准备好 Node.js、Rust 和 Tauri 所需系统依赖。

git clone https://github.com/ashllll/log-analyzer_rust.git
cd log-analyzer_rust/log-analyzer
npm install
npm run tauri dev

环境要求:

工具 版本要求
Node.js >= 22.12.0
npm >= 10
Rust 1.88 (pinned in rust-toolchain.toml)
Tauri 前置依赖 Tauri 2 官方文档

2. 导入日志源并创建工作区

启动后先进入 Workspaces 页面:

  1. 点击 Import Folder 导入一个日志目录
  2. 或点击 Import File 导入单个日志文件 / 归档文件
  3. 程序会为导入源创建工作区,并显示 READYPROCESSINGWATCHING 等状态

推荐做法:

  • 日志目录长期增长时,优先导入目录并开启监听
  • 临时排障包优先直接导入压缩文件
  • 归档包支持递归解压,适合处理事故打包日志

3. 选择工作区并确认状态

导入后,点击目标工作区卡片进入该工作区上下文。顶部面包屑会显示当前工作区名称,状态区会显示当前是否可搜索、是否在监听。

常见状态含义:

  • READY:工作区可正常搜索
  • PROCESSING:正在导入、解压或建立索引
  • WATCHING:正在监听目录变化,适合持续追踪新日志

4. 执行一次搜索

进入 Search Logs 页面后:

  1. 在搜索框输入关键词
  2. 多关键词之间使用 |,例如 timeout|retry|circuit breaker
  3. 按需要展开过滤条件
  4. 点击 Search
  5. 在结果表格中查看命中级别、时间、文件和内容

搜索建议:

  • 排障时优先先用 2 到 4 个高信号关键词缩小范围
  • 时间范围能明显减少无效扫描
  • 文件模式适合限定到 *.loggateway/*error*.txt 这类目标文件

5. 使用过滤器缩小结果范围

当前搜索页支持这些常用过滤:

  • Level:按 E / W / I / D 日志级别过滤
  • Time Range:限制搜索时间区间
  • File Pattern:按文件名或路径模式过滤,支持通配符

组合方式建议:

  • 先输关键词,再加时间范围
  • 结果仍然过多时,再加日志级别
  • 已知问题集中在某类文件时,再补 File Pattern

6. 维护关键词组

进入 Keywords 页面后,可以把常见问题模式沉淀成关键词组,例如:

  • 可靠性告警:timeoutcircuit breaker
  • 容量信号:queue fullbackpressure

这样团队在做重复问题排查时,不需要每次重新组织关键词。

关键词组支持启用/禁用切换——禁用后的组不会出现在搜索页的过滤器面板中,也不会参与日志高亮。适合保留历史关键词组但不希望每次搜索都命中的场景。

7. 刷新与持续追踪

如果日志目录会持续写入,建议:

  1. 在工作区页开启监听
  2. 需要时点击 Refresh workspace
  3. 回到搜索页重复使用同一套关键词与过滤条件

这套流程适合线上事故追踪、联调观察和批量回放分析。

搜索规则与当前实现

当前 UI 主搜索链路基于 Clean Architecture,命令层委托给 WorkspaceService,由 SearchUseCase 编排:

SearchPage.tsx
→ api.searchLogs(query, filters)
→ commands/search/mod.rs: search_logs()
  → resolve_search_query()(query.rs — 解析 + 验证)
  → WorkspaceService::search()(trait:SearchService)
    → WorkspaceServiceImpl 内部创建 CancellationToken
    → SearchUseCase::execute()(spawn_blocking on Rayon pool)
      → CasLogFileRepository → MetadataStore::get_all_files() + CAS::retrieve()
      → SearchBatch(BATCH_SIZE=2000, FILE_CHUNK_SIZE=10)
      → QueryEngineLogSearcher(regex / Aho-Corasick / Memchr / Fancy)
      → CompiledSearchFilters(时间范围、日志级别、文件路径)
        → 实现 la_core::domain::Filter trait
      → DiskResultStoreRepo → DiskResultStore::write_results()
  → 返回 search_id(UUID)
→ cancel_search(searchId) / fetch_search_page(searchId, offset, limit)

当前主搜索的实际规则:

  • | 表示 OR 查询
  • 正则能力以 Rust regex 引擎支持的子集为准;look-around 模式自动通过 FancyEngine 处理
  • 查询验证器检测 ReDoS 模式(嵌套量词、重叠交替)
  • SearchBatch 控制批量刷新与截断,避免内存溢出
  • 搜索结果通过 DiskResultStore 分页写盘
  • 时间过滤与日志级别掩码通过 CompiledSearchFilters 统一处理
  • 文件模式过滤支持通配符 + SQLite GLOB(LogFileRepository 层)

主要能力

  • 本地日志搜索,支持 | 多关键词 OR 查询
  • 混合搜索引擎(Memchr / Aho-Corasick / Standard Regex / Fancy look-around)
  • 搜索结果磁盘分页,适配大结果集
  • 按日志级别、时间范围、文件模式组合过滤
  • Filter domain trait — 过滤器可独立测试和 mock
  • ZIP / TAR / GZ / 7Z 等归档导入与递归解压
  • CAS 内容寻址存储去重(SHA-256)
  • SQLite 元数据管理 + 虚拟路径映射
  • 文件监听与实时增量追踪(FileTailer + WatcherRunner
  • 虚拟文件树浏览、文件内容导出
  • 结构化查询与关键词组管理
  • 验证 newtypes:SafePath / WorkspaceId / QueryString

仓库结构

log-analyzer_rust/
├── log-analyzer/                         # 前端与 Tauri 应用根目录
│   ├── src/                              # React 前端(hooks / stores / pages)
│   ├── src-tauri/                        # Rust 后端主 crate
│   │   ├── src/
│   │   │   ├── application/              # Use cases: search, watch, config, export
│   │   │   ├── commands/                 # Tauri 命令(纯校验 + 委托)
│   │   │   ├── infrastructure/           # Adapters: searcher, event_publisher, etc.
│   │   │   ├── services/                 # Engines: query_planner, regex_engine
│   │   │   ├── models/                   # AppState(typed registries)
│   │   │   └── utils/                    # encoding, validation, newtypes
│   │   └── crates/
│   │       ├── la-core/                  # Domain traits + models
│   │       ├── la-storage/               # CAS + SQLite
│   │       ├── la-search/                # Query engine + result store
│   │       └── la-archive/               # Archive extraction
│   └── package.json
├── docs/                                 # 核心文档
├── scripts/                              # CI / 校验脚本
├── .github/workflows/                    # CI/CD 流水线(含 Dependabot)
└── test_nested_archives/                 # 测试用嵌套归档夹具

开发与构建

开发运行

cd log-analyzer
npm run dev

启动桌面程序:

cd log-analyzer
npm run tauri dev

生产构建

cd log-analyzer
npm run tauri build

常用检查

前端:

cd log-analyzer
npm run lint
npm run type-check
npm test

Rust:

cd log-analyzer/src-tauri
cargo fmt -- --check
cargo clippy --all-features --all-targets -- -D warnings
cargo test -q

核心文档

完整文档站:ashllll.github.io/log-analyzer_rust

本地预览文档:

npm ci
npm run docs:dev
文档 说明
快速开始 安装、导入与第一次搜索
架构总览 分层、workspace crates 与关键数据流
文档索引 文档目录与阅读顺序
贡献指南 开发环境、提交流程、测试约定
运行手册 构建、排障、回滚指南
发布流程 版本发布步骤与校验要求
CAS 存储架构 内容寻址存储与元数据设计

补充说明

  • 前端搜索入口:log-analyzer/src/pages/SearchPage.tsx
  • 后端搜索入口:log-analyzer/src-tauri/src/commands/search/mod.rs
  • 搜索用例编排:log-analyzer/src-tauri/src/application/search.rs
  • 查询引擎:log-analyzer/src-tauri/src/services/regex_engine.rs
  • 过滤器 trait:log-analyzer/src-tauri/crates/la-core/src/domain/filter.rs
  • 验证 newtypes:log-analyzer/src-tauri/src/utils/validation/
  • 结构化查询能力存在,但不是当前 UI 主搜索入口
  • 文档以“当前代码真实行为”为准,不把预留能力写成已落地主链路

License

Apache-2.0

About

No description, website, or topics provided.

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors