Statistika in spremljanje PHP skriptov v realnem času. Pinbi na pomoč priskočita ClickHouse in Grafana

V tem članku vam bom povedal, kako uporabiti pinba s clickhouse in grafana namesto pinba_engine in pinboard.

Pri projektu PHP je pinba morda edini zanesljiv način za razumevanje, kaj se dogaja z zmogljivostjo. Res je, da se pinba običajno izvaja le, ko so že opažene težave in ni jasno, "kje kopati".

Pogosto nihče nima pojma, kolikokrat na sekundo/minuto se pokliče ta ali oni skript, in začnejo optimizirati "na dotik", začenši s tistih mest, ki se zdijo bolj logična.

Nekateri analizirajo dnevnike nginx, medtem ko drugi analizirajo počasne poizvedbe baze podatkov.

Pinba seveda ne bi bila odveč, a obstaja več razlogov, zakaj je nima vsak projekt.

Statistika in spremljanje PHP skriptov v realnem času. Pinbi na pomoč priskočita ClickHouse in Grafana

In prvi razlog je namestitev.

Da bi bolj ali manj dobili nekakšen "izpušni plin" od izvajanja Pinbe, je zelo zaželeno videti meritve ne samo za zadnje minute, ampak tudi v daljšem časovnem obdobju (od dni do mesecev).

Za to potrebujete:

  • namestite razširitev za php (in morda boste želeli modul za nginx)
  • razširitev za prevajanje za mysql
  • namestite pinboard in konfigurirajte cron

Zaradi pomanjkanja informacij o Pinbi ima marsikdo vtis, da je deloval le na PHP5 in je že zdavnaj preteklost, a kot bomo videli kasneje, temu ni tako.

Prvi korak je najpreprostejši, vse kar morate storiti je, da zaženete ukaz:

apt install php-pinba

Ta razširitev je na voljo v repozitorijih do vključno php 7.3 in vam ni treba ničesar prevesti.

Po izvedbi namestitvenega ukaza takoj prejmemo delujočo razširitev, ki zbira in pošilja metrike za vsak skript (čas delovanja, pomnilnik itd.) v formatu protobuf prek udp na 127.0.0.1:30002.

Doslej še nihče ni ujel ali obdelal teh paketov UDP, vendar to nikakor ne vpliva negativno na hitrost ali stabilnost vaših PHP skriptov.

Do nedavnega je bila edina aplikacija, ki je lahko ujela in obdelala te pakete UDP pinba_engine. Opis "preprosto in jedrnato« Instalacija odvrača željo, da bi jo še kdaj prebrali in se vanjo poglobili. Na kilometrskih seznamih odvisnosti so tako imena paketov kot imena programov in povezave do posameznih strani z njihovo namestitvijo, ti pa imajo svoje povezave do drugih odvisnosti. Nihče nima časa ali želje, da bi se ukvarjal s to sranje.

Postopek namestitve pinba2 ni predvsem lažje.

Morda bo nekoč možno namestiti pinba10 z enim ali dvema ukazoma in ne bo treba prebrati kopice gradiva, da bi razumeli, kako to storiti, vendar za zdaj temu ni tako.

Če namestite pinba_engine, je to le pol bitke. Konec koncev brez pinboard omejiti se boste morali na podatke iz zadnjih nekaj minut ali pa boste morali podatke združiti, shraniti in vizualizirati sami. Dobro je, da je pinboard precej preprost za uporabo namestitev.

Zdi se, zakaj takšno trpljenje, če so vse metrike iz php že poslane na vrata udp v formatu protobuf in vse, kar morate, je napisati aplikacijo, ki jih bo ujela in shranila v nekakšno shrambo? Očitno so tisti razvijalci, ki so prišli na to idejo, takoj sedli in pisali svoje ideje, od katerih so nekatere končale na GitHubu.

Sledi pregled štirih odprtokodnih projektov, ki shranjujejo metrike v shrambo, iz katere je te podatke mogoče preprosto pridobiti in vizualizirati, na primer z uporabo grafane.

olegfedoseev/pinba-strežnik (november 2017)

udp strežnik na poti, ki shranjuje meritve v OpenTSDB. Morda, če že uporabljate OpenTSDB v svojem projektu, vam bo ta rešitev ustrezala, sicer priporočam, da jo opustite.

olegfedoseev/pinba-influxdb (junij 2018)

udp strežnik na poti, iz istega habrowser, ki tokrat shranjuje meritve v InfluxDB. Mnogi projekti že uporabljajo InfluxDB za spremljanje, zato je ta rešitev morda popolna zanje.

Profesionalci:

  • InfluxDB omogoča združiti prejete meritve in po določenem času izbrisati izvirnik.

Cons:

  • Ta rešitev ne shranjuje informacij o časovnikih.
  • InfluxDB bo shranil naslove strani spletnih mest kot oznake in če imate veliko edinstvenih naslovov strani, bo to vodilo do povečana poraba pomnilnik z naključnim dostopom. Od nekega trenutka je "bo začela žreti spomin kot nora". (Vir)

ClickHouse-Ninja/Proton (januar 2019)

udp strežnik na poti, ki shranjuje meritve v ClickHouse. To je rešitev mojega prijatelja. Ko sem se seznanil z njim, sem se odločil, da je čas, da se pomerim s Pinbujem in Clickhouseom.

Profesionalci:

  • Clickhouse je idealen za takšna opravila; omogoča vam toliko stiskanje podatkov, da lahko shranite vse neobdelane podatke tudi brez združevanja
  • če je potrebno, lahko enostavno združite nastale meritve
  • že pripravljena predloga za grafano
  • shrani informacije o časovnikih

Cons:

  • usodna napaka
  • ni konfiguracije, v kateri bi lahko konfigurirali ime baze podatkov in tabel, naslov in vrata strežnika.
  • pri shranjevanju neobdelanih podatkov se uporablja pomožna slovarska tabela za shranjevanje naslovov strani in domen, kar oteži nadaljnje poizvedbe
  • druge malenkosti, ki sledijo iz prvega minusa

pinba-strežnik/pinba-strežnik (april 2019)

udp strežnik v php, ki shranjuje metrike v ClickHouse. To je moja rešitev, ki je rezultat spoznavanja pinba, ClickHouse in protobuf. Medtem ko sem urejal ves ta kup, sem napisal “proof of concept”, ki zame nepričakovano ni porabil večjih virov (30 MB RAM-a in manj kot 1% enega od osmih procesorskih jeder), zato sem odločili deliti z javnostjo.

Prednosti so enake kot pri prejšnji rešitvi, uporabil sem tudi običajna imena iz originalnega pinba_engine. Dodal sem tudi konfiguracijo, ki vam omogoča, da zaženete več primerkov strežnika pinbase hkrati, da shranite metrike v različnih tabelah - to je uporabno, če želite zbirati podatke ne samo iz php, ampak tudi iz nginx.
Slabosti - "usodna napaka" in tiste malenkosti, ki vam osebno ne bodo ustrezale, vendar je moja rešitev "preprosta kot copat" in je sestavljena iz samo približno 100 vrstic kode, tako da lahko vsak PHP razvijalec spremeni tisto, kar mu ni všeč v nekaj minutah.

Princip delovanja

Poslušajo se vrata UDP 30002. Vsi dohodni paketi so dekodirani v skladu s shemo protobuf in združeni. Enkrat na minuto se paket vstavi v klikovno hišico v tabelo pinba.requests. (vsi parametri so konfigurirani v konfiguracija)

Nekaj ​​o Clickhouse

Clickhouse podpira različne mehanizme za shranjevanje podatkov. Najpogosteje uporabljen je MergeTree.

Če se na neki točki odločite, da boste agregirane podatke shranjevali za ves čas, neobdelane podatke pa samo za zadnjega, potem lahko ustvarite materializiran pogled z združevanjem in občasno očistite glavno tabelo pinba.requests, medtem ko bodo vsi podatki ostali v materializiran pogled. Poleg tega lahko pri ustvarjanju tabele pinba.requests podate »engine = Null«, potem neobdelani podatki sploh ne bodo shranjeni na disk, hkrati pa bodo še vedno končali v materializiranem pogledu in bodo shranjeni združeni . To shemo uporabljam za metriko nginx, ker imam na nginxu 50-krat več zahtev kot na php.

Torej, prehodili ste dolgo pot in ne bi vas rad pustil na pol poti, zato sledi podroben opis namestitve in konfiguracije moje rešitve in vsega, kar potrebujete, ter pasti, ki so povzročile več kot eno ladjo zaleteti se. Celoten postopek namestitve je opisan za Ubuntu 18.04 LTS in Centos 7; postopek se lahko nekoliko razlikuje pri drugih distribucijah in različicah.

Namestitev

Vstavil sem vse potrebne ukaze Dockerfile za lažjo ponovljivost navodil. V nadaljevanju bodo opisane samo pasti.

php-pinba

Po namestitvi se prepričajte, da ste v datoteki /etc/php/7.2/fpm/conf.d/20-pinba.ini odkomentirali vse možnosti. Pri nekaterih distribucijah (npr. centos) so lahko zakomentirani.

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

klikhouse

Med namestitvijo vas bo clickhouse prosil, da nastavite geslo za privzetega uporabnika. Privzeto je ta uporabnik dostopen z vseh naslovov IP, tako da, če na strežniku nimate požarnega zidu, obvezno nastavite geslo zanj. To lahko storite tudi po namestitvi v datoteko /etc/clickhouse-server/users.xml.

Omeniti velja tudi, da Clickhouse uporablja več vrat, vključno z 9000. Ta vrata se uporabljajo tudi za php-fpm v nekaterih distribucijah (na primer centos). Če že uporabljate ta vrata, jih lahko spremenite v druga v datoteki /etc/clickhouse-server/config.xml.

grafana z vtičnikom Clickhouse

Po namestitvi Grafana uporabite prijavo admin in geslo admin. Ko se prvič prijavite, vas bo Grafana pozvala, da nastavite novo geslo.

Nato pojdite na “+” -> meni za uvoz in navedite številko nadzorne plošče za uvoz 10011. Pripravil in naložil sem to nadzorno ploščo, da vam tega ne bo treba znova početi sami.

Grafana podpira delo s Clickhouse prek vtičnika tretje osebe, vendar Grafana nima opozoril za vtičnike tretjih oseb (za to obstaja že nekaj let).

pinba-strežnik

Namestitev protobuf in libevent ni obvezna, vendar izboljša zmogljivost strežnika pinba. Če namestite pinba-server v mapo, ki ni /opt, boste morali tudi popraviti skript systemd mapa.

modul pinba za nginx

Za prevajanje modula potrebujete izvorne kode iste različice nginxa, ki je že nameščena na vašem strežniku, kot tudi enake možnosti prevajanja, sicer bo izgradnja uspešna, vendar se bo pri povezovanju modula pojavila napaka, da "modul ni binarno združljiv." Možnosti prevajanja si lahko ogledate z ukazom nginx -V

Life hacks

Vse moje strani delujejo samo na https. Polje sheme postane nesmiselno, zato ga uporabim za ločevanje spleta/konzole.

V skriptih, ki so dostopni iz spleta, uporabljam:

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

In v skriptih konzole (na primer skripti cron):

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

Na moji nadzorni plošči v Grafani je stikalo splet/konzola za ločen pregled statistike.

Svoje oznake lahko pošljete tudi Pinbi, na primer:

pinba_tag_set('country', $countryCode);

To je vse.

Odgovorite na ankete pod člankom.

Kot ponavadi vas opozarjam, da ne svetujem in ne pomagam prek osebnih sporočil na Habru in družbenih omrežjih.

Ustvari vstopnico na Githubu.

Podprite tudi z všečki angleška verzija ta članek na redditu.

V anketi lahko sodelujejo samo registrirani uporabniki. Prijaviti se, prosim.

Kateri OS uporabljate na strežniku?

  • Ubuntu

  • CentOS

  • Debian

  • Gentoo

  • Red Hat

  • Fedora

  • OpenSUSE

  • SUSE

  • Unix

  • Windows

  • drugi

Glasovalo je 114 uporabnikov. 11 uporabnikov se je vzdržalo.

Katero različico php uporabljate na strežniku?

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • drugi

Glasovalo je 105 uporabnikov. 17 uporabnikov se je vzdržalo.

Ste že kdaj uporabljali pinbo?

  • ja

  • ne, ampak bi rad

  • ne in nočem

  • ne in še nisem slišal zanjo

Glasovalo je 100 uporabnikov. 14 uporabnikov se je vzdržalo.

Katero različico strežnika Pinba želite preizkusiti?

  • pinba_engine (motor mysql)

  • pinba2 (motor mysql)

  • pinboard (php + mysql)

  • olegfedoseev/pinba-server (go + OpenTSDB)

  • olegfedoseev/pinba-influxdb (go + influxdb)

  • pinba-strežnik/pinba-strežnik (go + clickhouse)

  • pinba-strežnik/pinba-strežnik (php + clickhouse)

  • Svojega bom napisal sam

  • drugi

Glasovalo je 39 uporabnikov. 47 uporabnikov se je vzdržalo.

Vir: www.habr.com

Dodaj komentar