用途:KubeSense SPL 是 KubeSense 的管道式日志查询语言,仅用于日志查询,链路与指标需分别使用 kubesense-traces 和 kubesense-metrics。需配合 KubeSense MCP 服务器使用,工具按日志模块解析 RBAC。
主要能力:提供三个工具。get-trace-or-log-fields(signal 为 logs)用于发现动态属性键;validate-spl 在交付或运行查询前校验,返回是否有效及编译出的 ClickHouse SQL;execute-spl 执行查询,返回 TSV 行,上限 1000 行。
使用方式:管道以 | 分隔,从左到右读取。命令包括 fields、filter(别名 where、search)、parse、rex、eval、stats、timechart、dedup、head、tail、sort、limit、rename、table、top、rare。裸引号字符串为正文全文搜索,必须放在最前;# 为注释。filter 在 stats 前是 WHERE,在 stats 后是 HAVING。聚合函数有 count(*)、sum、avg、min、max、dc、median、mode、range、stdev、stdevp、var、sumsq、latest、earliest、values、list、perc<N>。timechart 接受 span=<N><s|m|h|d>,桶列名为 _time。
字段契约:SPL 使用存储列名,与其他工具相反,例如 level 而非 type、pod_name 而非 instance、cluster 而非 domain、container_name(或 container)、node_name(或 node)、host。完整集合:timestamp(或 @timestamp)、body(或 @message)、level、cluster、namespace、workload、pod_name(或 @logstream)、container_name(或 container)、node_name(或 node)、host、service、source、format、env_type、raw、@loggroup(等于 workload)。SPL 没有 region、app_version、instance、type、domain、body_length、kuid。未知名称不会报错,会作为裸列名传给 ClickHouse,运行时才失败。动态 JSON 字段用 log_processed.<key> 前缀访问。
限制:execute-spl 需要集群和时间窗口,validate-spl 不需要。时间范围与集群过滤由服务器根据请求应用,查询中不要写时间或集群条件。百分位写作 perc95(x),不是 p95(x)。建议先 validate-spl 再 execute-spl,并阅读返回的 translated_sql。属性键错误会静默返回 null,需先用 get-trace-or-log-fields 确认。只读,拒绝文件系统、网络和系统函数。对限定集群、命名空间或工作负载的角色不可用,此时应使用 search-logs 或 analyze-logs。