FastWLAT
FastWLAT (Fast Web Log Analysis Tool) 是基于 Electron + Vue 3 构建的跨平台高性能 Web 日志分析工具,支持本地内存模式与 Redis 分布式处理,专为海量WEB日志分析场景设计。提供日志解析、威胁规则引擎、可视化仪表盘及树状聚合分析,优化了百万级数据的导入速度与查询性能,助力网络安全人员快速洞察访问流量与安全威胁。支持 Windows/macOS/Linux,开箱即用。
Install / Use
/learn @vam876/FastWLATREADME
FastWLAT(Fast Web Log Analysis Tool)
FastWLAT 是一款基于 Electron + Vue 3 + TypeScript 开发的现代化 Web 日志分析工具。专为安全应急响应和日志分析场景设计,提供高性能的日志解析、智能威胁检测、地理位置可视化等功能。
Windows日志分析工具链接 | Linux日志分析工具链接
🏆 FastWLAT功能介绍
-
最新版本: V1.1.0
-
更新日期: 2025/12/18
-
下载地址
最新版下载(Windows) https://github.com/vam876/FastWLAT/releases/tag/v1.1.0
旧版下载(Windows/macOS/Linux) https://github.com/vam876/FastWLAT/releases/tag/v1.0.1
现有工具的痛点分析
🔍 部分日志分析工具的局限性:
- ELK Stack: 部署复杂度极高,需要专业运维团队,资源消耗较大
- Splunk: 许可费用昂贵,普通用户难以承受
- 360星图: 功能封闭,缺少弹性配置,功能强大但无法满足个性化需求
- WebLog Expert/HTTP Logs Viewe: 类似工具很多,但是缺少安全分析功能集成
- GitHub部分开源脚本: 年代久远,缺乏维护,功能单一,用户体验极差
- 近年来收集的一些图形化nginx/Apache分析工具: 用户体验不好,误报率极高,性能差
⚡ 技术痛点:
- 操作不便,学习成本高
- 功能相对封闭,扩展性差
- 缺少现代化的可视化界面
- 弹性不足,无法适应不同规模需求
- 年代久远,技术架构落后
- 长期无人维护
正是基于这些痛点,我们决定从零开始,花了五天时间打造一款真正现代化、用户友好、高度自定义和支持多视图的Web日志分析工具,最终目的是实现既可给领导直观的展示,也可以通过工具快速识别恶意WEB攻击。
🎯 软件架构
<img width="1697" height="426" alt="image" src="https://github.com/user-attachments/assets/34236fa3-7084-431f-965e-f2c70935f754" />日志分析流程
<img width="857" height="903" alt="image" src="https://github.com/user-attachments/assets/aa4314bd-c71c-401a-9637-4988465cebdc" />📊 智能仪表盘 - 访问态势一目了然
<img width="1384" height="861" alt="image" src="https://github.com/user-attachments/assets/816b4e09-9cf1-4a55-a51c-a1d4522048c4" />📥 强大导入系统 - 支持主流WEB日志格式
-
格式全覆盖: Apache、Nginx、IIS、Tomcat等日志格式
-
智能识别: 自动格式检测
-
大文件处理: 百万级日志处理优化
-
三种方式: 文件上传、文本粘贴、示例数据快速体验
-
格式不兼容欢迎提供示例格式进行适配
🔍 高性能日志视图 - 百万条日志秒级响应
-
虚拟滚动: 支持百万级日志流畅浏览
-
多视图模式: 表格、树状、聚合三种视图
-
秒级搜索: 全文搜索、正则匹配、条件过滤
-
智能分页: 动态加载,内存自动回收
-
快速过滤功能: 一键剔除静态文件,一键排除404、30X等状态码日志,留下清爽的日志浏览视图,即可节省渲染性能,也可以排除分析干扰和误报
上图: 日志列表视图,可以快速过滤、搜索和分析
<img width="1656" height="937" alt="image-20250901111437398" src="https://github.com/user-attachments/assets/6b259c74-f468-4123-a5d1-59391a2cfda2" />上图: 树目录视图,通过日志还原出网站原本的目录结构,可以折叠、展开,支持搜索、过滤、仅显示某个路径等多种功能,出现告警日志会显示分析按钮
<img width="1264" height="779" alt="image-20250901111528374" src="https://github.com/user-attachments/assets/7b3566d7-33d1-4f71-8e21-e8e8274742ac" />上图: 出现告警的文件会由分析按钮,点击分析按钮进行高级分析视图(仅针对当前选择的路径) <img width="1149" height="800" alt="image-20250901111625012" src="https://github.com/user-attachments/assets/601aaafc-55b9-42f7-85fd-5e09893f72a0" />
上图: 选择对应的文件会出现详情按钮,点击详情按钮进行详情视图(包含当前路径的所有日志进行展示) <img width="1645" height="899" alt="image-20250901111701236" src="https://github.com/user-attachments/assets/cef5584a-b86a-47f0-ba5f-17e6232c3911" />
上图: 高级分析视图,可以快速排序、搜索和分析,点击分析按钮可以针对当前路径、IP、地区、状态码等数据进行汇聚分析
📈 专业分析引擎 - 数据洞察一步到位
-
多维分析: 时间、状态码、用户代理、地理位置
-
趋势识别: 24小时访问模式、异常时段检测
-
性能分析: 响应时间分布、错误率统计
🛡️ 智能威胁检测 - 企业级安全防护
- 威胁类型: 内置多种威胁检测规则,分析页面支持分类、筛选
- 条件引擎: 状态码、IP、时间、返回数据包大小等多维度精准匹配
- 二次过滤: 告警页面支持正则表达式二次匹配,高亮显示定位匹配规则快速优化
🗺️ 威胁地图可视化 - 全球威胁态势感知
<img width="988" height="896" alt="image" src="https://github.com/user-attachments/assets/053fe3f1-53da-4d15-bca6-bf7bc854434a" />- 地理定位: 基于MaxMind数据库的精准定位,通过优秀的前端库和地图数据进行可视化展示,将访问和攻击来源渲染到地图
- 实时动画: 支持世界地图和中国地图进行动态展示,威胁来源一目了然
- 双模式: 流量地图模式 ↔ 攻击地图模式无缝切换,攻击地图可以渲染出现告警的攻击数据,基于源IP和自定义防护地标进行攻击路径绘制
- 交互探索: 缩放、筛选、详情查看,点击对应的地区节点出现详情卡片
⚙️ 灵活规则管理 - 自定义安全策略
<img width="1664" height="947" alt="image-20250901112433656" src="https://github.com/user-attachments/assets/fc04478a-08b0-4fa4-a417-3f9d7d8734db" />-
可视化配置: 图形界面,无需编程基础
-
条件组合: HTTP方法、状态码、IP、时间范围、返回长度等
-
实时生效: 规则修改即时应用,无需重启
-
高度自定义: 可以添加删除优化告警规则,不加密,无任何限制
🎨 个性化主题 - 适合每个团队的风格
- 三种精美主题: 天空蓝、简约灰、经典蓝紫
- 一键切换: 实时预览,用户偏好自动保存
- 现代设计: 现代化的UI/UX设计
⚙️ 智能设置中心 - 系统优化一站式
<img width="759" height="928" alt="image" src="https://github.com/user-attachments/assets/ea626582-d3e8-4bdf-a266-33df5c4e9bae" />-
三模式存储: 本地内存、zinc(ES兼容)、Redis高性能(v1.1.0版本开始已弃用,改为IndexedDB持久化存储)无缝切换。目前仅开放内存模式
-
性能监控: 实时内存使用、缓存状态监控
-
连接管理: Redis自动重连和状态检测
-
配置持久: 用户设置自动保存和恢复
🌟 FastWLAT的创新点
一、创新性的日志浏览系统
🔍 三视图架构设计
FastWLAT采用了创新的三视图日志浏览架构,每种视图都针对不同的分析场景进行了深度优化:
1️⃣ 常规列表视图 - 高性能数据展示
技术实现:
// 虚拟滚动核心实现
export const VirtualScrollList = defineComponent({
name: 'VirtualScrollList',
setup(props: { items: LogEntry[] }) {
const containerRef = ref<HTMLElement>()
const scrollTop = ref(0)
const itemHeight = 40
const visibleCount = Math.ceil(window.innerHeight / itemHeight) + 5
// 计算可见范围
const visibleRange = computed(() => {
const start = Math.floor(scrollTop.value / itemHeight)
const end = Math.min(start + visibleCount, props.items.length)
return { start, end }
})
// 只渲染可见项目
const visibleItems = computed(() =>
props.items.slice(visibleRange.value.start, visibleRange.value.end)
)
return { containerRef, visibleItems, visibleRange }
}
})
核心特性:
- 虚拟滚动: 支持百万级日志条目无卡顿浏览
- 秒级搜索: 基于内存索引的快速检索
- 智能过滤: 多条件组合筛选,精准定位
- 实时排序: 支持所有字段的动态排序
2️⃣ 创新树状视图 🌳 - 解决分析可视化难题
这是FastWLAT和让其他日志分析工具不同的功能
解决的核心痛点:
- 快速理解整个网站架构
- 希望直观看到每个路径的访问频次和威胁分布
- 显示某个路径下状态码分布情况了
- 点击某个路径或者接口可以快速查看相关日志的访问情况
- 点击某个路径或者接口可以快速查看相关日志的告警情况
实际效果展示:
🏠 网站
├── 📁 文章目录/ (2,345次访问)
│ ├── 📄 技术分享.html (200 856次) 🟢 正常
│ ├── 📄 生活随笔.html (302 234次) 🟢 正常
│ └── 📁 图片/ (404 123次 200 4次)
│ ├── 📄 avatar.jpg (67次) 🟢 正常
│ └── 📄 banner.png (56次) 🟢 正常
├── 📁 管理后台/ (45次访问) ⚠️ 异常,点击分析
│ ├── 📄 login.php (23次) 🟡 异常,点击分析
│ └── 📄 admin.php (22次) 🔴 异常,点击分析
└── 📄 首页 (5,678次) 🟢 正常
技术架构:
// Trie树数据结构 - 构建URL层次结构
class TrieNode {
children: Map<string, TrieNode> = new Map()
logs: LogEntry[] = []
totalCount: number = 0
threatCount: number = 0
insert(pathParts: string[], log: LogEntry) {
let current: TrieNode = this
for (const part of pathParts) {
if (!current.children.has(part)) {
current.children.set(part, new TrieNode())
}
current = current.children.get(part)!
current.totalCount++
// 威胁统计
if (log.threatLevel && log.threatLevel !== 'normal') {
current.threatCount++
}
}
current.logs.push(log)
}
toTree(): TreeNode {
return {
name: this.name,
count: this.totalCount,
threatCount: this.threatCount,
children: Array.from(this.children.entries()).map(([name, node]) => ({
name,
...node.toTree()
}))
}
}
}
虚拟化渲染优化:
// 虚拟树视图 - 解决大数据集卡顿问题
export const VirtualTreeView = defineComponent({
setup() {
// 扁平化树结构用于虚拟滚动
const flattenTree = (nodes: TreeNode[], level = 0): FlatNode[] => {
const result: FlatNode[] = []
for (const node of nodes) {
result.push({ ...node, level, expanded: expandedNodes.has(node.id) })
if (expandedNodes.has(node.id) && node.children?.length) {
result.push(...flattenTree(node.children, level + 1))
}
}
return result
}
// 只渲染可见节点
const visibleNodes = computed(() => {
const flattened = flattenTree(treeData.value)
const start = Math.floor(scrollTop.value / nodeHeight)
const end = start + visibleCount
return flattened.slice(start, end)
})
return { visibleNodes }
}
})
交互功能:
- 详细视图: 点击节点弹出模态框,显示当前路径的所有访问记录
- 分析视图: 查看当前接口的访问统计、响应时间分布、错误率等
- 快速定位: 一键跳转到日志表格的具体条目
- 威胁可视: 节点颜色表示威胁等级,一目了然
3️⃣ 智能聚合视图 📊 - 数据洞察利器
技术实现:
// 聚合数据计算引擎
export class AggregationEngine {
aggregateByField(logs: LogEntry[], field: keyof LogEntry): AggregatedData[] {
const aggregation = new Map<string, AggregatedItem>()
logs.forEach(log => {
const value = String(log[field])
const item = aggregation.get(value) || {
value,
count: 0,
threatCount: 0,
lastAccess: new Date(0),
samples: []
}
item.count++
if (log.threatLevel && log.threatLevel !== 'normal') {
item.threatCount++
}
if (new Date(log.timestamp) > item.la
Related Skills
node-connect
345.4kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
104.6kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
345.4kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
345.4kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
