PHP scripten estatistikak eta jarraipena denbora errealean. ClickHouse eta Grafana Pinba-ren laguntzara datoz

Artikulu honetan pinba pinba_engine eta pinboard-en ordez pinba clickhouse eta grafana-rekin nola erabili esango dizut.

PHP proiektu batean, pinba da agian errendimenduarekin zer gertatzen den ulertzeko modu fidagarri bakarra. Egia da, pinba normalean arazoak ikusten direnean eta "non zulatu" argi ez dagoenean bakarrik ezartzen da.

Askotan inork ez du segundu/minutuan zenbat aldiz deitzen den script hau edo bestea eta β€œukimenez” optimizatzen hasten dira, logikoagoak diruditen lekuetatik abiatuta.

Batzuek nginx erregistroak aztertzen dituzte, eta beste batzuek datu-basearen kontsulta motelak aztertzen dituzte.

Noski, pinba ez litzateke soberan egongo, baina hainbat arrazoi daude proiektu guztiek ez edukitzeko.

PHP scripten estatistikak eta jarraipena denbora errealean. ClickHouse eta Grafana Pinba-ren laguntzara datoz

Eta lehenengo arrazoia instalazioa da.

Pinbaren ezarpenetik gutxi gorabehera "agorte" bat lortzeko, oso desiragarria da neurketak azken minutuetan ez ezik, denbora luzean ere (egunetatik hilabeteetara) ikustea.

Horretarako behar duzu:

  • instalatu php-rako luzapena (eta baliteke nginx-erako modulu bat nahi izatea)
  • konpilatu luzapena mysql-erako
  • instalatu pinboard eta konfiguratu cron

Pinba-ri buruzko informazio kopuru txikia dela eta, jende askok irudipena du PHP5-en bakarrik funtzionatzen zuela eta aspaldiko kontua dela, baina gero ikusiko dugunez, ez da horrela.

Lehenengo urratsa errazena da, egin behar duzun guztia komandoa exekutatu da:

apt install php-pinba

Luzapen hau php 7.3ra arteko biltegietan dago eskuragarri eta ez duzu ezer konpilatu beharrik.

Instalazio komandoa exekutatu ondoren, berehala jasotzen dugu lan-luzapen bat, script bakoitzeko metrikak bildu eta bidaltzen dituena (exekutatzeko denbora, memoria, etab.) formatuan. protobuf udp bidez 127.0.0.1:30002.

Orain arte inork ez ditu UDP pakete hauek harrapatu edo prozesatu, baina horrek ez du inola ere kalterik eragiten zure PHP scripten abiadura edo egonkortasuna.

Duela gutxi arte, UDP pakete hauek harrapatu eta prozesatu zezakeen aplikazio bakarra zen pinba_motorra. Deskribapena "sinplea eta zehatza"instalazioak inoiz irakurtzeko eta berriro sakontzeko gogoa bultzatzen du. Kilometro luzeko mendekotasun-zerrendetan paketeen izenak eta programen izenak eta orri indibidualetarako estekak daude instalatuta, eta horiek beste menpekotasun batzuetarako estekak dituzte. Inork ez du astirik edo gogorik zorakeria honi aurre egiteko.

Instalazio prozesua pinba2 ez zuen batez ere errazagoa.

Agian noizbait pinba10 komando batekin edo birekin instalatzea posible izango da eta ez da material mordoa irakurri behar nola egin ulertzeko, baina oraingoz ez da horrela.

Pinba_engine instalatzen baduzu, hau borrokaren erdia baino ez da. Azken finean, gabe arbela azken minutuetako datuetara mugatu beharko duzu, edo zuk zeuk batu, gorde eta ikusi beharko dituzu datuak. Ona da pinboard erabiltzeko nahiko erraza dela instalazioa.

Badirudi, zergatik sufritu halako sufrimendua php-ko metrika guztiak dagoeneko udp atakara protobuf formatuan bidaltzen badira eta haiek harrapatu eta nolabaiteko biltegiratze batean jarriko dituen aplikazio bat idaztea besterik ez da behar? Dirudienez, ideia hau bururatu zitzaien garatzaile horiek berehala eseri ziren beren ideiak idazteko, eta horietako batzuk GitHub-en amaitu ziren.

Jarraian, kode irekiko lau proiekturen ikuspegi orokorra da biltegian neurketak gordetzen dituztenak, eta bertatik datu horiek erraz berreskuratu eta ikus daitezke, adibidez, grafana erabiliz.

olegfedoseev/pinba-zerbitzaria (2017ko azaroa)

OpenTSDB-n metrikak gordetzen dituen udp zerbitzaria. Beharbada zure proiektuan OpenTSDB erabiltzen ari bazara, orduan irtenbide hau egokituko zaizu, bestela pasatzea gomendatzen dizut.

olegfedoseev/pinba-influxdb (2018ko ekaina)

udp zerbitzaria martxan, beretik nabigatzailea, oraingoan neurketak InfluxDB-n gordetzen dituena. Proiektu asko InfluxDB erabiltzen ari dira monitorizaziorako, beraz, irtenbide hau ezin hobea izan daiteke haientzat.

Pros:

  • InfluxDB aukera ematen du bildu jasotako neurketak eta ezabatu jatorrizkoa denbora zehaztu baten ondoren.

Cons:

  • Soluzio honek ez du tenporizadoreei buruzko informaziorik gordetzen.
  • InfluxDB-k guneko orrialdeen helbideak etiketa gisa gordeko ditu eta orri-helbide esklusibo asko badituzu, honek ekarriko du kontsumoa handitu ausazko sarbide memoria. Une jakin batetik aurrera "oroimena ero bezala jaten hasiko da". (iturri)

ClickHouse-Ninja/Proton (2019ko urtarrila)

udp zerbitzaria edonon, ClickHousen neurketak gordetzen dituena. Hau da nire lagunaren irtenbidea. Bera ezagutu ondoren erabaki nuen Pinbu eta Clickhouse-ren aurka egiteko ordua zela.

Pros:

  • Clickhouse aproposa da horrelako zereginetarako; datuak hainbeste konprimitzeko aukera ematen du, datu gordina guztiak biltegiratu ditzakezula agregaziorik gabe ere
  • behar izanez gero, ondoriozko neurketak erraz batu ditzakezu
  • grafanarako prest egindako txantiloia
  • tenporizadoreei buruzko informazioa gordetzen du

Cons:

  • akats hilgarria
  • ez dago datu-basearen eta taulen izena, helbidea eta zerbitzariaren ataka konfigura ditzakezun konfiguraziorik.
  • datu gordinak gordetzean, hiztegi-taula laguntzaile bat erabiltzen da orrialde eta domeinu helbideak gordetzeko, eta horrek zaildu egiten ditu ondorengo kontsultak
  • lehen minusetik datozen beste gauza txiki batzuk

pinba-zerbitzari/pinba-zerbitzari (2019ko apirila)

udp zerbitzaria php-n, ClickHouse-n metrikak gordetzen dituena. Hau da nire irtenbidea, pinba, ClickHouse eta protobuf ezagutzearen ondorioa. Multzo hau ordenatzen ari nintzela, "kontzeptu-froga" bat idatzi nuen, niretzat ustekabean, ez zuen baliabide esanguratsurik kontsumitzen (30 MB RAM eta zortzi prozesadore nukleoetako baten %1 baino gutxiago), beraz, publikoarekin partekatzea erabaki zuen.

Abantailak aurreko soluzioaren berdinak dira, jatorrizko pinba_engineko ohiko izenak ere erabili ditut. Pinbase zerbitzariaren instantzia batzuk aldi berean abiarazteko aukera ematen duen konfigurazio bat ere gehitu dut, neurriak taula ezberdinetan gordetzeko - hau erabilgarria da datuak php-tik ez ezik, nginx-etik ere bildu nahi badituzu.
Desabantailak - "akats hilgarria" eta pertsonalki egokituko ez zaizkizun gauza txiki horiek, baina nire irtenbidea "zapaila bezain sinplea" da eta 100 kode lerro inguru baino ez ditu, beraz, edozein PHP garatzailek gustuko ez duena alda dezake. minutu pare batean.

Eragiketa printzipioa

UDP ataka 30002 entzuten da. Sarrerako pakete guztiak protobuf eskemaren arabera deskodetzen dira eta agregatuta daude. Minutu batean behin, pakete bat sartzen da pinba.requests taulan kliketxean. (parametro guztiak konfiguratuta daude konfigurazioa)

Clickhouse buruz apur bat

Clickhouse-k datuak biltegiratzeko motor desberdinak onartzen ditu. Gehien erabiltzen dena MergeTree da.

Uneren batean datu agregatuak denbora guztietarako eta datu gordinak azkenerako soilik gordetzea erabakitzen baduzu, taldekatzearekin egindako ikuspegi materializatu bat sor dezakezu eta aldian-aldian garbitu pinba.requests taula nagusia, datu guztiak geratuko diren bitartean. ikuspegi materializatua. Gainera, pinba.requests taula sortzean, "motorra = Null" zehaztu dezakezu, orduan datu gordinak ez dira diskoan gordeko, eta, aldi berean, materializatutako ikuspegian amaituko dira eta agregatuta gordeko dira. . Eskema hau nginx metriketarako erabiltzen dut, nginx-en php-n baino 50 aldiz eskaera gehiago ditudalako.

Beraz, bide luzea egin duzu eta ez zaitut erdibidean utzi nahi, beraz, hurrengoa nire irtenbidearen instalazio eta konfigurazioaren eta behar duzun guztiaren deskribapen zehatza da, baita ontzi bat baino gehiago eragin duten akatsak ere. kraskatu. Instalazio prozesu osoa Ubuntu 18.04 LTS eta Centos 7rako deskribatzen da; prozesua apur bat desberdina izan daiteke beste banaketa eta bertsioetan.

Instalazio-

Beharrezko komando guztiak jarri ditut Dockerfile argibideen errepikakortasuna errazteko. Jarraian hutsuneak bakarrik deskribatuko dira.

php-pinba

Instalatu ondoren, ziurtatu /etc/php/7.2/fpm/conf.d/20-pinba.ini fitxategian aukera guztiak iruzkindu gabe dituzula. Banaketa batzuetan (adibidez, centos) iruzkinak izan daitezke.

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

clickhouse

Instalazioan, clickhouse-k erabiltzaile lehenetsiari pasahitz bat ezartzeko eskatuko dizu. Lehenespenez, erabiltzaile hau IP guztietatik eskuragarri dago, beraz, zure zerbitzarian suebakirik ez baduzu, ziurtatu pasahitz bat ezarri duzula. Hau /etc/clickhouse-server/users.xml fitxategian instalatu ondoren ere egin daiteke.

Era berean, nabarmentzekoa da clickhouse-k hainbat ataka erabiltzen dituela, 9000 barne. Portu hau php-fpmrako ere erabiltzen da banaketa batzuetan (adibidez, centos). Dagoeneko ataka hau erabiltzen baduzu, beste batera alda dezakezu /etc/clickhouse-server/config.xml fitxategian.

grafana clickhouse pluginarekin

Grafana instalatu ondoren, erabili saioa hasteko administratzailea eta pasahitza administratzailea. Lehen aldiz saioa hasten duzunean, Grafanak pasahitz berri bat ezartzeko eskatuko dizu.

Ondoren, joan β€œ+” -> inportazio menura eta adierazi inportazio-panelaren zenbakia 10011. Arbel hau prestatu eta kargatu dut zuk zeuk berriro egin behar izan ez dezazun.

Grafanak clickhouse-rekin lan egitea onartzen du hirugarrenen plugin baten bidez, baina Grafanak ez du hirugarrenen pluginen alertarik (hainbat urtetan dago horretarako txartela).

pinba-zerbitzaria

Protobuf eta libevent instalatzea aukerakoa da, baina pinba-zerbitzariaren errendimendua hobetzen du. Pinba-server /opt ez den karpeta batean instalatzen baduzu, orduan ere zuzendu beharko duzu systemd scripta fitxategia.

pinba modulua nginx-erako

Modulu bat konpilatzeko, zure zerbitzarian instalatuta dagoen nginx-en bertsio bereko iturburu-kodeak behar dituzu, baita konpilazio-aukera berdinak ere; bestela, eraikuntza arrakastatsua izango da, baina modulua konektatzean, errore bat botako da. "modulua ez da bitar bateragarria". Konpilazio aukerak nginx -V komandoa erabiliz ikus daitezke

Bizitza hak

Nire gune guztiek https-n bakarrik funtzionatzen dute. Eskema eremua zentzurik gabe geratzen da, beraz, web/kontsola bereizteko erabiltzen dut.

Webetik eskuragarri dauden scriptetan erabiltzen dut:

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

Eta kontsolaren scriptetan (adibidez, cron scriptetan):

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

Grafanako nire panelean web/kontsola etengailu bat dago estatistikak bereizita ikusteko.

Zure etiketak Pinba-ra ere bidal ditzakezu, adibidez:

pinba_tag_set('country', $countryCode);

Hori da dena.

Mesedez, erantzun artikuluaren azpiko inkestak.

Ohi bezala, Habr eta sare sozialetako mezu pertsonalen bidez ez dudala aholkatzen edo laguntzen ohartarazten dizut.

Sortu txartel bat Github-en.

Mesedez ere lagundu atsegin dut Ingelesezko bertsioa Artikulu hau reddit-en.

Erregistratutako erabiltzaileek soilik parte hartu dezakete inkestan. Hasi saioa, mesedez.

Zein OS erabiltzen ari zara zerbitzarian?

  • Ubuntu

  • CentOS

  • Debian

  • Gentoo

  • Red Hat

  • Fedora

  • OpenSUSE

  • SUIZIA

  • Unix

  • Windows

  • beste

114 erabiltzailek eman dute botoa. 11 erabiltzaile abstenitu ziren.

Zein php-ren bertsioa erabiltzen ari zara zerbitzarian?

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • beste

105 erabiltzailek eman dute botoa. 17 erabiltzaile abstenitu ziren.

Erabili al duzu inoiz pinba?

  • Bai

  • ez, baina gustatuko litzaidake

  • ez eta ez nuke nahi

  • ez eta ez dut haren berririk

100 erabiltzailek eman dute botoa. 14 erabiltzaile abstenitu ziren.

Pinba zerbitzariaren zein bertsio probatu nahiko zenuke?

  • pinba_engine (mysql motorra)

  • pinba2 (mysql motorra)

  • arbela (php + mysql)

  • olegfedoseev/pinba-zerbitzaria (joan + OpenTSDB)

  • olegfedoseev/pinba-influxdb (joan + influxdb)

  • pinba-zerbitzaria/pinba-zerbitzaria (joan + clickhouse)

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

  • Nik neuk idatziko dut nirea

  • beste

39 erabiltzailek eman dute botoa. 47 erabiltzaile abstenitu ziren.

Iturria: www.habr.com

Gehitu iruzkin berria