我们有一个微服务环境,其中每个服务都有自己的 git,并且在 git 中它自己的 prometheus 警报 yml
我们正在使用 [kubectl patch configmap 将]所有上述警报放在 prometheus 服务器上。
当我尝试运行
promtool check rules {ALERTS_FILE}
时,我收到此错误:
Checking ./prometheus/****.yml
FAILED:
yaml: unmarshal errors:
line 1: field data not found in type rulefmt.RuleGroups
我相信这与我们的文件开头
有关data:
****.yml: |
groups:
- name: ****
rules:
有没有办法命令 promtool 跳过前两行并直接跳到实际规则部分?
谢谢
ConfigMap
,其中包含将文件名(例如 data
)映射到 Prometheus 警报规则YAML 配置。 使用 Python,您可以解析
****.yml
YAML 文件,提取(从
ConfigMap
)每个文件名和警报规则配置,并通过 Promtool 运行它们:data
:
tester.py
注意因为这使用了
#!/usr/bin/env python3 import subprocess import sys import yaml RUNTIME = "podman" PROMETHEUS = "docker.io/prom/prometheus:v2.55.1" file = sys.stdin.read() config_map = yaml.safe_load(file) for filename, rules_yaml in config_map["data"].items(): process = subprocess.run([ RUNTIME, "run", "--interactive", "--entrypoint=promtool", PROMETHEUS, "check","rules" ], input=rules_yaml, capture_output=True, text=True, ) print(process.stdout)
,所以您需要在您的环境中才能运行 Python 文件。 例如:yaml
pip install pyyaml
产量:
echo '
data:
example.yml: |
groups:
- name: example
rules:
- alert: HighRequestLatency
expr: job:request_latency_seconds:mean5m{job="myjob"} > 0.5
for: 10m
labels:
severity: page
annotations:
summary: High request latency
' | ./tester.py