PHP skriptu statistika un uzraudzība reāllaikā. ClickHouse un Grafana nāk palīgā Pinba

Šajā rakstā es jums pastāstīŔu, kā lietot pinba ar clickhouse un grafana, nevis pinba_engine un pinboard.

PHP projektā pinba, iespējams, ir vienÄ«gais uzticamais veids, kā saprast, kas notiek ar veiktspēju. Tiesa, pinba parasti tiek ieviesta tikai tad, kad problēmas jau ir novērotas un nav skaidrs, ā€œkur raktā€.

Bieži vien nevienam nav ne jausmas, cik reižu sekundē/minÅ«tē tiek izsaukts tas vai cits skripts, un viņi sāk optimizēt ā€œpieskarotiesā€, sākot no tām vietām, kuras Ŕķiet loÄ£iskākas.

Daži analizē nginx žurnālus, bet citi analizē lēnus datu bāzes vaicājumus.

Protams, pinba nebūtu lieka, taču ir vairāki iemesli, kāpēc ne katram projektam tāda ir.

PHP skriptu statistika un uzraudzība reāllaikā. ClickHouse un Grafana nāk palīgā Pinba

Un pirmais iemesls ir uzstādīŔana.

Lai vairāk vai mazāk iegÅ«tu kaut kādu ā€œizplÅ«diā€ no Pinba ievieÅ”anas, ļoti vēlams redzēt metriku ne tikai pēdējām minÅ«tēm, bet arÄ« ilgākā laika periodā (no dienām lÄ«dz mēneÅ”iem).

Lai to izdarītu, jums ir nepiecieŔams:

  • instalējiet php paplaÅ”inājumu (un jÅ«s varētu vēlēties moduli nginx)
  • kompilējiet paplaÅ”inājumu mysql
  • instalējiet pinboard un konfigurējiet cron

Tā kā par Pinba ir maz informācijas, daudziem rodas iespaids, ka tas darbojās tikai uz PHP5 un jau sen ir pagātne, taču, kā redzēsim vēlāk, tas tā nav.

Pirmais solis ir vienkārŔākais, viss, kas jums jādara, ir jāpalaiž komanda:

apt install php-pinba

Å is paplaÅ”inājums ir pieejams krātuvēs lÄ«dz pat php 7.3, un jums nekas nav jākompilē.

Pēc instalÄ“Å”anas komandas izpildes mēs nekavējoties saņemam strādājoÅ”u paplaÅ”inājumu, kas apkopo un nosÅ«ta metriku katram skriptam (darba laiks, atmiņa utt.) formātā protobuf izmantojot udp uz 127.0.0.1:30002.

Pagaidām neviens nav noķēris vai apstrādājis Ŕīs UDP paketes, taču tas nekādā veidā negatÄ«vi neietekmē jÅ«su PHP skriptu ātrumu vai stabilitāti.

Vēl nesen vienÄ«gā lietojumprogramma, kas varēja uztvert un apstrādāt Ŕīs UDP paketes, bija pinba_dzinējs. Apraksts "vienkārÅ”i un kodolÄ«gi"Instalācija attur no vēlmes kādreiz tajā lasÄ«t un iedziļināties. Kilometru garajos atkarÄ«bu sarakstos ir gan pakotņu nosaukumi, gan programmu nosaukumi un saites uz atseviŔķām lapām ar to instalÄ“Å”anu, un tām ir savas saites uz citām atkarÄ«bām. Nevienam nav ne laika, ne vēlÄ“Å”anās nodarboties ar Ŕīm muļķībām.

UzstādīŔanas process pinba2 nedarīja īpaŔi vieglāk.

Varbūt kādreiz būs iespējams instalēt pinba10 ar vienu vai divām komandām un nav jālasa kaudze materiālu, lai saprastu, kā to izdarīt, bet pagaidām tas tā nav.

Ja instalējat pinba_engine, tā ir tikai puse no panākumiem. Galu galā, bez pinboard jums bÅ«s jāaprobežojas ar datiem, kas iegÅ«ti tikai pēdējās minÅ«tēs, vai arÄ« jums paÅ”am bÅ«s jāapkopo, jāuzglabā un jāvizualizē dati. Labi, ka pinboard ir diezgan vienkārÅ”i lietojams uzstādÄ«Å”ana.

Å Ä·iet, kāpēc tādas cieÅ”anas, ja no php visa metrika jau tiek nosÅ«tÄ«ta uz udp portu protobuf formātā un vajag tikai uzrakstÄ«t aplikāciju, kas tos noÄ·ers un ieliks kaut kādā krātuvē? AcÄ«mredzot tie izstrādātāji, kuri nāca klajā ar Å”o ideju, nekavējoties sēdās, lai rakstÄ«tu savas idejas, no kurām dažas nonāca GitHub.

Tālāk ir sniegts pārskats par četriem atvērtā pirmkoda projektiem, kas saglabā metriku krātuvē, no kuriem Å”os datus var viegli izgÅ«t un vizualizēt, piemēram, izmantojot grafana.

olegfedoseev/pinba-serveris (2017. gada novembris)

udp serveris ir kustÄ«bā, kas saglabā metriku OpenTSDB. Iespējams, ja jÅ«s jau izmantojat OpenTSDB savā projektā, tad Å”is risinājums jums bÅ«s piemērots, pretējā gadÄ«jumā iesaku to nodot garām.

olegfedoseev/pinba-influxdb (2018. gada jÅ«nijs)

udp serveris ir ceļā, no tā paÅ”a pārlÅ«kprogramma, kas Å”oreiz saglabā metriku InfluxDB. Daudzos projektos uzraudzÄ«bai jau tiek izmantots InfluxDB, tāpēc Å”is risinājums tiem var bÅ«t ideāls.

Plusi:

  • InfluxDB pieļauj apkopojiet saņemtos rādÄ«tājus un pēc noteikta laika izdzēsiet oriÄ£inālu.

MÄ«nusi:

ClickHouse-Ninja/Proton (2019. gada janvāris)

udp serveris ir kustÄ«bā, kas saglabā metriku pakalpojumā ClickHouse. Å is ir mana drauga risinājums. TieÅ”i pēc iepazÄ«Å”anās ar to es nolēmu, ka ir pienācis laiks uzņemties Pinbu un Clickhouse.

Plusi:

  • Clickhouse ir ideāli piemērots Ŕādiem uzdevumiem; tas ļauj saspiest datus tik daudz, lai jÅ«s varētu saglabāt visus neapstrādātos datus pat bez apkopoÅ”anas
  • ja nepiecieÅ”ams, varat viegli apkopot iegÅ«tos rādÄ«tājus
  • gatava grafana veidne
  • saglabā informāciju par taimeriem

MÄ«nusi:

  • liktenÄ«gs trÅ«kums
  • nav konfigurācijas, kurā var konfigurēt datu bāzes un tabulu nosaukumu, servera adresi un portu.
  • saglabājot neapstrādātus datus, lapu un domēnu adreÅ”u saglabāŔanai tiek izmantota palÄ«gvārdnÄ«cas tabula, kas sarežģī turpmākos vaicājumus.
  • citi sÄ«kumi, kas izriet no pirmā mÄ«nusa

pinba-serveris/pinba-serveris (2019. gada aprÄ«lis)

udp serveris php, kas saglabā metriku ClickHouse. Å is ir mans risinājums, kas tapis, iepazÄ«stot pinba, ClickHouse un protobuf. Kamēr es kārtoju visu Å”o Ä·ekaru, uzrakstÄ«ju ā€œkoncepcijas pierādÄ«jumuā€, kas man negaidÄ«ti nepatērēja ievērojamus resursus (30 MB RAM un mazāk nekā 1% no viena no astoņiem procesora kodoliem), tāpēc es nolēma dalÄ«ties tajā ar sabiedrÄ«bu.

PriekÅ”rocÄ«bas ir tādas paÅ”as kā iepriekŔējam risinājumam, izmantoju arÄ« parastos nosaukumus no oriÄ£inālā pinba_engine. Es pievienoju arÄ« konfigurāciju, kas ļauj vienlaikus palaist vairākus pinbase servera gadÄ«jumus, lai saglabātu metriku dažādās tabulās - tas ir noderÄ«gi, ja vēlaties apkopot datus ne tikai no php, bet arÄ« no nginx.
TrÅ«kumi - ā€œfatāls defektsā€ un tie sÄ«kumi, kas tev personÄ«gi nederēs, bet mans risinājums ir ā€œvienkārÅ”s kā tupeleā€ un sastāv tikai no aptuveni 100 koda rindām, tāpēc jebkurÅ” PHP izstrādātājs var mainÄ«t to, kas viņam nepatÄ«k pāris minÅ«Å”u laikā.

Kā tas darbojas

Tiek noklausÄ«ts UDP ports 30002. Visas ienākoŔās paketes tiek dekodētas pēc protobuf shēmas un apkopotas. Reizi minÅ«tē tiek ievietota pakete clickhouse tabulā pinba.requests. (visi parametri ir konfigurēti konfigurācija)

Mazliet par Clickhouse

Clickhouse atbalsta dažādus datu uzglabāŔanas dzinējus. Visbiežāk izmantotais ir MergeTree.

Ja kādā brÄ«dÄ« nolemjat saglabāt apkopotos datus par visu laiku un neapstrādātos datus tikai pēdējo reizi, varat izveidot materializētu skatu ar grupÄ“Å”anu un periodiski notÄ«rÄ«t galveno tabulu pinba.requests, kamēr visi dati paliks mapē. materializēts skats. Turklāt, veidojot tabulu pinba.requests, var norādÄ«t ā€œengine = Nullā€, tad neapstrādātie dati vispār netiks saglabāti diskā, un tajā paŔā laikā tie joprojām nonāks materializētajā skatā un tiks saglabāti apkopoti. . Es izmantoju Å”o shēmu nginx metrikai, jo nginx man ir 50 reizes vairāk pieprasÄ«jumu nekā php.

Tātad, jÅ«s esat nogājuÅ”i garu ceļu un es negribētu jÅ«s atstāt pusceļā, tāpēc tālāk ir detalizēts apraksts par mana risinājuma uzstādÄ«Å”anu un konfigurāciju un visu nepiecieÅ”amo, kā arÄ« par slazdiem, kas izraisÄ«juÅ”i vairāk nekā vienu kuÄ£i. salauzt. Viss instalÄ“Å”anas process ir aprakstÄ«ts Ubuntu 18.04 LTS un Centos 7; process var nedaudz atŔķirties citos izplatÄ«jumos un versijās.

UzstādīŔana

Ieliku visas nepiecieÅ”amās komandas Dockerfile lai atvieglotu instrukciju reproducējamÄ«bu. Tālāk tiks aprakstÄ«tas tikai nepilnÄ«bas.

php-pinba

Pēc instalÄ“Å”anas pārliecinieties, vai failā /etc/php/7.2/fpm/conf.d/20-pinba.ini esat atcēlis visas opcijas. Dažos izplatÄ«jumos (piemēram, centos) tos var komentēt.

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

Clickhouse

InstalÄ“Å”anas laikā Clickhouse lÅ«gs iestatÄ«t paroli noklusējuma lietotājam. Pēc noklusējuma Å”im lietotājam var piekļūt no visiem IP adresēm, tādēļ, ja jÅ«su serverÄ« nav ugunsmÅ«ra, noteikti iestatiet tam paroli. To var izdarÄ«t arÄ« pēc instalÄ“Å”anas failā /etc/clickhouse-server/users.xml.

Ir arÄ« vērts atzÄ«mēt, ka clickhouse izmanto vairākus portus, tostarp 9000. Å o portu izmanto arÄ« php-fpm dažos izplatÄ«jumos (piemēram, centos). Ja jau izmantojat Å”o portu, varat to mainÄ«t uz citu /etc/clickhouse-server/config.xml failā.

grafana ar spraudni clickhouse

Pēc Grafana instalÄ“Å”anas izmantojiet pieteikÅ”anās administratoru un paroles administratoru. Piesakoties pirmo reizi, Grafana lÅ«gs iestatÄ«t jaunu paroli.

Pēc tam dodieties uz izvēlni ā€œ+ā€ -> importÄ“Å”ana un norādiet importējamā informācijas paneļa numuru 10011. Es sagatavoju un augÅ”upielādēju Å”o informācijas paneli, lai jums tas vairs nebÅ«tu jādara paÅ”am.

Grafana atbalsta darbu ar Clickhouse, izmantojot treŔās puses spraudni, taču Grafana nav brÄ«dinājumu par treŔās puses spraudņiem (par to ir biļete jau vairākus gadus).

pinba serveris

Protobuf un libevent instalÄ“Å”ana nav obligāta, taču uzlabo pinba servera veiktspēju. Ja instalējat pinba-server mapē, kas nav /opt, jums arÄ« bÅ«s jālabo systemd skripts failu.

pinba modulis priekÅ” nginx

Lai kompilētu moduli, ir nepiecieÅ”ami tās paÅ”as nginx versijas pirmkodi, kas jau ir instalēta jÅ«su serverÄ«, kā arÄ« tās paÅ”as kompilācijas opcijas, pretējā gadÄ«jumā bÅ«vÄ“Å”ana bÅ«s veiksmÄ«ga, bet, pieslēdzot moduli, tiks izmesta kļūda, ka "Modulis nav bināri saderÄ«gs." Kompilācijas opcijas var apskatÄ«t, izmantojot komandu nginx -V

Dzīve uzlaužas

Visas manas vietnes darbojas tikai https. Shēmas lauks kļūst bezjēdzīgs, tāpēc es to izmantoju, lai atdalītu tīmekli / konsoli.

Skriptos, kas ir pieejami no tīmekļa, es izmantoju:

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

Un konsoles skriptos (piemēram, cron skriptos):

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

Manā Grafana informācijas panelÄ« ir tÄ«mekļa/konsoles slēdzis statistikas apskatei atseviŔķi.

Varat arī nosūtīt savas atzīmes pakalpojumam Pinba, piemēram:

pinba_tag_set('country', $countryCode);

Tas ir viss.

Lūdzu, atbildiet uz aptaujām zem raksta.

Kā parasti, brīdinu, ka nedodu padomu un nepalīdzu ar personīgām ziņām Habr un sociālajos tīklos.

Izveidojiet biļeti vietnē Github.

LÅ«dzu arÄ« atbalstÄ«t ar patÄ«k angļu versija no Ŕī raksta vietnē reddit.

Aptaujā var piedalīties tikai reģistrēti lietotāji. Ielogoties, lūdzu.

Kādu OS jūs izmantojat serverī?

  • Ubuntu

  • CentOS

  • Debian

  • Gentoo

  • Red Hat

  • Fedora

  • OpenSUSE

  • SUSE

  • Unix

  • Windows

  • cits

Nobalsoja 114 lietotāji. 11 lietotāji atturējās.

Kādu php versiju jūs izmantojat serverī?

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • cits

Nobalsoja 105 lietotāji. 17 lietotāji atturējās.

Vai esat kādreiz lietojis pinba?

  • jā

  • nē, bet es gribētu

  • nē un es negribētu

  • nē un neesmu par viņu dzirdējis

Nobalsoja 100 lietotāji. 14 lietotāji atturējās.

Kuru Pinba servera versiju vēlaties izmēģināt?

  • pinba_engine (mysql dzinējs)

  • pinba2 (mysql dzinējs)

  • pinboard (php + mysql)

  • olegfedoseev/pinba-server (go + OpenTSDB)

  • olegfedoseev/pinba-influxdb (go + influxdb)

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

  • pinba-serveris/pinba-serveris (php + Clickhouse)

  • Es pats uzrakstÄ«Å”u savu

  • cits

Nobalsoja 39 lietotāji. 47 lietotāji atturējās.

Avots: www.habr.com

Pievieno komentāru