7,540
edits
Changes
→Honnan jön a metrika
===Honnan jön a metrika===
Metrikát magáról nagyon sok rendszer tud szolgáltatni, pl a ''Traefik'' reverse proxy, vagy ahogy azt majd látni fogjuk, akár a docker daemon is képes metrikákat szolgáltatni saját magáról. Általában ezekre szolgáltat a metrika lekérdezésére egy http interfészt biztosít a metrikát adó rendszer, amit a '''/metrics''' URL-en lehet elérni. A http interfészek esetében PULL metrika begyűjtésről beszélünk, vagyis a Prometheus (vagy bármelyik másik TSDB) a konfigurációja alapján periodikusan (pár másodpercenként) meghívja a megfelelő URL-t, ahol visszakapja az aktuális metrika listát(név-érték párokat), amit beír az adatbázisba.
Léteik PUSH alapú metrika gyújtés is.
A Prometheus 4 nyelven is ad API-t metrika szolgáltatás írására: Go, Java, Python, Ruby.
<br>https://prometheus.io/docs/instrumenting/clientlibs/
Java-ban nagyon egyszerűen szolgáltathatunk metrikákat az alkalmazásunkból a Prometheus client library-val. Van hozzá Maven dependency. Abba az osztályba, ami a dependenciát szolgáltatja, majd egy statikus konstruktorral inicializáljuk a Prometheus metrika gyűjtőt. Az alábbi példában inicializálnunk egy '''my_library_request_total''' metrikát, ami fölé a http metrika lekérdezésben egy #-val oda lesz írva a help szöveg: "Total request" (ezt nem veszi figyelembe a prometheus). A metrikához hozzáadtunk a '''method''' nevű címét.
<source lang="java">
class YourClass {
static final Counter requests = Counter.build()
.name("my_library_requests_total").help("Total requests.")
.labelNames("method").register();
void processGetRequest() {
requests.labels("get").inc();
// Your code here.
}
}
</source>
Ahányszor meghívjuk a processGetRequest metódust, a fenti method="get" megcímkézett változatához hozzá fog adni egyet.
A lekérdezésben így nézne ki:
<pre>
#Total requests.
my_library_requests_total{method="get"} 23
</pre>
Aztán meg pl egy HTTP servlet-el tudjuk szolgáltatni a metrikát:
<source lang="java">
Server server = new Server(1234);
ServletContextHandler context = new ServletContextHandler();
context.setContextPath("/");
server.setHandler(context);
context.addServlet(new ServletHolder(new MetricsServlet()), "/metrics");
<source>
===Metrika típusok===