用途:为 Observe 平台生成有效 OPAL 管道,覆盖管道生成、数据集类型判定、列选择与路由等核心指导,并强制在编写 OPAL 前先加载对应的 opal-* 参考文件。
用法与工作流:先运行 observe skill view generate-opal --content 2>/dev/null 加载最新版本;当技能指向支持文件时用 observe skill view generate-opal --path <relative-path> 2>/dev/null 加载。随后判定每个数据源的数据集类型与接口,再按技能索引加载所有匹配的 opal-* 参考(例如 cat /skills/generate-opal/references/opal-logs.md),最后才编写 OPAL。涉及多数据集、构造对象/数组、日志、指标、跨度、连接、聚合、资源数据集、时长、正则、可视化、参数等场景时,必须加载相应参考;唯一无需参考的情况是仅用 filter + pick_col、无聚合、无时长逻辑、无连接的单数据集简单查询。
主要能力:提供数据集类型与聚合动词映射(Event/log 用 statsby、timestats;Event/metric 用 align + aggregate;Interval/otel_span 用 statsby、timestats;Resource 通常被连接且不支持 limit,需用 topk;Table 支持 limit)。列选择要求保持输出紧凑:聚合查询输出列已最小化无需 pick_col;行级查询须在 sort 前使用 pick_col 并加 limit 100;优先聚合而非原始行。pick_col 具有破坏性,只接受顶层列,嵌套字段需先用 make_col 提取;主键与时间列必须包含,valid-from 用 pick_col valid_from:row_start_time(),valid-to 用 pick_col valid_to:row_end_time(),均需别名。statsby 非时间性,其后不得再加时间列。
核心语法要点:支持 // 与 /* */ 注释;绝不在 OPAL 中过滤时间列,时间过滤由查询时间范围处理;引用时间值一律用 row_start_time() / row_end_time(),不硬编码列名;比较前先转换类型(string()、int64() 等);每行一个动词,不跨行拆分参数;命名子查询声明与引用都需 @ 前缀;make_col 仅可向后引用已定义绑定;group_by 每个表达式须用 name:expression;新列别名避免与既有列冲突;聚合后仅剩输出列;sort 使用 desc()/asc() 函数而非 SQL 关键字;timechart 的 interval 为位置参数;frame() 是独立参数不在 options() 内;rename_col 用于重命名列。
限制:本技能不含日志、跨度、指标、连接、时长等领域专属模式,这些必须从 opal-* 参考加载,否则会生成错误查询;参考文件缺失时报错可忽略并回退到文件内容;具体价格、平台支持范围及更多使用细节资料暂未提供。