În acest articol, vă voi explica cum să folosiți pinba împreună cu clickhouse și grafana în loc de pinba_engine și pinboard.
Pentru proiectele php, pinba este probabil singura modalitate fiabilă de a înțelege ce se întâmplă cu performanța. Totuși, pinba este de obicei implementat doar atunci când deja există probleme și nu se știe "de unde să începem".
Adesea, nimeni nu are idee câte ori pe secundă/minut este apelat un anumit script și începe să optimizeze "pe nevăzute", începând cu locurile care par mai logice.
Unii analizează jurnalele nginx, iar alții interogările lente din baza de date.
Desigur, pinba nu ar fi de prisos, dar există câteva motive pentru care nu se regăsește în toate proiectele.
Iar primul motiv este instalarea.
Pentru a obține oarecum un rezultat din implementarea pinbei, este foarte recomandat să vedeți metricile nu doar pentru ultimele minute, ci și pe o perioadă mai lungă (de la zile la luni).
Pentru aceasta, trebuie:
- să instalați extensia pentru php (și poate doriți un modul pentru nginx)
- să compilați extensia pentru mysql
- să instalați pinboard și să configurați cron
Din cauza informațiilor limitate despre pinba, mulți au avut impresia că a funcționat doar pe php5 și că a rămas demult în trecut, dar așa cum vom vedea mai departe, nu este așa.
Primul pas este cel mai simplu, tot ce trebuie să faceți este să executați comanda:
apt install php-pinbaÎn repositoare, această extensie există până la php 7.3 inclusiv și nu trebuie să compilați nimic.
După executarea comenzii de instalare, obținem imediat o extensie funcțională care colectează și trimite metricile fiecărui script (durata de execuție, memorie etc.) în format pe udp la 127.0.0.1:30002.
Aceste pachete udp nu sunt încă interceptate și procesate de nimeni, dar asta nu afectează negativ viteza sau stabilitatea scripturilor dvs. php.
Până de curând, aplicația care putea intercepta și procesa aceste pachete udp era doar . Descrierea „a instalării descurajează dorința de a mai citi acest lucru vreodată și de a se implica. În listele kilometrice de dependențe există atât numele pachetelor, cât și numele programelor și linkuri către pagini separate cu instalarea lor, iar acestea au propriile linkuri către alte dependențe. Nimeni nu are timp sau dorință să se ocupe cu toate acestea.
Procesul de instalare nu a fost .
Poate că într-o zi pinba10 va putea fi instalat cu una sau două comenzi și nu va trebui să citim o mulțime de materiale pentru a înțelege cum să facem asta, dar momentan nu este așa.
Dacă l-ați instalat totuși pe pinba_engine, atunci este doar jumătate din lucru. Căci fără va trebui să te limitezi la datele doar din ultimele câteva minute sau să agregi, să salvezi și să vizualizezi datele singur. E bine că pinboard este destul de simplu în .
Pare ciudat, de ce atâtea suferințe dacă toate metricile din php sunt deja trimise pe portul udp în format protobuf și tot ce trebuie să faci este să scrii o aplicație care să le capteze și să le depoziteze în orice stocare? Se pare că dezvoltatorii cărorva le-a venit această idee s-au apucat imediat să-și scrie bicicletele, o parte dintre ele ajungând pe github.
Urmează o revizuire a patru proiecte open-source, care salvează metricile în stocări, din care aceste date pot fi ușor extrase și vizualizate, de exemplu, folosind grafana.
(noiembrie 2017)
server udp pe go, care salvează metricile în OpenTSDB. Poate că dacă OpenTSDB este deja utilizat în proiectul vostru, atunci această soluție vi se va potrivi, altfel vă recomand să o evitați.
(iunie 2018)
server udp pe go, de la același , care de data aceasta salvează metricile în InfluxDB. Pe multe proiecte pentru monitorizare se folosește deja InfluxDB, așa că pentru ei această soluție poate fi excelentă.
Pro:
- InfluxDB agregând metricile obținute, iar originalul eliminându-l după un timp stabilit.
Dezavantaje:
- această soluție nu salvează informații despre timere.
- InfluxDB va salva adresele paginilor site-ului ca etichete și dacă aveți multe adrese unice, atunci aceasta va duce la de memorie RAM. De la un anumit moment, acesta "«. ()
(ianuarie 2019)
server udp pe go, care salvează metricile în ClickHouse. Această soluție este a prietenului meu. Anume după ce m-am familiarizat cu ea, am decis că este timpul să mă apuc de pinba și clickhouse.
Pro:
- clickhouse se potrivește perfect pentru astfel de sarcini, el permite comprimarea datelor atât de mult încât poți stoca toate datele brute chiar și fără agregări
- dacă este necesar, poți agrega ușor metricile obținute
- șablon gata pentru grafana
- salvează informații despre timere
Dezavantaje:
- nu există un fișier de configurare în care să poți seta numele bazei de date și al tabelelor, adresa și portul serverului.
- la salvarea datelor brute se folosește un tabel auxiliar pentru stocarea adreselor paginilor și a domeniilor, ceea ce complică ulterior interogările
- alte detalii inferioare care decurg din prima problemă
(aprilie 2019)
server UDP pe PHP, care salvează metricile în ClickHouse. Aceasta este soluția mea, rezultatul întâlnirii cu pinba, ClickHouse și protobuf. În timp ce mă familiarizam cu toată această combinație, am scris un "proof of concept", care, spre surprinderea mea, nu consuma resurse semnificative (30 MB de memorie RAM și mai puțin de 1% din unul dintre cele opt nuclee ale procesorului), așa că am decis să o împărtășesc cu publicul.
Avantaje — aceleași ca și la soluția anterioară, de asemenea am folosit denumirile obișnuite din pinba_engine original. De asemenea, am adăugat un fișier de configurare care permite lansarea mai multor instanțe ale serverului pinba, pentru a salva metricile în tabele diferite — acest lucru este util dacă doriți să colectați date nu doar din PHP, ci și din nginx.
Dezavantaje — "defect fatal" și alte mici probleme care nu te vor mulțumi, dar soluția mea este "simplă ca un pantof" și constă în aproximativ 100 de linii de cod, așa că orice dezvoltator PHP poate schimba în câteva minute ce nu îi place.
Principiul de funcționare
Ascultă pe portul UDP 30002. Toate pachetele de intrare sunt decodificate conform schemei protobuf și agregate. O dată pe minut se face o inserție a unui lot în ClickHouse în tabelul pinba.requests. (toate parametrii sunt configurabili în )
Puțin despre ClickHouse
ClickHouse suportă diferite motoare de stocare a datelor. Cel mai frecvent utilizat este MergeTree.
Dacă într-un moment dat decizi să păstrezi datele agregate pentru tot timpul, iar cele brute doar pentru ultima perioadă, poți crea o vizualizare materializată cu grupare, iar tabelul principal pinba.requests poate fi curățat periodic, toate datele rămânând în vizualizarea materializată. Mai mult, când creezi tabelul pinba.requests poți specifica „engine = Null”, astfel încât datele brute să nu fie salvate pe disc, dar totuși vor ajunge în vizualizarea materializată și vor fi salvate agregate. Folosesc această schemă pentru metricile nginx, deoarece pe nginx am de 50 de ori mai multe cereri decât pe PHP.
Așadar, ați parcurs un drum lung și nu aș vrea să vă las pe jumătate, așa că urmează o descriere detaliată a instalării și configurării soluției mele și a tot ce aveți nevoie, precum și capcanele care au distrus nu un singur vas. Întregul proces de instalare este descris pentru Ubuntu 18.04 LTS și CentOS 7; în alte distribuții și versiuni, procesul poate diferi ușor.
Instalare
Toate comenzile necesare le-am scos în pentru a facilita reproducerea instrucțiunilor. Vor fi descrise doar capcanele.
php-pinba
După instalare, asigurați-vă că în fișierul /etc/php/7.2/fpm/conf.d/20-pinba.ini aveți toate opțiunile decurtate. În unele distribuții (de exemplu, CentOS), ele pot fi comentate.
extension=pinba.so
pinba.enabled=1
pinba.server=127.0.0.1:30002clickhouse
În timpul instalării, ClickHouse vă va cere să setați o parolă pentru utilizatorul default. Implicit, acest utilizator este accesibil din toate IP-urile, așa că, dacă nu aveți un firewall pe server, asigurați-vă că îi setați o parolă. Acest lucru se poate face și după instalare în fișierul /etc/clickhouse-server/users.xml.
De asemenea, merită menționat că ClickHouse utilizează mai multe porturi, inclusiv 9000. Acest port este folosit, de asemenea, pentru php-fpm în unele distribuții (de exemplu, CentOS). Dacă acest port este deja folosit, îl puteți schimba într-unul diferit în fișierul /etc/clickhouse-server/config.xml.
Grafana cu plugin pentru ClickHouse
După instalarea Grafana, utilizați loginul admin și parola admin. La prima autentificare, Grafana vă va cere să setați o nouă parolă.
În continuare, accesați meniul „+” -> import și specificați numărul dashboard-ului pentru import . Acest dashboard l-am pregătit și l-am încărcat, astfel încât să nu fie nevoie să-l creați din nou.
Grafana suportă lucrul cu ClickHouse printr-un plugin terț, dar pentru pluginurile terțe, alertele Grafana nu funcționează (ombrele pentru aceasta sunt existente de câțiva ani).
pinba-server
Instalarea protobuf și libevent nu este obligatorie, dar îmbunătățește performanța pinba-server. Dacă instalați pinba-server într-un director diferit de /opt, atunci va trebui să modificați și fișierului.
modulul pinba pentru nginx
Pentru a compila modulul, aveți nevoie de sursele aceleași versiuni de nginx care sunt deja instalate pe serverul dvs. și de aceleași opțiuni de compilare, altfel compilarea va trece cu succes, dar la conectarea modulului va apărea o eroare, că „modulul nu este compatibil binar”. Opțiunile de compilare pot fi vizualizate folosind comanda nginx -V
Sfaturi utile
Toate site-urile mele funcționează doar pe https. Câmpul schema devine fără sens, de aceea îl folosesc pentru a separa web/console.
În scripturile care sunt accesibile din web folosesc:
if (ini_get('pinba.enabled')) {
pinba_schema_set('web');
}
Iar în cele console (de exemplu, scripturi cron):
if (ini_get('pinba.enabled')) {
pinba_schema_set('console');
}În dashboard-ul meu din Grafana există un comutator web/console pentru a vizualiza statisticile separat.
De asemenea, în Pinba pot fi transmise propriile etichete, de exemplu:
pinba_tag_set('country', $countryCode);Asta e tot.
Vă rog să răspundeți la sondajele de sub articol.
Și avertizez tradițional că nu ofer consultanță și nu ajut prin mesaje personale pe Habră și în rețelele sociale.
Deschideți un tichet pe GitHub.
De asemenea, vă rog să susțineți cu like-uri acestui articol .
Numai utilizatorii înregistrați pot participa la sondaj. , vă rugăm.
Ce sistem de operare folosiți pe server?
Ubuntu
CentOS
Debian
Gentoo
Red Hat
Fedora
OpenSUSE
SuSE
Unix
Windows
altele
114 utilizatori au votat. 11 utilizatori s-au abținut.
Ce versiune de PHP folosiți pe server?
7.3
7.2
7.1
7.0
5
altele
105 utilizatori au votat. 17 utilizatori s-au abținut.
Ați folosit vreodată Pinba?
da
nu, dar mi-ar plăcea
nu și nu mi-ar plăcea
nu și nu am auzit despre ea
100 utilizatori au votat. 14 utilizatori s-au abținut.
Ce versiune de server Pinba ați dori să încercați?
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)
îmi voi scrie unul eu
altele
39 utilizatori au votat. 47 utilizatori s-au abținut.
Sursa: habr.com
