Statistika ja PHP skriptide jÀlgimine reaalajas. ClickHouse ja Grafana aitavad Pinbat

Selles artiklis rÀÀgin, kuidas kasutada pinbat koos clickhouse'i ja grafanaga pinba_engine'i ja pinboard'i asemel.

PHP-projekti puhul on pinba vÔib-olla ainus usaldusvÀÀrne viis mÔista, mis toimub jÔudlusega. TÔsi, pinba integreeritakse tavaliselt alles siis, kui probleemid juba esinevad ja pole selge, kust alustada.

Tihti pole kellelgi aimugi, kui mitu korda sekundis/minutit kutsutakse teatud skripti, ja optimiseerimine algab 'kÀtte tunde' jÀrgi alates kohtadest, mis tunduvad loogilisemad.

MĂ”ned analĂŒĂŒsivad nginx'i logisid, teised aeglaseid pĂ€ringuid andmebaasis.

Muidugi pole pinba ĂŒleliigne, kuid on mitmeid pĂ”hjuseid, miks seda ei leita igalt poolt projektist.

Statistika ja PHP skriptide jÀlgimine reaalajas. ClickHouse ja Grafana aitavad Pinbat

Esimene pÔhjus on installatsioon.

Kuna soovitakse pinbalt mingisugust 'tagasivoolu' saada, on vÀga soovitatav nÀha mÔÔdikuid mitte ainult viimase minuti jooksul, vaid ka pikema aja jooksul (pÀevadest kuudeni).

Selleks on vaja:

  • paigaldada php jaoks laiendus (vĂ”ib-olla soovite nginx'i moodulit)
  • kompileerida mysql'i laiendus
  • paigaldada pinboard ja seadistada cron

Selle vĂ€hese teabe tĂ”ttu pinba kohta on paljudel mulje, et see töötas vaid php5-l ja on juba ammu minevikus, aga nagu me hiljem nĂ€eme — see ei ole nii.

Esimene samm on kÔige lihtsam, tuleb ainult kÀivitada kÀsk:

apt install php-pinba

Reposiitides on see laiendus saadaval kuni php 7.3-ni, ja te ei pea midagi kompileerima.

PÀrast installimiskÀsku saame juba töötava laienduse, mis kogub ja saadab iga skripti mÔÔdikud (tÀitmise aeg, mÀlu jne) formaadis protobuf udp kaudu aadressil 127.0.0.1:30002.

Need udp-paketid pole veel keegi kinni pĂŒĂŒdnud ega töödelnud, kuid see ei mĂ”juta teie php-skripti töötamise kiirus ega stabiilsust.

Kuni hiljuti oli ainus rakendus, mis suutis neid udp-pakette kinni pĂŒĂŒda ja töödelda, ainult pinba_engine. 'lihtne ja selge' installatsiooni kirjeldus tapab igasuguse soovi seda kunagi lugeda ja aru saada. Kilomeetrite pikkustes sĂ”ltuvusloetledes on nii pakettide nimetused kui ka programmide nimed ja lingid eraldi lehtedele nende installimiseks, ja neil on omakorda lingid teistele sĂ”ltuvustele. Sellega tegelemiseks ei ole kellelgi aega ega soovi.

Installimisprotsess pinba2 ei muutunud eriti kergem.

VĂ”ib-olla on kunagi pinba10 vĂ”imalik paigaldada ĂŒhe vĂ”i kahe kĂ€suga ning lugeda lĂ€bi hulk materjali, et aru saada, kuidas seda teha, kuid hetkel pole see nii.

Kui te siiski installisite pinba_engine'i, siis on see vaid pool tööst. Sest ilma pinboard peate piirduma andmetega vaid viimase paari minuti jooksul vÔi ise andmeid koguma, salvestama ja visualiseerima. Hea on see, et pinboard on piisavalt lihtne paigaldamiseks.

Tundub, et miks peaks kannatama, kui kĂ”ik php mÔÔdikud juba tulevad udp-porti protobuf formaadis ja kĂ”ik, mis on vajalik, on kirjutada rakendus, mis need kinni pĂŒĂŒab ja mingi salvestusse kogub? Ilmselt need arendajad, kellel tuli see mĂ”te pĂ€he, asusid kohe kirjutama oma lahendusi, millest osa jĂ”udis githubi.

JĂ€rgnevalt on ĂŒlevaade neljast avatud lĂ€htekoodiga projektist, mis salvestavad mÔÔdikud salvestusse, kust on neid lihtne kĂ€tte saada ja visualiseerida, nĂ€iteks graafana kaudu.

olegfedoseev/pinba-server (november 2017)

udp server go-s, mis salvestab mÔÔdikud OpenTSDB-sse. Kui OpenTSDB-d juba teie projektis kasutatakse, siis vÔib see lahendus teile sobida, muidu soovitan mööda minna.

olegfedoseev/pinba-influxdb (juuni 2018)

udp server go-s, sama habrajuuser, kes seekord salvestab mÔÔdikud InfluxDB-s. Paljudes projektides kasutatakse juba praegu InfluxDB-d, seega vÔib see lahendus neile suurepÀraselt sobida.

Plussid:

Miinused:

ClickHouse-Ninja/Proton (jaanuar 2019)

udp server go-s, mis salvestab mÔÔdikud ClickHouse-sse. See on minu sÔbra lahendus. Just pÀrast selle tutvumist otsustasin, et on aeg hakata pinbu ja clickhouse'iga tegelema.

Plussid:

  • clickhouse sobib selliste ĂŒlesannete jaoks ideaalselt, see vĂ”imaldab andmeid tihendada nii, et saate hoida kĂ”ik toored andmed isegi ilma agregatsioonideta
  • vajadusel saate kerge vaevaga koguda saadud mÔÔdikud
  • valmis mall graafana jaoks
  • salvestab teavet ajas

Miinused:

  • fatali puudus
  • puudu on konfiguratsioon, kus saaks seadistada andmebaasi ja tabelite nimetused, serveri aadress ja port.
  • ilmub, et talletades tooreid andmeid, kasutatakse abikatalooge lehtede ja domeenide aadresside talletamiseks, mis hiljem raskendab pĂ€ringute tegemist
  • muud pisiasjad, mis tulenevad esimesest miinusest

pinba-server/pinba-server (aprill 2019)

php pĂ”hine udp server, mis salvestab nĂ€itajaid ClickHouse'i. See on minu lahendus, mis on tulenenud tutvusest pinba, ClickHouse ja protobuf'iga. Kui ma kogu selle sideme kallal töötasin, kirjutasin "proof of concept", mis ĂŒllatuslikult ei tarbinud mĂ€rkimisvÀÀrseid ressursse (30 mb operatiivmĂ€lu ja vĂ€hem kui 1% ĂŒht kĂŒmmest protsessorituumast), mistĂ”ttu otsustasin selle avalikkusega jagada.

Plussid — samad, mis eelneval lahendusel, kasutasin ka originaalsest pinba_engine'ist tuttavaid nimetusi. Veelgi olen lisanud konfi, mis vĂ”imaldab kĂ€ivitada mitu pinba serveri instantsi, et nĂ€itajaid salvestada erinevatesse tabelitesse — see on kasulik, kui soovite koguda andmeid mitte ainult php-st, vaid ka nginx-ist.
Miinused — "fatali puudus" ja muud pisiasjad, mis teid isiklikult ei rahulda, kuid minu lahendus on "lihtne nagu suss" ja koosneb vaid umbes 100 koodireast, nii et iga php arendaja vĂ”ib mĂ”ne minutiga muuta seda, mis talle ei meeldi.

Töö ĐżŃ€ĐžĐœŃ†ĐžĐż

kuulatakse udp-porti 30002. KÔik sisenevad paketid dekodeeritakse vastavalt protobuf skeemile ja agregatakse. Iga minuti jÀrel tehakse kippi tabela pinba.requests. (kÔiki parameetreid saab seadistada konfis)

Veidi ClickHouse'ist

Clickhouse toetab erinevaid andmete talletamise mootorit. KÔige rohkem kasutatav on MergeTree.

Kui otsustate mingil hetkel salvestada agreggeeritud andmeid kogu aja jooksul ja tooreid ainult viimase aja jaoks, siis saate luua materialized view koos grupeerimisega ning peamist tabelit pinba.requests perioodiliselt puhastada, samas kui kĂ”ik andmed jÀÀvad materialized view'sse. Veelgi enam, kui loote tabeli pinba.requests, vĂ”ite mÀÀrata "engine = Null", siis toored andmed ei salvestata ĂŒldse kĂ”vakettale, kuid need jĂ”uavad ikkagi materialized view'sse ja salvestatakse agreggeerituna. Sellist skeemi kasutan nginx-i nĂ€itajate jaoks, kuna nginx-is on mul 50 korda rohkem pĂ€ringuid kui php-s.

Nii, olete juba pika tee lÀbinud ja ma ei sooviks teid poolele teele jÀtta, seega jÀrgnevalt on pÔhjalik kirjeldus minu lahenduse paigaldamisest ja seadistamisest ning kÔigest, mis teil vajalik on, samuti kÔikidest ohukohtadest, millega on korduvalt kokku puututud. Kogu paigaldusprotsess on kirjeldatud Ubuntu 18.04 LTS ja Centos 7 jaoks, teistel distributsioonidel ja versioonidel vÔib protsess veidi erineda.

Paigaldamine

KÔik vajalikud kÀsud olen kokku kogunud Dockerfile Ôpetuste jÀlgitavuse lihtsustamiseks. Allpool kirjeldatakse vaid ohukohti.

php-pinba

PÀrast paigaldamist veenduge, et failis /etc/php/7.2/fpm/conf.d/20-pinba.ini oleksid kÔik valikud kommenteeritud vÀlja. MÔnes distributsioonis (nÀiteks centos) vÔivad need olla kommenteeritud.

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

clickhouse

Paigaldamise ajal palub clickhouse teil mÀÀrata parooli kasutajale default. Vaikimisi on see kasutaja kergesti ligipÀÀsetav kĂ”igilt ip-delt, seega kui teil pole serveris tulemĂŒĂŒri, siis mÀÀrake kindlasti parool. Seda saab teha ka pĂ€rast paigaldamist failis /etc/clickhouse-server/users.xml.

Samuti tasub tĂ€hele panna, et clickhouse kasutab mitmeid porte, sealhulgas 9000. Seda pĂŒsiĂŒhendust kasutatakse samuti php-fpm mĂ”nes distributsioonis (nĂ€iteks centos). Kui see port on juba hĂ”ivatud, siis saate selle faili /etc/clickhouse-server/config.xml muutmisel teise porti vahetada.

grafana koos clickhouse'i plugina

PĂ€rast grafana paigaldamist kasutage sisselogimiseks admin kasutajat ja parooli admin. Esmakordsel sisselogimisel palub grafana teil seada uus parool.

SeejĂ€rel minge menĂŒĂŒsse „+” -> import ja mÀÀrake impordi jaoks armatuurlaua number 10011. Selle armatuurlaua olen ette valmistanud ja ĂŒles laadinud, et te ei peaks seda ise uuesti tegema.

Grafana toetab koos töötamist clickhouse'iga kolmanda osapoole plugina kaudu, kuid kolmanda osapoole pluginatel ei tööta grafana hĂ€iresĂŒsteem (pilet selle kohta on juba mitu aastat ootel).

pinba-server

protobuf ja libevent paigaldamine ei ole kohustuslik, kuid see parandab pinba-serveri tulemuslikkust. Kui installite pinba-serveri kausta, mis ei ole /opt, peate samuti muutma systemd skripti faili.

pinba-modul nginx-ile

Mooduli kompileerimiseks on vajalikud samad nginx-i lĂ€htekoodid, mis teil serveris juba on, samuti samad kompileerimisvalikud; muidu toimub kogumine edukalt, kuid mooduli aktiveerimisel kuvatakse viga, et "moodul on binaarselt ĂŒhilduv". KompileerimisvĂ”imalusi saab vaadata kĂ€su nginx -V abil.

Elu nÀpunÀited

Mul töötavad kÔik saidid ainult https-i peal. Schema vÀli muutub mÔttetuks, seetÔttu kasutan seda veebi/konsoli eristamiseks.

Veebis kergesti saadaval olevates skriptides kasutan:

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

Konsolites (nÀiteks cron-skriptides):

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

Minu Grafana armatuurlaud on varustatud web/konsoli statistika eristamise lĂŒlitiga.

Samuti saab pinbale edastada oma silte, nÀiteks:

pinba_tag_set('country', $countryCode);

Sellega on kÔik.

Palun vastake artikli all olevatele kĂŒsitlustele.

Traditsiooniliselt hoiatatud, et ma ei nÔusta ega aita isiklike sÔnumite kaudu Habr ja sotsiaalmeedias.

Avage pilet GitHubis.

Samuti palun toetage like'idega ingliskeelset versiooni selle artikli Redditis.

Ainult registreeritud kasutajad saavad kĂŒsitluses osaleda. Logige sisse, palun.

Millist operatsioonisĂŒsteemi kasutate serveris?

  • Ubuntu

  • CentOS

  • Debian

  • Gentoo

  • Red Hat

  • Fedora

  • OpenSUSE

  • SuSE

  • Unix

  • Windows

  • muid

HÀÀletas 114 kasutajat. Tasusid 11 kasutajat.

Millist PHP versiooni kasutate serveris?

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • muid

HÀÀletas 105 kasutajat. Tasusid 17 kasutajat.

Kas olete kunagi pinbat kasutanud?

  • jah

  • ei, aga sooviksin

  • ei ja ei sooviks

  • ei ja ei ole kuulnud sellest

HÀÀletas 100 kasutajat. Tasusid 14 kasutajat.

Millist pinba-serveri versiooni sooviksite proovida?

  • pinba_engine (mysql engine)

  • pinba2 (mysql engine)

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

  • kirjutan oma enda

  • muid

HÀÀletas 39 kasutajat. Tasusid 47 kasutajat.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster