Statistika dhe monitorimi i skripteve PHP në kohë reale. ClickHouse dhe Grafana vijnë në ndihmë të Pinba

Në këtë artikull do të flas për përdorimin e pinba në bashkëpunim me clickhouse dhe grafana në vend të pinba_engine dhe pinboard.

Në projektin php, pinba është ndoshta mënyra e vetme e besueshme për të kuptuar se çfarë po ndodh me performancën. Megjithatë, zakonisht pinba zbatohet vetëm në momentin kur fillojnë të shfaqen probleme dhe nuk dihet «ku të gërmohet».

Shpesh askush nuk ka ide se sa herë në sekondë/minutë ftohet një skenar dhe fillojnë optimizimet «me ndjesi», duke filluar nga ato vende që duken më logjike.

Disa analizojnë loget nginx, ndërsa disa të tjerë kërkesat e ngadalta në db.

Sigurisht që pinba nuk do të ishte e tepërt, por ka disa arsye pse ajo nuk është në çdo projekt.

Statistika dhe monitorimi i skripteve PHP në kohë reale. ClickHouse dhe Grafana vijnë në ndihmë të Pinba

Arsyeja e parë është instalimi.

Për të marrë ndonjë lloj «rezultati» nga implementimi i pinbës, është shumë e dëshirueshme të shihet metrikat jo vetëm për minutat e fundit, por edhe për një periudhë më të gjatë kohe (nga ditë në muaj).

Për këtë është e nevojshme:

  • tĂ« instaloni njĂ« ekstension pĂ«r php (dhe ndoshta do tĂ« dĂ«shironit njĂ« modul pĂ«r nginx)
  • tĂ« kompiloni ekstensionin pĂ«r mysql
  • tĂ« instaloni pinboard dhe tĂ« konfiguroni cron

PĂ«r shkak tĂ« informacionit tĂ« pamjaftueshĂ«m rreth pinbĂ«s, shumĂ« janĂ« krijuar pĂ«rshtypjen se ajo punonte vetĂ«m nĂ« php5 dhe ka mbetur nĂ« tĂ« kaluarĂ«n, por siç do tĂ« shohim mĂ« vonĂ« — kjo nuk Ă«shtĂ« e vĂ«rtetĂ«.

Hapi i parĂ« — mĂ« i lehti, vetĂ«m duhet tĂ« ekzekutoni komandĂ«n:

apt install php-pinba

Në depo, ky ekstension është deri në php 7.3 përfshirë dhe nuk keni nevojë të kompilon ndonjë gjë.

Pas ekzekutimit të komandës së instalimit, ne menjëherë marrim një zgjerim të punës, i cili mbledh dhe dërgon metrikat e çdo skripti (koha e ekzekutimit, memoria, etj.) në formatin protobuf në udp në 127.0.0.1:30002.

Këto paketa udp ende nuk ka kush i kap dhe i përpunon, por kjo nuk ndikon aspak në shpejtësinë apo stabilitetin e punës së skripteve tuaja php.

Derisa së fundmi si aplikacion, i cili mund të kapë dhe përpunojë këto paketa udp ishte vetëm pinba_engine. Përshkrimi "i thjeshtë dhe konciz" i instalimeve e ndalon dëshirën për ta lexuar dhe për tu angazhuar përsëri. Në listat kilometrike të varësive ka si emra paketash ashtu edhe emra programesh dhe lidhje në faqet e veçanta për instalimin e tyre, dhe ato kanë lidhje të tjera për varësi të tjera. Askush nuk ka kohë ose dëshirë për të kuptuar këtë kaos.

Procesi i instalimit pinba2 nuk u bë veçanërisht më i lehtë.

Ndoshta ndonjëherë pinba10 do të mund të instalohet me një ose dy komanda dhe pa lexuar një grumbull materialesh për të kuptuar si ta bësh, por për momentin nuk është kështu.

Nëse megjithatë keni instaluar pinba_engine, kjo është vetëm gjysma e punës. Sepse pa pinboard do t'ju duhet të kufizoheni me të dhënat vetëm për minutat e fundit ose të gruponi vetë, ruani dhe vizualizoni të dhënat. E mira është se pinboard është mjaft e thjeshtë në instalimin.

Duket se, pse të duroni një mundim të tillë nëse të gjitha metrikat nga php tashmë shkojnë në portin udp në formatin protobuf dhe gjithçka që nevojitet është të shkruhet një aplikacion që do t'i kapë dhe t'i ruajë në ndonjë magazinë? Duket se atyre zhvillueseve që kjo mendim iu ka shkuar nëpër mendje, menjëherë janë ulur për të shkruar biçikletat e tyre, disa prej të cilave arritën në github.

Më pas ndjek një përmbledhje të katër projekteve open source, të cilat ruajnë metrikat në magazina, nga të cilat të dhënat janë lehtësisht të aksesueshme dhe të vizualizueshme, për shembuj, me ndihmën e grafana.

olegfedoseev/pinba-server (nëntor 2017)

server udp në go, i cili ruan metrikat në OpenTSDB. Ndoshta nëse OpenTSDB është tashmë përdorur në projekt, atëherë ky zgjidhje do t'ju përshtatet ndryshe, rekomandoj të kaloni larg.

olegfedoseev/pinba-influxdb (qershor 2018)

server udp në go, nga i njëjti habrayuser, i cili këtë herë ruan metrikat në InfluxDB. Në shumë projekte për monitorimin tashmë po përdoret InfluxDB, kështu që për ta kjo zgjidhje mund të përshtatet shumë mirë.

Avantazhet:

  • InfluxDB lejon tĂ« grupohen metrikat e marra, ndĂ«rsa origjinali tĂ« fshihet pas njĂ« kohe tĂ« caktuar.

Disavantazhet:

ClickHouse-Ninja/Proton (janar 2019)

server udp në go, i cili ruan metrikat në ClickHouse. Ky zgjidhje është nga shoku im. Pikërisht pas njohjes me të, vendosa se ishte koha të merrem me pinbën dhe clickhouse.

Avantazhet:

  • clickhouse pĂ«rshtatet perfekt pĂ«r kĂ«to detyra, ai lejon tĂ« kompresosh tĂ« dhĂ«nat aq shumĂ«, saqĂ« mund tĂ« ruash tĂ« gjitha tĂ« dhĂ«nat e papĂ«rpunuara edhe pa agregime
  • nĂ«se nevojitet, mund tĂ« gruposh metrikat e marra lehtĂ«sisht
  • njĂ« model tĂ« gatshĂ«m pĂ«r grafana
  • ruan informacionin mbi timerat

Disavantazhet:

  • mangĂ«si fatale
  • nuk ka asnjĂ« konfigurim ku mund tĂ« caktohet emri i bazĂ«s sĂ« tĂ« dhĂ«nave dhe tabelave, adresa dhe porta e serverit.
  • kur ruani tĂ« dhĂ«na tĂ« papĂ«rpunuara, pĂ«rdoret njĂ« tabelĂ« ndihmĂ«se pĂ«r ruajtjen e adresave tĂ« faqeve dhe domainĂ«ve, gjĂ« qĂ« e komplikon mĂ« vonĂ« kĂ«rkesat.
  • detaje tĂ« tjera tĂ« vogla qĂ« rrjedhin nga minus i parĂ«.

pinba-server/pinba-server (prill 2019)

serveri UDP në PHP, i cili ruan metrikat në ClickHouse. Ky është zgjidhja ime, që është rezultati i njohjes me pinba, ClickHouse dhe protobuf. Ndërsa po merresha me të gjithë këtë lidhje, shkrova një 'provë koncepti', e cila për habinë time nuk konsumonte burime të konsiderueshme (30 MB RAM dhe nën 1% të një prej tetë bërthamave të procesorit), për këtë arsye vendosa ta ndaj atë me publikun.

PĂ«rparĂ«sitĂ« janĂ« tĂ« njĂ«jta si ato tĂ« zgjidhjes sĂ« mĂ«parshme, gjithashtu kam pĂ«rdorur emrat e njohur nga pinba_engine origjinale. Gjithashtu, kam shtuar njĂ« konfigurim qĂ« lejon tĂ« filloni menjĂ«herĂ« disa instanca tĂ« serverit pinba pĂ«r tĂ« ruajtur metrikat nĂ« tabela tĂ« ndryshme — kjo Ă«shtĂ« e dobishme nĂ«se dĂ«shironi tĂ« mbledhni tĂ« dhĂ«na jo vetĂ«m nga PHP, por edhe nga Nginx.
Minuset — 'mangĂ«si fatale' dhe ato detaje qĂ« ndoshta nuk do t'ju pĂ«lqejnĂ«, por zgjidhja ime Ă«shtĂ« 'e thjeshtĂ« si sandali' dhe pĂ«rbĂ«het vetĂ«m nga rreth 100 rreshta kodi, kĂ«shtu qĂ« çdo zhvillues PHP mund tĂ« bĂ«jĂ« disa ndryshime pĂ«r disa minuta.

Parimi i funksionimit

Porti UDP 30002 dëgjohet. Të gjitha paketat e ardhshme dekodohen sipas skemës protobuf dhe grumbullohen. Një herë në minutë bëhet një futur grupi në ClickHouse në tabelën pinba.requests. (të gjitha parametrat janë të konfigurueshëm në konfigurim)

Pak për ClickHouse

ClickHouse mbĂ«shtet engine tĂ« ndryshme pĂ«r ruajtjen e tĂ« dhĂ«nave. MĂ« sĂ« shpeshti pĂ«rdoret — MergeTree.

Nëse ndonjëherë vendosni të ruani të dhëna të grumbulluara për gjithë kohën, ndërsa ato të papërpunuara vetëm për të fundit, mund të krijoni një pamje të materializuar me grupim, ndërsa tabela kryesore pinba.requests pastaj do të pastrohet periodikisht, duke ruajtur të gjitha të dhënat në pamjen e materializuar. Më shumë, kur krijoni tabelën pinba.requests mund të tregoni 'engine = Null', kështu që të dhënat e papërpunuara nuk ruhen në disk dhe megjithatë ato do të përfshihen në pamjen e materializuar dhe të ruhen të grumbulluara. Unë përdor një skemë të tillë për metrikat Nginx, sepse kam rreth 50 herë më shumë kërkesa në Nginx sesa në PHP.

Kështu, keni kaluar një rrugë të gjatë dhe nuk do të doja t'ju lija në mes të rrugës, kështu që tani do të jepet një përshkrim i detajuar i instalimit dhe konfigurimit të zgjidhjes time dhe gjithçka që do t'ju nevojitet, si dhe pengesat, ndaj të cilave janë përplasje shumë anije. I gjithë procesi i instalimit është përshkruar për Ubuntu 18.04 LTS dhe CentOS 7, në shpërndarje dhe versione të tjera, procesi mund të ndryshojë pak.

Instalimi

Të gjitha komandat e nevojshme i kam nxjerrë në Dockerfile për të lehtësuar riprodhimin e instrukcioneve. Më poshtë do të përshkruhen vetëm pengesat.

php-pinba

Pas instalimit, sigurohuni që në skedarin /etc/php/7.2/fpm/conf.d/20-pinba.ini të keni të komentuar të gjitha opsionet. Në disa shpërndarje (për shembull, CentOS) ato mund të jenë të komentuar.

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

clickhouse

Gjatë instalimit të ClickHouse, do të kërkohet të vendosni një fjalëkalim për përdoruesin default. Në mënyrë të paracaktuar ky përdorues është i qasshëm nga të gjitha IP-të, kështu që nëse nuk keni një firewall në serverin tuaj, sigurohuni ta caktoni një fjalëkalim. Kjo mund të bëhet gjithashtu pas instalimit në skedarin /etc/clickhouse-server/users.xml.

Gjithashtu është e rëndësishme të mbani parasysh se ClickHouse përdor disa porte, përfshirë 9000. Ky port gjithashtu përdoret për PHP-FPM në disa shpërndarje (për shembull, CentOS). Nëse ky port është tashmë i përdorur, mund ta rregulloni në një tjetër në skedarin /etc/clickhouse-server/config.xml.

Grafana me plugin për ClickHouse

Pas instalimit të Grafana, përdorni login admin dhe fjalëkalimin admin. Në hyrjen e parë, Grafana do t'ju kërkojë të caktoni një fjalëkalim të ri.

Më pas shkojmë në menunë "+" -> import dhe tregojmë numrin e dashboard-it për import. 10011. Ky dashboard e kam përgatitur dhe ngarkuar, në mënyrë që të mos keni nevojë ta bëni sërish atë të vetë.

Grafana mbështet punën me ClickHouse përmes një plugin të jashtëm, por për pluginët e jashtëm, Grafana nuk punon me alerte (biletë për këtë prej vitesh).

pinba-server

Instalimi i protobuf dhe libevent — nuk Ă«shtĂ« i detyrueshĂ«m, por pĂ«rmirĂ«son performancĂ«n e pinba-server. NĂ«se e instaloni pinba-server nĂ« njĂ« mapĂ« tjetĂ«r pĂ«rveç /opt, do t'ju duhet gjithashtu tĂ« rregulloni skrypin systemd skedarin.

moduli pinba për Nginx

Për të kompaktuar modul, nevojiten burimet e po asaj versioni të Nginx që është tashmë i instaluar në serverin tuaj, si dhe të njëjtat opsione kompaktimi, përndryshe ndërtimi do të kalojë me sukses, por kur të lidhet moduli do të jepet një gabim se 'moduli nuk është i përputhshëm'. Opsionet e kompaktimit mund të shihen me komandën nginx -V.

Lifehacks

Të gjitha faqet e mia funksionojnë vetëm mbi https. Polin schema e bënë pa kuptim, prandaj e përdor për të ndarë web/console.

Në skriptet që janë të disponueshme nga web-i përdor:

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

Dhe në ato në konsolë (p.sh., skriptet cron):

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

Në panelin tim në Grafana ka një ndërrues web/console për të parë statistikat veçmas.

Po ashtu, në Pinba mund të kaloni etiketat tuaja, p.sh.:

pinba_tag_set('country', $countryCode);

Kaq ishte gjithçka.

Ju lutem, përgjigjuni anketave nën artikull.

Tradicionalisht paralajmëroj që nuk jap këshilla dhe nuk ndihmoj përmes mesazheve personale në Habra dhe rrjetet sociale.

Hapni një biletë në GitHub.

Gjithashtu, ju lutem mbështetni me pëlqime versionin anglisht këtë artikull në Reddit.

Vetëm përdoruesit e regjistruar mund të marrin pjesë në anketë. Hyni, ju lutemi.

Cilën OS po përdorni në server?

  • Ubuntu

  • CentOS

  • Debian

  • Gentoo

  • Red Hat

  • Fedora

  • OpenSUSE

  • SuSE

  • Unix

  • Windows

  • tjetĂ«r

114 përdorues kanë votuar. 11 përdorues janë abstenuar.

Cilën version të PHP po përdorni në server?

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • tjetĂ«r

105 përdorues kanë votuar. 17 përdorues janë abstenuar.

A e keni përdorur ndonjëherë pinba?

  • po

  • jo, por do tĂ« doja

  • jo dhe nuk doja

  • jo dhe nuk kam dĂ«gjuar pĂ«r tĂ«

100 përdorues kanë votuar. 14 përdorues janë abstenuar.

Cilën version të serverit pinba do të donit të provoni?

  • pinba_engine (mysql engine)

  • pinba2 (mysql engine)

  • pinboard (php + mysql)

  • olegfedoseev/pinba-server (go + OpenTSDB)

  • olegfedoseev/pinba-influxdb (go + influxdb)

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

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

  • do tĂ« shkruaj versionin tim

  • tjetĂ«r

39 përdorues kanë votuar. 47 përdorues janë abstenuar.

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster