深入Logchef架构:单二进制如何同时驾驭ClickHouse与VictoriaLogs双查询引擎

发布时间:2026/8/23 11:36:39
深入Logchef架构:单二进制如何同时驾驭ClickHouse与VictoriaLogs双查询引擎 深入Logchef架构单二进制如何同时驾驭ClickHouse与VictoriaLogs双查询引擎【免费下载链接】logchefLightweight, single-binary log analytics interface for ClickHouse, focused on high-performance querying and visualization项目地址: https://gitcode.com/gh_mirrors/lo/logchefLogchef 是一个轻量级的自托管日志分析平台以单二进制形式运行同时支持 ClickHouse 与 VictoriaLogs 双查询引擎。它通过统一的 Provider 抽象层调度两种完全不同的查询语言——ClickHouse SQL 与 LogsQL让你在不迁移、不重塑数据的前提下用同一套工作流完成日志检索、实时跟踪Live Tail、仪表盘、告警与权限管控。一句话认识 Logchef单二进制 双引擎Logchef 由 Go 编写编译后就是一个可执行文件前端界面、API 服务、元数据存储默认 SQLite可切换 Postgres全部打包在一起没有运行时依赖。它的定位不是再做一个日志存储而是做一层查询与控制平面你的日志仍然躺在 ClickHouse 或 VictoriaLogs 里Logchef 负责连接、查询、可视化与权限。在「Manage Sources」页面你可以同时管理多个数据源。每个数据源携带自己的类型、连接配置与健康状态——这是整个双引擎架构的入口。问题为什么不能只支持一种引擎在 v2 之前Logchef 的整个代码库假设数据源就是 ClickHouse 表数据源按database.table标识SQLite 直接存host / database / table_name列查询执行默认走raw_sql告警、直方图、字段侧栏全都按 ClickHouse SQL 形状设计而 VictoriaLogs 完全是另一种物种无 schema、没有database.table概念、查询走 HTTP LogsQL、字段发现是动态且依赖时间范围的。如果强行把它伪装成 SQL只会造出一个脆弱的兼容层。架构设计文档 rfcs/0001-datasource-architecture-clickhouse-victorialogs.md 中的关键决策是不再把 SQL 当作 LogChef 的通用内部查询表示而是让每种引擎保留自己的原生查询语言在更上层做统一。架构核心Provider 抽象层整个双引擎能力集中在internal/datasource包中。所有数据源操作都通过一个统一的Provider接口发出定义见internal/datasource/service.gotype Provider interface { Type() models.SourceType Capabilities() []Capability SupportedQueryLanguages() []models.QueryLanguage QueryLogs(...) // 日志检索 Histogram(...) // 直方图 EvaluateAlert(...) // 告警求值 // ... }启动时两个具体 Provider 各自注册进一个服务Registry 模式组件位置负责引擎原生查询语言ClickHouseProviderinternal/datasource/clickhouse_provider.goClickHouselogchefql、clickhouse-sqlVictoriaLogsProviderinternal/victorialogs/provider.goVictoriaLogslogchefql、logsql任何请求查询、直方图、告警求值、字段发现的流程都是查库拿到数据源 → 按source_type路由到对应 Provider → Provider 用原生语言执行。上层 API、前端、告警管理器完全不需要知道底下是 ClickHouse 还是 VictoriaLogs。能力协商前端按能力渲染每个 Provider 通过Capabilities()声明自己支持什么例如ClickHouseschema_inspection、log_context、exports、live_tail……VictoriaLogshistogram、field_values、live_tail、ai_sql_generation……这些能力随数据源 API 响应内联返回前端据此决定显示哪些按钮、隐藏哪些入口比如不支持日志上下文功能的引擎就不显示上下文按钮。这是**避免假兼容**的关键设计能力不支持就明说而不是渲染一个点了会报错的界面。此外流式能力走可选接口模式LogTailer实时 tail、LogStreamer流式返回、LogContextProvider日志上下文都是可选接口未实现的 Provider 会收到ErrOperationNotSupported调用方自动回退。新增引擎时只需实现自己支持的部分。一个 LogchefQL两种编译目标用户体验上最有意思的一点你在探索界面输入的查询可以是统一的LogchefQL如lvERRORLogchef 会自动编译成目标引擎的原生语言。编译到 ClickHouseinternal/logchefql/sql_generator.go生成带时间范围的 SQL编译到 VictoriaLogsinternal/logchefql/logsql_generator.go生成 LogsQL并且严格对齐了 VictoriaLogs 的词法分析器——字段名与保留字冲突时自动加引号避免注入解析错误探索页面中编辑器 Tab 是动态的ClickHouse 数据源显示 LogchefQL / SQLVictoriaLogs 数据源显示 LogchefQL / LogsQL。直方图、分组、字段侧栏则跨引擎一致——VictoriaLogs 侧由/hits、field_names、field_values等原生端点支撑见internal/victorialogs/querying.go并带有 top-N 分组上限防止高基数字段打爆内存。安全设计源级认证与不可变作用域双引擎架构里最容易被忽视的风险是用户查询绕过数据源级权限。Logchef 的处理方式是让 Provider 独占以下职责租户头注入VictoriaLogs 的AccountID/ProjectID请求头由 Provider 从数据源配置计算且列为保留头见internal/victorialogs/provider.go中reservedHeaderKeys用户自定义头无法覆盖认证与租户信息不可变作用域immutable scope每个 VictoriaLogs 数据源可定义源级过滤如{apppayments}Provider 将其注入每一次查询、直方图、字段发现与告警求值。用户无法在查询里突破这个边界这意味着多个团队可以共享同一个 VictoriaLogs 集群而 Logchef 在其上叠加按数据源隔离的 RBAC。共享控制平面告警、仪表盘与 CLI引擎可以不同但控制平面完全共享团队与 RBAC、保存查询、集合、告警、仪表盘全部跨引擎工作。告警query_language字段区分引擎条件构造器condition builder在 ClickHouse 编译为 SQL在 VictoriaLogs 编译为| stats fn(field) as value形式的 LogsQL见internal/alerts/manager.go仪表盘一个网格上可以混排 ClickHouse 与 VictoriaLogs 的面板实时 tail两个引擎都支持VictoriaLogs 走原生流式 tailClickHouse 走轮询 回溯去重CLI同一套终端工作流理解两种后端CLI源码在cli/提供query、explain、histogram、tail、doctor等命令explain会展示 LogchefQL 编译出的原生 SQL/LogsQL 而不执行是理解这套双引擎架构的好入口。快速上手一条命令跑起来想亲自验证这套架构最简单的方式是用官方 Compose 文件启动配置见deployment/docker/docker-compose.ymldocker compose up -d然后在「Sources」中分别添加一个 ClickHouse 数据源和一个 VictoriaLogs 数据源即可在同一个探索界面里切换双引擎。本地开发环境也可以参考dev/docker-compose.yml内置了 VictoriaLogs 服务与种子数据。小结Logchef 的双引擎架构可以概括为三条原则引擎原生语言不互相伪装——SQL 归 ClickHouseLogsQL 归 VictoriaLogs统一发生在更上层能力驱动而非假设驱动——Provider 声明能力前端按能力渲染不支持就隐藏安全边界收敛在 Provider 内——认证、租户、作用域都由数据源所有者注入用户查询无法越权这也是单二进制如何同时驾驭双引擎的答案不是把两个引擎塞进一个 SQL 翻译层而是用一个薄薄的抽象层 能力协商把差异封装在各自 Provider 里。【免费下载链接】logchefLightweight, single-binary log analytics interface for ClickHouse, focused on high-performance querying and visualization项目地址: https://gitcode.com/gh_mirrors/lo/logchef创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考