ProHoster > Blog > Administrasyon an > Estatistik ak siveyans nan script PHP an tan reyèl. ClickHouse ak Grafana vin ede Pinba
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.
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.
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.
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.
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.
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
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.
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.