Monoscope 评测:把可观测性数据锁进 S3,再用自然语言查询
Monoscope 可让您摄取并探索您的日志、跟踪和指标。我们将它们存储在 S3 兼容的存储桶中。通过法学硕士以自然语言进行查询。
秒懂
- 它是什么?
- Monoscope 是一个用 Haskell 写的开源可观测性平台,把日志、链路和指标存进你自己的 S3 桶,并通过 LLM 提供自然语言查询。本文基于 README 与仓库信息,分析它的架构、上手方式、局限与适用人群。
- 适合谁用?
- Monoscope 适合已经拥有 S3 兼容存储、希望长期保留遥测数据并愿意用自然语言或 AI 代理来检索的中小团队。它不适合需要企业级 SSO、丰富告警渠道或对查询延迟有极致要求的场景,因为自托管版只提供基础邮件告警,且自然语言查询依赖 LLM,结果可能不稳定。
- 能商用吗?
- 可以,但条件严格。AGPL-3.0 是网络 copyleft 许可证:如果别人通过网络使用你修改过的版本(例如作为托管服务),你必须以同一许可证向他们提供源代码。
- 还在维护吗?
- 在维护。仓库最近一次提交在 2 天前。
- 用什么语言写的?
- 主要是 Haskell(依据 GitHub 的语言统计)。
以上回答依据项目的 GitHub 数据(最近同步于 2026年9月14日)和我们的分析,不构成法律意见。
开源项目深度解析
它解决什么问题:存储成本与查询门槛的双重痛点
传统可观测性平台通常把日志、链路和指标存在自己的索引里,数据量一大,成本就失控。Monoscope 换了个思路:所有遥测数据直接写入你自有的 S3 兼容桶,利用对象存储的低价来保留多年的数据。同时,它用 LLM 把自然语言翻译成底层查询,让不熟悉查询语言的工程师也能直接问数据。它的目标用户很明确:已经用 OpenTelemetry 做埋点、但不想为托管平台付高额存储费的团队,以及希望让 AI 代理自动盯异常并发送日报的运维人员。
数据流与架构:S3 是存储层,LLM 是查询层
从 README 能看出,Monoscope 的架构分两层。底层是 S3 兼容的对象存储,所有日志、指标、链路都落在那里,这决定了它的成本模型与数据持久性。上层是一套查询与自动化层:CLI 命令发出稳定的 JSON 信封,支持 facets、logs search、events context 等操作。自然语言查询通过 LLM 转换成 KQL(Monoscope 的查询语言),然后对 S3 中的数据进行聚合。MCP 服务器暴露在 /api/v1/mcp,任何支持 MCP 的客户端都能调用 search_events_nl 这类工具,实现自然语言到 KQL 的转换。整个流程里,S3 是事实来源,LLM 是翻译器,CLI 和 MCP 是接口。这种设计的好处是存储与计算分离,你可以只付 S3 的费用,计算由你自己管理。
快速上手:三条命令跑起来,但真实部署需要更多
README 的 Quick Start 非常简单:git clone 后 docker-compose up,访问 localhost:8080,默认账号 admin/changeme。然后可以用 CLI 发送测试数据:monoscope auth login,monoscope send-event -m "Hello from Monoscope",或者 monoscope telemetrygen --kind=trace --rate=5 --count=50 来模拟负载。但注意,这只是启动了一个本地实例,真正的自托管需要你配置自己的 S3 桶,包括访问密钥和桶名。README 没有给出具体的 S3 配置示例,这意味着你可能需要翻文档或读源码才能搞定。CLI 的安装方式倒是直接:curl https://monoscope.tech/install.sh | sh,然后 monoscope auth login。对于想快速体验的人来说,这个流程足够顺畅,但生产部署的细节被省略了。
AI 代理与自动化:CLI 的 JSON 信封是核心设计
Monoscope 的自动化能力围绕 CLI 的稳定 JSON 输出构建。每个命令都返回固定格式的 envelope,比如 facets 返回 {<field_path>: [{value, count}]},events search 返回 {events, count, has_more, cursor}。这使得你可以用 jq 链式处理:先查询服务名,再搜索错误事件,最后拉取上下文。README 还提到,设置 MONOSCOPE_AGENT_MODE=1 或 --agent 可以强制 JSON 输出并禁用交互提示,CI 或 CLAUDE_CODE 环境变量会自动触发这个模式。这意味着你可以把这些命令嵌入到 Claude Code 的 skill 里,让 AI 代理自动执行排查流程。对运维团队来说,这种可脚本化的接口比图形界面更实用,但前提是你愿意写 jq 表达式。
MCP 服务器:把可观测性变成 AI 的工具箱
Monoscope 在 /api/v1/mcp 暴露了 Model Context Protocol 服务器。任何 MCP 客户端,比如 Claude Desktop 或 Cursor,只要配置好 URL 和 API key,就能调用 list_monitors、search_events 这类工具。README 特别提到 search_events_nl 这个复合工具,它把自然语言直接转换成 KQL 查询,还有 analyze_issue 做 LLM 辅助的根因分析。这意味着你可以在聊天界面里直接问「payment-api 的 500 错误怎么回事」,AI 会调用工具去查数据。这个设计把可观测性从「人查数据」变成了「AI 查数据」,但依赖 LLM 的可靠性。如果 LLM 翻译错了 KQL,结果就会失真。
局限与失败模式:自托管版的功能裁剪与 LLM 依赖
README 的对比表明确列出:自托管版的告警渠道只有基础邮件,而云版才有 Slack、PagerDuty 等。这意味着如果你需要实时告警,自托管版可能不够用。另外,自然语言查询的质量完全取决于 LLM 的翻译能力,如果数据模型复杂,LLM 可能生成错误的 KQL,导致查询结果不准确。还有一个潜在问题:S3 兼容存储的延迟通常高于本地索引,对于需要毫秒级响应的查询,Monoscope 可能不是合适的选择。最后,AGPL-3.0 许可证意味着如果你修改了代码并对外提供服务,需要开源你的修改,这对一些商业团队是限制。
替代方案:与 Elastic 或 Loki 的存储模型差异
最直接的替代方案是 Grafana Loki,它也是以对象存储为基础,但 Loki 的索引是独立的,且查询语言是 LogQL,不依赖 LLM。Loki 的架构是「标签索引 + 块存储」,而 Monoscope 是「S3 直接存储 + LLM 翻译」,两者对存储的利用方式不同:Loki 需要额外的索引组件,Monoscope 则把查询负担推给 LLM 和聚合计算。另一个选择是 Elasticsearch,它提供强大的全文搜索和聚合,但存储成本高得多。Monoscope 的优势在于成本,代价是查询的确定性和延迟。如果你需要精确的查询控制,LogQL 或 DSL 可能比自然语言更可靠。
维护与升级成本:Haskell 带来的门槛
Monoscope 用 Haskell 编写,这对维护者来说是个双刃剑。Haskell 的强类型和函数式风格让代码更可靠,但社区规模和工具链相对小众,如果你需要自定义修改或调试,找到熟悉 Haskell 的开发者可能比较难。从发布节奏看,v0.6.25 到 v0.6.24 间隔约一个月,说明项目在积极迭代,但版本号还是 0.x,意味着 API 可能不稳定。CLI 的 JSON envelope 虽然说是稳定格式,但文档没有承诺长期兼容。升级时你需要关注 release notes,特别是涉及 MCP 工具列表或查询语法变更的部分。许可证是 AGPL-3.0,如果你只是自用,没有额外义务,但如果你提供 SaaS 服务,必须开源你的修改版本。
编辑结论
Monoscope 适合已经拥有 S3 兼容存储、希望长期保留遥测数据并愿意用自然语言或 AI 代理来检索的中小团队。它不适合需要企业级 SSO、丰富告警渠道或对查询延迟有极致要求的场景,因为自托管版只提供基础邮件告警,且自然语言查询依赖 LLM,结果可能不稳定。在采用前,应先验证你的 S3 桶的兼容性(特别是生命周期策略和跨区域复制),并确认 CLI 的 JSON 输出格式能满足你的自动化脚本。如果你需要完整的告警和 SSO,官方云版是更省事的选择,但数据仍在你自己的桶里。最终判断:Monoscope 的核心理念是把存储成本降到最低,用 AI 弥补查询门槛,但它的自托管体验还停留在 DIY 阶段,适合愿意折腾的团队。
社区笔记