Statistikat dhe monitorimi i skripteve PHP në kohë reale. ClickHouse dhe Grafana ndihmojnë Pinba

Në këtë artikull do flas për se si të përdorni pinba së bashku me clickhouse dhe grafana në vend të pinba_engine dhe pinboard.

Në projektin php, pinba është ndoshta e vetmja mënyrë e besueshme për të kuptuar se çfarë po ndodh me performancën. Megjithatë, zakonisht pinba implementohet vetëm kur tashmë janë vërejtur probleme dhe nuk është e qartë "ku të fillohet".

Shpesh askush nuk e ka idenë se sa herë në sekondë/minutë thirret një skenar i caktuar dhe fillojnë të optimizojnë "në gisht" duke filluar nga ato vende që duket se janë më logjike.

Dikush analizon loget e nginx, ndërsa dikush tjetër kërkesat e ngadalta në bazën e të dhënave.

Sigurisht, pinba nuk do të ishte e padëshiruar, por ka disa arsye pse ajo nuk është e pranishme në çdo projekt.

Statistikat dhe monitorimi i skripteve PHP në kohë reale. ClickHouse dhe Grafana ndihmojnë Pinba

Arsyeja e parë është instalimi.

Për të marrë ndonjë "rezultat" nga implementimi i pinbës, është shumë e dëshirueshme të shihen metrikat jo vetëm për minutat e fundit, por edhe për një periudhë më të gjatë (nga ditët deri në muajt).

Për këtë nevojitet:

  • tĂ« instalohet njĂ« ekstension pĂ«r php (dhe ndoshta do tĂ« dĂ«shironit njĂ« modul pĂ«r nginx)
  • tĂ« kompiloni ekstensionin pĂ«r mysql
  • tĂ« instaloni pinboard dhe tĂ« konfiguroni cron-in

PĂ«r shkak tĂ« numrit tĂ« vogĂ«l tĂ« informacionit mbi pinba, shumicĂ«s i Ă«shtĂ« formuar pĂ«rshtypja se ajo funksiononte vetĂ«m nĂ« php5 dhe ka mbetur nĂ« tĂ« kaluarĂ«n, por siç do ta shohim mĂ« tej — kjo nuk Ă«shtĂ« e vĂ«rtetĂ«.

Hapi i parĂ« — mĂ« i thjeshtĂ«, thjesht duhet tĂ« ekzekutoni komandĂ«n:

apt install php-pinba

Në repository kjo ekstension është deri në php 7.3 përfshirë dhe nuk keni nevojë të kompilonit asgjë.

Pas ekzekutimit të komandës së instalimit, menjëherë marrim një ekstension që funksionon, i cili mbledh dhe dërgon metrike për çdo skenar (kohëzgjatjen e punës, kujtesën etj.) në formatin protobuf përmes udp në 127.0.0.1:30002.

Këto paketa udp për momentin askush nuk i kap dhe nuk i përpunon, por kjo nuk ndikon aspak negativisht në shpejtësi ose stabilitetin e funksionimit të skenarëve tuaj php.

Derisa kohët e fundit, aplikacioni që mund të kapte dhe përpunonte këto paketa udp ishte vetëm pinba_engine. Përshkrimi "i thjeshtë dhe lakonik" i instalimit e heq dëshirën për ta lexuar dhe përvetësuar ndonjëherë përsëri. Në lista kilometrike të varësive ka si emra paketash ashtu edhe emra programesh dhe lidhje për faqe të veçanta me instalimin e tyre, dhe ato kanë lidhjet e tyre për varësi të tjera. Askush nuk ka kohën ose dëshirën për t'u marrë me këtë kaos.

Procesi i instalimit pinba2 nuk u bë në mënyrë të veçantë më të lehtë.

Mund të vijë një moment kur pinba10 do të mund të instalohet me një ose dy komanda pa pasur nevojë të lexosh shumë materiale për të kuptuar si ta bësh këtë, por për momentin nuk është kështu.

Nëse ndonjëherë e keni instaluar pinba_engine, atëherë kjo është vetëm gjysma e punës. Sepse pa pinboard do t'ju duhet të kufizoheni në të dhënat vetëm për minutat e fundit ose të angazhoheni për të grumbulluar, ruajtur dhe vizualizuar të dhënat. Fatmirësisht, pinboard është mjaft i thjeshtë në instalimin.

Duket se, përse të kalosh nëpër kaq vuajtje kur të gjitha metrikat nga php shkojnë përmes portit udp në formatin protobuf dhe e gjithë ajo që është e nevojshme është të shkruash një aplikacion që do t'i kapë dhe t'i ruajë në një depo? Më duket se ato zhvillues që kanë pasur këtë mendim e kanë vendosur menjëherë të fillojnë të shkruajnë biçikletat e tyre, disa prej të cilave përfunduan në GitHub.

Më poshtë është një përmbledhje e katër projekteve open-source që ruajnë metrikat në depo, nga të cilat këto të dhëna lehtë mund të merren dhe vizualizohen, për shembull, me ndihmën e grafana.

olegfedoseev/pinba-server (nëntor 2017)

server udp në go, që ruan metrikat në OpenTSDB. Më duket se nëse OpenTSDB po përdoret tashmë në projektin tuaj, atëherë ky zgjidhje mund t'ju përshtatet, përndryshe rekomandoj ta kaloni përpara.

olegfedoseev/pinba-influxdb (qershor 2018)

server udp në go, nga i njëjti habrayuser, i cili këtë herë ruan metrikat në InfluxDB. Në shumë projekte për monitorim, InfluxDB tashmë po përdoret, prandaj për to ky zgjidhje mund të jetë shumë i përshtatshëm.

Avantazhet:

  • InfluxDB mundĂ«son grumbulloni metrikat e marra dhe fshini origjinalin pas njĂ« kohe tĂ« caktuar.

Disavantazhet:

ClickHouse-Ninja/Proton (janar 2019)

server udp në go, që ruan metrikat në ClickHouse. Ky është një zgjidhje nga miku im. Pikërisht pas njohjes me të, vendosa se ishte koha të merrem me pinbu dhe ClickHouse.

Avantazhet:

  • ClickHouse Ă«shtĂ« perfekt pĂ«r kĂ«tĂ« lloj pune, ai lejon kompresimin e tĂ« dhĂ«nave aq shumĂ« saqĂ« mund tĂ« ruani tĂ« gjitha tĂ« dhĂ«nat e papĂ«rpunuara madje edhe pa grumbullime
  • nĂ«se Ă«shtĂ« e nevojshme, atĂ«herĂ« mund tĂ« grumbulloni lehtĂ«sisht metrikat e marra
  • mĂ«nyrĂ« tĂ« gatshme pĂ«r grafana
  • ruan informacion mbi timerĂ«t

Disavantazhet:

  • mangĂ«si fatale
  • nuk ka konfigurim nĂ« tĂ« cilin mund tĂ« rregullohet emri i databazĂ«s dhe tabelave, adresĂ«n dhe portin e serverit.
  • kur ruani tĂ« dhĂ«nat e papĂ«rpunuara pĂ«rdoret njĂ« tabelĂ« ndihmĂ«se pĂ«r ruajtjen e adresa e faqeve dhe domenĂ«ve, gjĂ« qĂ« e bĂ«n tĂ« komplikuar mĂ« vonĂ« kĂ«rkesat
  • detaje tĂ« tjera tĂ« vogla qĂ« rrjedhin nga minus i parĂ«

pinba-server/pinba-server (prill 2019)

server udp në php, i cili ruan metricat në ClickHouse. Kjo është zgjidhja ime, rezultati i njohjes me pinba, ClickHouse dhe protobuf. Ndërsa meresha me të gjithë këtë lidhje, shkrova një «proof of concept» që për çudi për mua nuk konsumonte burime të konsiderueshme (30 mb memorie operative dhe më pak se 1% nga një nga tetë bërthamat e procesorit), prandaj vendosa ta ndaj atë me publikun.

PlusĂ«t — janĂ« tĂ« njĂ«jta me zgjidhjen e mĂ«parshme, gjithashtu kam pĂ«rdorur emĂ«rtimet e zakonshme nga pinba_engine origjinale. Po ashtu kam shtuar njĂ« konfigurim qĂ« lejon nisjen e disa instancave tĂ« serverit pinba, pĂ«r tĂ« ruajtur metricat nĂ« tabela tĂ« ndryshme — kjo Ă«shtĂ« e dobishme nĂ«se dĂ«shironi tĂ« mbledhni tĂ« dhĂ«na jo vetĂ«m nga php, por edhe nga nginx.
MinusĂ«t — «defekt fatal» dhe ato detaje tĂ« vogla qĂ« nuk do t'ju kĂ«naqin personalisht, por zgjidhja ime Ă«shtĂ« «e thjeshtĂ« si njĂ« sandale» dhe pĂ«rbĂ«het nga rreth 100 rreshta kodi, kĂ«shtu qĂ« çdo zhvillues php mund tĂ« ndryshojĂ« brenda pak minutash atĂ« qĂ« nuk i pĂ«lqen.

Parimi i funksionimit

Ndiqet porti udp 30002. TĂ« gjitha paketat e ardhshme dekodehen sipas skemĂ«s protobuf dhe agregohen. Çdo minutĂ« bĂ«het njĂ« insert grupi nĂ« clickhouse nĂ« tabelĂ«n pinba.requests. (tĂ« gjitha parametrat rregullohen nĂ« konfigurim)

Pak rreth clickhouse

Clickhouse mbështet motorë të ndryshëm ruajtjeje të të dhënave. Më i përdoruri është MergeTree.

Nëse në ndonjë moment vendosni të ruani të dhënat e agreguara për të gjithë kohën dhe të dhënat e papërpunuara vetëm për të fundit, mund të krijoni një materialized view me grupim, ndërsa tabela kryesore pinba.requests duhet të pastrrohet periodikisht, për këtë të dhënat do të mbeten në materialized view. Më tej, gjatë krijimit të tabelës pinba.requests mund të tregoni «engine = Null», atëherë të dhënat e papërpunuara nuk do të ruhen kurrë në disk dhe megjithatë ato do të kalojnë në materialized view dhe do të ruhen të agreguara. Unë përdor një skemë të tillë për metricat nginx, sepse në nginx kam rreth 50 herë më shumë kërkesa se sa në php.

Kështu, keni kaluar një rrugë të gjatë dhe nuk do të doja t'ju lija në mes të rrugës, prandaj do të ndjekë një përshkrim të detajuar të instalimit dhe konfigurimit të zgjidhjes time dhe gjithçka që ju nevojitet, si dhe ujërat e rrezikshme mbi të cilat janë thyer shumë anije. I gjithë procesi i instalimit është përshkruar për Ubuntu 18.04 LTS dhe CentOS 7, në distribucione dhe versione të tjera procesi mund të ndryshojë pak.

Instalimi

Të gjitha komandat e nevojshme i kam përmbledhur në Dockerfile për të lehtësuar përsëritshmërinë e udhëzimeve. Më poshtë do të përshkruhen vetëm ujërat e rrezikshme.

php-pinba

Pas instalimit, sigurohuni që në skedarin /etc/php/7.2/fpm/conf.d/20-pinba.ini të keni të shkruar të gjitha opsionet. Në disa distribucione (për shembull, CentOS) ato mund të jenë të shkruara komente.

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

clickhouse

Gjatë instalimit, clickhouse do t'ju kërkojë të vendosni një fjalëkalim për përdoruesin default. Me default, ky përdorues është i aksesueshëm nga të gjitha IP-të, kështu që nëse nuk keni një firewall në server, sigurohuni të vendosni një fjalëkalim për të. Kjo mund të bëhet gjithashtu pas instalimit në skedarin /etc/clickhouse-server/users.xml.

Gjithashtu, është e rëndësishme të vëreni se clickhouse përdor disa porte, duke përfshirë 9000. Ky port gjithashtu përdoret për php-fpm në disa distribucione (për shembull, CentOS). Nëse ky port është tashmë në përdorim, mund ta ndryshoni në një tjetër në skedarin /etc/clickhouse-server/config.xml.

grafana me plugin për clickhouse

Pas instalimit të grafanës, përdorni emrin admin dhe fjalëkalimin admin. Në hyrjen e parë, grafana do t'ju kërkojë të vendosni një fjalëkalim të ri.

Më pas hyjmë në menusë «+» -> import dhe tregojmë numrin e dashboard-it për import. 10011Ky dashboard e kam përgatitur dhe ngarkuar, në mënyrë që të mos keni nevojë ta krijoni atë vetë përsëri.

Grafana mbështet punën me clickhouse përmes një plugin-i të tretë, por për plugin-t e tretë, grafana nuk funksionon me alarmin (kjo kërkesë ka qenë e hapur për disa vite).

pinba-server

Instalimi i protobuf dhe libevent nuk është i detyrueshëm, por përmirëson performancën e pinba-server. Nëse e instaloni pinba-server në një dosje tjetër përveç /opt, do t'ju duhet gjithashtu të përmirësoni skribin systemd fajllin.

moduli pinba për nginx

Për të kompiluar modulin, ju nevojiten skedarët burimorë të versionit të njëjtë të nginx që është instaluar në serverin tuaj, si dhe të njëjtat mundësi kompilimi; përndryshe, ndërtimi do të kalojë me sukses, por gjatë lidhjes së modulit do të shfaqet një gabim se 'moduli nuk është i përputhshëm me binar.' Mundësitë e kompilimit mund të shihen me komandën nginx -V

Këshillat e jetës

Të gjitha faqet e mia funksionojnë vetëm me https. Fusha schema bëhet e panevojshme, kështu që unë e përdor atë për ndarjen e web/console.

Në skriptet që janë të qasshme nga web-i unë përdor:

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

Dhe në ato konsolë (p.sh., skriptet kron):

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

Në panelin tim në grafana, kam një kalues web/console për të parë statistikat veçmas.

Gjithashtu, në pinba mund të dërgoni etiketat tuaja, për shembull:

pinba_tag_set('country', $countryCode);

Kjo është gjithçka.

Për një kërkesë të madhe, ju lutem përgjigjuni pyetjeve pas artikullit.

Tradicionalisht paralajmëroj se unë nuk ofroj konsultime dhe ndihmë përmes mesazheve private të Habrës dhe rrjeteve sociale.

Hapni një biletë në github.

Gjithashtu, ju lutem mbështetni me pëlqime versionin anglisht ky artikull në reddit.

Vetëm përdoruesit e regjistruar mund të marrin pjesë në anketë. Hyni, ju lutem.

Cilën OS po përdorni në serverin tuaj?

  • Ubuntu

  • CentOS

  • Debian

  • Gentoo

  • Red Hat

  • Fedora

  • OpenSUSE

  • SuSE

  • Unix

  • Windows

  • tĂ« tjera

114 përdorues kanë votuar. 11 përdorues kanë abstenuar.

Cilën version të php po përdorni në serverin tuaj?

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • tĂ« tjera

105 përdorues kanë votuar. 17 përdorues kanë abstenuar.

A keni përdorur ndonjëherë pinba?

  • po

  • jo, por do tĂ« doja

  • jo dhe nuk do tĂ« doja

  • jo dhe nuk kam dĂ«gjuar pĂ«r tĂ«

100 përdorues kanë votuar. 14 përdorues kanë abstenuar.

Cilën version të serverit pinba do dëshironit të provoni?

  • pinba_engine (motor mysql)

  • pinba2 (motor mysql)

  • 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)

  • do tĂ« shkruaj versionin tim

  • tĂ« tjera

39 përdorues kanë votuar. 47 përdorues kanë abstenuar.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster