vmalert通过API加载JSON规则时'malformed character constant'报错咨询
问题原因及解决办法
报错原因
出现vmalert malformed character constant '%.2f'报错,核心是JSON格式规则中PromQL表达式的字符串转义处理不当。通过API传递JSON格式的vmalert规则时,若printf的格式化参数写法不符合JSON字符串规范,会导致vmalert解析PromQL时将%.2f识别为非法字符常量。
解决步骤
修正JSON表达式写法
在JSON规则的expr字段中,确保PromQL表达式用双引号包裹,表达式内部的格式化字符串使用单引号,避免转义冲突。同时将格式化符改为%.3f以满足保留3位小数的需求,正确示例:{ "groups": [ { "name": "metric-round-group", "rules": [ { "record": "your_metric:rounded_3d", "expr": "printf('%.3f', sum(your_target_metric))", "labels": {} } ] } ] }排查转义错误
避免对%进行多余转义(比如错误写成\\%.3f),也不要在表达式内嵌套双引号(比如printf("%.3f", ...)),保证JSON结构合法,表达式内部字符串边界清晰。先验证PromQL合法性
先在VictoriaMetrics查询界面单独测试printf('%.3f', sum(your_target_metric))表达式,确认能正常返回结果后,再将其放入JSON规则通过API提交,排除PromQL本身的写法问题。
内容的提问来源于stack exchange,提问作者Jhonathan Mizrahi
相关产品推荐
相关产品推荐

