perfmetrics bied 'n eenvoudige manier sagteware prestasie statistieke te Python biblioteke en toepassings & nbsp te voeg;. Gebruik perfmetrics die ware knelpunte in 'n produksie aansoek te vind.
Die perfmetrics pakket is 'n kliënt van die Statsd daemon deur Etsy, wat op sy beurt 'n kliënt van Graphite (spesifiek, die Carbon daemon). Omdat die perfmetrics pakket stuur UDP pakkies te Statsd, perfmetrics voeg nie I / O vertragings te aansoeke en min CPU oorhoofse. Dit kan ewe goed werk in stringe (sinchrone) of gebeurtenis gedrewe (asynchrone) sagteware.
Gebruik
Gebruik diemetric enmetricmethod ontwerpers funksies en metodes wat tydsberekening moet stuur en bel statistieke Statsd te draai. Voeg die ontwerpers vir enige funksie of metode wat 'n bottelnek wees, insluitend biblioteek funksies.
Monster:
van perfmetrics invoer metrieke
van perfmetrics invoer metricmethod
metric
def myfunction ():
& Nbsp; "" "Doen iets wat duur kan wees" ""
klas MyClass (voorwerp):
& Nbsp;metricmethod
& Nbsp; def mymethod (self):
& Nbsp; "" "Doen wat ander moontlik duur ding" ""
Volgende, vertel perfmetrics hoe om met Statsd. (Tot jy doen, die ontwerpers het geen effek.) Ideaal, jou aansoek moet die Statsd URI lees van 'n konfigurasielêer by die begin van tyd, maar die voorbeeld hieronder gebruik 'n harde-gekodeerde URI vir eenvoud:
van perfmetrics invoer set_statsd_client
set_statsd_client ('statsd: // localhost: 8125')
vir i in xrange (1000):
& Nbsp; myfunction ()
& Nbsp;. MyClass () mymethod ()
As jy hardloop dat kode, sal dit brand 2000 UDP pakkies by die hawe 8125. Maar tensy jy reeds Graphite en Statsd geïnstalleer is, sal al die pakkies geïgnoreer word en laat val. Val is 'n goeie ding: jy wil nie jou produksie aansoek om te misluk of vertraag net omdat jou prestasie monitering-stelsel is gestop of nie werk nie.
Installeer Graphite en Statsd te ontvang en grafiek die statistieke. Een goeie manier om dit te installeer is die graphite_buildout byvoorbeeld by GitHub, wat installeer Graphite en Statsd in 'n persoonlike plek sonder wortel toegang.
Threading
Terwyl die meeste programme statistieke van enige draad stuur na 'n enkele globale Statsd bediener, 'n paar programme moet 'n verskillende Statsd bediener te gebruik vir elke draad. As jy net nodig het om 'n globale Statsd bediener, gebruik die set_statsd_client funksie by aansoek selflaai. As jy 'n ander Statsd bediener te gebruik vir elke draad, gebruik die statsd_client_stack voorwerp in elke draad. Gebruik die druk, pop, en duidelike metodes.
Graphite Wenke
Graphite winkels elke metrieke as 'n tyd reeks met verskeie besluite. Die monster graphite_buildout winkels 10 tweede resolusie vir 48 uur, 1 uur resolusie vir 31 dae, en 1 dag resolusie vir 5 jaar. 'N growwe grein waarde van 'n boete grein waarde te produseer, Graphite bere die gemiddelde waarde (gemiddeld) vir elke tyd span.
Omdat Graphite bere gemiddelde waardes implisiet, die mees sinvolle manier tellers in Graphite te behandel is as 'n "hits per sekonde" waarde. Op dié manier kan 'n grafiek te produseer korrekte resultate nie saak wat resolusie vlak dit gebruik.
Behandeling tellers as treffers per sekonde het ongelukkige gevolge, egter. As sommige metrieke sien 'n 1000 treffer piek in een sekonde, val dan vir ten minste 9 sekondes na nul, sal die Graphite grafiek vir daardie metrieke 'n piek van 100, nie 1000 wys, aangesien Graphite ontvang statistieke elke 10 sekondes en die piek lyk Graphite soos 100 hits per sekonde oor 'n 10 tweede periode.
As jy wil hê dat jou grafiek 1000 treffers eerder as 100 hits per sekonde om te wys, pas die Graphite hitcount () funksie, met behulp van 'n resolusie van 10 sekondes of meer. Die hitcount funksie omskakel per sekonde waardes rou treffer tel te benader. Maak seker dat jy 'n resolusie waarde groot genoeg om verteenwoordig te word deur ten minste een pixel breedte op die resulterende grafiek te voorsien, anders Graphite sal bereken gemiddeldes van treffer tellings en produseer 'n verwarrende grafiek.
Dit maak gewoonlik sin nul waardes te behandel in Graphite as nul, maar dit is nie die verstek; by verstek, Graphite trek niks vir nul waardes. Jy kan draai op die opsie vir elke grafiek.
naslagdocumentatie
Ontwerpers
metric
& Nbsp; kennis Statsd behulp UDP elke keer die funksie genoem. Stuur albei oproep tellings en tydsberekening inligting. Die naam van die metrieke gestuur na Statsd is
metricmethod
& Nbsp; Soosmetric, maar die naam van die Statsd metrieke is
Metrieke (stat = Geen, koers = 1, method = Vals, tel = True, tydsberekening = True)
& Nbsp; 'n versierder of konteks bestuurder met opsies.
& Nbsp; stat is die naam van die metrieke te stuur; stel om dit te Geen die naam van die funksie of metode te gebruik. koers kan jy verminder die aantal pakkies deur die kies van 'n ewekansige steekproef te Statsd gestuur; byvoorbeeld, het dit tot 0,1 een tiende van die pakkies te stuur. Indien die metode parameter is waar, is die standaard metrieke naam op basis van die metode se klas naam, eerder as die module naam. Die opstel tel te Vals versper die toonbank statistieke gestuur na Statsd. Die opstel van tydsberekening te Vals versper die tydsberekening statistieke gestuur na Statsd.
& Nbsp; Voorbeeld gebruik as 'n versierder:
& Nbsp;Metric ('frequent_func', koers = 0.1, tydsberekening = False)
& Nbsp; def frequent_func ():
& Nbsp; "" "Doen iets vinnig en dikwels" ""
& Nbsp; Voorbeeld gebruik as 'n konteks bestuurder:
& Nbsp; def do_something ():
& Nbsp; met metrieke ('doing_something'):
& Nbsp; pass
& Nbsp; As perfmetrics stuur pakkies te dikwels, kan UDP pakkies verloor word en die aansoek prestasie beïnvloed kan word. Jy kan die aantal pakkies en die CPU oorhoofse gebruik van die metrieke versierder met opsies in plaas van metrieke of metricmethod verminder. Die versierder voorbeeld hierbo gebruik 'n monster tempo en 'n statiese metrieke naam. Dit versper ook die versameling van tydsberekening inligting.
& Nbsp; Wanneer die gebruik van metrieke as 'n konteks bestuurder, moet jy die stat parameter voorsien of niks sal aangeteken word.
Funksies
statsd_client ()
& Nbsp; Stuur die oomblik ingestel StatsdClient. Gee die draad-plaaslike kliënt indien daar een is, of die globale kliënt indien daar een is, of niks.
set_statsd_client (client_or_uri)
& Nbsp; Stel die globale StatsdClient. Die client_or_uri kan wees om 'n StatsdClient, 'n statsd: // Uri, of niks.
statsd_client_from_uri (uri)
& Nbsp; Skep 'n StatsdClient van 'n URI. 'N Tipiese URI is statsd: // localhost: 8125. Ondersteun opsionele navraag parameters is voorvoegsel en gauge_suffix. Die standaard prefix is leeg en die verstek gauge_suffix is .. Sien die StatsdClient dokumentasie vir meer inligting oor gauge_suffix.
StatsdClient Metodes
Python kode kan persoonlike statistieke stuur deur die eerste om die huidige StatsdClient die gebruik van die statsd_client () metode. Let daarop dat statsd_client () gee terug Geen indien geen kliënt gekonfigureer.
Die meeste van die metodes hieronder opsionele koers en BUF parameters. Die koers parameter toe stel om 'n waarde van minder as 1, veroorsaak StatsdClient 'n ewekansige monster van pakkies eerder as elke pakkie te stuur. As die BUF parameter is 'n lys, StatsdClient voeg daar die pakkie inhoud aan die BUF, eerder as om te stuur die pakkie, maak dit moontlik om verskeie opgraderings te stuur in 'n enkele pakkie. Hou in gedagte dat die grootte van UDP pakkies is beperk (die limiet wissel deur die netwerk, maar 1000 bytes is gewoonlik 'n goeie raaiskoot) en enige ekstra grepe sal stilweg geïgnoreer word nie.
tydsberekening (stat, waarde, koers = 1, BUF = Geen)
& Nbsp; Rekord tydsberekening inligting. stat is die naam van die metrieke aan te teken en waarde is die tydsberekening meting in millisekondes. Let daarop dat Statsd hou verskeie data punte vir elke tydsberekening metrieke, so tydsberekening statistieke kan meer skyfspasie neem as tellers of meters.
meter (stat, waarde, agtervoegsel = Geen, koers = 1, BUF = Geen)
& Nbsp; Werk 'n meter waarde. stat is die naam van die metrieke aan te teken en waarde is die nuwe meter waarde. A meter verteenwoordig 'n aanhoudende waarde soos 'n poel grootte. Omdat meters van verskillende masjiene dikwels konflik, 'n agtervoegsel word gewoonlik toegepas name te meet. As die agtervoegsel parameter is 'n string (insluitend 'n leë string), is dit oorheers die verstek meter agtervoegsel.
incr (stat, tel = 1, koers = 1, BUF = Geen)
& Nbsp; Vermeerder 'n teller by tel. Let daarop dat Statsd verwyder al toonbank waardes elke keer as dit die statistieke stuur na grafiet, wat gewoonlik gebeur elke 10 sekondes. As jy 'n hardnekkige waarde, is dit dalk meer toepaslik om 'n meter te gebruik in plaas van 'n toonbank.
decr (stat, tel = 1, koers = 1, BUF = Geen)
& Nbsp; Trek 'n toonbank deur tel.
sendbuf (BUF)
& Nbsp; Stuur die inhoud van die BUF lys Statsd
Wat is nuut in hierdie release:
- Bygevoeg 'n opsionele piramide. tussen en 'n soortgelyke WSGI filter app wat stel die Statsd kliënt vir elke versoek.
Wat is nuut in die weergawe 0.9.4:.
- Geoptimaliseerd die gebruik van verminderde monster pryse
Wat is nuut in die weergawe 0.9.2:
- metrieke kan nou as óf 'n versierder gebruik word of 'n konteks bestuurder.
- Het die handtekening van StatsdClient meer soos James Socol se StatsClient.
Vereistes :
- Python
Kommentaar nie gevind