Bevezetés a Dropwizard Metrics oldalra

1. Bemutatkozás

A Metrics egy Java könyvtár, amely mérőeszközöket biztosít a Java alkalmazásokhoz.

Több modulja van, és ebben a cikkben kidolgozzuk a metrika-alapmodult, a metrikák-állapotfelmérés modult, a metrikák-kiszolgáló modulokat és a metrikák-kiszolgáló modulokat, és a többieket ismertetésre vázoljuk.

2. Modul metrikák-mag

2.1. Maven-függőségek

A metrikák-mag modul, csak egy függőség szükséges, amelyet hozzá kell adni a pom.xml fájl:

 io.dropwizard.metrics metrics-core 3.1.2 

A legújabb verziót pedig itt találja.

2.2. MetricRegistry

Egyszerűen fogalmazva, használjuk a MetricRegistry osztály egy vagy több mutató regisztrálásához.

Minden mutatónkhoz használhatunk egy metrikaregisztert, de ha különféle metrikákhoz különféle jelentési módszereket akarunk használni, akkor metrikáinkat is csoportokra oszthatjuk, és mindegyik csoporthoz más metrikaregisztereket használhatunk.

Hozzunk létre egy MetricRegistry Most:

MetricRegistry metricRegistry = új MetricRegistry ();

És akkor regisztrálhatunk néhány mutatót ezzel MetricRegistry:

Meter meter1 = új Meter (); metricRegistry.register ("meter1", meter1); Meter meter2 = metricRegistry.meter ("meter2"); 

Az új mutató létrehozásának két alapvető módja van: saját maga példányosítása vagy megszerzése a metrikus nyilvántartásból. Amint láthatja, mindkettőjüket használtuk a fenti példában, példázzuk a Méter objektum „meter1”, és kapunk egy másikat Méter objektum „meter2”, amelyet a metricRegistry.

A metrikanyilvántartásban minden metrikának egyedi neve van, mivel a fenti metrikus nevekként a „meter1” és a „meter2” kifejezéseket használtuk. MetricRegistry statikus segítő módszereket is tartalmaz, amelyek segítenek megfelelő metrikus nevek létrehozásában:

String name1 = MetricRegistry.name (Filter.class, "request", "count"); String name2 = MetricRegistry.name ("CustomFilter", "response", "count"); 

Ha egy metrikus regiszterkészletet kell kezelnünk, használhatjuk SharedMetricRegistries osztály, amely egyedülálló és szálbiztos. Hozzáadhatunk egy metrikaregisztert, lekérhetjük belőle ezt a metrikaregisztert és eltávolíthatjuk:

SharedMetricRegistries.add ("alapértelmezett", metricRegistry); MetricRegistry retrievedMetricRegistry = SharedMetricRegistries.getOrCreate ("alapértelmezett"); SharedMetricRegistries.remove ("alapértelmezett"); 

3. Metrika fogalmak

A metrics-core modul számos általánosan használt metrikatípust kínál: Méter, Nyomtáv, Számláló, Hisztogram és Időzítő, és Riporter a metrika értékeinek kimenetéhez.

3.1. Méter

A Méter méri az események számát és arányát:

Mérőóra = new Meter (); hosszú initCount = meter.getCount (); assertThat (initCount, egyenlőTo (0L)); mérő.jel (); assertThat (meter.getCount (), egyenlőTo (1L)); méter.jel (20); assertThat (meter.getCount (), egyenlőTo (21L)); kettős átlagérték = meter.getMeanRate (); dupla oneMinRate = meter.getOneMinuteRate (); dupla ötMinRate = meter.getFiveMinuteRate (); dupla tizenötMinRate = meter.getFifteenMinuteRate (); 

A getCount () A metódus visszaadja az események számát, és Mark() A metódus 1-et vagy n-t ad hozzá az eseményesemények számához. A Méter Az objektum négy arányt nyújt, amelyek az egész átlagát képviselik Méter élettartama, a legutóbbi egy percre, az utóbbi öt percre, illetve az elmúlt negyedévre.

3.2. Nyomtáv

Nyomtáv olyan felület, amelyet egyszerűen egy adott érték visszaadására használnak. A metrics-core modul számos megvalósítást kínál: RatioGauge, CachedGauge, DerivativeGauge és JmxAttributeGauge.

RatioGauge absztrakt osztály, és méri az egyik érték arányát a másikhoz.

Nézzük meg, hogyan kell használni. Először megvalósítunk egy osztályt AttendanceRatioGauge:

public class AttendanceRatioGauge kiterjeszti a RatioGauge {private int attendanceCount; private int courseCount; @Orride protected Ratio getRatio () {return Ratio.of (jelenléti szám, tanfolyam száma); } // szabványos kivitelezők} 

És akkor teszteljük:

RatioGauge ratioGauge = new AttendanceRatioGauge (15, 20); assertThat (ratioGauge.getValue (), egyenlőTo (0,75)); 

CachedGauge egy másik absztrakt osztály, amely gyorsítótárazhat értéket, ezért nagyon hasznos, ha az értékeket drága kiszámítani. Használatához végre kell hajtanunk egy osztályt ActiveUsersGauge:

Az ActiveUsersGauge nyilvános osztály kiterjeszti a CachedGauge-ot {@ A védett lista felülbírálása loadValue () {return getActiveUserCount (); } privát lista getActiveUserCount () {Lista eredménye = new ArrayList (); eredmény.add (12L); visszatérési eredmény; } // szabványos kivitelezők}

Ezután teszteljük, hogy a várt módon működik-e:

Nyomtáv activeUsersGauge = új ActiveUsersGauge (15, TimeUnit.MINUTES); Várható lista = new ArrayList (); várható.add (12L); assertThat (activeUsersGauge.getValue (), equalTo (várható)); 

A gyorsítótár lejárati idejét 15 percre állítottuk a ActiveUsersGauge.

DerivativeGauge szintén absztrakt osztály, és lehetővé teszi, hogy másból származtasson egy értéket Nyomtáv mint az értéke.

Nézzünk meg egy példát:

Az ActiveUserCountGauge nyilvános osztály kiterjeszti a DerivativeGauge-t {@Orride protected Integer transform (List value) {return value.size (); } // szabványos kivitelezők}

Ez Nyomtáv értékét egy an-ból nyeri ActiveUsersGauge, ezért azt várjuk, hogy ez legyen az alaplista méretének értéke:

Nyomtáv activeUsersGauge = új ActiveUsersGauge (15, TimeUnit.MINUTES); Gauge activeUserCountGauge = new ActiveUserCountGauge (activeUsersGauge); assertThat (activeUserCountGauge.getValue (), equalTo (1)); 

JmxAttributeGauge akkor használatos, ha hozzáférnünk kell a JMX-en keresztül elérhető más könyvtárak mutatóihoz.

3.3. Számláló

A Számláló növekmények és csökkentések rögzítésére szolgál:

Számláló számláló = új Számláló (); hosszú initCount = számláló.getCount (); assertThat (initCount, egyenlőTo (0L)); számláló.inc (); assertThat (számláló.getCount (), egyenlőTo (1L)); számláló.inc (11); assertThat (számláló.getCount (), egyenlőTo (12L)); számláló.dec (); assertThat (számláló.getCount (), egyenlőTo (11L)); számláló.dec (6); assertThat (számláló.getCount (), egyenlőTo (5L));

3.4. Hisztogram

Hisztogram a folyam nyomon követésére szolgál Hosszú értékeket és elemzi statisztikai jellemzőiket, mint pl max, min, átlag, medián, szórás, 75. percentilis stb:

Hisztogram hisztogram = new Histogram (new UniformReservoir ()); hisztogram.frissítés (5); long count1 = hisztogram.getCount (); assertThat (count1, egyenlőTo (1L)); Pillanatkép pillanatkép1 = hisztogram.getSnapshot (); assertThat (snapshot1.getValues ​​(). hossz, egyenlőTo (1)); assertThat (snapshot1.getValues ​​() [0], egyenlőTo (5L)); hisztogram.frissítés (20); long count2 = hisztogram.getCount (); assertThat (count2, egyenlőTo (2L)); Pillanatkép pillanatkép2 = hisztogram.getSnapshot (); assertThat (snapshot2.getValues ​​(). hossz, egyenlőTo (2)); assertThat (snapshot2.getValues ​​() [1], egyenlőTo (20L)); assertThat (pillanatkép2.getMax (), egyenlőTo (20L)); assertThat (snapshot2.getMean (), egyenlőTo (12.5)); assertEquals (10.6, pillanatkép2.getStdDev (), 0.1); assertThat (snapshot2.get75thPercentile (), egyenlőTo (20.0)); assertThat (snapshot2.get999thPercentile (), equalTo (20.0)); 

Hisztogram mintavételezzük az adatokat a víztározó mintavételezésével, és amikor példányosítjuk a Hisztogram objektumot, kifejezetten be kell állítanunk a tározóját.

Rezervoár egy interfész, és a metrikamag négy megvalósítást kínál: ExponentialDecayingReservoir, UniformReservoir, SlidingTimeWindowReservoir, SlidingWindowReservoir.

A fenti szakaszban említettük, hogy metrika is létrehozható MetricRegistry, kivitelező használata mellett. Amikor használjuk metricRegistry.histogram (), akkor a Hisztogram például a ExponentialDecayingReservoir végrehajtás.

3.5. Időzítő

Időzítő a többféle időzítési időtartam nyomon követésére szolgál, amelyeket a Kontextus objektumokat, és megadja statisztikai adataikat is:

Időzítő időzítő = új időzítő (); Timer.Context context1 = timer.time (); TimeUnit.SECONDS.sleep (5); rég eltelt1 = context1.stop (); assertEquals (5000000000L, eltelt1, 1000000); assertThat (timer.getCount (), egyenlőTo (1L)); assertEquals (0,2, timer.getMeanRate (), 0,1); Timer.Context context2 = timer.time (); TimeUnit.SECONDS.sleep (2); context2.close (); assertThat (timer.getCount (), egyenlőTo (2L)); assertEquals (0,3, timer.getMeanRate (), 0,1); 

3.6. Riporter

Amikor ki kell adnunk a méréseinket, használhatjuk Riporter. Ez egy interfész, és a metrika-mag modul számos megvalósítását biztosítja, például ConsoleReporter, CsvReporter, Slf4jReporter, JmxReporter stb.

Itt használjuk ConsoleReporter mint például:

MetricRegistry metricRegistry = új MetricRegistry (); Mérőóra = metricRegistry.meter ("mérő"); mérő.jel (); méter.jel (200); Hisztogram hisztogram = metricRegistry.histogram ("hisztogram"); hisztogram.frissítés (12); hisztogram.frissítés (17); Számláló számláló = metricRegistry.counter ("számláló"); számláló.inc (); számláló.dec (); ConsoleReporter riporter = ConsoleReporter.forRegistry (metricRegistry) .build (); riporter.start (5, TimeUnit.MICROSECONDS); riporter.jelentés (); 

Itt található a ConsoleReporter:

- hisztogramok ----------------------------------------------- ------------------- hisztogramszám = 2 perc = 12 max = 17 átlag = 14,50 stddev = 2,50 medián = 17,00 75% <= 17,00 95% <= 17,00 98% <= 17,00 99% <= 17,00 99,9% <= 17,00 - Mérők ---------------------------------- ------------------------------------ méterszám = 201 átlagsebesség = 1756,87 esemény / másodperc 1 perc sebesség = 0,00 esemény / másodperc 5 perces sebesség = 0,00 esemény / másodperc 15 perces sebesség = 0,00 esemény / másodperc 

4. Modul metrikák-állapotfelmérések

A Metrics rendelkezik egy kiterjesztésű metrics-healthchecks modullal az egészségügyi ellenőrzések kezelésére.

4.1. Maven-függőségek

A metrics-healthchecks modul használatához hozzá kell adnunk ezt a függőséget a pom.xml fájl:

 io.dropwizard.metrics metrikák-állapotfelmérések 3.1.2 

A legfrissebb verziót pedig itt találja.

4.2. Használat

Először több osztályra van szükségünk, amelyek felelősek a konkrét állapotfelmérési műveletekért, és ezeket az osztályokat végre kell hajtani Állapotfelmérés.

Például használjuk DatabaseHealthCheck és UserCenterHealthCheck:

public class DatabaseHealthCheck kiterjeszti a HealthCheck {@Orride protected Result check () dobja Exception {return Result.healthy (); }} 
public class UserCenterHealthCheck kiterjeszti a HealthCheck {@Orride protected Result check () dobja Exception {return Result.healthy (); }} 

Akkor szükségünk van egy HealthCheckRegistry (ami pont olyan, mint MetricRegistry), és regisztrálja a DatabaseHealthCheck és UserCenterHealthCheck ezzel:

HealthCheckRegistry healthCheckRegistry = új HealthCheckRegistry (); healthCheckRegistry.register ("db", új DatabaseHealthCheck ()); healthCheckRegistry.register ("uc", új UserCenterHealthCheck ()); assertThat (healthCheckRegistry.getNames (). méret (), equalTo (2)); 

A regisztrációt is törölhetjük Állapotfelmérés:

healthCheckRegistry.unregister ("uc"); assertThat (healthCheckRegistry.getNames (). méret (), equalTo (1)); 

Futtathatjuk az összes Állapotfelmérés példányok:

Térkép eredmények = healthCheckRegistry.runHealthChecks (); for (Map.Entry bejegyzés: results.entrySet ()) {assertThat (entry.getValue (). isHealthy (), equalTo (true)); } 

Végül futtathatunk egy specifikusat Állapotfelmérés példa:

healthCheckRegistry.runHealthCheck ("db"); 

5. Modul metrikák-szerverek

A Metrics egy marék hasznos kiszolgáló kisalkalmazást kínál számunkra, amelyek lehetővé teszik számunkra a metrikákkal kapcsolatos adatok elérését HTTP-kérelmeken keresztül.

5.1. Maven-függőségek

A metrics-servlet modul használatához hozzá kell adnunk ezt a függőséget a pom.xml fájl:

 io.dropwizard.metrics metrics-servlet 3.1.2 

A legfrissebb verziót pedig itt találja.

5.2. HealthCheckServlet Használat

HealthCheckServlet biztosítja az állapotfelmérés eredményeit. Először létre kell hoznunk a ServletContextListener amely kiteszi a mi HealthCheckRegistry:

public class MyHealthCheckServletContextListener kiterjeszti HealthCheckServlet.ContextListener {public static HealthCheckRegistry HEALTH_CHECK_REGISTRY = new HealthCheckRegistry (); statikus {HEALTH_CHECK_REGISTRY.register ("db", új DatabaseHealthCheck ()); } @Orride védett HealthCheckRegistry getHealthCheckRegistry () {return HEALTH_CHECK_REGISTRY; }} 

Ezután hozzáadjuk ezt a hallgatót és HealthCheckServlet ba,-be web.xml fájl:

 com.baeldung.metrics.servlets.MyHealthCheckServletContextListener healthCheck com.codahale.metrics.servlets.HealthCheckServlet healthCheck / healthcheck 

Most elindíthatjuk a webalkalmazást, és elküldhetünk egy GET kérést a “// localhost: 8080 / healthcheck” címre az állapotfelmérési eredmények megszerzéséhez. Válaszának a következőnek kell lennie:

{"db": {"egészséges": igaz}}

5.3. ThreadDumpServlet Használat

ThreadDumpServlet információt nyújt a JVM összes élő száláról, azok állapotáról, verem nyomairól és az esetlegesen várt zárak állapotáról.

Ha használni akarjuk, egyszerűen hozzá kell adnunk ezeket a web.xml fájl:

 threadDump com.codahale.metrics.servlets.ThreadDumpServlet threadDump / threaddump 

A szál kiírási adatai a „// localhost: 8080 / threaddump” címen lesznek elérhetők.

5.4. PingServlet Használat

PingServlet tesztelhető, hogy fut-e az alkalmazás. Ezeket hozzáadjuk a web.xml fájl:

 ping com.codahale.metrics.servlets.PingServlet ping / ping 

Ezután küldjön egy GET kérést a “// localhost: 8080 / ping” címre. A válasz állapotkódja 200, tartalma „pong”.

5.5. MetricsServlet Használat

MetricsServlet metrikus adatokat szolgáltat. Először létre kell hoznunk a ServletContextListener amely kiteszi a mi MetricRegistry:

public class MyMetricsServletContextListener kiterjeszti a MetricsServlet.ContextListener {private static MetricRegistry METRIC_REGISTRY = new MetricRegistry (); statikus {Számláló számláló = METRIC_REGISTRY.számláló ("m01-számláló"); számláló.inc (); Hisztogram hisztogram = METRIC_REGISTRY.histogram ("m02-hisztogram"); hisztogram.frissítés (5); hisztogram.frissítés (20); hisztogram.frissítés (100); } @Orride védett MetricRegistry getMetricRegistry () {return METRIC_REGISTRY; }} 

Ez a hallgató és MetricsServlet hozzá kell adni web.xml:

 com.codahale.metrics.servlets.MyMetricsServletContextListener metrika com.codahale.metrics.servlets.MetricsServlet metrika / metrika 

Ezt a „// localhost: 8080 / metrics” címen tárjuk fel webalkalmazásunkban. Válaszának különféle mutatószámokat kell tartalmaznia:

{"version": "3.0.0", "gauges": {}, "counters": {"m01-counter": {"count": 1}}, "hisztograms": {"m02-hisztogram": { "count": 3, "max": 100, "mean": 41.66666666666666, "min": 5, "p50": 20, "p75": 100, "p95": 100, "p98": 100, "p99" ": 100," p999 ": 100," stddev ": 41.69998667732268}}," meter ": {}," timers ": {}} 

5.6. AdminServlet Használat

AdminServlet aggregátumok HealthCheckServlet, ThreadDumpServlet, MetricsServlet, és PingServlet.

Adjuk hozzá ezeket a web.xml:

 admin com.codahale.metrics.servlets.AdminServlet admin / admin / * 

Most már elérhető a „// localhost: 8080 / admin” címen. Kapunk egy oldalt, amely négy linket tartalmaz, egyet a négy szervlet mindegyikéhez.

Ne feledje, hogy ha állapotfelmérést akarunk végezni, és hozzáférünk a mérési adatokhoz, akkor is szükség van erre a két hallgatóra.

6. Modul metrics-servlet

A metrics-servlet modul biztosítja a Szűrő amelynek több mutatója van: mérők az állapotkódokhoz, számláló az aktív kérések számához és időzítő a kérelem időtartamához.

6.1. Maven-függőségek

A modul használatához először adjuk hozzá a függőséget a pom.xml:

 io.dropwizard.metrics metrics-servlet 3.1.2 

A legfrissebb verziót pedig itt találja.

6.2. Használat

Használatához létre kell hoznunk a ServletContextListener amely kiteszi a mi MetricRegistry hoz InstrumentedFilter:

public class MyInstrumentedFilterContextListener kiterjeszti az InstrumentedFilterContextListener {public static MetricRegistry REGISTRY = új MetricRegistry (); @Orride védett MetricRegistry getMetricRegistry () {return REGISTRY; }} 

Ezután ezeket hozzáadjuk a web.xml:

  com.baeldung.metrics.servlet.MyInstrumentedFilterContextListener instrumentFilter com.codahale.metrics.servlet.InstrumentedFilter instrumentFilter / * 

Most a InstrumentedFilter tud dolgozni. Ha hozzá akarunk férni a metrikájának adataihoz, akkor azon keresztül is megtehetjük MetricRegistryIKTATÓ HIVATAL.

7. Egyéb modulok

A fent bemutatott modulok kivételével a Metrics rendelkezik más modulokkal, különböző célokra:

  • metrikák-jvm: számos hasznos mérőszámot tartalmaz a JVM belsejének műszerezéséhez
  • metrics-ehcache: biztosítja InstrumentedEhcache, az Ehcache gyorsítótárak díszítője
  • metrics-httpclient: osztályokat biztosít az Apache HttpClient (4.x verzió) műszerezéséhez
  • metrics-log4j: biztosítja InstrumentedAppender, egy Log4j Appender megvalósítás a log4j 1.x számára, amely rögzíti a naplózott események arányát naplózási szintjük szerint
  • metrics-log4j2: hasonló a metrics-log4j-hez, csak a log4j 2.x-hez
  • metrics-logback: biztosítja InstrumentedAppender, egy visszalépés Appender megvalósítás, amely rögzíti a naplózott események arányát naplózási szintjük szerint
  • metrikák-json: biztosítja HealthCheckModule és MetricsModule Jacksonért

Sőt, ezeken a fő projekt modulokon kívül néhány más, harmadik féltől származó könyvtár integrációt biztosít más könyvtárakkal és keretrendszerekkel.

8. Következtetés

Az alkalmazások műszerezése általános követelmény, ezért ebben a cikkben bemutattuk a Metrikát, remélve, hogy ez segíthet a probléma megoldásában.

Mint mindig, a példa teljes forráskódja elérhető a GitHubon.


$config[zx-auto] not found$config[zx-overlay] not found