Wyciąganie metryk
Metryki
Wszystkie metryki są agregowane w Prometheus, skąd można je wyciągać za pomocą interfejsu REST. https://prometheus.io/docs/prometheus/latest/querying/basics/ Każde źródło metryk ma swoje własne zasady według których są one nazywane. W ogólności metryka ma formę:
PREFIX_NAME{LABEL1="XXX", LABEL2="YYY"}
Moduł prometheus
obsługuje komunikację REST i umożliwia pobieranie aktualnej wartości metryki, z określonego czasu, lub z przedziału czasu. Przyjmuje on pełne nazwy metryk w odpowiednim formacie. Ich budowanie następuje w module dashboard
.
Wyciąganie metryk
Proces pobierania wartości metryk jest rozdzielony na dwie klasy w module dashboard
:
MetricsExtractor
MetricFetcher
MetricFetcher
MetricFetcher jest klasą, która na podstawie przekazanych parametrów buduje zapytanie do Prometheusa i wyciąga wartości z odpowiednim typem danych. Dla każdego typu istnieje osobna klasa nadpisująca bazowy PrometheusMetricFetcher. Parametry to:
nazwa
prefix
lista labeli - label obsługuje porównanie dokładne i z regexem
typ zapytania - LASTEST albo RANGE
data startu, stopu i czasu między próbkami (dla typu RANGE)
MetricsExtractor
MetricsExtractor jest klasą, która wybiera metryki, które są do pobrania, buduje parametry do MetricFetcher, wywołuje pobieranie i na końcu przetwarza pobrane metryki. Kroki te zależą stricte od źródła metryk, więc dla każdego z nich istnieje osobna implementacja np. DebeziumMetricsExtractor
Zapisywanie metryk do pobrania
Metryki definiujemy w tabeli metric
, która składa się z kolumn:
extractorType (PK) - enum odpowiadający MetricsExtractor, który jest odpowiedzialny za wyciąganie danej metryki
name (PK) - nazwa metryki, zgodnie z tym co jest w Prometheus, ale bez prefixu
context (PK) - dodatkowy podział metryk, potrzebny, gdy nazwy się powtarzają (na tę chwilę dla metryk Debezium)
type - typ metryki (int, long, string etc.) związany z MetricFetcher
description
displayName
graphType
graphWidth
graphHeight
graphOrder - kolejność metryki przy wyświetlaniu
visible - czy graf metryki ma się pokazywać
Dodatkowo w tabeli metric_category
przypisujemy metrykę do kategorii (jednej, lub wielu). Kategorie są używane do łączenia metryk w grupy w których są wyciągane (np. metryki potrzebne do wygenerowania dashboardu są w kategorii DASHBOARD)
Dla metryk Debezium jest też trzecia tabela: metric_supported_database
, w której definiowane jest dla jakiego typu bazy danych dana metryka jest dostępna
Dodawanie nowego MetricFetchera
Gdy musimy obsłużyc nowy typ danych trzeba dodać kolejną implementację typu XMetricFetcher
Implementujemy
parseTimeSeriesEntryValue
która zamienia String w odpowiedni typ danychDodajemy nowy wpis do enuma
MetricType
i implenetnujemygetType
zwracające ten enum
Gdyby w przyszłości były inne źródła danych (inne niż Prometheus) trzeba nadpisać klasę MetricFetcher i zaimplementować funkcje wyciągające wartości z tego źródła w odpowiedniej formie
getType
zwracające typ metryki, który obsługuje fetcherfetchLatest
,fetchRange
wyciągające po jednej metryce (jedna lub wiele wartości)fetchLatestList
,fetchRangeList
wyciągająca wiele metryk (jedna lub wiele wartości) - np. gdy nie podamy wszystkich labeli i Premetheus zwraca nam kilka różnych datasetów
Dodawanie nowego MetricsExtractora
Gdy dodajemy nowe źródło metryk należy nadpisać MetricsExtractor
Dodajemy nową wartość enuma
MetricExtractorType
Implementujemy metodę
accepts
, która decyduje, czy extractor wspiera dany konektorImplementujemy metodę
getMetricCategories
, która zwraca kategorie dla tego extractora, które mają być zwracane do frontendu do dynamicznego generowania listy kategoriiImplementujemy metodę
extract
, która wyciąga wartości metryk dla podanej kategorii i parametrów zapytania (queryType, startDate, stopDate, step). W funkcji musimy:Pobrać metryki dla danego extractora i kategorii (+ jakieś inne specyficzne kryteria)
Zbudować FetchSetup, który trzeba przekazać do MetricFetchera aby wyciągnąć wartość metryki - w tym miejscu definiujemy prefix (jeśli jakiś jest) i labele specyficzne dla źródła metryk
Opcjonalnie przetwarzanie pobranych metryk np. łączenie dwóch metryk w jakąś inną
Dodawanie nowych/ modyfikacja metryk
Żeby dodać nową metrykę, musimy dodać ją do bazy danych. Skrypt inicjalizujący bazę danych jest w repo GOLDENORE_CDC_DOCKER_COMPOSE -> sql -> data.sql -> znajdujemy sekcję z metrykami i dodajemy/zmieniamy tam SQL
Last updated