List Prometheus labels and metrics ¶
file "list_promethues_metrics_and_labels.py"
#!/usr/bin/env python3 import requests import json import argparse PROM_URL = "http://localhost:9090" def list_metrics_with_labels(): data = {} r = requests.get(f"{PROM_URL}/api/v1/label/__name__/values") metric_names = r.json()["data"] for name in sorted(metric_names): r2 = requests.get(f"{PROM_URL}/api/v1/series", params={"match[]": name}) series = r2.json()["data"] label_set = set() for s in series: label_set.update(s.keys()) label_set.discard("__name__") data[name] = list(label_set) return data if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument('-f', '--filter', type=str, help="filter keys") parser.add_argument('-m', '--metrics-only', action='store_true', help="List only metrics (exclude labels)") parser.add_argument('-i', '--indent', type=int, default=4, help="No indent if < 0") args = parser.parse_args() data = list_metrics_with_labels() if args.filter: data = { k: v for k, v in data.items() if args.filter in k } indent = args.indent if indent < 0: indent = None if args.metrics_only: print(json.dumps(list(data.keys()), indent=indent)) else: print(json.dumps(data, indent=indent))