Apache Flagon 介绍与选型指南

Apache Flagon(UserALE.js + Distill)用户行为遥测与点击流分析套件的组件地图、实测活跃度与 Matomo/PostHog 选型对照。

Apache FlagonApache FlagonApacheUbuntuUbuntu 22.04Linux2026/10/16

Apache Flagon 介绍与选型指南

目标:说清 Apache Flagon 这套「用户行为遥测 + 点击流分析」工具的定位、组件地图与活跃度现状,并与 Matomo、PostHog 做同类选型对照。本文全部版本号与组件状态均在 Ubuntu 22.04(x86_64)上以官方仓库、npm 源与 PyPI 源实测核实(2026-10-16 实测)。

一、环境信息

本文结论基于以下实测环境,后续《Ubuntu 22.04 安装 Apache Flagon 指南》《Apache Flagon 配置参数详解》《Apache Flagon 常用 CLI 命令与工具详解》均与此环境一致:

  • 操作系统:Ubuntu 22.04.5 LTS(x86_64)
  • Node.js:v20.20.2(npm 10.8.2)
  • pnpm:9.15.9
  • Python:3.10.12(pip 22.0.2)
  • Git:2.34.1
  • Apache Flagon 主仓库:https://github.com/apache/flagon(monorepo,master 分支)
  • UserALE.js 版本:npm 包 flagon-userale 2.4.0(dist-tags latest)
  • Distill 版本:PyPI 包 flagon-distill 0.1.0
  • 核实时间:2026-10-16

版本核实命令与实测回显(npm 与 PyPI 的线上版本清单,逐条实测):

npm view flagon-userale dist-tags version
dist-tags = { latest: '2.4.0' }
version = '2.4.0'
npm view flagon-userale versions --json
[
  "1.0.0",
  "2.0.0",
  "2.0.2",
  "2.1.0",
  "2.1.1",
  "2.2.0",
  "2.3.0",
  "2.4.0"
]
pip3 index versions flagon-distill
WARNING: pip index is currently an experimental command. It may be removed/changed in a future release without prior warning.
flagon-distill (0.1.0)
Available versions: 0.1.0
  INSTALLED: 0.1.0
  LATEST:    0.1.0

关键差异解读:UserALE.js 已发布到 2.4.0 且版本序列连续(1.0.0 → 2.4.0 共 8 个版本),迭代成熟;Distill 仅发布过 0.1.0 一个 PyPI 版本,说明其生态成熟度远低于 UserALE.js,选型时应把「分析端自建扩展」当作默认预期。

二、软件概述

Apache Flagon 是 Apache 软件基金会旗下的一套开源细客户端(thin-client)行为日志与分析套件,定位是「网页可观测性、可用性工程与产品分析」:在浏览器端用一条 <script> 标签采集用户交互事件(点击、输入、滚动、DOM 变更等),把行为日志发到自建收集端,再用 Python 工具包做行为科学分析(会话切分、挫败感检测、热力图、点击流图谱)。它的前身是 Apache SensSoft,最初源于 Draper 实验室的 DARPA XDATA 项目,由数据科学家、心理学家、开发者与系统架构师跨学科团队打磨而来,目前仍处于 Apache 孵化器(Apache Incubator Podling)阶段。

与「开箱即用的产品分析 SaaS」不同,Flagon 的核心卖点是数据主权与行为科学深度:事件数据 100% 落在自建基础设施上,且内置的 Distill 提供的是「挫败感检测(rage click / dead click / DOM 抖动)」「点击热力图」「马尔可夫点击流转移矩阵」这类研究型分析原语,而不是通用 BI 看板。

命名上需要澄清一个常见混淆:Flagon 是项目名,UserALE 是其核心数据格式与采集库名(User Activity Logging Engine),Distill 是其分析库名。检索资料时以组件名 UserALE.js / Distill 为主,以项目名 Flagon 定位仓库与官方站点;早期资料中出现的 SensSoft、distillery、stout 均为前身或历史组件。

活跃度实测(官方 monorepo 最近一次提交,逐条实测):

git clone --depth 5 https://github.com/apache/flagon.git flagon-repo
cd flagon-repo
git log -1 --format='%H %ad %s' --date=iso
61677c77727a5f9158923c42034a59b6d576f476 2026-10-11 21:26:58 -0700 fix(site): improve homepage hero formatting, add deployment stack pills, and replace raw backticks in HTML (#201)

实测结论:master 分支最近提交时间为 2026-10-11(本文核实日前 5 天),项目处于活跃维护状态;同时它仍是孵化器项目,官方站点明确标注需要遵循孵化器披露政策,这是选型评估时必须如实计入的因素。

💡 技术拓展:用户行为采集的「埋点方案」不止 Flagon 这种全量 DOM 自动埋点一种,常见四类对比——

方案原理/特点适用场景
全自动埋点自动挂接 DOM 事件全量上报,接入成本极低行为科学研究、快速摸底(Flagon UserALE.js 属此类)
代码埋点开发者在业务代码中显式调用上报 API关键业务指标,字段最可控
可视化埋点在页面上圈选元素生成采集规则运营自助配置
服务端埋点在后端服务记录事件流与前端行为无关的链路指标

Flagon 实际采用「全自动埋点 + 可选自定义日志 API」的组合:默认自动捕获全量 DOM 交互,同时提供 userale.log() / packageCustomLog() 兜底业务自定义事件。

三、核心架构

Flagon 采用「前端埋点 → 可插拔导出 → 自建收集/存储 → Python 分析」的流水线架构。以下组件地图全部以官方 monorepo 实测为准(仓库顶层结构,逐条实测):

ls /root/flagon-repo
CONTRIBUTING.md
KEYS
LICENSE
NOTICE
README.md
buf.gen.yaml
buf.yaml
doap_flagon.rdf
examples
flake.lock
flake.nix
lefthook.yml
logos
package-lock.json
package.json
products
proto
scripts
site

3.1 组件地图(实测核实)

组件形态实测版本作用
UserALE.jsTypeScript/JS 客户端库(flagon-userale npm 包)2.4.0页面内自动捕获 DOM 交互与自定义事件,支持多种线上格式导出
UserALE Browser ExtensionChrome/Firefox MV3 浏览器扩展master 构建产物无需改代码即可向任意 URL 白名单页面注入 UserALE,支持 OAuth 2.0 PKCE 与 API Key 认证
Example Collector(收集服务器)Node.js Express + WebSocket 服务(products/userale/example/server/server.js)master 源码接收 UserALE 日志并落盘为 JSON 文件,是官方最小收集端实现
DistillPython 行为分析包(flagon-distill)0.1.0会话切分、挫败感检测、热力图、点击流图谱与 OTel 关联分析
Protobuf Schemaproto/apache/flagon/userale/v1/log.protomaster 源码定义 apache.flagon.userale.v1.LogBatch 规范格式
官方示例栈examples/(OpenSearch、ELK、Apache Lakehouse)与 products/userale/example/otel-demo(OTel Collector + Grafana + Loki + Tempo)master 源码生产级收集/存储/可视化参考架构

对表格的解读:Flagon 不是单一进程服务,而是「客户端库 + 收集端参考实现 + 分析库」的套件。收集端官方只提供参考实现与示例栈,生产部署需要自行选择存储后端(OpenSearch/ELK/OpenTelemetry 栈等);分析端 Distill 是 Python 库而非独立服务,需要按业务封装调用。

💡 技术拓展:前端行为日志的「线上传输格式」不止一种,UserALE.js 2.4.0 内置四种可插拔导出器——

导出器(exporterType)原理/特点适用场景
http-json(默认)UserALE 平铺 JSON 数组,fetch 批量 POST与官方收集服务器/自建 HTTP 端点对接
otlpOpenTelemetry OTLP/JSON ExportLogsServiceRequest接入 OTel Collector 与 Grafana/Loki/Tempo 可观测栈
proto-jsonProtobuf v1 规范 LogBatch JSON需要严格 schema 治理的场景
websocketWebSocket 持久连接流式发送实时监控大屏、低延迟消费

本文后续篇章实测主线采用默认 http-json,并补测了 websocket 与 OTLP 格式的收集端解析;生产选型建议优先 otlp(可直接复用成熟可观测基础设施)。

3.2 数据流

以实测跑通的「UserALE.js → 收集服务器 → Distill 分析」最小闭环为例:

  1. 页面加载 main.global.js(IIFE 构建产物,实测 71872 字节),按 data-* 属性读取配置(如 data-url 指向收集端);
  2. UserALE 自动挂接 DOM 事件,按 transmitInterval(默认 5000ms)与 logCountThreshold(默认 5 条)攒批;
  3. 批量日志以默认 http-json 格式 POST 到收集端 / 或 /v1/logs 端点(实测均返回 HTTP 200);
  4. 收集端把日志追加写入 logs_<启动时间戳>.json(实测路径 example/logs/);
  5. Distill 用 extract_logs() 校验/归一化日志后执行会话摘要、挫败感检测与图谱分析(实测检出 rage click,frustration_score 65.0/high)。

上述数据流的每一步都有对应实测验证:第 2 步的批量策略由 data-threshold/data-interval 控制(见《Apache Flagon 配置参数详解》第三章);第 3 步的 HTTP 上报实测返回 200;第 4 步的落盘文件名与格式有源码依据(logs_${Date.now()}.json);第 5 步的分析输出为结构化 JSON(session_summary 14 项指标)。

3.3 历史组件现状披露(实测核实)

Flagon 历史上曾有独立的 distillery(Node.js + MongoDB 数据收集服务)与 stout 等组件。实测核实结果如下——这也是本文刻意单独成节的原因:网上大量旧资料仍把 distillery 当作 Flagon 的核心组件,但官方仓库现状并非如此:

curl -s -o /dev/null -w 'flagon-distillery => %{http_code}\n' -L https://github.com/apache/flagon-distillery
curl -s -o /dev/null -w 'flagon-stout => %{http_code}\n' -L https://github.com/apache/flagon-stout
curl -s -o /dev/null -w 'flagon-useralejs => %{http_code}\n' -L https://github.com/apache/flagon-useralejs
flagon-distillery => 404
flagon-stout => 404
flagon-useralejs => 200
  • flagon-distillery 与 flagon-stout 仓库在 GitHub 已不存在(404),官网 flagon.apache.org 的产品列表也只剩 UserALE 与 Distill 两项;
  • 老仓库 flagon-useralejs 仍可访问(200),但开发主线已并入 monorepo products/userale;
  • 官方官网首页展示的当前产品线为:UserALE.js(2.5 开发中,页面内交互演示实测可见)、UserALE Browser Extension(MV3)、Distill(Python 分析)。

选型结论:新部署一律以 monorepo(github.com/apache/flagon)为准,不要基于已消失的 distillery/stout 仓库做方案设计;若旧系统曾依赖 distillery,需按《Ubuntu 22.04 安装 Apache Flagon 指南》迁移到 example collector 或 OpenTelemetry 栈收集方案。

浏览器扩展是容易被忽视的部署形态:monorepo 构建实测产出 packages/flagon-userale-ext/build/chrome-mv3-prod/manifest.json(MV3 规范),它的价值是对无法改代码的存量站点做无侵入埋点——通过 URL 白名单向目标页面注入 UserALE,并支持 OAuth 2.0 PKCE 与 API Key 两种认证;但扩展形态要求每个终端安装,不适合面向外部用户的采集,更多用于内网员工行为分析与无源码系统评估。

四、功能特性

以下特性均为实测核实(构建与运行实测过程见《Ubuntu 22.04 安装 Apache Flagon 指南》)。

4.1 UserALE.js(前端采集,实测 npm 2.4.0)

  • 零依赖接入:npm install flagon-userale@2.4.0 实测成功(found 0 vulnerabilities),包内自带 IIFE 构建产物 userale-2.4.0.js(44729 字节)与压缩版 userale-2.4.0.min.js(15276 字节),<script> 标签一行接入;
  • 全量 DOM 自动捕获:click、input、scroll、mouseover(按 resolution 节流)等事件自动打包,SPA 兼容;
  • 四种导出器:http-json(默认)、otlp、proto-json、websocket,可在 data-exporter 属性或 userale.options() 中切换;
  • 两层会话重放:内置 MutationObserver 结构化 DOM 遥测与空间 rage click 检测(RageClickDetector),二层可桥接 rrweb 环形缓冲;
  • 认证扩展:apiKey(x-api-key 头)、authHeader(Authorization 头或回调)、自定义 headers;
  • 源码构建实测:monorepo 内 pnpm install + pnpm build 实测通过(Node 20.20.2 / pnpm 9.15.9),同时产出 ESM 包与浏览器扩展 chrome-mv3 构建产物(packages/flagon-userale-ext/build/chrome-mv3-prod/manifest.json 实测存在)。

对上表的补充说明:所谓「零依赖」指 npm 包运行时不拉任何第三方库(npm view flagon-userale dependencies 实测输出为空,即无运行时依赖),IIFE 产物可直接脱离打包器使用——这是它区别于一般 React/Vue 埋点 SDK 的关键,老站点无需构建链即可接入。

4.2 Example Collector(收集端参考实现,实测 master 源码)

  • HTTP + WebSocket 双协议接收(实测 POST /v1/logs 与 WS /ws 上报均成功);
  • 兼容三种入参格式:UserALE 平铺 JSON 数组、OTLP resourceLogs、(配合导出器的)WebSocket 消息;
  • 日志按启动时间戳落盘:example/logs/logs_<ts>.json(实测文件生成且停机收尾后可被 Python 直接 json.load);
  • 端口经 PORT 环境变量配置(默认 8000),内置 CORS 全放开与 100MB 请求体上限。

4.3 Distill(Python 分析端,实测 0.1.0 源码安装)

实测可用的分析函数(全部在 Ubuntu 22.04 + Python 3.10.12 环境跑通,输出见《Apache Flagon 常用 CLI 命令与工具详解》):

能力函数实测结果
多格式日志解析extract_logs()8 条混合格式日志全部校验通过
会话摘要session_summary()click_count=8、duration 8.0s、unique_targets=5
挫败感综合评分frustration_score()65.0,severity=high
Rage Click 检测detect_rage_clicks()检出 BUTTON#broken(clickCount=3,source=inferred)
Dead Click 检测detect_dead_clicks()检出 8 条
点击流转移矩阵transition_matrix()5 目标 × 5 目标概率矩阵
点击热力图数据click_heatmap_data()输出视口坐标与归一化字段
热力图渲染plot_click_heatmap()生成 HTML 交互热力图(实测 7957 字节)

对表格的解读:Distill 的价值在于「行为科学原语」而非报表——rage click / dead click / DOM 抖动三类挫败信号直接可用,但热力图、漏斗等可视化输出需要结合 Plotly/业务前端自行集成。

三个组件的耦合度也值得一提:UserALE.js 只依赖一个可写的 HTTP/WS 端点(自建收集器、OTel Collector 甚至网关日志接口都行);Example Collector 只做「收日志、写文件」,不依赖数据库;Distill 只读本地 JSON 文件。三者之间唯一的契约是 UserALE 日志格式——这使 Flagon 可以只采用其中任意一段,替换掉另外两段(例如用 UserALE.js + OTel 栈、但保留 Distill 离线分析),选型灵活性显著高于一体化 SaaS。

五、适用场景与限制

适用场景(与实测能力一一对应):

  1. 可用性工程与 UX 研究:rage click、dead click、DOM 抖动、会话重放等挫败信号分析,心理学/人因研究背景的团队尤其受益——Distill 的 frustration_score 实测直接输出 0-100 分与 severity 分级,无需二次建模;
  2. 数据主权敏感的行为采集:全部事件数据落自建存储(OpenSearch/ELK/自建 HTTP 收集端),无第三方上报;收集端代码完全开源可审计,适合金融、政务等合规场景;
  3. 前端可观测性整合:otlp 导出器 + W3C TraceContext(traceId/spanId)关联,可把用户行为并入 OpenTelemetry 链路追踪体系,实现「用户点了什么」与「服务端发生了什么」的对账;
  4. 学术研究与实验平台:Apache-2.0 协议 + 研究型分析原语,适合构建受控实验与数据集;monorepo 的 proto 规范格式(apache.flagon.userale.v1.LogBatch)便于跨语言消费。

限制与风险(实测核实后的如实披露):

  1. 孵化器项目:未毕业为 TLP,发布流程与长期维护承诺弱于顶级项目;
  2. 生态单一:npm 侧成熟(8 个版本),PyPI 侧 Distill 仅有 0.1.0 一个版本,分析端需要自行补齐工程化能力;
  3. 收集端非产品级:example collector 是参考实现(单进程写文件、无鉴权、CORS 全开),生产需自建鉴权与存储(官方示例栈方向是 OpenTelemetry + Grafana 或 OpenSearch);
  4. 无内置隐私合规管线:提供 data-userale-redact 标记与 logDetails 开关(默认 false,避免采集按键与输入值),但 GDPR 等合规流程需自建;
  5. 旧资料陷阱:distillery/stout 已从 GitHub 消失(实测 404),按旧教程部署会直接失败。

六、同类选型对比

用户行为分析领域,与 Flagon 定位可对照的常见方案是 Matomo(原 Piwik,开源 Web 分析)与 PostHog(开源产品分析平台)。三方关键维度对照如下:

维度Apache FlagonMatomo 5.xPostHog(CE/Cloud)
定位行为遥测 + 行为科学研究原语通用网站/电商 Web 分析产品分析 + 特性开关 + 会话重放
采集方式全自动 DOM 埋点 + 自定义 API(JS 库/浏览器扩展)JS 追踪器 + 可视化埋点JS/移动 SDK + 反代采集
采集粒度事件级原始日志(含 target/path/details 全量结构)页面/事件级聚合报表为主事件级,Dashboard/漏斗/留存
分析能力挫败感检测、热力图、马尔可夫点击流、OTel 关联(Python 可编程)内置报表体系成熟(内容/电商/SEO 等 100+ 报表)漏斗、留存、路径、Cohort、特征使用分析
数据主权完全自建,Apache-2.0完全自建,GPLv3+CE 版自建(MIT),Cloud 版 SaaS
部署形态无重型服务端:Node 收集器 + 可选 OTel/OpenSearch 栈PHP + MySQL/MariaDB + 可选 Redis多服务栈(PostgreSQL/Redis/ClickHouse…)
上手成本低接入成本、分析端需 Python 自建中(LAMP 系运维)中高(组件多、资源占用大)
成熟度孵化器,npm 2.4.0 / PyPI 0.1.0,monorepo 活跃(2026-10 仍持续提交)TLP,发布十余年,生态成熟商业公司驱动,迭代极快

关键差异与如何选型:

  1. 要「开箱即用的站点报表」(PV/UV/来源/转化)→ 选 Matomo,Flagon 没有报表体系;
  2. 要「产品分析全家桶 + 特性开关 + 重放」且能接受较重组件栈 → 选 PostHog;
  3. 要「原始行为数据 100% 自持 + 挫败感等研究型分析 + 可并入 OpenTelemetry 体系」→ 选 Flagon;它最薄、最透明,但要求团队具备自建收集端与 Python 分析的工程能力;
  4. 三者可组合:Flagon 负责「行为科学深采」,Matomo/PostHog 负责运营侧报表,二者数据互不替代。

也可以按团队画像快速决策:

  • 数据/研究团队(Python 强、无重运维)→ Flagon + example collector 起步,后续升级 OTel 栈;
  • 传统 Web 运营团队(PHP/LAMP 系运维顺手)→ Matomo;
  • 产品与增长团队(要漏斗/留存/AB 实验闭环)→ PostHog。

补充一个部署形态视角:Flagon 官方给出的生产参考栈有三种(官网首页与 examples/ 目录实测可见)——OpenTelemetry(Collector + Grafana + Loki + Tempo)、OpenSearch(含 Data Prepper)、Apache Iceberg Lakehouse;Matomo 是单机 LAMP 形态;PostHog 则需要多组件集群。资源占用上 Flagon 收集器最小(实测 example collector 常驻内存约 15MB),对边缘/小规格服务器最友好。

七、参考链接