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.
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-pinbaNë 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 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 . Përshkrimi "" 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 nuk u bë .
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 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ë .
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.
(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.
(qershor 2018)
server udp në go, nga i njëjti , 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 të grupohen metrikat e marra, ndërsa origjinali të fshihet pas një kohe të caktuar.
Disavantazhet:
- ky zgjidhje nuk ruan informacionin mbi timerat.
- InfluxDB do të ruajë adresat e faqeve të internetit si etiketat dhe nëse keni shumë adresa unike faqeje, kjo do të çojë në memorie. Nga një moment i caktuar, ai "«. ()
(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:
- 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ë.
(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ë )
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ë 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:30002clickhouse
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. . 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 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 këtë artikull .
Vetëm përdoruesit e regjistruar mund të marrin pjesë në anketë. , 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
