类 SQL 检索让日志查询回到直觉,配合 trace 一键关联,从一条报错日志定位到完整调用链,排查效率成倍提升。
日志平台最劝退人的地方,往往是查询语法。Elasticsearch 的 Lucene 语法、各家自研的 DSL,写错一个括号就查不出结果,新同事上手要啃半天文档。炬鲸 OBSERVE 把日志检索设计成类 SQL:会写 SELECT ... WHERE ... 就能查。
SELECT service, COUNT(*) AS cnt
FROM logs
WHERE level = 'ERROR' AND ts > now() - 1h
GROUP BY service
ORDER BY cnt DESC
没有 Lucene 语法,没有字段类型的前置声明,开发、测试、运维都能直接上手。这不是降级,而是把查询能力还给使用者:日志查询的本质就是按条件过滤、聚合、排序,SQL 天然擅长这件事。对技术负责人来说,选型时可以把「查询门槛」作为硬指标——团队里最不熟悉日志平台的人,能否在十分钟内写出第一条可用查询。如果答案是否,那个平台迟早会变成单点瓶颈。
线上排查最常见的路径是:先在日志里捞到一条报错,再想「这条日志是哪个请求产生的、上游是谁、下游调了谁」。传统做法要手动 grep request_id,再逐层翻日志,费时费力,还容易在跳转之间丢上下文。
炬鲸 OBSERVE 在每条日志里自动注入 trace_id 和 span_id。在日志详情页点一下「查看链路」,直接跳到这条日志对应的完整调用链:每个 span 的耗时、状态、上下游服务、关联日志全部展开。一条报错日志 → 整条链路 → 具体到某个方法的慢调用,三秒内串起来。
反向的跳转同样重要:当你盯着一条有十几个 span 的链路,发现某个 span 延迟突增时,需要知道它当时在干什么——也就是拉出它产生的日志。慢 span 自带日志,点开就能看到它执行的 SQL、发起的下游调用、抛出的堆栈。这个「日志 ↔ 链路」双向跳转是缩短 MTTR 的关键,缺了任何一边,排查就得退回人肉 grep。
对偶尔查日志的产品经理或值班同学,类 SQL 仍有一定门槛。炬鲸 OBSERVE 提供了 NL2Query:用自然语言描述问题,系统翻译成查询语句。
输入「最近一小时订单服务的错误日志,按时间倒序」,系统自动生成上面的 SQL 并返回结果。更重要的是,生成的 SQL 会展示出来,用户可以照着改,边用边学,逐渐过渡到手写查询。这在值班场景里尤其有用:凌晨两点接告警的人往往不是最熟悉查询的人,NL2Query 能让他们先看到问题,再慢慢学会怎么查。
一个细节值得留意:NL2Query 在不确定理解是否正确时,会追问澄清而不是硬猜。凌晨两点返回一个「自信满满」的错误查询,比多问一句更耽误事。
三套系统并存时,出问题要在三个页面来回切,筛选条件要重设三遍,上下文很容易丢。炬鲸 OBSERVE 把三者放进同一个数据模型:看监控指标发现错误率飙升,点一下就能下钻到对应的错误日志,再从日志关联到 trace,全程不切换工具、不重新筛选。
这套设计给团队的收益很直接:MTTR 缩短,值班轮换时上下文传递更顺畅,新成员也不需要先学三个系统再上手。对中小企业来说,这就是把过去只有大厂才有的排查体验,做成了开箱即用的产品能力。