Štatistiky a sledovanie PHP skriptov v reálnom čase. ClickHouse a Grafana prichádzajú na pomoc Pinbovi

V tomto článku vám poviem, ako používať pinba s clickhouse a grafana namiesto pinba_engine a pinboard.

Na projekte PHP je pinba možno jediný spoľahlivý spôsob, ako pochopiť, čo sa deje s výkonom. Je pravda, že pinba sa zvyčajne implementuje iba vtedy, keď sú už pozorované problémy a nie je jasné, „kam kopať“.

Často nikto netuší, koľkokrát za sekundu/minútu sa volá ten či onen skript a začnú sa optimalizovať „dotykom“, pričom začínajú od miest, ktoré sa zdajú logickejšie.

Niektorí analyzujú protokoly nginx, zatiaľ čo iní analyzujú pomalé databázové dotazy.

Samozrejme, pinba by nebola zbytočná, no dôvodov, prečo ju nemá každý projekt, je niekoľko.

Štatistiky a sledovanie PHP skriptov v reálnom čase. ClickHouse a Grafana prichádzajú na pomoc Pinbovi

A prvým dôvodom je inštalácia.

Aby sme si z implementácie Pinba viac-menej vydýchli, je veľmi žiaduce vidieť metriky nielen za posledné minúty, ale aj za dlhé časové obdobie (od dní po mesiace).

Pre to potrebujete:

  • nainštalovať rozšírenie pre php (a možno budete chcieť modul pre nginx)
  • kompilovať rozšírenie pre mysql
  • nainštalujte nástenku a nakonfigurujte cron

Kvôli malému množstvu informácií o Pinbe má veľa ľudí dojem, že fungovala len na PHP5 a je už dávno minulosťou, no ako uvidíme neskôr, nie je to tak.

Prvý krok je najjednoduchší, všetko, čo musíte urobiť, je spustiť príkaz:

apt install php-pinba

Toto rozšírenie je dostupné v repozitároch do php 7.3 vrátane a nemusíte nič kompilovať.

Po vykonaní inštalačného príkazu okamžite dostaneme funkčné rozšírenie, ktoré zhromažďuje a odosiela metriky pre každý skript (doba behu, pamäť atď.) vo formáte protobuf cez udp na 127.0.0.1:30002.

Zatiaľ tieto UDP pakety nikto nezachytil ani nespracoval, ale nijako to negatívne neovplyvňuje rýchlosť alebo stabilitu vašich PHP skriptov.

Až donedávna bola jedinou aplikáciou, ktorá dokázala zachytiť a spracovať tieto UDP pakety pinba_engine. popis "jednoduché a výstižné“ inštalácia odrádza od túžby ešte niekedy čítať a ponoriť sa do nej. Kilometrové zoznamy závislostí obsahujú ako názvy balíkov, tak aj názvy programov a odkazy na jednotlivé stránky s ich inštaláciou a tie majú svoje odkazy na ďalšie závislosti. Nikto nemá čas ani chuť sa týmto svinstvom zaoberať.

Postup inštalácie pinba2 nie hlavne ľahšie.

Možno jedného dňa bude možné nainštalovať pinba10 pomocou jedného alebo dvoch príkazov a nebudete musieť čítať veľa materiálov, aby ste pochopili, ako to urobiť, ale zatiaľ to tak nie je.

Ak si pinba_engine nainštalujete, je to len polovica úspechu. Predsa bez nástenná tabuľa budete sa musieť obmedziť len na údaje z posledných minút, alebo budete musieť údaje agregovať, ukladať a vizualizovať sami. Je dobré, že nástenná tabuľa sa používa pomerne jednoducho inštalácia.

Mohlo by sa zdať, prečo také utrpenie, ak sú všetky metriky z php už odoslané na port udp vo formáte protobuf a všetko, čo potrebujete, je napísať aplikáciu, ktorá ich zachytí a uloží do nejakého úložiska? Očividne tí vývojári, ktorí prišli s týmto nápadom, sa okamžite posadili k napísaniu vlastných nápadov, z ktorých niektoré skončili na GitHub.

Nasleduje prehľad štyroch open source projektov, ktoré ukladajú metriky do úložiska, z ktorých sa dajú tieto dáta jednoducho získať a vizualizovať napríklad pomocou grafana.

olegfedoseev/pinba-server (november 2017)

udp server na cestách, ktorý ukladá metriky do OpenTSDB. Snáď, ak už OpenTSDB vo svojom projekte používate, tak vám toto riešenie bude vyhovovať, inak ho odporúčam obísť.

olegfedoseev/pinba-influxdb (jún 2018)

udp server na cestách, z toho istého prehadzovač, ktorý tentoraz ukladá metriky do InfluxDB. Mnoho projektov už používa InfluxDB na monitorovanie, takže toto riešenie môže byť pre nich ideálne.

Pros:

  • InfluxDB umožňuje agregovať prijaté metriky a po určitom čase odstrániť pôvodné.

Nevýhody:

ClickHouse-Ninja/Proton (január 2019)

udp server on go, ktorý ukladá metriky v ClickHouse. Toto je riešenie môjho priateľa. Až po zoznámení sa s tým som sa rozhodol, že je čas postaviť sa Pinbu a Clickhouse.

Pros:

  • Clickhouse je ideálny pre takéto úlohy; umožňuje komprimovať údaje natoľko, že môžete uložiť všetky nespracované údaje aj bez agregácií
  • v prípade potreby môžete výsledné metriky jednoducho agregovať
  • hotová šablóna pre grafana
  • ukladá informácie o časovačoch

Nevýhody:

  • fatálna chyba
  • neexistuje žiadna konfigurácia, v ktorej by ste mohli konfigurovať názov databázy a tabuliek, adresu a port servera.
  • pri ukladaní nespracovaných údajov sa na ukladanie adries stránok a domén používa pomocná slovníková tabuľka, čo komplikuje následné dopyty
  • ďalšie maličkosti, ktoré vyplývajú z prvého mínusu

pinba-server/pinba-server (apríl 2019)

udp server v php, ktorý ukladá metriky v ClickHouse. Toto je moje riešenie, ktoré je výsledkom zoznámenia sa s pinba, ClickHouse a protobuf. Kým som celú túto kopu triedil, napísal som „proof of concept“, ktorý pre mňa neočakávane nespotreboval významné zdroje (30 MB RAM a menej ako 1 % jedného z ôsmich procesorových jadier), takže rozhodli sa o to podeliť s verejnosťou.

Výhody sú rovnaké ako pri predchádzajúcom riešení, použil som aj zaužívané názvy z pôvodného pinba_engine. Pridal som tiež konfiguráciu, ktorá vám umožňuje spustiť niekoľko inštancií servera pinbase naraz, aby ste uložili metriky v rôznych tabuľkách - to je užitočné, ak chcete zbierať údaje nielen z php, ale aj z nginx.
Nevýhody - „fatálna chyba“ a také maličkosti, ktoré vám osobne nebudú vyhovovať, no moje riešenie je „jednoduché ako papuča“ a pozostáva len z cca 100 riadkov kódu, takže každý PHP vývojár môže zmeniť to, čo sa mu nepáči za pár minút.

Princíp činnosti

Počúva sa UDP port 30002. Všetky prichádzajúce pakety sú dekódované podľa schémy protobuf a agregované. Raz za minútu sa paket vloží do clickhouse do tabuľky pinba.requests. (všetky parametre sú nakonfigurované v config)

Trochu o clickhouse

Clickhouse podporuje rôzne motory na ukladanie údajov. Najčastejšie používaným je MergeTree.

Ak sa v určitom okamihu rozhodnete uložiť agregované údaje za celý čas a nespracované údaje iba za posledný čas, môžete vytvoriť zhmotnené zobrazenie so zoskupením a pravidelne čistiť hlavnú tabuľku pinba.requests, pričom všetky údaje zostanú v zhmotnený pohľad. Navyše, pri vytváraní tabuľky pinba.requests môžete zadať „engine = Null“, potom sa nespracované dáta vôbec neuložia na disk a zároveň skončia v materializovanom zobrazení a uložia sa agregované. . Túto schému používam pre metriky nginx, pretože na nginx mám 50-krát viac požiadaviek ako na php.

Prešli ste teda kus cesty a nerád by som vás nechal na polceste, takže nasleduje podrobný popis inštalácie a konfigurácie môjho riešenia a všetkého potrebného, ​​ako aj úskalia, ktoré spôsobila nejedna loď havarovať. Celý proces inštalácie je popísaný pre Ubuntu 18.04 LTS a Centos 7; proces sa môže mierne líšiť v iných distribúciách a verziách.

Inštalácia

Zadal som všetky potrebné príkazy Dockerfile na uľahčenie reprodukovateľnosti pokynov. Nižšie budú popísané len ú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. Na niektorých distribúciách (napr. centos) môžu byť komentované.

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

clickhouse

Počas inštalácie vás clickhouse požiada o nastavenie hesla pre predvoleného používateľa. V predvolenom nastavení je tento používateľ prístupný zo všetkých adries IP, takže ak na svojom serveri nemáte bránu firewall, nezabudnite pre ňu nastaviť heslo. Dá sa to urobiť aj po inštalácii do súboru /etc/clickhouse-server/users.xml.

Za zmienku tiež stojí, že clickhouse používa niekoľko portov vrátane 9000. Tento port sa v niektorých distribúciách používa aj pre php-fpm (napríklad centos). Ak už tento port používate, môžete ho zmeniť na iný v súbore /etc/clickhouse-server/config.xml.

grafana s pluginom clickhouse

Po nainštalovaní Grafany použite prihlasovacie meno admin a heslo admin. Keď sa prvýkrát prihlásite, Grafana vás požiada o nastavenie nového hesla.

Ďalej prejdite do ponuky „+“ -> import a zadajte číslo ovládacieho panela na import 10011. Tento informačný panel som pripravil a nahral, ​​aby ste to už nemuseli robiť sami.

Grafana podporuje prácu s clickhouse cez plugin tretej strany, ale Grafana nemá upozornenia na pluginy tretích strán (na to existuje lístok už niekoľko rokov).

pinba-server

Inštalácia protobuf a libevent je voliteľná, ale zlepšuje výkon servera pinba. Ak nainštalujete pinba-server do iného priečinka ako /opt, budete tiež musieť opraviť systemd skript súbor.

modul pinba pre nginx

Na zostavenie modulu potrebujete zdrojové kódy rovnakej verzie nginx, ktorá je už nainštalovaná na vašom serveri, ako aj rovnaké možnosti kompilácie, inak bude zostava úspešná, ale pri pripájaní modulu sa zobrazí chyba, že "modul nie je binárne kompatibilný." Možnosti kompilácie je možné zobraziť pomocou príkazu nginx -V

Životné hacky

Všetky moje stránky fungujú iba na https. Pole schémy stráca zmysel, takže ho používam na oddelenie webu/konzoly.

V skriptoch, ktoré sú prístupné z webu, používam:

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

A v skriptoch konzoly (napríklad skripty cron):

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

Na mojom dashboarde v Grafane je prepínač web/konzola na samostatné prezeranie štatistík.

Svoje značky môžete poslať aj Pinba, napríklad:

pinba_tag_set('country', $countryCode);

To je všetko.

Odpovedzte na ankety pod článkom.

Ako obvykle upozorňujem, že neradím a nepomáham cez osobné správy na Habr a sociálnych sieťach.

Vytvorte si lístok na Github.

Podporte prosím aj lajkom Anglická verzia tento článok na reddite.

Do prieskumu sa môžu zapojiť iba registrovaní užívatelia. Prihlásiť saProsím.

Aký OS používaš na serveri?

  • ubuntu

  • CentOS

  • debian

  • gentoo

  • Red Hat

  • Fedora

  • OpenSUSE

  • ŠVÝCARSKO

  • unix

  • Windows

  • ďalšie

Hlasovalo 114 užívateľov. 11 užívateľov sa zdržalo hlasovania.

Akú verziu php používate na serveri?

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • ďalšie

Hlasovalo 105 užívateľov. 17 užívateľov sa zdržalo hlasovania.

Použili ste niekedy pinbu?

  • áno

  • nie, ale chcel by som

  • nie a ani by som nechcel

  • nie a nie som o nej počuť

Hlasovalo 100 užívateľov. 14 užívateľov sa zdržalo hlasovania.

Ktorú verziu servera Pinba by ste chceli vyskúšať?

  • pinba_engine (mysql engine)

  • pinba2 (mysql engine)

  • nástenná tabuľa (php + mysql)

  • olegfedoseev/pinba-server (go + OpenTSDB)

  • olegfedoseev/pinba-influxdb (go + influxdb)

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

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

  • Svoje si napíšem sám

  • ďalšie

Hlasovalo 39 užívateľov. 47 užívateľov sa zdržalo hlasovania.

Zdroj: hab.com

Pridať komentár