返回顶部
p

promql-validatorPromQL验证器

Validate, lint, audit, or fix PromQL queries and alerting rules; detects anti-patterns.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 0.1.0
安全检测
已通过
194
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

promql-validator

此技能的工作方式

此技能执行多层级验证并提供交互式查询规划:

  1. 1. 语法验证:检查PromQL表达式语法是否正确
  2. 语义验证:确保查询逻辑合理(例如,rate()应用于计数器而非仪表盘)
  3. 反模式检测:识别常见错误和低效模式
  4. 优化建议:推荐性能改进方案
  5. 查询解释:将PromQL翻译为通俗易懂的语言
  6. 交互式规划:帮助用户明确意图并优化查询

工作流程

当用户提供PromQL查询时,请遵循以下工作流程:

工作目录要求

从仓库根目录运行验证命令,以确保相对路径正确解析:

bash
cd $(git rev-parse --show-toplevel)

如果从其他位置运行,请使用scripts/文件的绝对路径。

步骤1:验证语法

运行语法验证脚本以检查基本正确性:

bash
python3 devops-skills-plugin/skills/promql-validator/scripts/validate_syntax.py

输出解析说明:

  • - 退出码0:语法有效
  • 退出码非零:语法错误;包含stderr并定位令牌/位置
  • 优先引用最小的失败片段,然后提供修正后的查询

脚本将检查:

  • - 有效的指标名称和标签匹配器
  • 正确的运算符使用
  • 正确的函数语法
  • 有效的时间持续时间和范围
  • 平衡的括号和引号
  • 修饰符的正确使用(offset, @)

步骤2:检查最佳实践

运行最佳实践检查器以检测反模式和优化机会:

bash
python3 devops-skills-plugin/skills/promql-validator/scripts/checkbestpractices.py

输出解析说明:

  • - 将脚本部分视为独立发现(基数、指标类型误用、正则表达式误用等)
  • 如果脚本输出为空但查询复杂,添加手动合理性检查并标记为manual-review
  • 保留脚本的发现标签措辞,然后以通俗语言添加修复建议

脚本将识别:

  • - 无标签过滤器的高基数查询
  • 本可使用精确匹配的低效正则表达式匹配器
  • 计数器指标缺少rate()/increase()
  • 在仪表盘指标上使用rate()
  • 对预计算分位数求平均值
  • 时间范围过大的子查询
  • 长时间范围内使用irate()
  • 可添加更具体标签过滤器的机会
  • 应使用记录规则的复杂查询

步骤3:解释查询

解析并用通俗语言解释查询的作用:

  • - 正在查询哪些指标
  • 这些指标的类型(计数器、仪表盘、直方图、摘要)
  • 应用了哪些函数及其原因
  • 查询计算的内容
  • 输出中将包含哪些标签
  • 预期结果结构

必需输出详情(始终明确包含以下内容):

输出标签:[列出结果中的标签,或无(完全聚合为标量)]
预期结果结构:[瞬时向量 / 范围向量 / 标量] 包含 [N个序列 / 单个值]

示例:

输出标签:job, instance
预期结果结构:瞬时向量,每个job/instance组合对应一个序列

行号引用方法(必需)

在建议中引用示例/文档时,包含文件路径+基于1的行号:

text
examples/good_queries.promql:42
docs/best_practices.md:88

规则:

  • - 引用最相关的单行(如果是多行片段则引用起始行)
  • 保持引用紧凑;不要引用整个文件
  • 如果行号不可用,说明行号不可用并提供文件路径

步骤4:交互式查询规划(阶段1 - 停止并等待)

向用户提出澄清性问题,以验证查询是否符合其意图:

  1. 1. 理解目标:您想监控或测量什么?
- 请求速率、错误率、延迟、资源使用等
  1. 2. 验证指标类型:这是计数器(始终递增)、仪表盘(可上下波动)、直方图还是摘要?
- 这会影响使用哪些函数
  1. 3. 明确时间范围:您需要什么时间窗口?
- 瞬时值、随时间变化率、历史分析
  1. 4. 确认聚合方式:您需要跨标签聚合数据吗?如果需要,按哪些标签?
- by (job)、by (instance)、without (pod)等
  1. 5. 检查输出意图:您将此用于告警、仪表盘还是临时分析?
- 影响优化优先级

重要:两阶段对话
在展示步骤1-4的结果(语法、最佳实践、查询解释和意图问题)后:
⏸️ 在此停止并等待用户响应
在用户回答澄清性问题之前,不要继续执行步骤5-7。
这确保后续建议针对用户的实际意图量身定制。

步骤5:比较意图与实现(阶段2 - 用户响应后)

仅在用户回答了步骤4中的澄清性问题后才继续此步骤。

理解用户意图后:

  • - 解释当前查询实际执行的操作
  • 突出意图与实现之间的任何不匹配
  • 如果查询与目标不符,建议修正
  • 如果适用,提供替代方法

在相关时,提及已知限制:

  • - 注意指标类型检测是基于启发式的(例如,脚本根据_bytes后缀推断这是仪表盘。请确认是否正确。)
  • 承认高基数警告可能是误报(例如,如果您使用记录规则或知道基数较低,此警告可能不适用。)

步骤6:提供优化建议

基于验证结果:

  • - 建议更高效的查询模式
  • 为复杂/重复查询推荐记录规则
  • 提出更好的标签匹配器以减少基数
  • 就适当的时间范围提供建议

参考示例:在建议修正时,使用以下格式引用相关示例:

如examples/bad_queries.promql(第91-97行)所示:
❌ 错误:avg(httprequestduration_seconds{quantile=0.95})
✅ 正确:使用histogram_quantile()配合直方图桶

引用来源:

  • - examples/goodqueries.promql - 用于格式良好的模式
  • examples/optimizationexamples.promql - 用于前后对比
  • examples/badqueries.promql - 用于展示应避免的内容
  • docs/bestpractices.md - 用于详细解释
  • docs/anti_patterns.md - 用于反模式深入探讨

引用格式:file_path (lines X-Y) 并引用相关代码片段

步骤7:让用户规划/优化

给予用户控制权:

  • - 询问他们是否想修改查询
  • 主动帮助重写以获得更好性能
  • 如果适用,提供多种替代方案
  • 解释不同方法之间的权衡

关键验证规则

语法规则

  1. 1. 指标名称:必须匹配[a-zA-Z:][a-zA-Z0-9:]*或使用UTF-8引号语法(Prometheus 3.0+):
- 引号形式:{my.metric.with.dots} - 使用name标签:{name=my.metric.with.dots}
  1. 2. 标签匹配器:=(等于)、!=(不等于)、=~(正则匹配)、!~(正则不匹配)
  2. 时间持续时间:[0-9]+(ms|s|m|h|d|w|y) - 例如5m、1h、7d
  3. 范围向量:metricname[duration] - 例如httprequeststotal[5m]
  4. 偏移修饰符:offset - 例如metricname offset 5m
  5. @修饰符:@ 或 @ start() / @ end()

语义规则

  1. 1. rate()和irate():仅应用于计数器指标(以total、count、sum或bucket结尾的指标)
  2. 计数器:通常应使用rate()或increase(),而非原始值
  3. 仪表盘:不应使用rate()或increase()
  4. 直方图:使用histogramquantile()配合le标签和bucket指标上的rate()
  5. 摘要:不要对分位数求平均值;从sum和count计算
  6. 聚合:使用by()或without()控制输出标签

性能规则

  1. 1. 基数:始终使用特定标签匹配器以减少序列数量
  2. 正则表达式:可能时使用=代替=~进行精确匹配
  3. 速率范围:应至少为抓取间隔的4倍(通常最小[2m]

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 promql-validator-1776107607 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 promql-validator-1776107607 技能

通过命令行安装

skillhub install promql-validator-1776107607

下载

⬇ 下载 promql-validator v0.1.0(免费)

文件大小: 39.01 KB | 发布时间: 2026-4-15 14:01

v0.1.0 最新 2026-4-15 14:01
Initial release with multi-level PromQL validation, explanation, and workflow guidance:

- Validates PromQL syntax and semantics, detecting common mistakes and anti-patterns.
- Suggests optimizations and best practices for efficient query writing.
- Explains PromQL queries in plain English, including output labels and structure.
- Provides step-by-step interactive planning to align queries with user intent.
- Includes citation-based recommendations referencing examples and documentation.

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部