Statistika i praćenje PHP skripti u realnom vremenu. ClickHouse i Grafana idu u pomoć Pinbi

U ovom članku ću vam reći kako koristiti pinbu sa clickhouse i grafanom umjesto pinba_engine i pinboard.

Na PHP projektu, pinba je možda jedini pouzdan način da se razume šta se dešava sa performansama. Istina, pinba se obično implementira samo kada su problemi već uočeni i nije jasno "gdje kopati".

Često niko nema pojma koliko puta u sekundi/minuti se poziva ova ili ona skripta i počinju da optimizuju „na dodir“, počevši od onih mesta koja se čine logičnijima.

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

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

Statistika i praćenje PHP skripti u realnom vremenu. ClickHouse i Grafana idu u pomoć Pinbi

A prvi razlog je instalacija.

Da biste manje-više dobili neku vrstu “auspuha” od implementacije Pinbe, vrlo je poželjno vidjeti metriku ne samo za posljednje minute, već i za duži vremenski period (od dana do mjeseci).

Za ovo vam je potrebno:

  • instalirajte ekstenziju za php (i možda želite modul za nginx)
  • kompajlirajte ekstenziju za mysql
  • instalirajte pinboard i konfigurirajte cron

Zbog male količine informacija o Pinbi, mnogi ljudi imaju utisak da radi samo na PHP5 i da je odavno prošlost, ali kao što ćemo kasnije vidjeti, to nije slučaj.

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

apt install php-pinba

Ovo proširenje je dostupno u repozitorijumima do uključujući php 7.3 i ne morate ništa da kompajlirate.

Nakon izvršenja instalacijske naredbe, odmah dobijamo radnu ekstenziju koja prikuplja i šalje metriku za svaku skriptu (vrijeme rada, memorija, itd.) u formatu protobuf preko udp-a na 127.0.0.1:30002.

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

Do nedavno, jedina aplikacija koja je mogla uhvatiti i obraditi ove UDP pakete bila je pinba_engine. Opis "jednostavan i koncizan" instalacija obeshrabruje želju da se ikada ponovo čita i udubljuje u nju. Kilometarske liste zavisnosti sadrže i nazive paketa i nazive programa i veze do pojedinačnih stranica sa njihovom instalacijom, a one imaju svoje veze ka drugim zavisnostima. Niko nema vremena ni želje da se bavi ovim sranjem.

Postupak instalacije pinba2 nije posebno lakše.

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

Ako instalirate pinba_engine, onda je ovo samo pola bitke. Uostalom, bez pinboard morat ćete se ograničiti na podatke iz samo posljednjih nekoliko minuta, ili ćete morati sami agregirati, pohraniti i vizualizirati podatke. Dobro je što je pinboard prilično jednostavan za korištenje instalacija.

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

Slijedi pregled četiri projekta otvorenog koda koji čuvaju metriku u skladištu, iz koje se ovi podaci mogu lako dohvatiti i vizualizirati, na primjer, pomoću grafane.

olegfedoseev/pinba-server (novembar 2017.)

udp server u pokretu koji čuva 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 prođete.

olegfedoseev/pinba-influxdb (juni 2018.)

udp server u pokretu, sa istog habrowser, koji ovaj put pohranjuje metriku u InfluxDB. Mnogi projekti već koriste InfluxDB za praćenje, tako da bi ovo rješenje moglo biti savršeno za njih.

Pros:

  • InfluxDB dozvoljava agregirati primljene metrike i izbrisati original nakon određenog vremena.

Cons:

ClickHouse-Ninja/Proton (januar 2019.)

udp server u pokretu, koji sprema metrike u ClickHouse. Ovo je rešenje mog prijatelja. Nakon što sam se upoznao s tim, odlučio sam da je vrijeme da se suočim s Pinbuom i Clickhouseom.

Pros:

  • Clickhouse je idealan za takve zadatke; omogućava vam da komprimirate podatke toliko da možete pohraniti sve sirove podatke čak i bez agregiranja
  • ako je potrebno, možete lako agregirati rezultirajuće metrike
  • gotov šablon za grafanu
  • čuva informacije o tajmerima

Cons:

  • fatalna greška
  • ne postoji konfiguracija u kojoj možete konfigurisati ime baze podataka i tabela, adresu i port servera.
  • kada se pohranjuju sirovi podaci, pomoćna tabela rječnika koristi se za pohranjivanje adresa stranica i domena, što komplicira naknadne upite
  • ostale sitnice koje slijede iz prvog minusa

pinba-server/pinba-server (april 2019.)

udp server u php, koji čuva metriku u ClickHouse. Ovo je moje rješenje, koje je rezultat upoznavanja pinbe, ClickHousea i protobufa. Dok sam slagao čitavu ovu gomilu, napisao sam “dokaz koncepta” koji, za mene neočekivano, nije trošio značajne resurse (30 MB RAM-a i manje od 1% jednog od osam procesorskih jezgara), pa sam odlučio da ga podijeli sa javnošću.

Prednosti su iste kao kod prethodnog rješenja, koristio sam i uobičajene nazive iz originalnog pinba_engine. Takođe sam dodao konfiguraciju koja vam omogućava da pokrenete nekoliko instanci pinbase servera odjednom kako biste sačuvali metriku u različitim tabelama - ovo je korisno ako želite da prikupljate podatke ne samo sa php-a, već i sa nginx-a.
Nedostaci - “fatalna mana” i one sitnice koje vama lično neće odgovarati, ali moje rješenje je “jednostavno kao papuča” i sastoji se od svega 100-tinjak linija koda, tako da svaki PHP programer može promijeniti ono što mu se ne sviđa za par minuta.

Kako to radi

Sluša se UDP port 30002. Svi dolazni paketi se dekodiraju prema protobuf šemi i agregiraju. Jednom u minuti, paket se ubacuje u clickhouse u tablicu pinba.requests. (svi parametri su konfigurisani u config)

Malo o klikhouseu

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

Ako u nekom trenutku odlučite pohraniti agregirane podatke za sva vremena, a sirove podatke samo posljednji put, tada možete kreirati materijalizirani prikaz sa grupiranjem, te periodično čistiti glavnu tablicu pinba.requests, dok će svi podaci ostati u materijalizovan pogled. Štoviše, kada kreirate tablicu pinba.requests, možete odrediti “engine = Null”, tada sirovi podaci uopće neće biti pohranjeni na disk, a istovremeno će i dalje završiti u materijaliziranom prikazu i biti spremljeni agregirani . Koristim ovu šemu za nginx metriku, jer na nginx-u imam 50 puta više zahtjeva nego na php-u.

Dakle, prevalili ste dug put i ne bih volio da vas ostavim na pola puta, pa slijedi detaljan opis instalacije i konfiguracije mog rješenja i svega što vam treba, kao i zamki koje su izazvale više od jednog broda da se sruši. Cijeli proces instalacije opisan je za Ubuntu 18.04 LTS i Centos 7; proces se može malo razlikovati u drugim distribucijama i verzijama.

postavljanje

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

php-pinba

Nakon instalacije, uvjerite se da ste u datoteci /etc/php/7.2/fpm/conf.d/20-pinba.ini dekomentirali sve opcije. Na nekim distribucijama (npr. centos) oni mogu biti komentarisani.

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

clickhouse

Tokom instalacije, clickhouse će od vas tražiti da postavite lozinku za zadanog korisnika. Prema zadanim postavkama, ovaj korisnik je dostupan sa svih IP adresa, tako da ako nemate zaštitni zid na svom serveru, obavezno postavite lozinku za njega. Ovo se takođe može uraditi nakon instalacije u datoteku /etc/clickhouse-server/users.xml.

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

grafana sa dodatkom clickhouse

Nakon instaliranja Grafane, koristite administratora za prijavu i administratorsku lozinku. Kada se prvi put prijavite, Grafana će od vas tražiti da postavite novu lozinku.

Zatim idite na meni “+” -> uvoz i navedite broj kontrolne table za uvoz 10011. Pripremio sam i uploadovao ovu kontrolnu tablu tako da ne morate ponovo sami da radite.

Grafana podržava rad sa clickhouse-om preko dodatka treće strane, ali Grafana nema upozorenja za dodatke treće strane (za to postoji tiket već nekoliko godina).

pinba-server

Instaliranje protobuf-a i libevent-a je opciono, ali poboljšava performanse pinba-servera. Ako instalirate pinba-server u folder koji nije /opt, onda ćete također morati ispraviti systemd skripta file.

pinba modul za nginx

Za kompajliranje modula potrebni su vam izvorni kodovi iste verzije nginx-a koja je već instalirana na vašem serveru, kao i iste opcije kompilacije, inače će build biti uspješan, ali će se prilikom povezivanja modula pojaviti greška da “modul nije binarno kompatibilan.” Opcije kompilacije se mogu vidjeti pomoću naredbe nginx -V

Life hacks

Sve moje stranice rade samo na https. Polje šeme postaje besmisleno, pa ga koristim da odvojim web/konzolu.

U skriptama koje su dostupne s weba koristim:

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

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

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

Na mojoj kontrolnoj tabli u Grafani postoji prekidač web/konzola za zasebno gledanje statistike.

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

pinba_tag_set('country', $countryCode);

To je sve.

Odgovorite na ankete ispod članka.

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

Kreirajte kartu na Github-u.

Također molimo podržite lajkovima engleska verzija ovog člana na redditu.

Samo registrovani korisnici mogu učestvovati u anketi. Prijavite semolim.

Koji OS koristite na serveru?

  • Ubuntu

  • CentOS

  • Debian

  • Gentoo

  • crvena kapa

  • fedora

  • OpenSUSE

  • SUSE

  • Unix

  • Windows

  • drugi

Glasalo je 114 korisnika. Uzdržano je bilo 11 korisnika.

Koju verziju php-a koristite na serveru?

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • drugi

Glasalo je 105 korisnika. Uzdržano je bilo 17 korisnika.

Jeste li ikada koristili pinbu?

  • da

  • ne, ali bih volio

  • ne i ne bih htela

  • ne i nisam čuo za nju

Glasalo je 100 korisnika. Uzdržano je bilo 14 korisnika.

Koju verziju Pinba servera biste željeli isprobati?

  • pinba_engine (mysql motor)

  • pinba2 (mysql motor)

  • pinboard (php + mysql)

  • olegfedoseev/pinba-server (go + OpenTSDB)

  • olegfedoseev/pinba-influxdb (go + influxdb)

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

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

  • Ja ću svoje napisati

  • drugi

Glasalo je 39 korisnika. Uzdržano je bilo 47 korisnika.

izvor: www.habr.com

Dodajte komentar