Në këtë artikull do flas për se si të përdorni pinba së bashku me clickhouse dhe grafana në vend të pinba_engine dhe pinboard.
Në projektin php, pinba është ndoshta e vetmja mënyrë e besueshme për të kuptuar se çfarë po ndodh me performancën. Megjithatë, zakonisht pinba implementohet vetëm kur tashmë janë vërejtur probleme dhe nuk është e qartë "ku të fillohet".
Shpesh askush nuk e ka idenë se sa herë në sekondë/minutë thirret një skenar i caktuar dhe fillojnë të optimizojnë "në gisht" duke filluar nga ato vende që duket se janë më logjike.
Dikush analizon loget e nginx, ndërsa dikush tjetër kërkesat e ngadalta në bazën e të dhënave.
Sigurisht, pinba nuk do të ishte e padëshiruar, por ka disa arsye pse ajo nuk është e pranishme në çdo projekt.
Arsyeja e parë është instalimi.
Për të marrë ndonjë "rezultat" nga implementimi i pinbës, është shumë e dëshirueshme të shihen metrikat jo vetëm për minutat e fundit, por edhe për një periudhë më të gjatë (nga ditët deri në muajt).
Për këtë nevojitet:
- të instalohet 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-in
PĂ«r shkak tĂ« numrit tĂ« vogĂ«l tĂ« informacionit mbi pinba, shumicĂ«s i Ă«shtĂ« formuar pĂ«rshtypja se ajo funksiononte vetĂ«m nĂ« php5 dhe ka mbetur nĂ« tĂ« kaluarĂ«n, por siç do ta shohim mĂ« tej â kjo nuk Ă«shtĂ« e vĂ«rtetĂ«.
Hapi i parĂ« â mĂ« i thjeshtĂ«, thjesht duhet tĂ« ekzekutoni komandĂ«n:
apt install php-pinbaNë repository kjo ekstension është deri në php 7.3 përfshirë dhe nuk keni nevojë të kompilonit asgjë.
Pas ekzekutimit të komandës së instalimit, menjëherë marrim një ekstension që funksionon, i cili mbledh dhe dërgon metrike për çdo skenar (kohëzgjatjen e punës, kujtesën etj.) në formatin përmes udp në 127.0.0.1:30002.
Këto paketa udp për momentin askush nuk i kap dhe nuk i përpunon, por kjo nuk ndikon aspak negativisht në shpejtësi ose stabilitetin e funksionimit të skenarëve tuaj php.
Derisa kohët e fundit, aplikacioni që mund të kapte dhe përpunonte këto paketa udp ishte vetëm . Përshkrimi "" i instalimit e heq dëshirën për ta lexuar dhe përvetësuar ndonjëherë përsëri. Në lista kilometrike të varësive ka si emra paketash ashtu edhe emra programesh dhe lidhje për faqe të veçanta me instalimin e tyre, dhe ato kanë lidhjet e tyre për varësi të tjera. Askush nuk ka kohën ose dëshirën për t'u marrë me këtë kaos.
Procesi i instalimit nuk u bë .
Mund të vijë një moment kur pinba10 do të mund të instalohet me një ose dy komanda pa pasur nevojë të lexosh shumë materiale për të kuptuar si ta bësh këtë, por për momentin nuk është kështu.
Nëse ndonjëherë e keni instaluar pinba_engine, atëherë kjo është vetëm gjysma e punës. Sepse pa do t'ju duhet të kufizoheni në të dhënat vetëm për minutat e fundit ose të angazhoheni për të grumbulluar, ruajtur dhe vizualizuar të dhënat. Fatmirësisht, pinboard është mjaft i thjeshtë në .
Duket se, përse të kalosh nëpër kaq vuajtje kur të gjitha metrikat nga php shkojnë përmes portit udp në formatin protobuf dhe e gjithë ajo që është e nevojshme është të shkruash një aplikacion që do t'i kapë dhe t'i ruajë në një depo? Më duket se ato zhvillues që kanë pasur këtë mendim e kanë vendosur menjëherë të fillojnë të shkruajnë biçikletat e tyre, disa prej të cilave përfunduan në GitHub.
Më poshtë është një përmbledhje e katër projekteve open-source që ruajnë metrikat në depo, nga të cilat këto të dhëna lehtë mund të merren dhe vizualizohen, për shembull, me ndihmën e grafana.
(nëntor 2017)
server udp në go, që ruan metrikat në OpenTSDB. Më duket se nëse OpenTSDB po përdoret tashmë në projektin tuaj, atëherë ky zgjidhje mund t'ju përshtatet, përndryshe rekomandoj ta kaloni përpara.
(qershor 2018)
server udp në go, nga i njëjti , i cili këtë herë ruan metrikat në InfluxDB. Në shumë projekte për monitorim, InfluxDB tashmë po përdoret, prandaj për to ky zgjidhje mund të jetë shumë i përshtatshëm.
Avantazhet:
- InfluxDB grumbulloni metrikat e marra dhe fshini origjinalin pas një kohe të caktuar.
Disavantazhet:
- ky zgjidhje nuk ruan informacion mbi timerët.
- InfluxDB do të ruajë adresat e faqeve të internetit si etiketa dhe nëse keni shumë adresa unike faqe, kjo do të çojë në të memories operative. Nga një moment e tutje ai do të "«. ()
(janar 2019)
server udp në go, që ruan metrikat në ClickHouse. Ky është një zgjidhje nga miku im. Pikërisht pas njohjes me të, vendosa se ishte koha të merrem me pinbu dhe ClickHouse.
Avantazhet:
- ClickHouse është perfekt për këtë lloj pune, ai lejon kompresimin e të dhënave aq shumë saqë mund të ruani të gjitha të dhënat e papërpunuara madje edhe pa grumbullime
- nëse është e nevojshme, atëherë mund të grumbulloni lehtësisht metrikat e marra
- mënyrë të gatshme për grafana
- ruan informacion mbi timerët
Disavantazhet:
- nuk ka konfigurim në të cilin mund të rregullohet emri i databazës dhe tabelave, adresën dhe portin e serverit.
- kur ruani të dhënat e papërpunuara përdoret një tabelë ndihmëse për ruajtjen e adresa e faqeve dhe domenëve, gjë që e bën të komplikuar më vonë kërkesat
- detaje të tjera të vogla që rrjedhin nga minus i parë
(prill 2019)
server udp në php, i cili ruan metricat në ClickHouse. Kjo është zgjidhja ime, rezultati i njohjes me pinba, ClickHouse dhe protobuf. Ndërsa meresha me të gjithë këtë lidhje, shkrova një «proof of concept» që për çudi për mua nuk konsumonte burime të konsiderueshme (30 mb memorie operative dhe më pak se 1% nga një nga tetë bërthamat e procesorit), prandaj vendosa ta ndaj atë me publikun.
PlusĂ«t â janĂ« tĂ« njĂ«jta me zgjidhjen e mĂ«parshme, gjithashtu kam pĂ«rdorur emĂ«rtimet e zakonshme nga pinba_engine origjinale. Po ashtu kam shtuar njĂ« konfigurim qĂ« lejon nisjen e disa instancave tĂ« serverit pinba, pĂ«r tĂ« ruajtur metricat 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.
MinusĂ«t â «defekt fatal» dhe ato detaje tĂ« vogla qĂ« nuk do t'ju kĂ«naqin personalisht, por zgjidhja ime Ă«shtĂ« «e thjeshtĂ« si njĂ« sandale» dhe pĂ«rbĂ«het nga rreth 100 rreshta kodi, kĂ«shtu qĂ« çdo zhvillues php mund tĂ« ndryshojĂ« brenda pak minutash atĂ« qĂ« nuk i pĂ«lqen.
Parimi i funksionimit
Ndiqet porti udp 30002. TĂ« gjitha paketat e ardhshme dekodehen sipas skemĂ«s protobuf dhe agregohen. Ădo minutĂ« bĂ«het njĂ« insert grupi nĂ« clickhouse nĂ« tabelĂ«n pinba.requests. (tĂ« gjitha parametrat rregullohen nĂ« )
Pak rreth clickhouse
Clickhouse mbështet motorë të ndryshëm ruajtjeje të të dhënave. Më i përdoruri është MergeTree.
Nëse në ndonjë moment vendosni të ruani të dhënat e agreguara për të gjithë kohën dhe të dhënat e papërpunuara vetëm për të fundit, mund të krijoni një materialized view me grupim, ndërsa tabela kryesore pinba.requests duhet të pastrrohet periodikisht, për këtë të dhënat do të mbeten në materialized view. Më tej, gjatë krijimit të tabelës pinba.requests mund të tregoni «engine = Null», atëherë të dhënat e papërpunuara nuk do të ruhen kurrë në disk dhe megjithatë ato do të kalojnë në materialized view dhe do të ruhen të agreguara. Unë përdor një skemë të tillë për metricat nginx, sepse në nginx kam rreth 50 herë më shumë kërkesa se sa në php.
Kështu, keni kaluar një rrugë të gjatë dhe nuk do të doja t'ju lija në mes të rrugës, prandaj do të ndjekë një përshkrim të detajuar të instalimit dhe konfigurimit të zgjidhjes time dhe gjithçka që ju nevojitet, si dhe ujërat e rrezikshme mbi të cilat janë thyer shumë anije. I gjithë procesi i instalimit është përshkruar për Ubuntu 18.04 LTS dhe CentOS 7, në distribucione dhe versione të tjera procesi mund të ndryshojë pak.
Instalimi
Të gjitha komandat e nevojshme i kam përmbledhur në për të lehtësuar përsëritshmërinë e udhëzimeve. Më poshtë do të përshkruhen vetëm ujërat e rrezikshme.
php-pinba
Pas instalimit, sigurohuni që në skedarin /etc/php/7.2/fpm/conf.d/20-pinba.ini të keni të shkruar të gjitha opsionet. Në disa distribucione (për shembull, CentOS) ato mund të jenë të shkruara komente.
extension=pinba.so
pinba.enabled=1
pinba.server=127.0.0.1:30002clickhouse
Gjatë instalimit, clickhouse do t'ju kërkojë të vendosni një fjalëkalim për përdoruesin default. Me default, ky përdorues është i aksesueshëm nga të gjitha IP-të, kështu që nëse nuk keni një firewall në server, sigurohuni të vendosni një fjalëkalim për të. Kjo mund të bëhet gjithashtu pas instalimit në skedarin /etc/clickhouse-server/users.xml.
Gjithashtu, është e rëndësishme të vëreni se clickhouse përdor disa porte, duke përfshirë 9000. Ky port gjithashtu përdoret për php-fpm në disa distribucione (për shembull, CentOS). Nëse ky port është tashmë në përdorim, mund ta ndryshoni në një tjetër në skedarin /etc/clickhouse-server/config.xml.
grafana me plugin për clickhouse
Pas instalimit të grafanës, përdorni emrin admin dhe fjalëkalimin admin. Në hyrjen e parë, grafana do t'ju kërkojë të vendosni një fjalëkalim të ri.
Më pas hyjmë në menusë «+» -> 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 krijoni atë vetë përsëri.
Grafana mbështet punën me clickhouse përmes një plugin-i të tretë, por për plugin-t e tretë, grafana nuk funksionon me alarmin (kjo kërkesë ka qenë e hapur për disa vite).
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ë dosje tjetër përveç /opt, do t'ju duhet gjithashtu të përmirësoni fajllin.
moduli pinba për nginx
Për të kompiluar modulin, ju nevojiten skedarët burimorë të versionit të njëjtë të nginx që është instaluar në serverin tuaj, si dhe të njëjtat mundësi kompilimi; përndryshe, ndërtimi do të kalojë me sukses, por gjatë lidhjes së modulit do të shfaqet një gabim se 'moduli nuk është i përputhshëm me binar.' Mundësitë e kompilimit mund të shihen me komandën nginx -V
Këshillat e jetës
Të gjitha faqet e mia funksionojnë vetëm me https. Fusha schema bëhet e panevojshme, kështu që unë e përdor atë për ndarjen e web/console.
Në skriptet që janë të qasshme nga web-i unë përdor:
if (ini_get('pinba.enabled')) {
pinba_schema_set('web');
}
Dhe në ato konsolë (p.sh., skriptet kron):
if (ini_get('pinba.enabled')) {
pinba_schema_set('console');
}Në panelin tim në grafana, kam një kalues web/console për të parë statistikat veçmas.
Gjithashtu, në pinba mund të dërgoni etiketat tuaja, për shembull:
pinba_tag_set('country', $countryCode);Kjo është gjithçka.
Për një kërkesë të madhe, ju lutem përgjigjuni pyetjeve pas artikullit.
Tradicionalisht paralajmëroj se unë nuk ofroj konsultime dhe ndihmë përmes mesazheve private të Habrës dhe rrjeteve sociale.
Hapni një biletë në github.
Gjithashtu, ju lutem mbështetni me pëlqime ky artikull .
Vetëm përdoruesit e regjistruar mund të marrin pjesë në anketë. , ju lutem.
Cilën OS po përdorni në serverin tuaj?
Ubuntu
CentOS
Debian
Gentoo
Red Hat
Fedora
OpenSUSE
SuSE
Unix
Windows
të tjera
114 përdorues kanë votuar. 11 përdorues kanë abstenuar.
Cilën version të php po përdorni në serverin tuaj?
7.3
7.2
7.1
7.0
5
të tjera
105 përdorues kanë votuar. 17 përdorues kanë abstenuar.
A keni përdorur ndonjëherë pinba?
po
jo, por do të doja
jo dhe nuk do të doja
jo dhe nuk kam dëgjuar për të
100 përdorues kanë votuar. 14 përdorues kanë abstenuar.
Cilën version të serverit pinba do dëshironit të provoni?
pinba_engine (motor mysql)
pinba2 (motor mysql)
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
të tjera
39 përdorues kanë votuar. 47 përdorues kanë abstenuar.
Burimi: habr.com
