V tomto článku vám ukážu, jak používat pinba společně s clickhouse a grafana místo pinba_engine a pinboard.
Na php projektu je pinba pravděpodobně jediný spolehlivý způsob, jak pochopit, co se děje s výkonem. Obvykle se však pinba zavádí až tehdy, když už se objeví problémy a není jasné, "kde kopat".
Často nikdo nemá ponětí, kolikrát za sekundu/minutu je volán ten který skript, a začnou optimalizovat „naslepo“, počínaje těmi místy, která se zdají logičtější.
Někdo analyzuje logy nginx, jiný zase pomalé dotazy v databázi.
Samozřejmě by pinba nebyla na škodu, ale existuje několik důvodů, proč není na každém projektu.
A prvním důvodem je instalace.
Abychom získali nějaký „výstup“ z implementace pinby, je velmi žádoucí vidět metriky nejen za poslední minuty, ale i za delší časové období (od dnů po měsíce).
K tomu je potřeba:
- nainstalovat rozšíření pro php (a možná budete chtít modul pro nginx)
- zkompilovat rozšíření pro mysql
- nainstalovat pinboard a nastavit cron
Z důvodu nedostatku informací o pinbě má mnoho lidí dojem, že fungovala pouze na php5 a už dávno patří do minulosti, ale jak uvidíme dále — to není pravda.
První krok je nejjednodušší, stačí provést příkaz:
apt install php-pinbaV repozitářích je toto rozšíření až do php 7.3 včetně a není potřeba nic kompilovat.
Po vykonání instalačního příkazu okamžitě získáme již fungující rozšíření, které sbírá a odesílá metriky každého skriptu (doba běhu, paměť atd.) ve formátu po udp na 127.0.0.1:30002.
Tyto udp pakety zatím nikdo nezachycuje a nezpracovává, ale to nemá žádný špatný vliv na rychlost nebo stabilitu vašich php skriptů.
Až do nedávné doby byl jediným aplikací, která mohla zachytit a zpracovávat tyto udp pakety, pouze . Popis "" instalace odrazuje od toho, abychom to kdykoli znovu četli a zabývali se tím. V kilometrových seznamech závislostí jsou jak názvy balíčků, tak i názvy programů a odkazy na jednotlivé stránky s jejich instalací, a u těch své odkazy na další závislosti. Zabývat se touto záležitostí nikdo nemá čas ani chuť.
Proces instalace se nezměnil .
Možná jednoho dne bude možné nainstalovat pinba10 jedním nebo dvěma příkazy, aniž byste museli číst spoustu materiálu, abyste pochopili, jak to udělat, ale zatím to tak není.
Pokud jste přesto nainstalovali pinba_engine, je to jen polovina práce. Vždyť bez budete muset omezit svá data pouze na posledních několik minut nebo sami agregovat, ukládat a vizualizovat data. Naštěstí je pinboard dost jednoduchý na .
Zdá se, že proč podstupovat takové utrpení, když všechny metriky z php již chodí na udp port ve formátu protobuf a vše, co je potřeba, je napsat aplikaci, která je zachytí a uloží do nějakého úložiště? Zřejmě těm vývojářům, kteří měli tuto myšlenku na mysli, hned došlo, že si mají napsat vlastní řešení, z nichž některá se dostala na GitHub.
Dále následuje přehled čtyř open-source projektů, které ukládají metriky do úložišť, z nichž lze tato data snadno dostat a vizualizovat například pomocí grafany.
(listopad 2017)
udp server na go, který ukládá metriky do OpenTSDB. Možná, pokud už OpenTSDB používáte ve svém projektu, bude vám toto řešení vyhovovat; jinak doporučuji se tomu vyhnout.
(červen 2018)
udp server na go, od téhož , který tentokrát ukládá metriky do InfluxDB. Na mnoha projektech se již nyní pro monitoring používá InfluxDB, takže pro ně může být toto řešení ideální.
Plusy:
- InfluxDB agregovat získané metriky a originály mazat po stanovené době.
Nevýhody:
- toto řešení neuchovává informace o časovačích.
- InfluxDB bude uchovávat adresy stránek webu jako tagy a pokud máte mnoho unikátních adres stránek, povede to k operační paměti. Od určitého bodu začne "«. ()
(leden 2019)
udp server na go, který ukládá metriky do ClickHouse. Toto je řešení mého přítele. Právě po seznámení s ním jsem se rozhodl, že nastal čas věnovat se pinbě a clickhouse.
Plusy:
- clickhouse je ideálně vhodný pro tyto úkoly, umožňuje komprimovat data natolik, že můžete uchovávat všechny syrové údaje i bez agregací
- pokud je třeba, můžete jednoduše agregovat získané metriky
- hotová šablona pro grafanu
- uchovává informace o časovačích
Nevýhody:
- Není žádná konfigurace, ve které by bylo možné nastavit název databáze a tabulek, adresu a port serveru.
- Při ukládání syrových dat se používá pomocná tabulka-slovník pro uchovávání adres stránek a domén, což následně ztěžuje dotazy.
- Další drobnosti vyplývající z prvního nedostatku.
(duben 2019)
UDP server na PHP, který ukládá metriky do ClickHouse. To je moje řešení, které vzniklo během seznámení s pinba, ClickHouse a protobuf. Dokud jsem se v této kombinaci vyznal, napsal jsem "proof of concept", který, překvapivě, nepoužíval značné prostředky (30 MB operační paměti a méně než 1 % jednoho z osmi jader procesoru), proto jsem se rozhodl sdílet to s veřejností.
Klady – jsou stejné jako u předchozího řešení, navíc jsem použil obvyklé názvy z originální pinba_engine. Ještě jsem přidal konfiguraci, která umožňuje spustit více instancí pinba serveru najednou, aby se metriky ukládaly do různých tabulek – to je užitečné, pokud chcete shromažďovat data nejen z PHP, ale také z Nginx.
Zápory – "fatální nedostatek" a některé drobnosti, které vás osobně neuspokojí, ale moje řešení je "jednoduché jako lodička" a skládá se pouze z přibližně 100 řádků kódu, takže každý PHP vývojář může během pár minut změnit, co mu nevyhovuje.
Princip práce
Naslouchá se na UDP portu 30002. Všechny příchozí pakety se dekódují podle protobuf schématu a agregují. Jednou za minutu do ClickHouse se provede vložení dávky do tabulky pinba.requests. (všechny parametry jsou nastaveny v )
Něco o ClickHouse
ClickHouse podporuje různé storage engine. Nejčastěji používaný je MergeTree.
Pokud se v určitém okamžiku rozhodnete uchovávat agregovaná data za celou dobu, a syrová pouze za poslední období, můžete vytvořit materializovaný pohled s agregací, a hlavní tabulku pinba.requests pravidelně čistit, přičemž všechna data zůstanou v materializovaném pohledu. Navíc při vytváření tabulky pinba.requests můžete říct "engine = Null", pak syrová data nebudou vůbec uchovávána na disku a přesto budou stále zahrnuta do materializovaného pohledu a uchovávána agregovaná. Tento systém používám pro metriky Nginx, protože na Nginx mám 50x více požadavků než na PHP.
Máte za sebou dlouhou cestu a nechci vás nechat na půli cesty, takže níže najdete podrobný popis instalace a nastavení mého řešení a vše, co budete potřebovat, včetně úskalí, o která se ztroskotalo nejen několik lodí. Celý proces instalace je popsán pro Ubuntu 18.04 LTS a CentOS 7, u jiných distribucí a verzí se proces může mírně lišit.
Instalace
Všechny potřebné příkazy jsem shrnul do pro usnadnění reprodukovatelnosti pokynů. Níže budou popsána pouze úskalí.
php-pinba
Po instalaci se ujistěte, že ve souboru /etc/php/7.2/fpm/conf.d/20-pinba.ini máte odkomentovány všechny možnosti. V některých distribucích (například CentOS) mohou být zakomentovány.
extension=pinba.so
pinba.enabled=1
pinba.server=127.0.0.1:30002ClickHouse
Během instalace ClickHouse vás požádá, abyste nastavili heslo pro uživatele default. Ve výchozím nastavení je tento uživatel dostupný ze všech IP adres, takže pokud na serveru nemáte firewall, určitě mu nastavte heslo. To lze také provést po instalaci ve souboru /etc/clickhouse-server/users.xml.
Také je dobré si všimnout, že ClickHouse používá několik portů, včetně 9000. Tento port se také používá pro PHP-FPM v některých distribucích (například CentOS). Pokud je tento port již používán, můžete ho změnit na jiný v souboru /etc/clickhouse-server/config.xml.
grafana s pluginem pro ClickHouse
Po instalaci Grafany použijte přihlašovací jméno admin a heslo admin. Při prvním přihlášení vás Grafana požádá o nastavení nového hesla.
Dále přejděte do nabídky «+» -> import a zadejte číslo dashboardu pro import . Tento dashboard jsem připravil a nahrál, abyste ho nemuseli vytvářet znovu sami.
Grafana podporuje práci s ClickHouse prostřednictvím externího pluginu, ale pro externí pluginy v Grafaně nefungují upozornění (ticket na to visí už několik let).
pinba-server
Instalace protobuf a libevent není povinná, ale zlepšuje výkon pinba-serveru. Pokud nainstalujete pinba-server do složky odlišné od /opt, bude také nutné upravit soubor.
pinba modul pro nginx
Pro kompilaci modulu jsou potřeba zdrojové soubory stejné verze nginx, jakou již máte nainstalovanou na serveru, a také stejné možnosti kompilace, jinak proběhne kompilace úspěšně, ale při připojení modulu bude vyhazovat chybu, že „modul je binárně nekompatibilní“. Možnosti kompilace lze zobrazit pomocí příkazu nginx -V
Tipy
Všechny mé weby fungují pouze přes https. Pole schema se tedy stává bezpředmětným, proto je používám k rozlišení webu/konzole.
Ve skriptech, které jsou dostupné z webu, používám:
if (ini_get('pinba.enabled')) {
pinba_schema_set('web');
}
A v konzolových (například cron skripty):
if (ini_get('pinba.enabled')) {
pinba_schema_set('console');
}V mém dashboardu v Grafaně je přepínač web/konzole pro zobrazení statistik odděleně.
Také do Pinby můžete předávat své tagy, například:
pinba_tag_set('country', $countryCode);To je vše.
Velice prosím o odpovědi na ankety pod článkem.
Tradičně varuji, že nekonzultuji a nepomáhám přes soukromé zprávy na Habr a v sociálních sítích.
Založte ticket na GitHubu.
Také prosím o podporu pomocí lajků tohoto článku .
Pouze registrovaní uživatelé se mohou účastnit ankety. , prosím.
Jaký operační systém na serveru používáte?
Ubuntu
CentOS
Debian
Gentoo
Red Hat
Fedora
OpenSUSE
SuSE
Unix
Windows
jiné
Hlasovalo 114 uživatelů. Zdrželo se 11 uživatelů.
Jakou verzi PHP na serveru používáte?
7.3
7.2
7.1
7.0
5
jiné
Hlasovalo 105 uživatelů. Zdrželo se 17 uživatelů.
Použili jste někdy Pinbu?
ano
ne, ale rád bych
ne a nechtěl bych
ne a neslyšel jsem o ní
Hlasovalo 100 uživatelů. Zdrželo se 14 uživatelů.
Jakou verzi Pinba serveru byste chtěli vyzkoušet?
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íšu svou vlastní
jiné
Hlasovalo 39 uživatelů. Zdrželo se 47 uživatelů.
Zdroj: habr.com
