Prometheus MCP Server

  • src
  • prometheus_mcp_server
from prometheus_api import * # from src.prometheus_mcp_server.prometheus_api import * class PrometheusHandler: def __init__(self, logger, PROMETHEUS_URL="http://localhost:9090") -> None: self.prom = PrometheusConnect(url=PROMETHEUS_URL) self.logger = logger self.all_metrics_full = [] self.all_metrics_name = [] def get_all_metrics(self): self.all_metrics_full = self.prom.all_metric_meta() return self.all_metrics_full def get_range_data(self, metric_name, metric_range=None,include_index=False): metric_data = self.prom.get_metric_range_data(metric_name=metric_name,metric_range=metric_range,logger=self.logger) range_data = [] metric_object_list = MetricsList(metric_data) for metric in metric_object_list: self.logger.info(f"{metric}") values = [] for index, row in metric.metric_values.iterrows(): timestamp = [] value = [] try: timestamp = row['ds'] value = row['y'] except Exception as e: raise ValueError(f"Invalid metric value fetch") data_row = (timestamp, value) if include_index: data_row = (index, timestamp, value) values.append(data_row) range_data.append(values) return range_data def test_prometheus(self, metric_name="go_gc_duration_seconds"): my_label_config = {'instance': 'instance_id', 'job': 'job_id', 'quantile': 'quantile_value'} metric_data = self.prom.get_metric_range_data(metric_name=metric_name) metric_object_list = MetricsList(metric_data) for metric in metric_object_list: self.logger.info(metric.label_config)