U ovom članku ću objasniti kako koristiti pinbu zajedno s clickhouse i grafana umjesto pinba_engine i pinboard.
Na PHP projektu, pinba je vjerojatno jedini pouzdan način da razumijemo što se događa s performansama. Nažalost, pinba se obično implementira tek kada već postoje problemi i nije jasno "gdje kopati".
Često nitko nema pojma koliko se puta u sekundi/minuti poziva određena skripta i počinju optimizirati "na osjećaj", počinjući od onih mjesta koja se čine logičnim.
Netko analizira nginx logove, a netko spore upite u bazi podataka.
Naravno, pinba ne bi bila suvišna, ali postoji nekoliko razloga zašto nije na svakom projektu.
Prvi razlog je instalacija.
Da bismo dobili neki "izlaz" od implementacije pinbe, vrlo je poželjno vidjeti metrike ne samo za posljednje minute, već i na dužem vremenskom razdoblju (od dana do mjeseci).
Za to je potrebno:
- instalirati ekstenziju za php (i možda želite modul za nginx)
- kompajlirati ekstenziju za mysql
- instalirati pinboard i postaviti cron
Zbog malog broja informacija o pinbi, mnogi su zaključili da je radila samo na php5 i da je odavno ostavljena u prošlosti, ali kao što ćemo vidjeti dalje — to nije točno.
Prvi korak — najlakši, samo trebate izvršiti naredbu:
apt install php-pinbaU repozitorijima ova ekstenzija se nalazi čak do php 7.3 uključivo i ne trebate ništa kompajlirati.
Nakon izvršenja naredbe za instalaciju, odmah dobivamo već funkcionalnu ekstenziju koja prikuplja i šalje metrike svake skripte (vrijeme izvođenja, memorija itd.) u formatu putem udp na 127.0.0.1:30002.
Ovi udp paketi trenutno ne hvata nitko i ne obrađuju, ali to nikako ne utječe na brzinu ili stabilnost rada vaših php skripti.
Do nedavno, kao aplikacija koja je mogla hvatati i obrađivati ove udp pakete bio je samo . Opis "» instalacije odbijaju želju da se to ponovno čita i razumije. U kilometrima popisa ovisnosti nalaze se imena paketa, kao i imena programa i poveznice na pojedinačne stranice za instalaciju, a one imaju svoje poveznice na druge ovisnosti. Niko nema vremena ni volje baviti se tom gnjavažom.
Postupak instalacije nije postao .
Možda će jednog dana pinba10 moći instalirati s jednom ili dvije naredbe bez potrebe za čitanjem mnoštva materijala kako biste razumjeli kako to učiniti, ali zasad to nije slučaj.
Ako ste ipak instalirali pinba_engine, to je samo pola posla. Jer bez bit ćete ograničeni na podatke samo za posljednjih nekoliko minuta ili ćete morati samostalno agregirati, pohranjivati i vizualizirati podatke. Dobro je što je pinboard dovoljno jednostavan. .
Naizgled, zašto takva patnja kada sve metrike iz php-a već idu na udp-port u protobuf formatu i sve što trebate je napisati aplikaciju koja će ih uhvatiti i pohraniti negdje? Čini se da su oni programeri kojima se ova misao pojavila odmah sjeli napisati svoje bicikle, a dio njih je završio na GitHubu.
Slijedi pregled od četiri open-source projekta koja pohranjuju metrike u spremišta iz kojih se ovi podaci lako mogu dohvatiti i vizualizirati, primjerice, uz pomoć grafana.
(studeni 2017)
udp server na go, koji pohranjuje metrike u OpenTSDB. Ako već koristite OpenTSDB za svoj projekt, ovo rješenje bi vam moglo odgovarati, inače preporučujem da ga preskočite.
(jun 2018)
udp server na go, od istog , koji ovaj put pohranjuje metrike u InfluxDB. Na mnogim projektima za praćenje već se sada koristi InfluxDB, pa bi ovo rješenje moglo odlično odgovarati za njih.
Prednosti:
- InfluxDB agregirati primljene metrike, a izvorne brisati nakon određenog vremena.
Mane:
- ovo rješenje ne pohranjuje informacije o tajmerima.
- InfluxDB će pohranjivati adrese stranica vašeg weba kao oznake i ako imate puno jedinstvenih adresa stranica, to će dovesti do operativne memorije. Od određenog trenutka on "«. ()
(siječanj 2019)
UDP server written in Go that saves metrics to ClickHouse. This is a solution from my friend. It was after learning about it that I decided it was time to tackle Pinba and ClickHouse.
Prednosti:
- ClickHouse is ideal for such tasks; it allows for data compression to the extent that you can store all raw data even without aggregations.
- If necessary, you can easily aggregate the received metrics.
- A ready-made template for Grafana.
- Stores information by timers.
Mane:
- There is no configuration where you can set the database and table names, server address, and port.
- When saving raw data, a helper table-dictionary is used for storing page addresses and domains, which complicates subsequent queries.
- Other minor issues that arise from the first drawback.
(April 2019)
UDP server written in PHP that saves metrics to ClickHouse. This is my solution, resulting from my acquaintance with Pinba, ClickHouse, and Protobuf. While figuring out this whole setup, I wrote a 'proof of concept' that unexpectedly didn't consume significant resources (30 MB of RAM and less than 1% of one of the eight CPU cores), so I decided to share it with the public.
The advantages are the same as the previous solution; I also used familiar names from the original pinba_engine. I also added a configuration that allows launching multiple instances of the Pinba server at once to store metrics in different tables, which is useful if you want to collect data not only from PHP but also from Nginx.
Disadvantages - 'fatal drawback' and minor issues that may not suit you personally, but my solution is 'as simple as a shoe' and consists of only about 100 lines of code, so any PHP developer can change what they dislike in a couple of minutes.
Načelo rada
UDP port 30002 is being listened to. All incoming packets are decoded according to the Protobuf schema and aggregated. Once a minute, a batch is inserted into ClickHouse in the table pinba.requests. (all parameters are configured in )
A bit about ClickHouse.
ClickHouse supports various data storage engines. The most commonly used one is MergeTree.
Ako u nekom trenutku odlučite pohranjivati agregirane podatke za cijelo vrijeme, dok sirove podatke samo za najnovije, možete stvoriti materialized view s grupiranjem, dok glavnu tablicu pinba.requests povremeno čistite, pri čemu će svi podaci ostati u materialized view. Štoviše, prilikom stvaranja tablice pinba.requests možete navesti «engine = Null», tada sirovi podaci neće uopće biti pohranjeni na disk, a ipak će i dalje ulaziti u materialized view i pohranjivati se agregirani. Ovu shemu koristim za metrike nginx, jer na nginx imam 50 puta više zahtjeva nego na php.
Dakle, prošli ste dug put i ne bih vas želio ostaviti na pola puta, pa će sljedeće biti detaljan opis instalacije i konfiguracije mog rješenja i svega što će vam trebati, kao i zamke o koje se brodovi nisu jednom nasukali. Cijeli proces instalacije opisan je za Ubuntu 18.04 LTS i Centos 7, na drugim distribucijama i verzijama proces može malo varirati.
Instalacija
Sve potrebne naredbe sam izdvojio u za olakšanje reproducibilnosti uputa. U nastavku će biti opisane samo zamke.
php-pinba
Nakon instalacije provjerite da li su u datoteci /etc/php/7.2/fpm/conf.d/20-pinba.ini odkomentirane sve opcije. U nekim distribucijama (na primjer, centos) mogu biti zakomentarirane.
extension=pinba.so
pinba.enabled=1
pinba.server=127.0.0.1:30002clickhouse
Tijekom instalacije clickhouse će vas zamoliti da postavite lozinku za korisnika default. Prema zadanim postavkama ovaj korisnik je dostupan sa svih IP adresa, stoga, ako na serveru nemate vatrozid, obavezno mu postavite lozinku. To se također može učiniti nakon instalacije u datoteci /etc/clickhouse-server/users.xml.
Također, treba 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 se ovaj port već koristi, možete ga promijeniti na drugi u datoteci /etc/clickhouse-server/config.xml.
grafana s dodacima za clickhouse
Nakon instalacije grafane upotrijebite korisničko ime admin i lozinku admin. Prilikom prvog prijavljivanja grafana će vas zamoliti da postavite novu lozinku.
Zatim idite u izbornik «+» -> import i navedite broj nadzorne ploče za uvoz . Ova nadzorna ploča je pripremljena i učitana kako vam ne bi bilo potrebno ponovno je izrađivati.
Grafana podržava rad s ClickHouseom putem dodatka treće strane, no upozorenja ne rade za dodatke treće strane (zahtjev za to postoji već godinama).
pinba-server
Instalacija protobuf i libevent nije obavezna, ali poboljšava performanse pinba-servera. Ako instalirate pinba-server u direktorij različit od /opt, također ćete morati prilagoditi datoteke.
pinba-modul za nginx
Za kompilaciju modula potrebni su izvori iste verzije nginxa koja je već instalirana na vašem poslužitelju, kao i iste opcije kompilacije, inače će kompilacija proći uspješno, ali će prilikom povezivanja modula doći do greške da je "modul binarno nekompatibilan". Opcije kompilacije možete vidjeti pomoću naredbe nginx -V.
Life hacks
Sve moje web stranice rade samo putem https. Polje shema postaje besmisleno, stoga ga koristim za razdvajanje web/konsole.
U skriptama dostupnim s weba koristi se:
if (ini_get('pinba.enabled')) {
pinba_schema_set('web');
}
A u konzolnim (na primjer, cron skripte):
if (ini_get('pinba.enabled')) {
pinba_schema_set('console');
}Na mom kontrolnom panelu u Grafani postoji prekidač web/konsole za pregled statistike odvojeno.
Također u Pinbi možete prenijeti svoje oznake, na primjer:
pinba_tag_set('country', $countryCode);To je to.
Temeljito vas molim da odgovorite na ankete ispod članka.
Tradicionalno upozoravam da ne konzultiram i ne pomažem putem privatnih poruka na Habu i društvenim mrežama.
Otvorite zahtjev na GitHubu.
Također molim da podržite lajkovima ovog članka .
Samo registrirani korisnici mogu sudjelovati u anketi. , molimo.
Koji OS koristite na poslužitelju?
Ubuntu
CentOS
Debian
Gentoo
Red Hat
Fedora
Dostupna je prva verzija skripte Archify koja omogućava prelazak na Arch Linux s drugih distribucija, zadržavajući korisnike, sadržaj direktorija /home i točke montiranja.
SuSE
Unix
Windows
drugo
Glasalo je 114 korisnika. Suzdržalo se 11 korisnika.
Koju verziju PHP-a koristite na poslužitelju?
7.3
7.2
7.1
7.0
5
drugo
Glasalo je 105 korisnika. Suzdržalo se 17 korisnika.
Jeste li ikada koristili Pinbu?
da
ne, ali bih volio
ne i ne bih volio
ne i nisam čuo za nju
Glasalo je 100 korisnika. Suzdržalo se 14 korisnika.
Koju verziju pinba-servera biste željeli isprobati?
pinba_engine (mysql engine)
pinba2 (mysql engine)
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)
napisat ću svoju verziju
drugo
Glasalo je 39 korisnika. Suzdržalo se 47 korisnika.
Izvor: habr.com
