{"id":32681,"date":"2019-10-31T21:48:22","date_gmt":"2019-10-31T18:48:22","guid":{"rendered":"https:\/\/prohoster.info\/blog\/statistika-i-monitoring-php-skriptov-v-realnom-vremeni-clickhouse-i-grafana-idut-na-pomoshh-k-pinba\/"},"modified":"2019-10-31T21:48:22","modified_gmt":"2019-10-31T18:48:22","slug":"statistika-i-monitoring-php-skriptov-v-realnom-vremeni-clickhouse-i-grafana-idut-na-pomoshh-k-pinba","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/statistika-i-monitoring-php-skriptov-v-realnom-vremeni-clickhouse-i-grafana-idut-na-pomoshh-k-pinba","title":{"rendered":"Statystyka i monitorowanie skrypt\u00f3w PHP w czasie rzeczywistym. ClickHouse i Grafana wspieraj\u0105 Pinb\u0119.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>W tym artykule opowiem, jak u\u017cywa\u0107 Pinby wraz z ClickHouse i Grafana zamiast pinba_engine i pinboard.<\/p>\n<p>Na projektach PHP Pinba to chyba jedyny niezawodny spos\u00f3b, aby zrozumie\u0107, co dzieje si\u0119 z wydajno\u015bci\u0105. Zazwyczaj Pinba jest wdra\u017cana dopiero wtedy, gdy pojawiaj\u0105 si\u0119 problemy i nie wiadomo 'gdzie szuka\u0107'.<\/p>\n<p>Cz\u0119sto nikt nie ma poj\u0119cia, ile razy na sekund\u0119\/minut\u0119 wywo\u0142ywany jest dany skrypt i zaczyna optymalizowa\u0107 'na czuja', rozpoczynaj\u0105c od tych miejsc, kt\u00f3re wydaj\u0105 si\u0119 najbardziej logiczne.<\/p>\n<p>Niekt\u00f3rzy analizuj\u0105 logi nginx, a inni wolne zapytania w bazie danych.<\/p>\n<p>Oczywi\u015bcie Pinba nie by\u0142aby zb\u0119dna, ale s\u0105 pewne powody, dla kt\u00f3rych nie wyst\u0119puje na ka\u017cdym projekcie.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/br\/zm\/qz\/brzmqzc8itwc2lt3gjp0q2p-kse.png\"><img decoding=\"async\" alt=\"Statystyka i monitorowanie skrypt\u00f3w PHP w czasie rzeczywistym. ClickHouse i Grafana wspieraj\u0105 Pinb\u0119.\" src=\"\/wp-content\/uploads\/2019\/04\/cdf2dc9af2a131d1f9aaef6bbde9b914.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nPierwszym powodem jest instalacja.<\/p>\n<p>Aby uzyska\u0107 jakiekolwiek 'wyj\u015bcie' z wdro\u017cenia Pinby, bardzo wskazane jest widzie\u0107 metryki nie tylko za ostatnie minuty, ale tak\u017ce na d\u0142u\u017cszym okresie (od dni do miesi\u0119cy).<\/p>\n<p>W tym celu nale\u017cy:<\/p>\n<ul>\n<li>zainstalowa\u0107 rozszerzenie dla PHP (mo\u017cliwe, \u017ce zechcesz r\u00f3wnie\u017c modu\u0142 dla nginx)<\/li>\n<li>skompilowa\u0107 rozszerzenie dla MySQL<\/li>\n<li>zainstalowa\u0107 pinboard i skonfigurowa\u0107 cron<\/li>\n<\/ul>\n<p>\nZ powodu niewielkiej ilo\u015bci informacji na temat Pinby, wielu wyrobi\u0142o sobie przekonanie, \u017ce dzia\u0142a\u0142a tylko na PHP5 i od dawna odesz\u0142a w przesz\u0142o\u015b\u0107, ale jak zobaczymy dalej \u2014 to nieprawda.<\/p>\n<p>Pierwszy krok \u2014 najprostszy, wystarczy wykona\u0107 polecenie:<\/p>\n<pre><code class=\"bash\">apt install php-pinba<\/code><\/pre>\n<p>\nTo rozszerzenie jest dost\u0119pne w repozytoriach a\u017c do PHP 7.3 w\u0142\u0105cznie i nie musisz nic kompilowa\u0107.<\/p>\n<p>Po wykonaniu polecenia instalacji od razu otrzymujemy dzia\u0142aj\u0105ce rozszerzenie, kt\u00f3re zbiera i wysy\u0142a metryki ka\u017cdego skryptu (czas dzia\u0142ania, pami\u0119\u0107 itd.) w formacie <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/Protocol_Buffers\">protobuf<\/a><\/noindex> przez UDP na 127.0.0.1:30002.<\/p>\n<p>Te pakiety UDP nikt obecnie nie przechwytuje ani nie przetwarza, ale nie wp\u0142ywa to negatywnie na szybko\u015b\u0107 czy stabilno\u015b\u0107 dzia\u0142ania twoich skrypt\u00f3w PHP.<\/p>\n<p>Do niedawna jedyn\u0105 aplikacj\u0105, kt\u00f3ra mog\u0142a przechwytywa\u0107 i przetwarza\u0107 te pakiety UDP by\u0142 tylko <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tony2001\/pinba_engine\">pinba_engine<\/a><\/noindex>. Opis &#171;<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/tony2001\/pinba_engine\/wiki\/Installation\">prosty i zwi\u0119z\u0142y<\/a><\/noindex>&#187; instalacja skutecznie zniech\u0119ca do ponownego czytania i zag\u0142\u0119biania si\u0119 w temat. W kilometrowych listach zale\u017cno\u015bci znajduj\u0105 si\u0119 zar\u00f3wno nazwy pakiet\u00f3w, jak i program\u00f3w oraz linki do osobnych stron z ich instalacj\u0105, a tamte maj\u0105 swoje linki do innych zale\u017cno\u015bci. Nikt nie ma ani czasu, ani ch\u0119ci, aby z tym wszystkim si\u0119 zmaga\u0107.<\/p>\n<p>Proces instalacji <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/badoo\/pinba2\">pinba2<\/a><\/noindex> nie sta\u0142 si\u0119 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/badoo\/pinba2\/blob\/master\/docs\/index.md#installation\">szczeg\u00f3lnie \u0142atwiejszy<\/a><\/noindex>.<\/p>\n<p>Mo\u017ce kiedy\u015b pinba10 uda si\u0119 zainstalowa\u0107 w jednej lub dw\u00f3ch komendach, nie przegl\u0105daj\u0105c ogromnych ilo\u015bci materia\u0142\u00f3w, ale na razie tak nie jest.<\/p>\n<p>Je\u015bli jednak uda\u0142o ci si\u0119 zainstalowa\u0107 pinba_engine, to jest to tylko po\u0142owa sukcesu. Bo bez <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intaro\/pinboard\">pinboard<\/a><\/noindex> b\u0119dziesz musia\u0142 ograniczy\u0107 si\u0119 do danych tylko z ostatnich kilku minut lub samodzielnie agregowa\u0107, przechowywa\u0107 i wizualizowa\u0107 dane. Na szcz\u0119\u015bcie pinboard jest wystarczaj\u0105co prosty w <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intaro\/pinboard\/wiki\/Installation\">instalacji<\/a><\/noindex>.<\/p>\n<p>Z pozoru, po co takie cierpienia, skoro wszystkie metryki z php ju\u017c trafiaj\u0105 na port udp w formacie protobuf, a wszystko, co trzeba zrobi\u0107, to napisa\u0107 aplikacj\u0119, kt\u00f3ra je z\u0142apie i z\u0142o\u017cy w jakie\u015b magazyn? Wygl\u0105da na to, \u017ce deweloperzy, kt\u00f3rzy wpadli na ten pomys\u0142, od razu brali si\u0119 za pisanie swoich rozwi\u0105za\u0144, z kt\u00f3rych cz\u0119\u015b\u0107 trafi\u0142a na GitHub.<\/p>\n<p>Nast\u0119pnie przedstawimy przegl\u0105d czterech projekt\u00f3w open source, kt\u00f3re zapisuj\u0105 metryki w magazynach, z kt\u00f3rych te dane mo\u017cna \u0142atwo wydoby\u0107 i wizualizowa\u0107, na przyk\u0142ad za pomoc\u0105 grafana.<\/p>\n<h4><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/olegfedoseev\/pinba-server\">olegfedoseev\/pinba-server<\/a><\/noindex> (listopad 2017) <\/h4>\n<p>\nserwer udp na go, kt\u00f3ry zapisuje metryki w OpenTSDB. Je\u015bli OpenTSDB jest ju\u017c u\u017cywany w twoim projekcie, to to rozwi\u0105zanie mo\u017ce by\u0107 odpowiednie; w przeciwnym wypadku zalecam omija\u0107 je szerokim \u0142ukiem.<\/p>\n<h4><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/olegfedoseev\/pinba-influxdb\">olegfedoseev\/pinba-influxdb<\/a><\/noindex> (czerwiec 2018)<\/h4>\n<p>\nserwer udp na go, od tego samego <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/Aryoh\/\">habrajuzera<\/a><\/noindex>, kt\u00f3ry tym razem zapisuje metryki w InfluxDB. Wiele projekt\u00f3w monitoruj\u0105cych korzysta ju\u017c obecnie z InfluxDB, wi\u0119c takie rozwi\u0105zanie mo\u017ce by\u0107 \u015bwietnie dopasowane do nich.<\/p>\n<p>Zalety:<\/p>\n<ul>\n<li>InfluxDB <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/olegfedoseev\/pinba-influxdb#influxdb-preparation\">przekazywanie<\/a><\/noindex> agregowa\u0107 otrzymane metryki, a orygina\u0142 usuwa\u0107 po zadanym czasie.<\/li>\n<\/ul>\n<p>\nWady:<\/p>\n<ul>\n<li>to rozwi\u0105zanie nie zapisuje informacji dotycz\u0105cych timer\u00f3w.<\/li>\n<li>InfluxDB b\u0119dzie przechowywa\u0107 adresy stron jako tagi, a je\u015bli masz wiele unikalnych adres\u00f3w, to prowadzi to do <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/449352\/#comment_20085878\">zwi\u0119kszonego zu\u017cycia<\/a><\/noindex> pami\u0119ci operacyjnej. Od pewnego momentu on &#171;<noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/2v\/68\/th\/2v68thch8ajln7abt-ghsmsbxgs.png\">\u017ar\u00f3d\u0142o<\/a><\/noindex>&#171;. (<noindex><a rel=\"nofollow\" href=\"https:\/\/medium.com\/@valyala\/insert-benchmarks-with-inch-influxdb-vs-victoriametrics-e31a41ae2893\">ClickHouse-Ninja\/Proton<\/a><\/noindex>)<\/li>\n<\/ul>\n<p><\/p>\n<h4><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ClickHouse-Ninja\/Proton\">(stycze\u0144 2019)<\/a><\/noindex> (stycze\u0144 2019) <\/h4>\n<p>\nserwer UDP na Go, kt\u00f3ry zapisuje metryki w ClickHouse. To rozwi\u0105zanie jest mojego przyjaciela. Po zapoznaniu si\u0119 z nim postanowi\u0142em, \u017ce czas zaj\u0105\u0107 si\u0119 Pinb\u0105 i ClickHouse.<\/p>\n<p>Zalety:<\/p>\n<ul>\n<li>ClickHouse idealnie nadaje si\u0119 do takich zada\u0144, pozwala na kompresj\u0119 danych tak, \u017ce mo\u017cesz przechowywa\u0107 wszystkie surowe dane nawet bez agregacji.<\/li>\n<li>je\u015bli zajdzie potrzeba, mo\u017cesz \u0142atwo agregowa\u0107 uzyskane metryki.<\/li>\n<li>gotowy szablon do Grafany.<\/li>\n<li>przechowuje informacje o timerach.<\/li>\n<\/ul>\n<p>\nWady:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/lurkmore.to\/%D0%A4%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B5%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BE%D0%BA\">fatalna wada.<\/a><\/noindex><\/li>\n<li>brak konfiguracji, w kt\u00f3rej mo\u017cna by ustawi\u0107 nazw\u0119 bazy danych i tabel, adres oraz port serwera.<\/li>\n<li>przy zapisywaniu surowych danych u\u017cywana jest pomocnicza tabela-s\u0142ownik do przechowywania adres\u00f3w stron i domen, co utrudnia p\u00f3\u017aniej zapytania.<\/li>\n<li>inne drobiazgi, kt\u00f3re wynikaj\u0105 z pierwszej wady.<\/li>\n<\/ul>\n<p><\/p>\n<h4><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pinba-server\/pinba-server\">pinba-server\/pinba-server.<\/a><\/noindex> (kwiecie\u0144 2019) <\/h4>\n<p>\nserwer UDP na PHP, kt\u00f3ry zapisuje metryki w ClickHouse. To moje rozwi\u0105zanie, b\u0119d\u0105ce wynikiem zapoznania si\u0119 z Pinb\u0105, ClickHouse i Protobuf. Gdy zg\u0142\u0119bia\u0142em ca\u0142y ten zestaw, napisa\u0142em \u00abdow\u00f3d koncepcji\u00bb, kt\u00f3ry, ku mojemu zaskoczeniu, nie zu\u017cywa\u0142 znacz\u0105cych zasob\u00f3w (30 MB pami\u0119ci RAM i mniej ni\u017c 1% jednego z o\u015bmiu rdzeni procesora), wi\u0119c postanowi\u0142em podzieli\u0107 si\u0119 nim z publiczno\u015bci\u0105.<\/p>\n<p>Zalety \u2014 te same, co w poprzednim rozwi\u0105zaniu, r\u00f3wnie\u017c u\u017cy\u0142em znanych nazewnictw z oryginalnej pinba_engine. Doda\u0142em tak\u017ce konfiguracj\u0119, kt\u00f3ra pozwala na uruchomienie kilku instancji serwera Pinba, aby zapisywa\u0107 metryki do r\u00f3\u017cnych tabel \u2014 to przydatne, je\u015bli zechcesz zbiera\u0107 dane nie tylko z PHP, ale i z Nginx.<br \/>\nWady \u2014 \u201efatalna wada\u201d i te drobiazgi, kt\u00f3re mog\u0105 ci osobno nie odpowiada\u0107, ale moje rozwi\u0105zanie jest \u201eproste jak kapcie\u201d i sk\u0142ada si\u0119 z oko\u0142o 100 linii kodu, wi\u0119c ka\u017cdy programista PHP mo\u017ce w ci\u0105gu kilku minut zmieni\u0107 to, co mu si\u0119 nie podoba.<\/p>\n<p><b>Zasada dzia\u0142ania<\/b><\/p>\n<p>Nas\u0142uchuje na porcie UDP 30002. Wszystkie przychodz\u0105ce pakiety s\u0105 dekodowane zgodnie z schematem Protobuf i agregowane. Co minut\u0119 wykonuje si\u0119 wstawienie partii do ClickHouse w tabeli pinba.requests. (wszystkie parametry s\u0105 konfigurowane w <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pinba-server\/pinba-server\/blob\/master\/config.json\">konfiguracji.<\/a><\/noindex>)<\/p>\n<p><b>Troch\u0119 o ClickHouse.<\/b><\/p>\n<p>ClickHouse wspiera r\u00f3\u017cne silniki przechowywania danych. Najcz\u0119\u015bciej u\u017cywany \u2014 MergeTree. <\/p>\n<p>Je\u015bli kiedykolwiek zdecydujesz si\u0119 przechowywa\u0107 zebrane dane przez ca\u0142y czas, a surowe tylko za ostatni okres, mo\u017cesz stworzy\u0107 materializ widok z grupowaniem, a g\u0142\u00f3wn\u0105 tabel\u0119 pinba.requests okresowo czy\u015bci\u0107, przy czym wszystkie dane pozostan\u0105 w materializ widoku. Co wi\u0119cej, przy tworzeniu tabeli pinba.requests mo\u017cesz wskaza\u0107 \u201eengine = Null\u201d, wtedy surowe dane w og\u00f3le nie b\u0119d\u0105 zapisywane na dysku, a mimo to b\u0119d\u0105 trafi\u0107 do materializ widoku i b\u0119d\u0105 przechowywane w formie zgrupowanej. T\u0119 metod\u0119 stosuj\u0119 dla metryk nginx, poniewa\u017c na nginx mam razy 50 wi\u0119cej zapyta\u0144 ni\u017c na php.<\/p>\n<p>Tak wi\u0119c przeszed\u0142e\u015b d\u0142ug\u0105 drog\u0119 i nie chcia\u0142bym zostawia\u0107 ci\u0119 w po\u0142owie drogi, wi\u0119c poni\u017cej znajduje si\u0119 szczeg\u00f3\u0142owy opis instalacji i konfiguracji mojego rozwi\u0105zania oraz wszystko, czego b\u0119dziesz potrzebowa\u0107, a tak\u017ce pu\u0142apki, kt\u00f3re zrujnowa\u0142y nie jeden statek. Ca\u0142y proces instalacji opisano dla Ubuntu 18.04 LTS i Centos 7, w innych dystrybucjach i wersjach proces mo\u017ce si\u0119 nieznacznie r\u00f3\u017cni\u0107.<\/p>\n<h4>Instalacja<\/h4>\n<p>\nWszystkie potrzebne polecenia umie\u015bci\u0142em w <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pinba-server\/pinba-server\/tree\/master\/docker\">Dockerfile<\/a><\/noindex> w celu u\u0142atwienia reprodukcji instrukcji. Poni\u017cej b\u0119d\u0105 opisane tylko pu\u0142apki.<\/p>\n<p><b>php-pinba<\/b><\/p>\n<p>Po instalacji upewnij si\u0119, \u017ce w pliku \/etc\/php\/7.2\/fpm\/conf.d\/20-pinba.ini masz odkomentowane wszystkie opcje. W niekt\u00f3rych dystrybucjach (np. centos) mog\u0105 by\u0107 zakomentowane.<\/p>\n<pre><code class=\"plaintext\">extension=pinba.so\npinba.enabled=1\npinba.server=127.0.0.1:30002<\/code><\/pre>\n<p>\n<b>clickhouse<\/b><\/p>\n<p>Podczas instalacji clickhouse poprosi ci\u0119 o podanie has\u0142a dla u\u017cytkownika default. Domy\u015blnie ten u\u017cytkownik jest dost\u0119pny z wszystkich ip, wi\u0119c je\u015bli nie masz na serwerze zapory, koniecznie ustaw mu has\u0142o. Mo\u017cna to r\u00f3wnie\u017c zrobi\u0107 ju\u017c po instalacji w pliku \/etc\/clickhouse-server\/users.xml.<\/p>\n<p>Warto r\u00f3wnie\u017c zwr\u00f3ci\u0107 uwag\u0119, \u017ce clickhouse u\u017cywa kilku port\u00f3w, w tym 9000. Ten port jest r\u00f3wnie\u017c u\u017cywany dla php-fpm w niekt\u00f3rych dystrybucjach (np. centos). Je\u015bli ten port jest ju\u017c u\u017cywany, mo\u017cesz go zmieni\u0107 na inny w pliku \/etc\/clickhouse-server\/config.xml.<\/p>\n<p><b>grafana z wtyczk\u0105 dla clickhouse<\/b><\/p>\n<p>Po zainstalowaniu grafany u\u017cyj loginu admin i has\u0142a admin. Przy pierwszym logowaniu grafana poprosi ci\u0119 o ustawienie nowego has\u0142a.<\/p>\n<p>Nast\u0119pnie wchodzimy w menu &#171;+&#187; -&gt; import i wskazujemy numer pulpitu do importu <noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\/dashboards\/10011\">10011<\/a><\/noindex>. Ten dashboard przygotowa\u0142em i za\u0142adowa\u0142em, aby nie by\u0142o potrzeby tworzenia go samodzielnie jeszcze raz.<\/p>\n<p>Grafana obs\u0142uguje wsp\u00f3\u0142prac\u0119 z ClickHouse za pomoc\u0105 wtyczki firm trzecich, ale dla wtyczek zewn\u0119trznych alerty w Grafanie nie dzia\u0142aj\u0105 (zg\u0142oszenie na ten temat wisi ju\u017c od kilku lat).<\/p>\n<p><b>pinba-server<\/b><\/p>\n<p>Instalacja protobuf i libevent nie jest obowi\u0105zkowa, ale poprawia wydajno\u015b\u0107 pinba-server. Je\u015bli zainstalujesz pinba-server w folderze innym ni\u017c \/opt, b\u0119dziesz musia\u0142 r\u00f3wnie\u017c dostosowa\u0107 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/pinba-server\/pinba-server\/blob\/master\/systemd\/pinba-server.service\">skrypt systemd<\/a><\/noindex> plik.<\/p>\n<p><b>modu\u0142 pinba dla nginx<\/b><\/p>\n<p>Do skompilowania modu\u0142u potrzebujesz \u017ar\u00f3de\u0142 tej samej wersji nginx, kt\u00f3r\u0105 masz ju\u017c zainstalowan\u0105 na serwerze, oraz tych samych opcji kompilacji, w przeciwnym razie kompilacja powiedzie si\u0119, ale podczas pod\u0142\u0105czania modu\u0142u wyst\u0105pi b\u0142\u0105d, \u017ce \u201emodu\u0142 jest binarnie niekompatybilny\u201d. Opcje kompilacji mo\u017cna sprawdzi\u0107 za pomoc\u0105 polecenia nginx -V<\/p>\n<p><b>Wskaz\u00f3wki<\/b><\/p>\n<p>Wszystkie moje strony dzia\u0142aj\u0105 tylko przez https. Pole schema staje si\u0119 bezsensowne, dlatego u\u017cywam go do rozdzielania web\/console.<\/p>\n<p>W skryptach dost\u0119pnych z sieci u\u017cywam:<\/p>\n<pre><code class=\"php\">if (ini_get('pinba.enabled')) {\n    pinba_schema_set('web');\n}\n<\/code><\/pre>\n<p>\nA w skryptach konsolowych (np. cron-skripty):<\/p>\n<pre><code class=\"php\">if (ini_get('pinba.enabled')) {\n    pinba_schema_set('console');\n}<\/code><\/pre>\n<p>\nNa moim pulpicie nawigacyjnym w Grafanie znajduje si\u0119 prze\u0142\u0105cznik web\/console do przegl\u0105dania statystyk osobno.<\/p>\n<p>Mo\u017cesz r\u00f3wnie\u017c przekazywa\u0107 w\u0142asne tagi do pinby, na przyk\u0142ad:<\/p>\n<pre><code class=\"php\">pinba_tag_set('country', $countryCode);<\/code><\/pre>\n<p>\n<b>To wszystko. <\/b><\/p>\n<p>Prosz\u0119, odpowiedz na ankiety pod artyku\u0142em.<\/p>\n<p>Tradycyjnie ostrzegam, \u017ce nie udzielam porad ani nie pomagam przez wiadomo\u015bci prywatne na Habrze i w mediach spo\u0142eczno\u015bciowych.<\/p>\n<p>Za\u0142\u00f3\u017c zg\u0142oszenie na GitHubie.<\/p>\n<p>Prosz\u0119 r\u00f3wnie\u017c o wsparcie w postaci polubie\u0144 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/449818\/\">wersji angielskiej<\/a><\/noindex> tego artyku\u0142u <noindex><a rel=\"nofollow\" href=\"https:\/\/www.reddit.com\/r\/PHP\/comments\/bigszu\/statistics_and_monitoring_of_php_scripts_in_real\/\">na Reddicie<\/a><\/noindex>.<\/p>\n<p class=\"for_users_only_msg\">Tylko zarejestrowani u\u017cytkownicy mog\u0105 bra\u0107 udzia\u0142 w ankiecie. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Zaloguj si\u0119<\/a><\/noindex>, prosz\u0119.<\/p>\n<h2 class=\"default-block__polling-title\">Jakiego systemu operacyjnego u\u017cywasz na serwerze?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ubuntu<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    CentOS<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Debian<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Gentoo<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Red Hat<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Fedora<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    OpenSUSE<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    SuSE<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Unix<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Windows<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    inne<\/p>\n<\/li>\n<\/ul>\n<p>    114 u\u017cytkownik\u00f3w odda\u0142o g\u0142osy. 11 u\u017cytkownik\u00f3w si\u0119 wstrzyma\u0142o.<\/p>\n<h2 class=\"default-block__polling-title\">Jak\u0105 wersj\u0119 PHP u\u017cywasz na serwerze?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    7.3<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    7.2<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    7.1<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    7.0<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    5<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    inne<\/p>\n<\/li>\n<\/ul>\n<p>    105 u\u017cytkownik\u00f3w odda\u0142o g\u0142osy. 17 u\u017cytkownik\u00f3w si\u0119 wstrzyma\u0142o.<\/p>\n<h2 class=\"default-block__polling-title\">Czy kiedykolwiek u\u017cywa\u0142e\u015b pinba?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    tak<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    nie, ale chcia\u0142bym<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    nie i nie chcia\u0142bym<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    nie i nie s\u0142ysza\u0142em o niej<\/p>\n<\/li>\n<\/ul>\n<p>    100 u\u017cytkownik\u00f3w odda\u0142o g\u0142osy. 14 u\u017cytkownik\u00f3w si\u0119 wstrzyma\u0142o.<\/p>\n<h2 class=\"default-block__polling-title\">Jak\u0105 wersj\u0119 serwera pinba chcia\u0142by\u015b wypr\u00f3bowa\u0107?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    pinba_engine (silnik mysql)<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    pinba2 (silnik mysql)<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    pinboard (php + mysql)<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    olegfedoseev\/pinba-server (go + OpenTSDB)<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    olegfedoseev\/pinba-influxdb (go + influxdb)<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    pinba-server\/pinba-server (go + clickhouse)<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    pinba-server\/pinba-server (php + clickhouse)<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    napisz\u0119 w\u0142asn\u0105<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    inne<\/p>\n<\/li>\n<\/ul>\n<p>    39 u\u017cytkownik\u00f3w odda\u0142o g\u0142osy. 47 u\u017cytkownik\u00f3w si\u0119 wstrzyma\u0142o.<br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/444610\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c pinba \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 clickhouse \u0438 grafana \u0432\u043c\u0435\u0441\u0442\u043e pinba_engine \u0438 pinboard. \u041d\u0430 php-\u043f\u0440\u043e\u0435\u043a\u0442\u0435 pinba \u2014 \u043f\u043e\u0436\u0430\u043b\u0443\u0439 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0434\u0451\u0436\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e. \u041f\u0440\u0430\u0432\u0434\u0430 \u043e\u0431\u044b\u0447\u043d\u043e pinba \u0432\u043d\u0435\u0434\u0440\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0443\u0436\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0438 \u043d\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u00ab\u0433\u0434\u0435 \u043a\u043e\u043f\u0430\u0442\u044c\u00bb. \u0427\u0430\u0441\u0442\u043e \u043d\u0438\u043a\u0442\u043e \u043f\u043e\u043d\u044f\u0442\u0438\u044f \u043d\u0435 \u0438\u043c\u0435\u0435\u0442, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443\/\u043c\u0438\u043d\u0443\u0442\u0443 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24468,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-32681","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c pinba \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 clickhouse \u0438 grafana \u0432\u043c\u0435\u0441\u0442\u043e pinba_engine \u0438 pinboard. \u041d\u0430 php-\u043f\u0440\u043e\u0435\u043a\u0442\u0435 pinba \u2014 \u043f\u043e\u0436\u0430\u043b\u0443\u0439 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0434\u0451\u0436\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/statistika-i-monitoring-php-skriptov-v-realnom-vremeni-clickhouse-i-grafana-idut-na-pomoshh-k-pinba\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 PHP \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438. ClickHouse \u0438 Grafana \u0438\u0434\u0443\u0442 \u043d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u043a Pinba | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c pinba \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 clickhouse \u0438 grafana \u0432\u043c\u0435\u0441\u0442\u043e pinba_engine \u0438 pinboard. \u041d\u0430 php-\u043f\u0440\u043e\u0435\u043a\u0442\u0435 pinba \u2014 \u043f\u043e\u0436\u0430\u043b\u0443\u0439 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0434\u0451\u0436\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/statistika-i-monitoring-php-skriptov-v-realnom-vremeni-clickhouse-i-grafana-idut-na-pomoshh-k-pinba\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:48:22+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:48:22+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Statystyka i monitorowanie skrypt\u00f3w PHP w czasie rzeczywistym. ClickHouse i Grafana wspieraj\u0105 Pinba | ProHoster","description":"W tym artykule om\u00f3wi\u0119, jak u\u017cywa\u0107 Pinba wsp\u00f3lnie z ClickHouse i Grafana zamiast pinba_engine i pinboard. W projekcie PHP Pinba to prawdopodobnie jedyny wiarygodny spos\u00f3b, aby zrozumie\u0107, co si\u0119 dzieje.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/statistika-i-monitoring-php-skriptov-v-realnom-vremeni-clickhouse-i-grafana-idut-na-pomoshh-k-pinba","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 PHP \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438. ClickHouse \u0438 Grafana \u0438\u0434\u0443\u0442 \u043d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c \u043a Pinba | ProHoster","og:description":"\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c pinba \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 clickhouse \u0438 grafana \u0432\u043c\u0435\u0441\u0442\u043e pinba_engine \u0438 pinboard. \u041d\u0430 php-\u043f\u0440\u043e\u0435\u043a\u0442\u0435 pinba \u2014 \u043f\u043e\u0436\u0430\u043b\u0443\u0439 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043d\u0430\u0434\u0451\u0436\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/statistika-i-monitoring-php-skriptov-v-realnom-vremeni-clickhouse-i-grafana-idut-na-pomoshh-k-pinba","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:48:22+00:00","article:modified_time":"2019-10-31T18:48:22+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"32681","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 12:02:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:54:26","updated":"2026-01-21 12:02:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/32681","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=32681"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/32681\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/24468"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=32681"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=32681"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=32681"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}