Privacy Policy
Snippets index

  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))