跳转到主要内容
MoleSignal 暴露单一查询端点,底层是 DataFusion。你可以运行完整 SQL —— 包括 join、CTE、窗口 函数 —— 或面向指标的 PromQL 子集,都针对同一存储。

查询端点

POST /api/v1/query
Authorization: Bearer <jwt>
Content-Type: application/json

请求体

字段类型必填说明
org_idstring你的租户 id(登录获得)。
languagestringsqlpromql
statementstring查询文本。
time_rangeobject{ "start": <微秒>, "end": <微秒> } —— Unix 纪元起微秒。
streamobject{ "name": "app", "stream_type": "logs" }stream_typelogs/metrics/traces/enrichment
limitinteger行数上限。

响应

响应携带 rowscolumnsscanned_rowstook_mscache_hit
发送 Accept: application/x-ndjson 可逐行流式返回结果。流式会绕过 query_result 缓存。

SQL

curl -X POST http://localhost:5080/api/v1/query \
  -H "authorization: Bearer $MS_JWT" \
  -H 'content-type: application/json' \
  -d "{\"org_id\":\"$MS_ORG\",\"language\":\"sql\",
       \"statement\":\"SELECT level, count(*) FROM app WHERE _timestamp > 0 GROUP BY level\",
       \"time_range\":{\"start\":0,\"end\":2000000000000000},
       \"stream\":{\"name\":\"app\",\"stream_type\":\"logs\"}}"
由于日志、指标、追踪同处一个存储,你可以在一条查询里跨信号 join —— 例如按 trace_id 把错误 日志和它们的 span 连起来:
SELECT l.msg, t.duration_ms
FROM app AS l
JOIN spans AS t ON l.trace_id = t.trace_id
WHERE l.level = 'error'

PromQL

language: "promql" 即可对指标流运行 PromQL 子集。当前支持:
  • rateincrease
  • sumavgminmaxcount —— 配 by / without
  • histogram_quantile
{
  "org_id": "<org>",
  "language": "promql",
  "statement": "histogram_quantile(0.95, sum by (le) (rate(http_request_duration_seconds_bucket[5m])))",
  "time_range": { "start": 0, "end": 2000000000000000 }
}
PromQL 是一个不断扩展的子集,而非完整语言。当前支持矩阵见仓库内的 docs/promql_subset.md

事件上下文(search around)

要拉取某条事件前后各 N 条(日志上下文视图),用 POST /api/v1/query/search_around,传 event_timestamp_usstreamstream_type,以及可选的 before / after(各默认 50)。

缓存

查询经过三级缓存 —— file_metaparquet_metaquery_result —— 外加默认启用的 parquet 磁盘缓存 (./data/cache/parquet,10 GB LRU)。响应里的 cache_hit 告诉你结果是否来自缓存。