Pular para conteúdo

Metrics

MetricConfig

Configura as métricas e realiza o envio ao pushgateway do prometheus.

Parameters:

Name Type Description Default
job_name str

Nome do serviço, aplicação ou job que está rodando

required
prometheus_url str

Url da aplicação Prometheus/pushgateway, que receberá as métricas

required
Source code in observability_mtl_instrument/metrics/metric_config.py
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
class MetricConfig:
    """
    Configura as métricas e realiza o envio ao pushgateway do prometheus.

    Parameters:
        job_name: Nome do serviço, aplicação ou job que está rodando
        prometheus_url: Url da aplicação Prometheus/pushgateway, que receberá as métricas
    """

    def __init__(self, job_name: str, prometheus_url: str) -> None:
        self.registry = CollectorRegistry()
        self.job_name = job_name
        self.prometheus_url = prometheus_url

        self.metrics = {}

        self.add_metric(
            title='http_requests_total_by_code',
            type=MetricType.COUNTER,
            description='responses total by status code',
            labels=['http_code', 'unmapped', 'service_name'],
        )
        self.add_metric(
            title='http_requests_duration_seconds',
            type=MetricType.SUMMARY,
            description='reponse time of request',
            labels=['url_path', 'http_method', 'unmapped', 'service_name'],
        )
        self.add_metric(
            title='requests_in_progress',
            type=MetricType.GAUGE,
            description='quantity of requests in progress',
            labels=['service_name'],
        )

    def add_metric(
        self,
        type: MetricType,
        title: str,
        description: str,
        labels: list[str] = [],
    ):
        metric_class = type.metric_class
        self.metrics[title] = metric_class(
            title, description, labels, registry=self.registry
        )

    def show_metrics(self):
        return self.metrics

    def send_metrics(self):
        pushadd_to_gateway(
            self.prometheus_url, job=self.job_name, registry=self.registry
        )