我们一直在利用基于 Prometheus 查询语言 (PromQL) 的具有特定警报配置的 Grafana。现在,我们正在过渡到 Stackdriver,这是 Google Cloud Platform 的本机监控解决方案,它使用指标查询语言 (MQL) 而不是 PromQL。因此,我们需要将现有的 Grafana 警报查询转换为 MQL。
下面是转换后的 MQL 查询,我认为这是适当的转换:
{
fetch k8s_container::kubernetes.io/container/memory/used_bytes
| filter metric.memory_type == 'non-evictable'
| group_by 5m, [value_used_bytes_mean: mean(value.used_bytes)]
| every 5m
;
fetch k8s_container::kubernetes.io/container/memory/limit_bytes
}
| filter
(resource.cluster_name == 'k8s-cluster'
&& resource.namespace_name == 'test1'
&& resource.pod_name =~ '^api.*' )
| join | div | mul 100
| condition val() > cast_units(75, '%')
虽然转换后的查询可以生成警报,但我们在尝试在 Stackdriver 中保存警报策略时遇到了问题,出现错误“错误:无法保存警报策略。请求包含无效参数。”出现。
要解决该错误,我们需要进一步调查根本原因。该错误可能源于查询中的某些无效字符、不支持的聚合或其他因素。仔细检查查询的语法正确性、检查是否有任何不适当的字符或符号并确保与 Stackdriver 支持的功能的兼容性至关重要
我尝试了条件的多种组合,因为问题似乎出现在条件语句中,
condition val() > cast_units(75, '%')
condition val() > 75 '%'
condition val() > 75 'By'
类似这样的东西以及更多。