Statistika i praćenje PHP skripti u stvarnom vremenu. ClickHouse i Grafana priskaču u pomoć Pinbi

U ovom ću vam članku reći kako koristiti pinbu s clickhouseom i grafanom umjesto pinba_enginea i pinboarda.

Na PHP projektu, pinba je možda jedini pouzdan način da shvatite što se događa s performansama. Istina, pinba se obično implementira samo kada su problemi već uočeni i nije jasno "gdje kopati".

Često nitko nema pojma koliko se puta u sekundi/minuti poziva ova ili ona skripta i počinju optimizirati "na dodir", počevši od onih mjesta koja se čine logičnijima.

Neki analiziraju nginx zapise, dok drugi analiziraju spore upite baze podataka.

Naravno, pinba ne bi bila suvišna, ali postoji nekoliko razloga zašto je nema svaki projekt.

Statistika i praćenje PHP skripti u stvarnom vremenu. ClickHouse i Grafana priskaču u pomoć Pinbi

A prvi razlog je instalacija.

Kako bi se koliko-toliko dobio neka vrsta "ispuha" od implementacije Pinbe, vrlo je poželjno vidjeti metriku ne samo za posljednje minute, već i tijekom dugog vremenskog razdoblja (od dana do mjeseci).

Za to vam je potrebna:

  • instalirajte ekstenziju za php (i možda želite modul za nginx)
  • kompilirati proširenje za mysql
  • instalirajte pinboard i konfigurirajte cron

Zbog male količine informacija o Pinbi, mnogi ljudi imaju dojam da je radila samo na PHP5 i da je odavno stvar prošlosti, ali kao što ćemo kasnije vidjeti, to nije tako.

Prvi korak je najjednostavniji, sve što trebate učiniti je pokrenuti naredbu:

apt install php-pinba

Ovo proširenje dostupno je u spremištima do i uključujući php 7.3 i ne morate ništa kompajlirati.

Nakon izvršenja instalacijske naredbe, odmah dobivamo radno proširenje koje prikuplja i šalje metriku za svaku skriptu (vrijeme rada, memorija itd.) u formatu protobuf putem udp-a na 127.0.0.1:30002.

Do sada nitko nije uhvatio ili obradio ove UDP pakete, ali to ni na koji način ne utječe negativno na brzinu ili stabilnost vaših PHP skripti.

Do nedavno, jedina aplikacija koja je mogla uhvatiti i obraditi te UDP pakete bila je pinba_motor. Opis "jednostavno i sažeto" Instalacija obeshrabruje želju da se ikada više pročita i udubi u nju. Kilometarske liste ovisnosti sadrže i nazive paketa i nazive programa i poveznice na pojedine stranice s njihovom instalacijom, a one imaju svoje poveznice na druge ovisnosti. Nitko nema vremena ni želje baviti se ovim sranjem.

Postupak instalacije pinba2 nije pogotovo lakše.

Možda će jednog dana biti moguće instalirati pinba10 s jednom ili dvije naredbe i ne morati čitati hrpu materijala da biste razumjeli kako to učiniti, ali za sada to nije slučaj.

Ako ipak instalirate pinba_engine, onda je ovo samo pola bitke. Uostalom, bez pinboard morat ćete se ograničiti na podatke iz samo nekoliko zadnjih minuta ili ćete sami morati prikupljati, pohranjivati ​​i vizualizirati podatke. Dobro je što je pinboard vrlo jednostavan za korištenje montaža.

Čini se, čemu takva patnja ako su sve metrike iz php-a već poslane na udp port u protobuf formatu i sve što trebate je napisati aplikaciju koja će ih uhvatiti i staviti u neku vrstu pohrane? Navodno su oni programeri koji su došli na ovu ideju odmah sjeli napisati svoje ideje, od kojih su neke završile na GitHubu.

Slijedi pregled četiri projekta otvorenog koda koji spremaju metriku u pohranu, odakle se ti podaci mogu lako dohvatiti i vizualizirati, na primjer, pomoću grafane.

olegfedoseev/pinba-poslužitelj (studeni 2017.)

udp poslužitelj u pokretu koji sprema metriku u OpenTSDB. Možda ako već koristite OpenTSDB u svom projektu, onda će vam ovo rješenje odgovarati, inače preporučujem da ga propustite.

olegfedoseev/pinba-influxdb (lipanj 2018.)

udp server on go, od istog habrowser, koji ovaj put pohranjuje metriku u InfluxDB. Mnogi projekti već koriste InfluxDB za nadzor, pa bi ovo rješenje moglo biti savršeno za njih.

Pros:

  • InfluxDB to omogućuje agregirati primljene metrike i izbrisati original nakon određenog vremena.

Cons:

ClickHouse-Ninja/Proton (siječanj 2019.)

udp server on go, koji sprema metriku u ClickHouse. Ovo je rješenje mog prijatelja. Nakon što sam se s njime upoznao, odlučio sam da je vrijeme da se suprotstavim Pinbuu i Clickhouseu.

Pros:

  • Clickhouse je idealan za takve zadatke; omogućuje vam komprimiranje podataka u tolikoj mjeri da možete pohraniti sve neobrađene podatke čak i bez agregacija
  • ako je potrebno, možete jednostavno agregirati dobivene metrike
  • gotov predložak za grafanu
  • sprema informacije o mjeračima vremena

Cons:

  • fatalna mana
  • ne postoji konfiguracija u kojoj možete konfigurirati naziv baze podataka i tablica, adresu i port poslužitelja.
  • pri pohranjivanju neobrađenih podataka koristi se pomoćna tablica rječnika za pohranjivanje adresa stranica i domena, što komplicira naknadne upite
  • ostale sitnice koje slijede iz prvog minusa

pinba-poslužitelj/pinba-poslužitelj (travanj 2019.)

udp poslužitelj u php, koji sprema metriku u ClickHouse. Ovo je moje rješenje koje je rezultat upoznavanja pinbe, ClickHousea i protobufa. Dok sam sređivao cijelu ovu gomilu, napisao sam “proof of concept” koji, za mene neočekivano, nije trošio značajne resurse (30 MB RAM-a i manje od 1% jedne od osam procesorskih jezgri), pa sam odlučio to podijeliti s javnošću.

Prednosti su iste kao i kod prethodnog rješenja, također sam koristio uobičajena imena iz originalnog pinba_engine. Također sam dodao konfiguraciju koja vam omogućuje pokretanje nekoliko instanci pinbase poslužitelja odjednom kako biste spremili metriku u različite tablice - ovo je korisno ako želite prikupljati podatke ne samo iz php-a, već i iz nginx-a.
Nedostaci - “fatalna mana” i one sitnice koje vama osobno neće odgovarati, ali moje rješenje je “jednostavno kao papuča” i sastoji se od samo 100-tinjak linija koda, tako da svaki PHP developer može promijeniti ono što mu se ne sviđa za nekoliko minuta.

Princip rada

Osluškuje se UDP port 30002. Svi dolazni paketi se dekodiraju prema protobuf shemi i agregiraju. Jednom u minuti, paket se ubacuje u kućicu za klikanje u tablicu pinba.requests. (svi parametri su konfigurirani u konfiguracija)

Malo o Clickhouseu

Clickhouse podržava različite mehanizme za pohranu podataka. Najčešće korišten je MergeTree.

Ako u nekom trenutku odlučite pohraniti agregirane podatke za sva vremena, a neobrađene podatke samo za posljednje, tada možete kreirati materijalizirani pogled s grupiranjem, te povremeno čistiti glavnu pinba.requests tablicu, dok će svi podaci ostati u materijalizirani pogled. Štoviše, kada kreirate tablicu pinba.requests, možete navesti "engine = Null", tada neobrađeni podaci uopće neće biti spremljeni na disk, a istovremeno će i dalje završiti u materijaliziranom prikazu i biti spremljeni agregirani . Koristim ovu shemu za nginx metriku, jer na nginxu imam 50 puta više zahtjeva nego na php-u.

Dakle, prešli ste dug put i ne bih vas volio ostaviti na pola puta, stoga slijedi detaljan opis instalacije i konfiguracije mog rješenja i svega što vam je potrebno, kao i zamke koje su izazvale više od jednog broda sudariti se. Cijeli postupak instalacije opisan je za Ubuntu 18.04 LTS i Centos 7; proces se može malo razlikovati u drugim distribucijama i verzijama.

Instalacija

Ubacio sam sve potrebne naredbe dockerfile kako bi se olakšala ponovljivost uputa. U nastavku će biti opisane samo zamke.

php-pinba

Nakon instalacije provjerite jeste li u datoteci /etc/php/7.2/fpm/conf.d/20-pinba.ini odkomentirali sve opcije. Na nekim distribucijama (npr. centos) mogu biti komentirani.

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

klikanica

Tijekom instalacije, clickhouse će od vas tražiti da postavite lozinku za zadanog korisnika. Prema zadanim postavkama, ovom je korisniku moguće pristupiti sa svih IP adresa, pa ako nemate vatrozid na svom poslužitelju, svakako postavite lozinku za njega. To se također može učiniti nakon instalacije u datoteci /etc/clickhouse-server/users.xml.

Također je vrijedno napomenuti da Clickhouse koristi nekoliko portova, uključujući 9000. Ovaj port se također koristi za php-fpm u nekim distribucijama (na primjer, centos). Ako već koristite ovaj priključak, možete ga promijeniti u drugi u datoteci /etc/clickhouse-server/config.xml.

grafana s dodatkom clickhouse

Nakon instaliranja Grafana koristite login admin i password admin. Kada se prvi put prijavite, Grafana će od vas tražiti da postavite novu lozinku.

Zatim idite na “+” -> izbornik za uvoz i označite broj nadzorne ploče za uvoz 10011. Pripremio sam i prenio ovu nadzornu ploču tako da to ne morate ponovno raditi sami.

Grafana podržava rad s clickhouseom putem dodatka treće strane, ali Grafana nema upozorenja za dodatke trećih strana (za to postoji ulaznica već nekoliko godina).

pinba-poslužitelj

Instaliranje protobufa i libeventa nije obavezno, ali poboljšava performanse pinba poslužitelja. Ako instalirate pinba-poslužitelj u mapu koja nije /opt, tada ćete također morati ispraviti systemd skripta datoteka.

pinba modul za nginx

Za kompajliranje modula potrebni su vam izvorni kodovi iste verzije nginxa koja je već instalirana na vašem poslužitelju, kao i iste opcije kompilacije, u protivnom će build biti uspješan, ali prilikom spajanja modula pojavit će se pogreška koja "modul nije binarno kompatibilan." Opcije kompilacije mogu se vidjeti pomoću naredbe nginx -V

Life hacks

Sve moje stranice rade samo na https. Polje sheme postaje besmisleno, pa ga koristim za odvajanje weba od konzole.

U skriptama koje su dostupne s weba koristim:

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

I u konzolnim skriptama (na primjer, cron skriptama):

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

Na mojoj nadzornoj ploči u Grafani postoji web/console switch za odvojeni pregled statistike.

Također možete poslati svoje oznake Pinbi, na primjer:

pinba_tag_set('country', $countryCode);

To je sve.

Molimo odgovorite na ankete ispod članka.

Kao i obično, upozoravam vas da ne savjetujem niti pomažem putem osobnih poruka na Habru i društvenim mrežama.

Izradite ulaznicu na Githubu.

Također vas molimo da podržite lajkovima engleska verzija ovaj članak na redditu.

U anketi mogu sudjelovati samo registrirani korisnici. Prijaviti se, molim.

Koji OS koristite na poslužitelju?

  • Ubuntu

  • CentOS

  • Debian

  • Gentoo

  • Red Hat

  • Fedora

  • OpenSUSE

  • ŠVICARSKA

  • Unix

  • Windows

  • drugi

Glasovalo je 114 korisnika. Suzdržano je bilo 11 korisnika.

Koju verziju php-a koristite na poslužitelju?

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • drugi

Glasovalo je 105 korisnika. Suzdržano je bilo 17 korisnika.

Jeste li ikada koristili pinbu?

  • da

  • ne, ali volio bih

  • ne i ne bih htjela

  • ne i nisam čuo za nju

Glasovalo je 100 korisnika. Suzdržano je bilo 14 korisnika.

Koju verziju Pinba poslužitelja želite isprobati?

  • pinba_engine (mysql motor)

  • pinba2 (motor mysql)

  • pinboard (php + mysql)

  • olegfedoseev/pinba-poslužitelj (idi + OpenTSDB)

  • olegfedoseev/pinba-influxdb (go + influxdb)

  • pinba-poslužitelj/pinba-poslužitelj (go + clickhouse)

  • pinba-poslužitelj/pinba-poslužitelj (php + clickhouse)

  • Ja ću svoje napisati sam

  • drugi

Glasovalo je 39 korisnika. Suzdržano je bilo 47 korisnika.

Izvor: www.habr.com

Dodajte komentar