Statîstîk û çavdêriya nivîsarên PHP-ê di wextê rast de. ClickHouse û Grafana têne alîkariya Pinba

Di vê gotarê de ez ê ji we re vebêjim ka meriv çawa pinba bi clickhouse û grafana li şûna pinba_engine û pinboard bikar tîne.

Li ser projeyek PHP-ê, pinba dibe ku riya yekane pêbawer e ku meriv fam bike ka bi performansê re çi diqewime. Rast e, pinba bi gelemperî tenê gava ku pirsgirêk jixwe têne dîtin û ne diyar e "li ku derê bikole" tê pêkanîn.

Bi gelemperî, kes nizane ka di çirkeyek / hûrdemê de çend caran ev an wê nivîsar tê gotin û ew dest bi xweşbînkirina "bi destikê" dikin, ji wan deverên ku mentiqîtir xuya dikin dest pê dikin.

Hin têketinên nginx analîz dikin, hinên din jî pirsên databasa hêdî analîz dikin.

Bê guman, pinba dê ne zêde be, lê çend sedem hene ku çima her projeyek wê tune.

Statîstîk û çavdêriya nivîsarên PHP-ê di wextê rast de. ClickHouse û Grafana têne alîkariya Pinba

Û sedema yekem sazkirinê ye.

Ji bo ku hûn ji pêkanîna Pinba-ê kêm-zêde cûreyek "vekêşanê" bistînin, pir tê xwestin ku meriv ne tenê ji bo hûrguliyên paşîn, lê di heman demê de di demek dirêj de (ji rojan heya mehan) metrîkan jî bibîne.

Ji bo vê yekê hûn hewce ne:

  • ji bo php pêvekê saz bikin (û dibe ku hûn modulek ji bo nginx bixwazin)
  • dirêjkirina ji bo mysql berhev bike
  • pinboard saz bikin û cron mîheng bikin

Ji ber agahdariya piçûk di derbarê Pinba de, gelek kes di wê baweriyê de ne ku ew tenê li ser PHP5-ê dixebitî û demek dirêj bûye tiştek berê, lê wekî ku em ê paşê bibînin, ev ne wusa ye.

Yekem gava herî hêsan e, ya ku hûn hewce ne bikin ev e ku emrê bimeşînin:

apt install php-pinba

Ev pêvek di depoyan de heya php 7.3 û tê de heye û hûn ne hewce ne ku tiştek berhev bikin.

Piştî bicihanîna fermana sazkirinê, em tavilê pêvekek xebitandinê distînin ku ji bo her skrîptê (dema xebitandinê, bîranîn, hwd.) di formatê de berhev dike û dişîne. protobuf bi rêya udp heta 127.0.0.1: 30002.

Heya nuha tu kesî van pakêtên UDP negirtiye an pêvajo nekiriye, lê ev bi tu awayî bandorek neyînî li lez û aramiya nivîsarên PHP-ya we nake.

Heya vê dawiyê, yekane serîlêdana ku dikaribû van pakêtên UDP-ê bigire û pêvajoyê bike ev bû pinba_engine. Danasîn"sade û kurt"Sazkirin xwesteka ku tu carî careke din bixwîne û vegere nav wê dilteng dike. Lîsteyên kilometreyî yên girêdayî hem navên pakêtan û hem jî navên bernameyan û girêdanên rûpelên takekesî yên bi sazkirina wan ve dihewîne, û yên girêdayî girêdanên xwe yên bi girêdanên din re hene. Dem û daxwaza tu kesî tune ku bi vê qirêjiyê re mijûl bibe.

Pêvajoya sazkirinê pinba2 nekir bi taybetî hêsantir.

Dibe ku rojekê mimkun be ku pinba10 bi yek an du fermanan were saz kirin û ne hewce ye ku meriv komek materyalê bixwîne da ku fêm bike ka meriv çawa wiya dike, lê heya nuha ne wusa ye.

Ger hûn pinba_engine saz bikin, wê hingê ev tenê nîvê şer e. Jixwe, bêyî pinboard hûn neçar in ku xwe bi daneyên çend hûrdemên paşîn ve sînordar bikin, an jî hûn ê bi xwe daneyan berhev bikin, hilînin û dîmen bikin. Baş e ku pinboard bi karanîna pir hêsan e lêkirinî.

Wusa dixuye, eger hemî metrîkên ji php-ê jixwe di formata protobuf de ji porta udp-ê re têne şandin û ya ku hûn hewce ne ev e ku hûn serîlêdanek binivîsin ku dê wan bigire û wan bixe nav cûreyek hilanînê, çima êşek wusa heye? Xuya ye, ew pêşdebirên ku bi vê ramanê derketin tavilê rûniştin ku ramanên xwe binivîsin, ku hin ji wan li GitHub bi dawî bûn.

Ya jêrîn nihêrînek çar projeyên çavkaniya vekirî ye ku metrîkan di hilanînê de tomar dike, ku ji van daneyan bi hêsanî dikare were vegerandin û xuyang kirin, mînakî, bi karanîna grafana.

olegfedoseev/pinba-server (November 2017)

Pêşkêşkara udp di rê de ye ku metrîkan li OpenTSDB tomar dike. Dibe ku heke hûn berê di projeya xwe de OpenTSDB bikar tînin, wê hingê ev çareserî dê li gorî we be, wekî din ez pêşniyar dikim ku wê derbas bikin.

olegfedoseev/pinba-influxdb (Hezîran 2018)

server udp li ser go, ji heman habrowser, ku vê carê metrîkan di InfluxDB de hilîne. Gelek proje jixwe ji bo çavdêriyê InfluxDB bikar tînin, ji ber vê yekê dibe ku ev çareserî ji bo wan bêkêmasî be.

Pros:

  • InfluxDB Ev rê dide metrîkên wergirtî berhev bikin, û piştî demek diyarkirî orîjînal jêbirin.

Bawer:

ClickHouse-Ninja/Proton (Çile 2019)

Pêşkêşkara udp di rê de, ku metrîkan di ClickHouse de tomar dike. Ev çareseriya hevalê min e. Piştî ku min pê nas kir bû ku min biryar da ku ew dem e ku ez Pinbu û Clickhouse bigirim.

Pros:

  • Clickhouse ji bo peywirên weha îdeal e; ew dihêle hûn daneyan ew qas berhev bikin ku hûn dikarin hemî daneyên xav jî bêyî berhevokan hilînin.
  • heke hewce be, hûn dikarin bi hêsanî metrîkên encam berhev bikin
  • şablonê amade ji bo grafana
  • agahdariya li ser demjimêran tomar dike

Bawer:

  • xeletiya mirinê
  • Mîhengek tune ku hûn tê de navê databas û tabloyan, navnîşan û porta serverê mîheng bikin.
  • dema ku daneya xav hilîne, tabloyek ferhengê ya alîkar ji bo hilanîna navnîşanên rûpel û domainê tê bikar anîn, ku ev yek pirsên paşerojê tevlihev dike.
  • tiştên piçûk ên din ên ku ji minusa yekem peyda dibin

pinba-server/pinba-server (Nîsana 2019)

Pêşkêşkara udp di php-ê de, ku metrîkan di ClickHouse de tomar dike. Ev çareseriya min e, ku encama naskirina pinba, ClickHouse û protobuf e. Dema ku min tevahiya vê komê ji hev veqetand, min "delîlek têgehê" nivîsî, ku ji bo min neçaverêkirî, çavkaniyên girîng nexwar (30 MB RAM û ji% 1 kêmtir ji yek ji heşt navikên pêvajoyê), ji ber vê yekê min biryar da ku bi raya giştî re parve bike.

Avantajên wekî çareseriya berê ne, min navên asayî yên ji pinba_engine orjînal jî bikar anîn. Min di heman demê de konfigurasyonek lê zêde kir ku dihêle hûn bi yekcarî çend mînakên servera pinbase bidin destpêkirin da ku metrîkan di tabloyên cihêreng de hilînin - ev bikêr e heke hûn dixwazin daneyan ne tenê ji php, lê di heman demê de ji nginx jî berhev bikin.
Dezawantaj - "qisûra kujer" û ew tiştên piçûk ên ku dê bi kesane ne li gorî we nebin, lê çareseriya min "wek çîpek hêsan e" û tenê ji 100 rêzikên kodê pêk tê, ji ber vê yekê her pêşdebirek PHP dikare tiştê ku jê hez nake biguhezîne. di çend deqeyan de.

Ku çawa dixebite

Li porta UDP 30002 tê guhdarî kirin. Hemî pakêtên hatinî li gorî nexşeya protobuf têne deşîfrekirin û berhev kirin. Deqeyekê carekê, pakêtek têxe nav klîkhouseê di tabloya pinba.requests de. (hemû pîvan di nav de têne mîheng kirin config)

Piçek li ser clickhouse

Clickhouse motorên hilanîna daneyên cihêreng piştgirî dike. Ya ku herî zêde tê bikar anîn MergeTree ye.

Ger di demekê de we biryar da ku hûn daneyên berhevkirî ji bo her dem, û daneyên xav tenê ji bo ya paşîn hilînin, wê hingê hûn dikarin bi komkirinê re dîmenek materyalî biafirînin, û bi periyodîk tabloya sereke pinba.requests paqij bikin, dema ku hemî dane dê di nav de bimînin. dîtina maddî. Digel vê yekê, dema ku tabloya pinba.requests diafirîne, hûn dikarin "motor = Null" diyar bikin, wê hingê daneyên xav çu carî li ser dîskê nayê hilanîn, û di heman demê de ew ê hîn jî di dîtina materyalî de biqede û bi hev re were hilanîn. . Ez vê nexşeyê ji bo metrîkên nginx bikar tînim, ji ber ku li ser nginx ji php-ê 50 carî zêdetir daxwazên min hene.

Ji ber vê yekê, hûn rêyek dûr û dirêj hatine û ez naxwazim we nîvco bihêlim, ji ber vê yekê ya ku li jêr tê ravekirinek berfireh a sazkirin û veavakirina çareseriya min û her tiştê ku hûn hewce ne, û her weha xefikên ku bûne sedema zêdetirî yek keştiyê ye. qeza kirin. Tevahiya pêvajoya sazkirinê ji bo Ubuntu 18.04 LTS û Centos 7 tête diyar kirin; dibe ku pêvajo li ser belavkirin û guhertoyên din hinekî cûda bibe.

mîhengê

Min hemû fermanên pêwîst xiste hundir dockerfile ji bo hêsankirina dubarekirina talîmatan. Tenê xeletî dê li jêr werin vegotin.

php-pinba

Piştî sazkirinê, pê ewle bin ku we di pelê /etc/php/7.2/fpm/conf.d/20-pinba.ini de hemî vebijark bê şîrove kirin. Li ser hin belavkirinan (mînak centos) dibe ku ew bêne şîrove kirin.

extension=pinba.so
pinba.enabled=1
pinba.server=127.0.0.1:30002

clickhouse

Di dema sazkirinê de, clickhouse dê ji we bixwaze ku şîfreyek ji bo bikarhênerê xwerû destnîşan bikin. Ji hêla xwerû, ev bikarhêner ji hemî IP-yan ve tê gihîştin, ji ber vê yekê heke we dîwarek agir li ser servera we tune, bê guman şîfreyek ji bo wê saz bikin. Ev jî piştî sazkirinê di pelê /etc/clickhouse-server/users.xml de dikare were kirin.

Her weha hêjayî gotinê ye ku clickhouse gelek portan bikar tîne, di nav de 9000. Ev port di hin belavkirinan de jî ji bo php-fpm tê bikar anîn (mînak, centos). Heke hûn berê vê portê bikar tînin, hûn dikarin wê di pelê /etc/clickhouse-server/config.xml de biguhezînin din.

grafana bi pêveka clickhouse

Piştî sazkirina Grafana, rêveberê têketinê û rêveberê şîfreyê bikar bînin. Dema ku hûn cara yekem têkevinê, Grafana dê ji we bixwaze ku şîfreyek nû saz bikin.

Dûv re, biçin menuya "+" -> import-ê û ji bo import jimareya dashboardê destnîşan bikin 10011. Min ev dashboard amade kir û bar kir da ku hûn nekarin careke din wê bi xwe bikin.

Grafana bi pêvekek partiya sêyemîn re xebata bi clickhouse re piştgirî dike, lê Grafana ji bo pêvekên partiya sêyemîn hişyarî nake (ji bo çend salan bilêtek ji bo vê yekê heye).

pinba-server

Sazkirina protobuf û libevent vebijarkî ye, lê performansa pinba-server çêtir dike. Ger hûn pinba-server di peldankek ji bilî / opt de saz bikin, wê hingê hûn ê hewce bikin ku rast bikin script systemd dosî.

module pinba ji bo nginx

Ji bo berhevkirina modulek, hûn hewceyê kodên çavkaniyê yên heman guhertoya nginx-ê ku jixwe li ser servera we hatî saz kirin, û her weha heman vebijarkên berhevkirinê hewce ne, wekî din dê çêkirin serketî be, lê gava ku modulê girêdide, dê xeletiyek were avêtin ku "Module ne binerî ye." Vebijarkên berhevkirinê dikarin bi karanîna fermana nginx -V werin dîtin

Life hacks

Hemî malperên min tenê li ser https dixebitin. Qada schema bêwate dibe, ji ber vê yekê ez wê bikar tînim da ku tevn / konsolê veqetînim.

Di nivîsarên ku ji tevneyê têne gihîştin de ez bikar tînim:

if (ini_get('pinba.enabled')) {
    pinba_schema_set('web');
}

Û di nivîsarên konsolê de (mînak, nivîsarên cron):

if (ini_get('pinba.enabled')) {
    pinba_schema_set('console');
}

Di dashboarda min a li Grafana de ji bo dîtina statîstîkan veqetandî veguhezek tevn / konsolê heye.

Her weha hûn dikarin etîketên xwe ji Pinba re bişînin, mînakî:

pinba_tag_set('country', $countryCode);

Navê pêger.

Ji kerema xwe bersiva anketên li jêr gotarê bidin.

Wekî her car, ez we hişyar dikim ku ez bi peyamên kesane yên li ser Habr û torên civakî şîret û arîkariyê nakim.

Bilêtek li ser Github biafirînin.

Her weha ji kerema xwe bi ecibandinan piştgirî bikin Guhertoya Îngilîzî vê gotarê li ser reddit.

Tenê bikarhênerên qeydkirî dikarin beşdarî anketê bibin. Têketinji kerema xwe.

Hûn kîjan OS-ê li ser serverê bikar tînin?

  • Ubuntu

  • Red

  • Debian

  • Gentoo

  • Red Hat

  • Fedora

  • OpenSUSE

  • SWÎSRE

  • Unix

  • Windows

  • din

114 bikarhêneran deng dan. 11 bikarhêner jî betal bûn.

Hûn çi guhertoya php-ê li ser serverê bikar tînin?

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • din

105 bikarhêneran deng dan. 17 bikarhêner jî betal bûn.

We qet pinba bikar aniye?

  • erê

  • na, lê ez dixwazim

  • na û ez naxwazim

  • na û min nebihîstiye

100 bikarhêneran deng dan. 14 bikarhêner jî betal bûn.

Hûn dixwazin kîjan guhertoya servera Pinba biceribînin?

  • pinba_engine (motorê mysql)

  • pinba2 (motorê mysql)

  • pinboard (php + mysql)

  • olegfedoseev/pinba-server (go + OpenTSDB)

  • olegfedoseev/pinba-influxdb (çû + influxdb)

  • pinba-server/pinba-server (go + clickhouse)

  • pinba-server/pinba-server (php + clickhouse)

  • Ez ê bi xwe binivîsim

  • din

39 bikarhêneran deng dan. 47 bikarhêner jî betal bûn.

Source: www.habr.com

Add a comment