关于 vmanomaly-query
通过明确的 API 请求操作运行中的 vmanomaly v1.30+ 实例,适用于管理和排查该服务的人员。它依据实时模式与服务端响应检查、验证、调优和测试配置,并区分验证与实际部署。
主要功能
- 01检查健康状态、构建信息和兼容性
- 02发现模型与配置模式
- 03验证模型和完整配置
- 04分析查询并运行调优任务
- 05检查服务状态与检测限额
适用场景
- 01升级前检查状态兼容性
- 02部署前验证配置
- 03针对查询执行有界异常检测
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ victoriametrics/ skills --skill vmanomaly-query安装后在 Claude Code 中输入/vmanomaly-query确认已加载。
附带文件references/api-reference.md
详细介绍
vmanomaly API
通过范围明确、调用受限的 API 调用操作运行中的 vmanomaly v1.30+ 实例。优先采用实时 schema 和服务端响应,而非静态假设。
环境与身份验证
# Include any configured path prefix in the base URL.
export VM_ANOMALY_URL="https://vmanomaly.example.com"
# Use /dev/null for unauthenticated local instances. For authenticated instances, point this to
# a mode-0600 curl config containing: header = "Authorization: Bearer <token>"
export VM_CURL_CONFIG="${VM_CURL_CONFIG:-/dev/null}"
将凭据保存在进程参数之外,并对每个请求使用相同的配置:
curl -q --config "$VM_CURL_CONFIG" -s \
"$VM_ANOMALY_URL/health" | jq .
切勿打印或创建凭据文件。如果未设置 VM_ANOMALY_URL,请向用户询问。
先进行运行时预检
在配置、审核、自动调优或迁移之前,先运行以下检查:
curl -q --config "$VM_CURL_CONFIG" -s \
"$VM_ANOMALY_URL/health" | jq .
curl -q --config "$VM_CURL_CONFIG" -s \
"$VM_ANOMALY_URL/api/v1/server/buildinfo" | jq .
curl -q --config "$VM_CURL_CONFIG" -s \
"$VM_ANOMALY_URL/api/v1/compatibility" | jq .
谨慎解读兼容性:
global_check.has_state=false:没有需要迁移的持久化状态。global_check.is_compatible=true:可以复用检查范围内由 vmanomaly 管理的状态。global_check.drop_everything=true:说明必须丢弃所有持久化状态;不要自动执行丢弃操作。component_assessment.models_to_purge或should_purge_reader_data:说明需要清理的具体范围。- 使用
?version_to=X.Y.Z,评估存储的状态与计划目标版本之间的兼容性。
兼容性检查涵盖由 vmanomaly 管理的状态、受支持的读取器和内置模型,不涵盖自定义模型代码、依赖项或状态;升级到 v1.30.3+ 之前,依赖 is_multivariate = True 的自定义多对一模型必须声明 topology = ModelTopology.MANY_TO_ONE。
目前仅实现了 GET 兼容性检查。不要臆造用于任意给定配置的 POST 端点。对于配置语法,请使用 /api/v1/config/validate。
使用前先发现可用功能
curl -q --config "$VM_CURL_CONFIG" -s \
"$VM_ANOMALY_URL/api/v1/models" | jq .
curl -q --config "$VM_CURL_CONFIG" -sG \
--data-urlencode 'model_class=temporal_envelope' \
"$VM_ANOMALY_URL/api/v1/model/schema" | jq .
将 /api/v1/models 和 /api/v1/model/schema 视为权威信息源。除非目标 schema 明确提供相应参数,否则不要在不同模型类之间沿用参数。
运行前先验证
验证单个模型:
curl -q --config "$VM_CURL_CONFIG" -s \
-X POST -H 'Content-Type: application/json' \
-d '{"class":"temporal_envelope","seasonalities":["hod_smooth","dow_smooth"]}' \
"$VM_ANOMALY_URL/api/v1/model/validate" | jq .
验证完整配置:
curl -q --config "$VM_CURL_CONFIG" -s \
-X POST -H 'Content-Type: application/yaml' \
--data-binary @config.yaml \
"$VM_ANOMALY_URL/api/v1/config/validate" | jq .
验证不会应用或重新加载配置。
检查运行中的服务
# Configured query aliases and expressions.
curl -q --config "$VM_CURL_CONFIG" -s \
"$VM_ANOMALY_URL/api/v1/server/queries" | jq .
# Configured datasource context. Keep only documented fields and redact URL user information.
curl -q --config "$VM_CURL_CONFIG" -s \
"$VM_ANOMALY_URL/api/v1/server/datasource" | jq '
with_entries(select(.key | IN("server_datasource_url", "ui_datasource_url", "ui_datasource_type")))
| with_entries(
if (.value | type) == "string" and (.key | endswith("_url"))
then .value |= sub("://[^/@]+@"; "://<redacted>@")
else .
end
)'
# Prometheus-format self-monitoring metrics.
curl -q --config "$VM_CURL_CONFIG" -s \
"$VM_ANOMALY_URL/metrics?name[]=vmanomaly_scheduler_alive&name[]=vmanomaly_scheduler_restarts_total&name[]=vmanomaly_model_run_errors&name[]=vmanomaly_model_runs_skipped"
将 /health 视为某一时刻的预检信息,而非生产环境监控。对于运行中的部署,建议抓取或推送文档所述的自监控指标,安装 Grafana 仪表板,并检查所提供的告警规则。优先关注服务可用性、调度器运行状态与重启、重新加载失败、模型错误/跳过、I/O 错误率和资源压力。未经用户批准,不要部署规则或仪表板。
如果已安装,请使用 victoriametrics-query 确认自监控时序数据已写入,且预期规则已加载;使用 alertmanager-query 检查活动、已静默或已抑制的 vmanomaly 告警。
选择模型前先分析查询
必须提供精确且非空的查询。如果用户已提供查询,请直接使用。否则,解析已配置的查询别名,或向用户询问;切勿根据指标描述臆造生产查询。
QUERY='sum(rate(http_requests_total{job="api"}[5m])) by (service)'
TIMEZONE='America/New_York'
curl -q --config "$VM_CURL_CONFIG" -sG \
--data-urlencode "query=$QUERY" \
--data-urlencode 'start=<unix-seconds>' \
--data-urlencode 'end=<unix-seconds>' \
--data-urlencode 'step=5m' \
--data-urlencode "timezone=$TIMEZONE" \
--data-urlencode 'limit=100' \
"$VM_ANOMALY_URL/api/v1/timeseries/characteristics" | jq .
分析、自动调优以及最终任务/配置都应使用相同的 step。将受限响应视为样本,而非精确的总体摘要。如果受限读取返回分块的 422,请缩短时间间隔或使用更粗的步长。
运行共享自动调优
首先根据配置文件、业务意图、/api/v1/models 和架构选择 tuned_class_name。共享 v1.30 自动调优不会选择模型类。
jq -n --arg query "$QUERY" --arg timezone "$TIMEZONE" '{
query:$query,
"tuned_class_name":"temporal_envelope",
"anomaly_percentage":0.02,
"start":1710000000,
"end":1711209600,
"step":"5m",
timezone:$timezone,
"limit":100,
"use_profile_hints":true,
"optimization_params":{"n_trials":64,"timeout":30,"exact":true,"optimize_complexity":true},
"frozen_params":{"detection_direction":"above_expected"}
}' | curl -q --config "$VM_CURL_CONFIG" -s \
-X POST -H 'Content-Type: application/json' --data-binary @- \
"$VM_ANOMALY_URL/api/v1/autotune/tasks" | jq .
创建任务前,告知用户试验次数/时间预算。按顺序轮询一个任务:
curl -q --config "$VM_CURL_CONFIG" -s \
"$VM_ANOMALY_URL/api/v1/autotune/tasks/<task_id>" | jq .
将 done、error 和 canceled 视为终态。状态为 done 时,直接应用 result_data.data.modelConfig,验证并测试。不要用 class: auto 替换这个具体的一次性建议;可部署的自动包装器有不同的生命周期。此结果中的业务策略仍是模型规格字段,用于兼容任务/UI;仅在构建 v1.30.2+ 部署配置时,才将它们移到附加的查询中。只有用户要求取消时才使用 DELETE:
curl -q --config "$VM_CURL_CONFIG" -s \
-X DELETE "$VM_ANOMALY_URL/api/v1/autotune/tasks/<task_id>" | jq .
运行有界检测任务
先检查容量:
curl -q --config "$VM_CURL_CONFIG" -s \
"$VM_ANOMALY_URL/api/v1/anomaly_detection/limits" | jq .
仅在验证 model_spec 后创建任务。v1.30.3 任务契约要求显式提供 datasource_url;适当时可重复使用已配置的数据源 URL:
DATASOURCE_URL='<configured-or-explicit-datasource-url>'
jq -n --arg query "$QUERY" --arg datasource_url "$DATASOURCE_URL" '{
query:$query,
datasource_url:$datasource_url,
"step":"5m",
"fit_window":"30d",
"fit_every":"1000d",
"start_infer_s":1710000000,
"end_infer_s":1710086400,
"exact":true,
"model_spec":{"class":"temporal_envelope","seasonalities":["hod_smooth","dow_smooth"]}
}' | curl -q --config "$VM_CURL_CONFIG" -s \
-X POST -H 'Content-Type: application/json' --data-binary @- \
"$VM_ANOMALY_URL/api/v1/anomaly_detection/tasks" | jq .
对因果在线模型评估使用 exact:true。按顺序轮询,不要仅仅因为任务仍在运行就创建重复任务。
生成部署产物
使用 /api/vmanomaly/config.yaml 获取示例配置,使用 /api/vmanomaly/example-alert-rule.yaml 获取 VMAlert 规则。使用 --data-urlencode 传递值。配置端点会保留为兼容性而设置的模型级业务字段。对于 v1.30.2+ 部署 YAML,将 data_range、detection_direction、min_dev_from_expected 和 min_rel_dev_from_expected 移到 reader.queries.<alias>,可考虑将 reader.workers 设为 0,以限制数据源并发数,并在提供配置前验证完整配置。
可选的配套技能
- 如果可用,使用
victoriametrics-query在构建 PromQL/MetricsQL 前发现指标名称、标签、基数或现有告警/规则查询。 - 如果数据源是 VictoriaLogs 且需要通过 LogsQL 进行发现,使用
victorialogs-query。 - 使用
alertmanager-query检查活动告警,或避免重复已有的告警意图。
这些都是可选增强功能。如果未安装,请继续使用 vmanomaly 服务/代理端点。
参考
阅读 references/api-reference.md,了解端点参数、响应字段、错误处理和 v1.30 任务语义。
调查触发中的告警
对于 v1.30.7+ 事件链接,在建议启动新的检测任务前,先检查所提供绝对时间窗口内的持久化输出。请遵循事件 API 参考;在声称这些端点支持 MCP 前,先发现可用工具。