Axiom, logi i zdarzenia bez próbkowania
Axiom to zamknięta usługa do zbierania logów i zdarzeń, z własnym językiem zapytań APL i klientami JavaScript na licencji MIT. Aktualna wersja pakietu @axiomhq/js to 2.0.0 opublikowana 4 sierpnia 2026 roku, a przejście z jedynki zmienia domyślny kształt wyniku zapytania, więc nie jest to aktualizacja, którą robi się bez czytania.
Co Axiom robi, a czego nie robi
Punktem wyjścia jest założenie, że logi wysyłasz w całości, a nie w próbce. Zamiast decydować przy wysyłce, które zdarzenia zachować, wrzucasz wszystko do zbioru danych, a koszt spada na przechowywanie i na moc obliczeniową zużytą przy zapytaniach. Silnik nazywa się EventDB i jest kolumnowy, bezschematowy, czyli nowe pole w zdarzeniu nie wymaga wcześniejszej migracji.
Zapytania pisze się w APL, języku w stylu Kusto, z operatorami łączonymi pionową kreską. Dokumentacja mówi wprost o istotnym ograniczeniu: APL nie odpytuje metryk. Do metryk służy osobny język MPL, z osobnym adresem końcowym i osobnym typem wyniku w kliencie. Jeśli planujesz jeden język do wszystkiego, ten podział trzeba uwzględnić od początku.
Czego Axiom nie robi. Nie grupuje wyjątków w sprawy z przypisanym właścicielem, od tego jest Sentry. Nie liczy lejków rejestracji ani retencji użytkowników, czyli tego, czym zajmuje się PostHog. Nie rozkłada wywołania modelu językowego na kroki z kosztem tokenów, bo to zadanie dla Langfuse albo Helicone. Nie jest też bazą ogólnego przeznaczenia, którą podepniesz pod raportowanie finansowe, jak ClickHouse.
Licencja: MIT kończy się na kliencie
Sprawdziłem licencję z trzech stron i tym razem wszystkie trzy zgadzają się bez zastrzeżeń, przynajmniej dla bibliotek.
Po pierwsze repozytorium. Plik LICENSE w gałęzi głównej axiomhq/axiom-js zwraca kod 200 i ma dziewiętnaście linii z pełnym tekstem MIT, z nagłówkiem Copyright (c) 2021, Axiom, Inc.. Plik nie zaczyna się od linii MIT License, więc skanery, które szukają tytułu zamiast treści, mogą go opisać jako licencję nierozpoznaną. Pliku LICENSE.md w tym repozytorium nie ma, adres zwraca 404.
Po drugie rejestr. Pole license w rejestrze npm ma wartość MIT dla każdego sprawdzonego pakietu z przestrzeni @axiomhq, czyli dla js, logging, nextjs, react, pino, winston i tanstack-start.
Po trzecie zawartość opublikowanej paczki. W archiwum @axiomhq/js w wersji 2.0.0 leżą LICENSE, README.md, CHANGELOG.md, katalog src z kodem źródłowym w TypeScripcie oraz katalog dist o rozmiarze około 668 kilobajtów, z wariantami CommonJS i ESM plus mapy źródeł. To jest realny kod, a nie atrapa zajmująca nazwę. Paczka @axiomhq/logging w wersji 0.4.0 wygląda tak samo, dodatkowo z katalogiem test.
I teraz rzecz, którą trzeba powiedzieć wprost, bo licencja MIT na klientach potrafi uśpić czujność. MIT obejmuje wyłącznie biblioteki klienckie. Sam magazyn danych i silnik zapytań są zamknięte, a wariantu do uruchomienia u siebie nie ma w ogóle. Tabela porównania planów na stronie cennika wymienia jeden tryb wdrożenia, zarządzany, i nie ma tam wiersza dla instalacji własnej.
Konsekwencja jest poważniejsza niż przy większości usług. Dane logów to jedno z najgorszych miejsc na migrację: wolumen liczy się w terabajtach, format jest bezschematowy, a zapytania i pulpity napisane w APL nie przenoszą się nigdzie, bo APL nie jest standardem. Wyjście z Axiom oznacza przepisanie wszystkich zapytań, wszystkich alertów i wyprowadzenie historii, za którą zapłacisz mocą obliczeniową zapytań. Jeśli trzymasz tam dane na potrzeby audytu z rocznym oknem retencji, przywiązanie do dostawcy jest realnym ryzykiem biznesowym, a nie teoretycznym.
Wersje pakietów i skok do 2.0
Rodzina pakietów jest wydawana z jednego repozytorium narzędziem, które synchronizuje numery wydań partiami. Stan na 22 sierpnia 2026 roku wygląda tak.
| Pakiet | Wersja | Publikacja w npm | Uwagi |
|---|---|---|---|
@axiomhq/js | 2.0.0 | 2026-08-04 | jedna zależność, fetch-retry, engines.node co najmniej 20 |
@axiomhq/logging | 0.4.0 | 2026-08-04 | brak zależności produkcyjnych, peer @axiomhq/js w zakresie ^1.0.0 |
@axiomhq/nextjs | 0.4.0 | 2026-08-04 | peer next co najmniej 13, peer @axiomhq/logging dokładnie 0.4.0 |
@axiomhq/react | 0.4.0 | 2026-08-04 | zależy od web-vitals i use-deep-compare |
@axiomhq/pino | 2.0.0 | 2026-08-04 | zależy od @axiomhq/js dokładnie 2.0.0 |
@axiomhq/winston | 2.0.0 | 2026-08-04 | zależy od @axiomhq/js dokładnie 2.0.0 |
@axiomhq/tanstack-start | 0.2.0 | 2026-06-29 | peer @axiomhq/logging dokładnie 0.3.0 |
@axiomhq/ai | 0.8.0 | 2025-08-04 | porzucony, następcą jest pakiet axiom |
Trzy rozjazdy widać od razu. Pierwszy jest najpoważniejszy, bo dotyczy kombinacji, którą wybierze większość: @axiomhq/logging w wersji 0.4.0, wydanej tego samego dnia co dwójka rdzenia, deklaruje zależność równorzędną @axiomhq/js w zakresie ^1.0.0. Bieżący rdzeń ma numer 2.0.0, więc zakres go nie obejmuje i instalacja obu bieżących pakietów naraz zgłasza konflikt. Obejściem jest trzymanie rdzenia na linii pierwszej albo wyciszenie ostrzeżenia, co oznacza pracę na kombinacji, której dostawca nie zadeklarował jako obsługiwanej.
Drugi: @axiomhq/tanstack-start nie został podbity w sierpniowej partii i wciąż przypina @axiomhq/logging do dokładnej wersji 0.3.0. Jeśli w tym samym projekcie zainstalujesz @axiomhq/nextjs w wersji 0.4.0, dostaniesz konflikt zależności równorzędnych, bo obie deklaracje są sztywne, bez zakresu.
Trzeci rozjazd jest gorszy, bo cichy. Pakiet @axiomhq/ai zatrzymał się na wersji 0.8.0 z 4 sierpnia 2025 roku i wciąż ma znacznik latest, ale nie został oznaczony jako wycofany. Rozwój przeniósł się do pakietu o nazwie axiom, wersja 0.52.2 z 12 maja 2026 roku, wskazującego repozytorium axiomhq/ai w katalogu packages/ai. Sprawdziłem, czy to nie jest przejęta nazwa: opis, adres repozytorium i lista opiekunów zgadzają się z resztą pakietów Axiom. W archiwum tej paczki jest plik LICENSE.md z tekstem MIT i katalog dist o rozmiarze około 2 megabajtów, ale nie ma katalogu src. W repozytorium axiomhq/ai plik licencyjny nazywa się LICENSE.md, więc skaner szukający LICENSE zgłosi brak.
Sam skok do 2.0 ma dokładnie jedną zmianę łamiącą zgodność, wypisaną w dzienniku zmian: zapytania APL bez jawnie podanego formatu zwracają teraz wynik tabelaryczny. Wcześniej domyślny był format legacy z inną strukturą odpowiedzi. Migracja sprowadza się do decyzji, czy dopisujesz format: 'legacy' we wszystkich istniejących wywołaniach, czy przepisujesz kod odczytujący wynik. Poza tym doszła opcja fetch w ClientOptions, pozwalająca podstawić własną implementację, oraz obsługa odpowiedzi, które nie są JSON-em.
Warto prześledzić wcześniejsze wydania, bo część zmian dotyczy zachowania w locie. Wersja 1.6.0 z 30 marca 2026 roku włączyła kompresję gzip ładunków wysyłanych domyślnie. Wersja 1.6.1 z 6 maja 2026 roku poprawiła logikę pakowania zdarzeń w partie. Wersja 1.7.0 opublikowana 17 czerwca 2026 roku przeszła na API zbiorów danych w wersji drugiej, dodała obsługę metryk i MPL oraz operacje tylko do odczytu dla pulpitów, zapisanych zapytań i użytkowników. Wersja 1.8.0 z 29 czerwca 2026 roku dodała nagłówek X-Axiom-Client.
Uwaga na daty. Dziennik zmian datuje 1.7.0 na 9 czerwca, a 1.8.0 na 25 czerwca, podczas gdy publikacje w npm mają odpowiednio 17 i 29 czerwca. To normalna różnica między scaleniem a wydaniem, ale jeśli budujesz oś czasu z jednego źródła, dostaniesz inne liczby niż z drugiego. Osobna ciekawostka z rejestru: między publikacją 1.3.1 a 1.4.0 minęło ponad trzynaście miesięcy, od 16 grudnia 2024 do 27 stycznia 2026 roku.
Wszystkie bieżące pakiety wymagają Node w wersji co najmniej 20. Plik README pakietu do Next.js mówi to jednoznacznie: Node 18 nie jest już obsługiwany.
Jak to wygląda w kodzie
Instalacja zestawu dla aplikacji Next.js to jedno polecenie z README pakietu.
npm install @axiomhq/js @axiomhq/logging @axiomhq/nextjs @axiomhq/reactSam klient przyjmuje token jako jedyne pole obowiązkowe. Pole orgId jest potrzebne tylko przy tokenie osobistym, url wskazuje adres API dla operacji administracyjnych, a edge kieruje wysyłkę i zapytania na domenę brzegową.
import { Axiom } from '@axiomhq/js'
const axiom = new Axiom({
token: process.env.AXIOM_TOKEN!,
orgId: process.env.AXIOM_ORG_ID,
url: 'https://api.eu.axiom.co'
})
const status = await axiom.ingest('web-logs', [{ path: '/checkout', ms: 128 }], {
timestampField: 'ts',
timestampFormat: 'unix'
})
console.log(status.ingested, status.failed, status.processedBytes)
await axiom.flush()Klasa Axiom pakuje zdarzenia w partie, więc w procesie krótkotrwałym, na przykład w funkcji bezserwerowej, flush jest obowiązkowy. Kto woli wysyłkę natychmiastową, sięga po eksportowaną obok klasę AxiomWithoutBatching. Zwracany IngestStatus ma pola ingested, failed, failures, processedBytes, blocksCreated i walLength.
Zapytanie w APL i miejsce, w którym gryzie zmiana z 2.0.
const tabular = await axiom.query(`
['web-logs']
| where ms > 500
| summarize count() by bin_auto(_time), path
`, {
startTime: '2026-08-01T00:00:00Z',
endTime: '2026-08-22T00:00:00Z',
noCache: true
})
const legacy = await axiom.query("['web-logs'] | count", { format: 'legacy' })Bez pola format dostajesz TabularQueryResult. Z wartością 'legacy' dostajesz QueryResult w starym kształcie. Sygnatury są przeciążone, więc TypeScript pokaże różnicę od razu, ale kod w czystym JavaScripcie przestanie działać dopiero w czasie wykonania.
Logger jest osobnym pakietem i od wersji 0.4.0 potrafi walidować pola zdarzenia dowolnym walidatorem zgodnym ze Standard Schema.
import { z } from 'zod'
import { Logger, ConsoleTransport, AxiomJSTransport } from '@axiomhq/logging'
const LogFieldsSchema = z.object({
userId: z.string(),
action: z.enum(['login', 'logout'])
}).strict()
export const logger = new Logger({
transports: [
new AxiomJSTransport({ axiom, dataset: process.env.AXIOM_DATASET!, logLevel: 'info' }),
new ConsoleTransport({ prettyPrint: true })
],
schema: LogFieldsSchema,
onValidationError: (context) => {
console.warn('Dropped invalid log', context.stage, context.reason, context.issues)
}
})
logger.info('User action', { userId: '123', action: 'login' })Zdarzenie, które nie przejdzie walidacji, zostaje odrzucone przed przekazaniem do transportu, więc onValidationError to jedyne miejsce, gdzie się o tym dowiesz. Metoda logger.raw omija walidację. Pole outputSchema sprawdza zdarzenie już po przejściu przez formatters.
Podpięcie do trasy w Next.js wygląda tak.
import { createAxiomRouteHandler, nextJsFormatters } from '@axiomhq/nextjs'
export const withAxiom = createAxiomRouteHandler(logger)
export const GET = withAxiom(async () => {
logger.info('Hello World!')
return new Response('Hello World!')
})Cennik: trzy liczniki i rachunek na przykładach
Strona cennika renderuje się bez JavaScriptu, więc liczby poniżej pochodzą z surowego HTML pobranego 22 sierpnia 2026 roku, a nie z odczytu ekranu.
Liczniki są trzy i to jest najważniejsza rzecz do zrozumienia: wczytywanie danych mierzone w gigabajtach, moc obliczeniowa zapytań mierzona w gigabajtogodzinach oraz magazyn mierzony w gigabajtach. Odpowiedź na pytanie, czy zapytania są płatne osobno, brzmi więc: tak, jako osobny licznik gigabajtogodzin.
| Pozycja | Personal | Axiom Cloud |
|---|---|---|
| Opłata stała | 0 USD miesięcznie, bezterminowo | 25 USD miesięcznie plus zużycie |
| Wczytywanie danych w limicie | 500 GB miesięcznie | 1 TB miesięcznie |
| Moc obliczeniowa zapytań w limicie | 10 GB-godzin miesięcznie | 100 GB-godzin miesięcznie |
| Magazyn w limicie | 25 GB | 100 GB |
| Retencja | 30 dni | konfigurowalna |
| Rabaty wolumenowe | brak | automatyczne, progowe |
| Przedpłacone kredyty | brak | do 30 procent taniej, bez terminu ważności |
| Limit wydatków | nie dotyczy | tak, w konsoli |
| Wsparcie | społeczność | poczta w cenie, SLA jako dodatek |
Dodatki dla firm są kupowane w konsoli i mają stałe ceny: SSO w standardzie SAML 100 USD miesięcznie, Directory Sync w standardzie SCIM 100 USD miesięcznie, kontrola dostępu oparta na rolach 50 USD miesięcznie, dziennik audytu 50 USD miesięcznie. Suma czterech dodatków to 300 USD miesięcznie, czyli dwunastokrotność opłaty stałej i 3600 USD rocznie ponad zużycie. Kto potrzebuje SSO ze względów zgodności, powinien liczyć rachunek od tej kwoty, a nie od dwudziestu pięciu dolarów.
Co się dzieje po przekroczeniu limitu. Sekcja pytań mówi, że rozliczanie za zużycie włącza się automatycznie, ale zakres tego zdania jest zawężony do planu Axiom Cloud. Ceny jednostkowe mają spadać na wyższych progach. Osobne pytanie o limit wydatków odpowiada, że zużycie ponad limit jest wstrzymywane, a nie doliczane do rachunku. To znaczy, że twardy limit wydatków kupujesz kosztem utraty danych, bo wstrzymane wczytywanie to zdarzenia, których później nie odzyskasz.
Czego strona nie podaje. Nigdzie w pobranym HTML nie ma stawek jednostkowych za gigabajt wczytanych danych, za gigabajtogodzinę ani za gigabajt magazynu. Kalkulator liczy je po stronie przeglądarki. Strona reklamuje maszynowo czytelną kartę stawek pod adresem /pricing.md, ale ten adres zwraca kod 404, co sprawdziłem tego samego dnia. Nie da się więc policzyć rachunku powyżej limitu z opublikowanych liczb i nie będę tych stawek zgadywał.
Teraz obiecane przykłady. Zakładam, że magazyn liczy się jako wolumen faktycznie przechowywany w oknie retencji, bo strona nie precyzuje, czy chodzi o dane przed kompresją, czy po niej. To jest założenie, nie potwierdzona reguła.
Aplikacja produkująca 10 GB logów miesięcznie. Wczytywanie mieści się w obu planach z dużym zapasem. Przy retencji trzydziestodniowej w magazynie leży około 10 GB, czyli poniżej limitu 25 GB w planie Personal. Zapytania mieszczą się w dziesięciu gigabajtogodzinach, o ile nie odświeżasz co chwilę pulpitów po całej historii. Rachunek w planie Personal wynosi zero. W planie Axiom Cloud wynosi 25 USD miesięcznie, czyli 300 USD rocznie, i te 300 dolarów płacisz za opłatę stałą i dodatki, a nie za objętość logów, bo objętość nie wnosi tu nic.
Aplikacja produkująca 100 GB logów miesięcznie. Wczytywanie nadal mieści się w limicie obu planów. Magazyn przestaje się mieścić. Przy retencji trzydziestodniowej trzymasz około 100 GB, czyli czterokrotność limitu w planie Personal. Strona nie mówi, co wtedy się dzieje na planie bez rozliczania za zużycie, bo odpowiedź o rozliczaniu dotyczy wyłącznie Axiom Cloud. Na planie Axiom Cloud 100 GB to dokładnie granica limitu, więc rachunek to 25 USD miesięcznie, dopóki nie przekroczysz jej ani o gigabajt. Powyżej naliczane są stawki, których dostawca nie publikuje.
Na koniec rozbieżność, którą znalazłem na tej samej stronie. Karta planu i tabela porównawcza podają limit magazynu dla Axiom Cloud jako 100 GB. Kalkulator w domyślnym ustawieniu, przy jednym terabajcie wczytywanym miesięcznie, pokazuje w rozbiciu wiersz magazynu z opisem 12 TB retained · within free allowance i wartością Included. Dwanaście terabajtów to sto dwadzieścia razy więcej niż sto gigabajtów. Podaję obie liczby, bo obie stoją w tym samym dokumencie i nie umiem rozstrzygnąć, która opisuje regułę rozliczeniową.
Axiom obok Sentry, PostHoga i reszty
Najczęstszy błąd w tej kategorii nie polega na wyborze złego narzędzia, tylko na kupieniu czterech naraz i płaceniu za to samo zdarzenie cztery razy. Te narzędzia się nie zastępują, odpowiadają na inne pytania.
| Narzędzie | Pytanie, na które odpowiada | Jednostka danych | Model |
|---|---|---|---|
| Axiom | co dokładnie działo się w systemie o 3:14 | zdarzenie z dowolnymi polami | zamknięta usługa, klienty MIT |
| Sentry | który wyjątek psuje najwięcej sesji | błąd ze śladem stosu i grupowaniem | usługa z wariantem własnym |
| PostHog | czy użytkownicy kończą rejestrację | zdarzenie produktowe z tożsamością | usługa z wariantem własnym |
| Langfuse, Helicone | ile kosztowało wywołanie modelu i gdzie się zacięło | ślad wywołania z tokenami | usługa z wariantem własnym |
| ClickHouse | cokolwiek, jeśli sam zbudujesz platformę | wiersz w tabeli z narzuconym schematem | baza, którą utrzymujesz |
Różnica z Sentry jest najczęściej mylona, więc rozpiszę ją osobno. Sentry przyjmuje wyjątek, wylicza jego odcisk, skleja tysiąc wystąpień w jedną sprawę, dokleja kontekst wydania i przypisuje właściciela. Axiom przyjmuje surowe zdarzenie i nic o nim nie zakłada. Kiedy wiesz, że coś się psuje, i chcesz zrozumieć dlaczego, idziesz do Axiom po pełny kontekst żądania. Kiedy chcesz wiedzieć, co psuje się najczęściej i od którego wdrożenia, idziesz do Sentry. Wpisanie do Axiom wszystkich wyjątków i próba odtworzenia grupowania w APL kończy się własnym Sentry utrzymywanym po godzinach.
Wobec klasycznego zestawu do logów, czyli Elasticsearch z warstwą wyszukiwania, Axiom sprzedaje głównie brak klastra do utrzymania. To realna oszczędność w zespole bez administratora, ale kupujesz ją przywiązaniem opisanym wyżej. Wobec ClickHouse układ jest jeszcze prostszy: ClickHouse to silnik, Axiom to gotowa platforma na silniku tej klasy. Pytanie brzmi, czy chcesz utrzymywać bazę, a nie który silnik jest szybszy.
Warto rozróżnić dwie warstwy, które łatwo pomylić. Axiom przechowuje zdarzenia i pozwala je odpytywać, a Grafana niczego nie przechowuje: rysuje panele nad danymi leżącymi gdzie indziej. To znaczy, że nie są alternatywami i w wielu wdrożeniach stoją obok siebie. Dwie rzeczy warto wiedzieć o Grafanie przed decyzją: od wersji 8 jest na AGPL, przy czym osobny plik LICENSING.md wymienia trzynaście katalogów pozostawionych na Apache 2.0, a do pełnego obrazu potrzebne są jeszcze źródła danych, bo sama Grafana ich nie zbiera.
Typowe błędy
Aktualizacja do 2.0.0 bez przeczytania jednej linijki w dzienniku zmian. Zapytanie bez pola format zwraca teraz inny kształt wyniku. W TypeScripcie zobaczysz błąd kompilacji, w czystym JavaScripcie dostaniesz undefined na produkcji.
Instalacja @axiomhq/ai w przekonaniu, że to bieżący pakiet do śledzenia wywołań modeli. Ma znacznik latest, nie ma oznaczenia jako wycofany, a ostatnia publikacja pochodzi z sierpnia 2025 roku. Rozwój jest w pakiecie axiom.
Wrzucenie @axiomhq/tanstack-start obok @axiomhq/nextjs w bieżącej wersji. Pierwszy przypina @axiomhq/logging do 0.3.0, drugi do 0.4.0, obie deklaracje bez zakresu.
Pozostanie na Node 18. Wszystkie bieżące pakiety mają engines.node ustawione na co najmniej 20, a README mówi o tym wprost.
Kupienie twardego limitu wydatków bez zrozumienia, co on robi. Zużycie ponad limit jest wstrzymywane, więc chronisz rachunek kosztem dziury w danych dokładnie wtedy, kiedy coś poszło źle i logów jest najwięcej.
Patrzenie wyłącznie na licznik wczytywania. Moc obliczeniowa zapytań jest osobno rozliczana, więc pulpit odświeżający się co dziesięć sekund po rocznym oknie danych potrafi zjeść limit gigabajtogodzin przy śladowej objętości logów.
Zaufanie automatycznemu skanerowi licencji. W axiomhq/axiom-js plik nazywa się LICENSE i nie ma linii tytułowej, w axiomhq/ai nazywa się LICENSE.md, a w archiwum pakietu axiom nie ma katalogu src. Każda z tych rzeczy potrafi wygenerować fałszywy alarm albo fałszywy spokój.
FAQ
Czy Axiom można uruchomić u siebie?
Nie. Licencja MIT obejmuje wyłącznie biblioteki klienckie w repozytorium axiom-js. Magazyn EventDB i silnik zapytań są zamknięte, a tabela porównania planów wymienia jeden tryb wdrożenia, zarządzany przez dostawcę.
Ile realnie zapłacę za sto gigabajtów logów miesięcznie?
W planie Axiom Cloud 25 USD miesięcznie, dopóki mieścisz się w limicie stu gigabajtów magazynu, co przy retencji trzydziestodniowej jest granicą włos w włos. Stawki powyżej limitu nie są publikowane na stronie cennika, a reklamowana karta stawek pod adresem /pricing.md zwraca 404.
Co zmieniło się w wersji 2.0.0 klienta JavaScript?
Jedna zmiana łamiąca zgodność: zapytanie APL bez jawnego pola format zwraca teraz wynik tabelaryczny zamiast starego formatu legacy. Wydanie ukazało się 4 sierpnia 2026 roku. Dodano też opcję fetch w ClientOptions.
Czy Axiom zastępuje Sentry?
Nie. Sentry grupuje wyjątki w sprawy z odciskiem, kontekstem wydania i właścicielem. Axiom przechowuje surowe zdarzenia i nic o ich strukturze nie zakłada. Te dwa narzędzia odpowiadają na różne pytania i najczęściej stoją obok siebie.
Czy plan darmowy nadaje się do produkcji?
Do małej usługi tak: 500 GB wczytywania miesięcznie i 30 dni retencji wystarczą wielu aplikacjom. Ograniczeniem jest magazyn 25 GB, dziesięć gigabajtogodzin zapytań i wsparcie wyłącznie społecznościowe. Strona nie precyzuje, co dzieje się po przekroczeniu limitu na planie Personal.
Czy APL odpytuje metryki?
Nie. Dokumentacja mówi wprost, że do metryk służy osobny język MPL, z osobnym adresem końcowym. Klient odzwierciedla ten podział przez mplQuery i typ MetricsQueryOptions obok zwykłego query.