Estatistik ak siveyans nan script PHP an tan reyèl. ClickHouse ak Grafana vin ede Pinba

Nan atik sa a mwen pral di w ki jan yo sèvi ak pinba ak clickhouse ak grafana olye pou yo pinba_engine ak pinboard.

Sou yon pwojè PHP, pinba se petèt sèl fason serye pou konprann sa k ap pase ak pèfòmans. Se vre, pinba anjeneral aplike sèlman lè pwoblèm yo deja obsève epi li pa klè "kote yo fouye."

Souvan pesonn pa gen okenn lide konbyen fwa pa segonn / minit sa a oswa ki script yo rele epi yo kòmanse optimize "pa manyen", kòmanse nan kote sa yo ki sanble pi lojik.

Gen kèk analize mòso bwa nginx, pandan ke lòt moun analize demann baz done dousman.

Natirèlman, pinba pa ta initil, men gen plizyè rezon ki fè se pa chak pwojè genyen li.

Estatistik ak siveyans nan script PHP an tan reyèl. ClickHouse ak Grafana vin ede Pinba

Ak premye rezon an se enstalasyon.

Yo nan lòd yo plis oswa mwens jwenn kèk kalite "echapman" nan aplikasyon an nan Pinba, li trè dezirab yo wè mezi pa sèlman pou dènye minit yo, men tou sou yon peryòd tan ki long (ki soti nan jou rive nan mwa).

Pou sa ou bezwen:

  • enstale ekstansyon pou php (epi ou ta ka vle yon modil pou nginx)
  • konpile ekstansyon pou mysql
  • enstale pinboard ak konfigirasyon cron

Akòz ti kantite enfòmasyon sou Pinba, anpil moun gen enpresyon ke li te travay sèlman sou PHP5 epi li te yon bagay nan tan lontan, men kòm nou pral wè pita, sa a se pa ka.

Premye etap la se pi senp la, tout sa ou bezwen fè se kouri lòd la:

apt install php-pinba

Ekstansyon sa a disponib nan depo yo jiska e ki gen ladan php 7.3 epi ou pa bezwen konpile anyen.

Apre egzekite lòd enstalasyon an, nou imedyatman resevwa yon ekstansyon k ap travay ki kolekte epi voye mezi pou chak script (tan kouri, memwa, elatriye) nan fòma a. protobuf atravè udp pou 127.0.0.1:30002.

Jiskaprezan pèsonn pa te kenbe oswa trete pake UDP sa yo, men sa pa gen okenn efè negatif sou vitès oswa estabilite script PHP ou yo.

Jiska dènyèman, aplikasyon an sèlman ki te kapab trape ak trete pake UDP sa yo te pinba_engine. Deskripsyon "senp ak kout"Enstalasyon dekouraje dezi a tout tan tout tan li ak fouye nan li ankò. Lis depandans kilomèt longè yo genyen tou de non pakè yo ak non pwogram yo ak lyen ki mennen nan paj endividyèl ak enstalasyon yo, ak sa yo ki gen lyen pwòp yo nan lòt depandans. Pa gen moun ki gen tan oswa anvi fè fas ak krap sa a.

Enstalasyon pwosesis pinba2 pa t ' sitou pi fasil.

Petèt yon jou li pral posib enstale pinba10 ak youn oswa de kòmandman epi yo pa bezwen li yon pakèt moun sou materyèl yo konprann ki jan fè li, men pou kounye a sa a se pa ka a.

Si ou enstale pinba_engine, Lè sa a, sa a se sèlman mwatye batay la. Apre yo tout, san yo pa tablo fichye ou pral oblije limite tèt ou a done ki soti nan jis kèk minit yo, oswa ou pral oblije total, estoke, ak vizyalize done yo tèt ou. Li bon ke pinboard se byen senp pou itilize enstalasyon.

Li ta sanble, poukisa soufrans sa yo si tout mezi yo soti nan php yo deja voye nan pò a udp nan fòma protobuf ak tout sa ou bezwen se ekri yon aplikasyon ki pral trape yo epi mete yo nan yon kalite depo? Aparamman, devlopè sa yo ki te vini ak lide sa a imedyatman te chita pou yo ekri pwòp lide yo, kèk nan yo ki te fini sou GitHub.

Sa ki anba la a se yon apèsi sou kat pwojè sous louvri ki sove mezi nan depo, ki soti nan ki done sa yo ka fasilman rekipere ak vizyalize, pou egzanp, lè l sèvi avèk grafana.

olegfedoseev/pinba-sèvè (Novanm 2017)

udp sèvè sou ale ki sove metrik nan OpenTSDB. Petèt si w ap deja itilize OpenTSDB nan pwojè ou a, Lè sa a, solisyon sa a pral kostim ou, otreman mwen rekòmande pase li.

olegfedoseev/pinba-influxdb (jen 2018)

udp sèvè sou ale, soti nan menm bagay la navigatè, ki fwa sa a estoke mezi yo nan InfluxDB. Anpil pwojè yo deja itilize InfluxDB pou siveyans, kidonk solisyon sa a ka pafè pou yo.

Pou:

  • InfluxDB pèmèt total mezi resevwa yo, epi efase orijinal la apre yon tan espesifye.

Kont:

ClickHouse-Ninja/Proton (janvye 2019)

udp sèvè sou ale, ki sove mezi nan ClickHouse. Sa se solisyon zanmi m. Se apre mwen te fin fè konesans ak li ke mwen te deside ke li te tan yo pran sou Pinbu ak Clickhouse.

Pou:

  • Clickhouse se ideyal pou travay sa yo; li pèmèt ou konprese done anpil ke ou ka estoke tout done yo anvan tout koreksyon menm san yo pa agrégasyon.
  • si sa nesesè, ou ka fasilman rasanble mezi ki kapab lakòz yo
  • modèl pare pou grafana
  • sove enfòmasyon sou revèy yo

Kont:

  • defo fatal
  • pa gen okenn konfigirasyon kote ou ka configured non baz done a ak tab, adrès ak pò sèvè a.
  • lè yo estoke done anvan tout koreksyon, yo itilize yon tab diksyonè oksilyè pou estoke adrès paj ak domèn, sa ki konplike demann ki vin apre yo.
  • lòt ti bagay ki swiv soti nan premye mwens

pinba-sèvè/pinba-sèvè (avril 2019)

udp sèvè nan php, ki sove mezi nan ClickHouse. Sa a se solisyon mwen an, ki se rezilta nan vin konnen pinba, ClickHouse ak protobuf. Pandan m t ap regle tout pakèt sa a, mwen te ekri yon "prèv konsèp", ki, san atann pou mwen, pa t 'konsome resous enpòtan (30 MB RAM ak mwens pase 1% youn nan uit nwayo processeur yo), kidonk mwen deside pataje li ak piblik la.

Avantaj yo se menm jan ak solisyon anvan an, mwen menm mwen te itilize non abityèl yo soti nan pinba_engine orijinal la. Mwen te ajoute tou yon konfigirasyon ki pèmèt ou lanse plizyè egzanp sèvè pinbase alafwa pou konsève pou mezi nan diferan tab - sa a itil si ou vle kolekte done pa sèlman nan php, men tou, nan nginx.
Dezavantaj - "defo fatal" ak ti bagay sa yo ki pa pral kostim ou pèsonèlman, men solisyon mwen an se "senp tankou yon pantouf" epi li konsiste de sèlman apeprè 100 liy kòd, kidonk nenpòt pwomotè PHP ka chanje sa li pa renmen. nan yon koup de minit.

Prensip de operasyon

Yo koute pò UDP 30002. Tout pake fèk ap rantre yo dekode dapre konplo protobuf la epi yo rasanble. Yon fwa pa minit, yo mete yon pake nan clickhouse la nan tablo pinba.requests la. (tout paramèt yo configuré nan konfigirasyon)

Yon ti kras sou clickhouse

Clickhouse sipòte diferan motè depo done. Youn ki pi souvan itilize a se MergeTree.

Si nan kèk pwen ou deside estoke done total pou tout tan, ak done anvan tout koreksyon sèlman pou dènye a, Lè sa a, ou ka kreye yon View materyalize ak gwoupman, epi detanzantan netwaye tablo prensipal la pinba.requests, pandan y ap tout done yo ap rete nan la. vi materyalize. Anplis, lè w ap kreye tab la pinba.requests, ou ka presize "motè = Nil", Lè sa a, done yo anvan tout koreksyon yo pa pral sove sou disk nan tout, epi an menm tan an li ap toujou fini nan gade nan materyalize epi yo dwe sove total. . Mwen itilize konplo sa a pou mezi nginx, paske sou nginx mwen gen 50 fwa plis demann pase sou php.

Kidonk, ou te vini yon fason lontan epi mwen pa ta renmen kite ou mwatye, kidonk sa ki anba a se yon deskripsyon detaye sou enstalasyon an ak konfigirasyon nan solisyon mwen an ak tout sa ou bezwen, osi byen ke enkonvenyans yo ki te lakòz plis pase yon bato. fè aksidan. Tout pwosesis enstalasyon an dekri pou Ubuntu 18.04 LTS ak Centos 7; pwosesis la ka diferan yon ti kras sou lòt distribisyon ak vèsyon.

Enstalasyon

Mwen mete tout kòmandman ki nesesè yo dockerfile pou fasilite repwodiksyon enstriksyon yo. Se sèlman enkonvenyans yo pral dekri anba a.

php-pinba

Apre enstalasyon, asire w ke nan /etc/php/7.2/fpm/conf.d/20-pinba.ini fichye a ou te dekomantè tout opsyon yo. Sou kèk distribisyon (egzanp centos) yo ka fè kòmantè soti.

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

clickhouse

Pandan enstalasyon, clickhouse ap mande w pou mete yon modpas pou itilizatè default la. Pa default, itilizatè sa a aksesib nan tout IP, kidonk si ou pa gen yon firewall sou sèvè ou a, asire w ke ou mete yon modpas pou li. Sa a ka fè tou apre enstalasyon nan /etc/clickhouse-server/users.xml fichye a.

Li se tou vo sonje ke clickhouse itilize plizyè pò, ki gen ladan 9000. Se pò sa a tou itilize pou php-fpm nan kèk distribisyon (pa egzanp, centos). Si ou deja itilize pò sa a, ou ka chanje li nan yon lòt nan /etc/clickhouse-server/config.xml fichye a.

grafana ak plugin clickhouse

Apre enstale Grafana, sèvi ak admin login ak admin modpas. Lè w konekte pou premye fwa, Grafana ap mande w pou w mete yon nouvo modpas.

Apre sa, ale nan "+" -> enpòte meni epi endike nimewo tablodbò a pou enpòte 10011. Mwen prepare ak telechaje tablodbò sa a pou ou pa bezwen fè li tèt ou ankò.

Grafana sipòte travay ak clickhouse atravè yon plugin twazyèm pati, men Grafana pa gen alèt pou grefon twazyèm pati (te gen yon tikè pou sa a pandan plizyè ane).

pinba-sèvè

Enstale protobuf ak libevent se opsyonèl, men amelyore pèfòmans pinba-sèvè. Si ou enstale pinba-server nan yon katab ki pa /opt, Lè sa a, w ap bezwen tou korije script systemd dosye.

modil pinba pou nginx

Pou konpile yon modil, ou bezwen kòd sous nan menm vèsyon an nan nginx ki deja enstale sou sèvè ou a, osi byen ke menm opsyon yo konpilasyon, otreman bati a pral gen siksè, men lè konekte modil la, yo pral jete yon erè ki "modil la pa binè konpatib." Opsyon konpilasyon yo ka wè lè l sèvi avèk lòd la nginx -V

Lavi antay

Tout sit mwen yo travay sèlman sou https. Jaden chema a vin san sans, kidonk mwen sèvi ak li pou separe entènèt/konsole.

Nan scripts ki aksesib sou entènèt la mwen itilize:

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

Ak nan scripts konsole (pa egzanp, scripts cron):

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

Nan tablodbò mwen an nan Grafana gen yon switch entènèt / konsole pou gade estatistik separeman.

Ou kapab tou voye tags ou yo bay Pinba, pa egzanp:

pinba_tag_set('country', $countryCode);

Se tout.

Tanpri reponn sondaj ki anba atik la.

Kòm dabitid, mwen avèti ou ke mwen pa konseye oswa ede atravè mesaj pèsonèl sou Habr ak rezo sosyal yo.

Kreye yon tikè sou Github.

Tanpri sipòte tou ak like vèsyon angle Atik sa sou reddit.

Se sèlman itilizatè ki anrejistre ki ka patisipe nan sondaj la. Enskri, tanpri.

Ki OS w ap itilize sou sèvè a?

  • Ubentu

  • CentOS

  • dbyan

  • Gentoo

  • Wouj Hat

  • Feutr

  • OpenSUSE

  • SWITZERLAND

  • UNIX

  • Windows

  • lòt

114 itilizatè yo te vote. 11 itilizatè te absteni.

Ki vèsyon php w ap itilize sou sèvè a?

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • lòt

105 itilizatè yo te vote. 17 itilizatè te absteni.

Èske w te janm itilize pinba?

  • repons lan se wi

  • non, men mwen ta renmen

  • non e mwen pa ta vle

  • non epi yo poko tande pale de li

100 itilizatè yo te vote. 14 itilizatè te absteni.

Ki vèsyon sèvè Pinba ou ta renmen eseye?

  • pinba_engine (motè mysql)

  • pinba2 (motè mysql)

  • pinboard (php + mysql)

  • olegfedoseev/pinba-server (ale + OpenTSDB)

  • olegfedoseev/pinba-influxdb (ale + influxdb)

  • pinba-sèvè/pinba-sèvè (ale + clickhouse)

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

  • Mwen pral ekri mwen menm

  • lòt

39 itilizatè yo te vote. 47 itilizatè te absteni.

Sous: www.habr.com

Add nouvo kòmantè