Statistiky a sledování PHP skriptů v reálném čase. ClickHouse a Grafana přicházejí na pomoc Pinba

V tomto článku vám řeknu, jak používat pinbu s clickhousem a grafana místo pinba_engine a pinboard.

Na projektu PHP je pinba možná jediný spolehlivý způsob, jak pochopit, co se děje s výkonem. Je pravda, že pinba se obvykle implementuje pouze tehdy, když jsou již pozorovány problémy a není jasné, „kam kopat“.

Často nikdo netuší, kolikrát za sekundu/minutu se ten či onen skript volá, a začnou optimalizovat „dotykem“, počínaje těmi místy, která se zdají logičtější.

Někteří analyzují protokoly nginx, zatímco jiní analyzují pomalé databázové dotazy.

Pinba by samozřejmě nebyla zbytečná, ale existuje několik důvodů, proč ji nemá každý projekt.

Statistiky a sledování PHP skriptů v reálném čase. ClickHouse a Grafana přicházejí na pomoc Pinba

A prvním důvodem je instalace.

Abychom si z implementace Pinby víceméně „vyčerpali“, je velmi žádoucí vidět metriky nejen za poslední minuty, ale i za dlouhé časové období (od dnů po měsíce).

Za tímto účelem:

  • nainstalovat rozšíření pro php (a možná budete chtít modul pro nginx)
  • kompilovat rozšíření pro mysql
  • nainstalovat nástěnku a nakonfigurovat cron

Vzhledem k malému množství informací o Pinbě má mnoho lidí dojem, že fungovala pouze na PHP5 a je již dávno minulostí, ale jak uvidíme později, není tomu tak.

První krok je nejjednodušší, vše, co musíte udělat, je spustit příkaz:

apt install php-pinba

Toto rozšíření je dostupné v repozitářích do php 7.3 včetně a nemusíte nic kompilovat.

Po provedení instalačního příkazu okamžitě obdržíme funkční rozšíření, které shromažďuje a odesílá metriky pro každý skript (doba běhu, paměť atd.) ve formátu protobuf přes udp na 127.0.0.1:30002.

Tyto UDP pakety zatím nikdo nezachytil ani nezpracoval, ale nijak to negativně neovlivňuje rychlost ani stabilitu vašich PHP skriptů.

Až donedávna byla jedinou aplikací, která dokázala zachytit a zpracovat tyto UDP pakety pinba_engine. popis"jednoduché a výstižné"instalace odrazuje od touhy ještě někdy číst a ponořit se do ní. Kilometrové seznamy závislostí obsahují jak názvy balíčků, tak názvy programů a odkazy na jednotlivé stránky s jejich instalací a ty mají vlastní odkazy na další závislosti. Nikdo nemá čas ani chuť se tímhle svinstvem zabývat.

Proces instalace pinba2 ne hlavně jednodušší.

Možná, že někdy bude možné nainstalovat pinba10 jedním nebo dvěma příkazy a nebudete muset číst spoustu materiálů, abyste pochopili, jak na to, ale prozatím tomu tak není.

Pokud si pinba_engine nainstalujete, pak je to jen polovina úspěchu. Ostatně bez nástěnka budete se muset omezit na data z posledních několika minut, nebo budete muset data agregovat, ukládat a vizualizovat sami. Je dobré, že použití nástěnky je docela jednoduché instalace.

Zdálo by se, proč takové utrpení, když jsou všechny metriky z php již odesílány na port udp ve formátu protobuf a stačí napsat aplikaci, která je zachytí a uloží do nějakého úložiště? Zřejmě ti vývojáři, kteří s tímto nápadem přišli, okamžitě sedli k sepsání vlastních nápadů, z nichž některé skončily na GitHubu.

Následuje přehled čtyř open source projektů, které ukládají metriky do úložiště, ze kterých lze tato data snadno získat a vizualizovat například pomocí grafana.

olegfedoseev/pinba-server (listopad 2017)

udp server na cestách, který ukládá metriky do OpenTSDB. Snad pokud již OpenTSDB ve svém projektu používáte, tak vám toto řešení bude vyhovovat, jinak doporučuji přejít.

olegfedoseev/pinba-influxdb (červen 2018)

udp server na cestách, ze stejného prohlížeč, který tentokrát ukládá metriky do InfluxDB. Mnoho projektů již používá InfluxDB pro monitorování, takže toto řešení může být pro ně perfektní.

výhody:

  • InfluxDB umožňuje agregovat přijaté metriky a po určité době odstranit původní.

nevýhody:

ClickHouse-Ninja/Proton (leden 2019)

udp server on go, který ukládá metriky v ClickHouse. Toto je řešení mého přítele. Až po seznámení jsem se rozhodl, že je čas pustit se do Pinbu a Clickhouse.

výhody:

  • Clickhouse je pro takové úkoly ideální; umožňuje komprimovat data natolik, že můžete ukládat všechna nezpracovaná data i bez agregací
  • v případě potřeby můžete výsledné metriky snadno agregovat
  • hotová šablona pro grafana
  • ukládá informace o časovačích

nevýhody:

  • fatální chyba
  • neexistuje žádná konfigurace, ve které byste mohli konfigurovat název databáze a tabulek, adresu a port serveru.
  • při ukládání nezpracovaných dat se k ukládání adres stránek a domén používá pomocná slovníková tabulka, což komplikuje následné dotazy
  • další drobnosti, které vyplývají z prvního mínusu

pinba-server/pinba-server (duben 2019)

udp server v php, který ukládá metriky v ClickHouse. Toto je moje řešení, které je výsledkem seznámení se s pinba, ClickHouse a protobuf. Zatímco jsem celou tuhle partu třídil, napsal jsem „proof of concept“, který pro mě nečekaně nespotřeboval značné prostředky (30 MB RAM a méně než 1 % jednoho z osmi procesorových jader), takže rozhodla se o to podělit s veřejností.

Výhody jsou stejné jako u předchozího řešení, také jsem použil obvyklé názvy z původního pinba_engine. Přidal jsem také konfiguraci, která vám umožňuje spustit několik instancí serveru pinbase najednou, abyste uložili metriky v různých tabulkách - to je užitečné, pokud chcete sbírat data nejen z php, ale také z nginx.
Nevýhody - „fatální chyba“ a takové drobnosti, které vám osobně nebudou vyhovovat, ale moje řešení je „jednoduché jako bačkora“ a skládá se pouze z cca 100 řádků kódu, takže každý PHP vývojář může změnit, co se mu nelíbí za několik minut.

Princip činnosti

Poslouchá se UDP port 30002. Všechny příchozí pakety jsou dekódovány podle schématu protobuf a agregovány. Jednou za minutu se paket vloží do clickhouse do tabulky pinba.requests. (všechny parametry se konfigurují v config)

Něco málo o clickhouse

Clickhouse podporuje různé motory pro ukládání dat. Nejčastěji používaným je MergeTree.

Pokud se v určitém okamžiku rozhodnete uložit agregovaná data pro celou dobu a nezpracovaná data pouze pro poslední, pak můžete vytvořit materializovaný pohled se seskupením a pravidelně čistit hlavní tabulku pinba.requests, zatímco všechna data zůstanou v materializovaný pohled. Navíc při vytváření tabulky pinba.requests můžete zadat „engine = Null“, pak se nezpracovaná data vůbec neuloží na disk a zároveň budou stále končit v materializovaném pohledu a budou uložena agregovaná . Toto schéma používám pro metriky nginx, protože na nginx mám 50krát více požadavků než na php.

Tak to jste ušli dlouhou cestu a nerad bych vás nechal na půli cesty, takže následuje podrobný popis instalace a konfigurace mého řešení a všeho potřebného a také úskalí, která způsobila nejednu loď havarovat. Celý instalační proces je popsán pro Ubuntu 18.04 LTS a Centos 7, u jiných distribucí a verzí se může tento proces mírně lišit.

Instalace

Zadal jsem všechny potřebné příkazy dockerfile pro usnadnění reprodukovatelnosti pokynů. Níže budou popsána pouze úskalí.

php-pinba

Po instalaci se ujistěte, že v souboru /etc/php/7.2/fpm/conf.d/20-pinba.ini jste odkomentovali všechny možnosti. U některých distribucí (např. centos) mohou být zakomentovány.

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

clickhouse

Během instalace vás clickhouse požádá o nastavení hesla pro výchozího uživatele. Ve výchozím nastavení je tento uživatel přístupný ze všech IP adres, takže pokud na svém serveru nemáte firewall, nezapomeňte pro něj nastavit heslo. To lze také provést po instalaci do souboru /etc/clickhouse-server/users.xml.

Za zmínku také stojí, ž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 již tento port používáte, můžete jej změnit na jiný v souboru /etc/clickhouse-server/config.xml.

grafana s pluginem 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 řídicího panelu pro import 10011. Připravil jsem a nahrál jsem tento řídicí panel, abyste to nemuseli znovu dělat sami.

Grafana podporuje práci s clickhousem prostřednictvím pluginu třetích stran, Grafana však nemá upozornění na pluginy třetích stran (tam již několik let existuje lístek).

pinba-server

Instalace protobuf a libevent je volitelná, ale zlepšuje výkon serveru pinba. Pokud instalujete pinba-server do jiné složky než /opt, budete také muset opravit systemd skript soubor.

modul pinba pro nginx

Ke kompilaci modulu potřebujete zdrojové kódy stejné verze nginx, která je již nainstalována na vašem serveru, a také stejné možnosti kompilace, jinak bude sestavení úspěšné, ale při připojování modulu bude vyvolána chyba, že "modul není binárně kompatibilní." Možnosti kompilace lze zobrazit pomocí příkazu nginx -V

Životní hacky

Všechny mé stránky fungují pouze na https. Pole schéma ztrácí smysl, takže jej používám k oddělení webu/konzole.

Ve skriptech, které jsou přístupné z webu, používám:

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

A ve skriptech konzoly (například skripty cron):

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

Na mém dashboardu v Grafaně je přepínač web/konzole pro samostatné prohlížení statistik.

Své značky můžete také odeslat společnosti Pinba, například:

pinba_tag_set('country', $countryCode);

To je vše.

Odpovězte prosím na ankety pod článkem.

Jako obvykle upozorňuji, že neradím ani nepomáhám prostřednictvím osobních zpráv na Habr a sociálních sítích.

Vytvořte lístek na Github.

Prosíme také o podporu lajky anglická verze tento článek na redditu.

Průzkumu se mohou zúčastnit pouze registrovaní uživatelé. Přihlásit se, prosím.

Jaký OS používáš na serveru?

  • ubuntu

  • CentOS

  • Debian

  • Gentoo

  • Red Hat

  • Fedora

  • OpenSUSE

  • NÁS

  • Unix

  • Windows

  • další

Hlasovalo 114 uživatelů. 11 uživatelů se zdrželo hlasování.

Jakou verzi php používáte na serveru?

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • další

Hlasovalo 105 uživatelů. 17 uživatelů se zdrželo hlasování.

Použili jste někdy pinbu?

  • ano

  • ne, ale chtěl bych

  • ne a nechtěl bych

  • ne a neslyšet o ní

Hlasovalo 100 uživatelů. 14 uživatelů se zdrželo hlasování.

Jakou verzi serveru Pinba byste chtěli vyzkoušet?

  • pinba_engine (mysql engine)

  • pinba2 (mysql engine)

  • nástěnka (php + mysql)

  • olegfedoseev/pinba-server (go + OpenTSDB)

  • olegfedoseev/pinba-influxdb (go + influxdb)

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

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

  • Sám si napíšu svůj

  • další

Hlasovalo 39 uživatelů. 47 uživatelů se zdrželo hlasování.

Zdroj: www.habr.com

Přidat komentář