V tomto článku vám ukážem, ako používať Pinba spolu s ClickHouse a Grafana namiesto pinba_engine a pinboard.
Na php-projekte je Pinba pravdepodobne jediný spoľahlivý spôsob, ako pochopiť, čo sa deje s výkonnosťou. Pravda, zvyčajne sa Pinba zavádza iba vtedy, keď už sa pozorujú problémy a nie je jasné, "kde kopať".
Často nikto nemá predstavu, koľkokrát za sekundu/minútu sa volá ten alebo onen skript, a snažia sa optimalizovať "na pocit", začínajúc od miest, ktoré sa zdajú logické.
Niekto analyzuje logy nginx, iný pomalé požiadavky v DB.
Samozrejme, Pinba by nebola na škodu, ale existuje niekoľko dôvodov, prečo nie je na každom projekte.
A prvý dôvod je inštalácia.
Aby ste dosiahli nejaký "výstup" zo zavedenia Pinby, je veľmi žiaduce vidieť metriky nielen za posledné minúty, ale aj na dlhšom časovom úseku (od dní po mesiace).
Na to potrebujete:
- nainštalovať rozšírenie pre PHP (a možno budete chcieť modul pre nginx)
- skompilovať rozšírenie pre MySQL
- nainštalovať Pinboard a nastaviť cron
Z nedostatočného množstva informácií o Pinbe má mnohí dojem, že fungovala iba na PHP5 a už je dávno minulosťou, ale ako uvidíme ďalej — to nie je pravda.
Prvý krok je najjednoduchší, stačí vykonať príkaz:
apt install php-pinbaV repozitároch je toto rozšírenie až do PHP 7.3 vrátane a nemusíte nič kompilovať.
Po vykonaní príkazu inštalácie okamžite získame už pracujúce rozšírenie, ktoré zbiera a posiela metriky každého skriptu (dĺžka behu, pamäť atď.) v formáte. cez UDP na 127.0.0.1:30002.
Tieto UDP pakety zatiaľ nikto nezachytáva ani nepracuje s nimi, ale nijako to negatívne neovplyvňuje rýchlosť alebo stabilitu práce vašich PHP skriptov.
Do nedávna bol ako aplikácia, ktorá mohla zachytávať a spracovávať tieto UDP pakety, iba . Opis "Inštalácia odrádza od toho, aby ste to niekedy znova čítali a rozumeli. V kilometrových zoznamoch závislostí sú názvy balíkov, názvy programov a odkazy na jednotlivé stránky s ich inštaláciou, pričom tie majú svoje odkazy na ďalšie závislosti. Nikto nemá čas ani chuť sa s touto hlúposťou zaoberať.
Proces inštalácie sa neuskutočnil .
Možno raz bude možné nainštalovať pinba10 jednou alebo dvoma príkazmi a nebude potrebné čítať množstvo materiálu, aby ste pochopili, ako to urobiť, ale zatiaľ to tak nie je.
Ak ste však predsa len nainštalovali pinba_engine, to je len polovica práce. Veď bez budete musieť obmedziť dáta len na posledných niekoľko minút alebo si sami agregovať, ukladať a vizualizovať dáta. Našťastie je pinboard dosť jednoduchý na .
Zdalo by sa, prečo sa mučiť, ak všetky metriky z php už idú na udp port vo formáte protobuf a všetko, čo potrebujete, je napísať aplikáciu, ktorá ich zachytí a uloží do nejakého úložiska? Zjavne vývojári, ktorí mali túto myšlienku v hlave, hneď sadli za písanie svojich bicyklov, z ktorých niektoré sa dostali na GitHub.
Nasleduje prehľad štyroch open-source projektov, ktoré ukladajú metriky do úložísk, z ktorých sa dajú ľahko získať a vizualizovať, napríklad pomocou grafany.
(november 2017)
udp server na go, ktorý uchováva metriky v OpenTSDB. Ak už vo vašom projekte používate OpenTSDB, môže sa vám toto riešenie hodiť, inak odporúčam prejsť okolo.
(jún 2018)
udp server na go, od toho istého , ktorý tentoraz uchováva metriky v InfluxDB. Na mnohých projektoch sa už teraz používa InfluxDB na monitorovanie, takže pre nich môže byť toto riešenie ideálne.
Výhody:
- InfluxDB agregovať získané metriky a originál mazať po určitom čase.
Nevýhody:
- toto riešenie neuchováva informácie k časovačom.
- InfluxDB ukladá adresy stránok ako tagy a ak máte veľa unikátnych adres stránky, povedie to k operačnej pamäte. Z určitého momentu začne "«. ()
(január 2019)
UDP server na Go, ktorý ukladá metriky do ClickHouse. Toto je riešenie môjho priateľa. Práve po oboznámení sa s ním som sa rozhodol, že je čas začať s Pinba a ClickHouse.
Výhody:
- ClickHouse je ideálny na takéto úlohy, umožňuje komprimovať dáta natoľko, že môžete skladovať všetky surové dáta aj bez agregácií.
- Ak je to potrebné, môžete ľahko agregovať získané metriky.
- Hotový šablón pre Grafanu.
- Ukladá informácie podľa časovačov.
Nevýhody:
- Nie je tu konfigurácia, v ktorej by sa dalo nastaviť názov DB a tabuliek, adresu a port servera.
- Pri ukladaní surových dát sa používa pomocná tabuľka-slovník na uchovávanie adries stránok a domén, čo zložitosti následne sťažuje dotazy.
- Iné drobnosti, ktoré vyplývajú z prvého mínusu.
(apríl 2019)
UDP server na PHP, ktorý ukladá metriky do ClickHouse. Toto je moje riešenie, ktoré vzniklo zo spoznania Pinba, ClickHouse a Protobuf. Kým som sa zaoberal touto kombináciou, napísal som „proof of concept“, ktorý, prekvapivo, nepoužíval značné zdroje (30 MB RAM a menej ako 1 % z jedného z ôsmych jadier procesora), preto som sa rozhodol podeliť sa oň s verejnosťou.
Výhody — tie isté ako pri predchádzajúcom riešení, navyše som použil známe názvy z originálnej Pinba_engine. Pridal som aj konfiguráciu, ktorá umožňuje spustiť viac inštancií Pinba servera so skladovaním metrík do rôznych tabuliek — to je užitočné, ak by ste chceli zbierať dáta nielen z PHP, ale aj z Nginx.
Nevýhody — „fatálny nedostatok“ a tie drobnosti, ktoré vás osobne neuspokoja, ale moje riešenie je „jednoduché ako papuča“ a pozostáva len z približne 100 riadkov kódu, takže každý PHP vývojár môže za pár minút prispôsobiť čokoľvek, čo mu nevyhovuje.
Princíp fungovania
Počúva sa UDP port 30002. Všetky prichádzajúce pakety sú dekódované podľa Protobuf schémy a agregované. Raz za minútu sa vykoná vkladanie balíka do ClickHouse do tabuľky pinba.requests. (všetky parametre sa dajú nastaviť v )
Trochu o ClickHouse
ClickHouse podporuje rôzne úložné motory. Najčastejšie používaný je MergeTree.
Ak sa niekedy rozhodnete uchovávať agregované údaje za celé obdobie a surové len za posledné, môžete vytvoriť materializovaný pohľad s agregáciou a základnú tabuľku pinba.requests pravidelne čistiť, pričom všetky údaje zostanú v materializovanom pohľade. Navyše pri vytváraní tabuľky pinba.requests môžete nastaviť „engine = Null“, vtedy sa surové údaje vôbec nebudú ukladať na disk, ale stále sa objavia v materializovanom pohľade a budú uložené agregované. Tento systém používam pre metriky nginx, pretože na nginx mám 50-krát viac požiadaviek ako na php.
Takže ste prešli dlhú cestu a nechcel by som vás nechať na pôli cesty, preto budú nasledovať podrobnosti o inštalácii a nastavení môjho riešenia a všetko, čo budete potrebovať, ako aj úskalia, na ktorých stroskotalo niekoľko lodí. Celý proces inštalácie je opísaný pre Ubuntu 18.04 LTS a Centos 7, na iných distribúciách a verziách sa proces môže mierne líšiť.
Inštalácia
Všetky potrebné príkazy som zhrnul v na uľahčenie reprodukovateľnosti pokynov. Nižšie budú opísané iba úskalia.
php-pinba
Po inštalácii sa uistite, že v súbore /etc/php/7.2/fpm/conf.d/20-pinba.ini máte odkomentované všetky možnosti. V niektorých distribúciách (napríklad centos) môžu byť zakomentované.
extension=pinba.so
pinba.enabled=1
pinba.server=127.0.0.1:30002clickhouse
Počas inštalácie clickhouse vás požiada, aby ste zadali heslo pre používateľa default. Predvolene je tento používateľ dostupný zo všetkých IP adries, takže ak na serveri nemáte firewall, určite mu nastavte heslo. To môžete urobiť aj po inštalácii v súbore /etc/clickhouse-server/users.xml.
Je tiež dobré si uvedomiť, že clickhouse používa niekoľko portov, vrátane 9000. Tento port používajú aj php-fpm v niektorých distribúciách (napríklad centos). Ak už používate tento port, môžete ho zmeniť na iný v súbore /etc/clickhouse-server/config.xml.
grafana s pluginom pre clickhouse
Po inštalácii grafany použite prihlasovacie údaje admin a heslo admin. Pri prvom prihlásení vás grafana požiada o nastavenie nového hesla.
Potom prejdite do menu „+“ -> import a zadajte číslo dashboardu na import . Tento dashboard som pripravil a nahral, aby ste ho nemuseli vytvárať sami znova.
Grafana podporuje prácu s ClickHouse cez externý plugin, ale pre externé pluginy v Grafane nefungujú upozornenia (ticket na to je otvorený už niekoľko rokov).
pinba-server
Inštalácia protobuf a libevent nie je povinná, ale zlepšuje výkon pinba-servera. Ak nainštalujete pinba-server do iného adresára ako /opt, musíte tiež upraviť súbor.
pinba modul pre nginx
Na kompiláciu modulu potrebujete zdrojové kódy tej istej verzie nginx, ktorá už je nainštalovaná na vašom serveri, ako aj rovnaké možnosti kompilácie, inak sa kompilácia úspešne skončí, ale pri pripojení modulu sa objaví chyba, že "modul je binárne nekompatibilný". Možnosti kompilácie môžete zistiť pomocou príkazu nginx -V
Tipy
Všetky moje webové stránky fungujú len cez https. Pole schema sa stáva bezvýznamným, preto ho používam na rozdelenie web/console.
V skriptoch, ktoré sú dostupné z webu, používam:
if (ini_get('pinba.enabled')) {
pinba_schema_set('web');
}
A v konzolových (napríklad cron skriptoch):
if (ini_get('pinba.enabled')) {
pinba_schema_set('console');
}V mojom dashboarde v Grafane je prepináč web/console pre zobrazenie štatistiky oddelene.
Takisto v Pinbe môžete odosielať svoje vlastné tagy, napríklad:
pinba_tag_set('country', $countryCode);Týmto je všetko.
Veľmi prosím odpovedať na anketu pod článkom.
Tradične varujem, že neposkytujem poradenstvo a nepomáham cez súkromné správy na Habre a sociálnych sieťach.
Založte tiket na GitHub-e.
Taktiež prosím podporujte lajkami tohto článku .
Len registrovaní používatelia sa môžu zúčastniť prieskumu. , prosím.
Aký operačný systém používate na serveri?
Ubuntu
CentOS
Debian
Gentoo
Red Hat
Fedora
OpenSUSE
SuSE
Unix
Windows
iné
Hlasovalo 114 používateľov. Zdržalo sa 11 používateľov.
Akú verziu PHP používate na serveri?
7.3
7.2
7.1
7.0
5
iné
Hlasovalo 105 používateľov. Zdržalo sa 17 používateľov.
Použili ste niekedy Pinbu?
áno
nie, ale chcel by som
nie a nechcel by som
nie a nepočul som o nej
Hlasovalo 100 používateľov. Zdržalo sa 14 používateľov.
Akú verziu pinba servera by ste chceli vyskúšať?
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)
napíšem svoju vlastnú
iné
Hlasovalo 39 používateľov. Zdržalo sa 47 používateľov.
Zdroj: habr.com
