ProHoster > Blogi > Haldamine > PHP skriptide statistika ja jälgimine reaalajas. ClickHouse ja Grafana tulevad Pinbale appi
PHP skriptide statistika ja jälgimine reaalajas. ClickHouse ja Grafana tulevad Pinbale appi
Selles artiklis räägin teile, kuidas kasutada pinba koos clickhouse'i ja grafanaga pinba_engine'i ja pinboardi asemel.
PHP projekti puhul on pinba ehk ainus usaldusväärne viis jõudlusega toimuva mõistmiseks. Tõsi, pinba rakendatakse tavaliselt alles siis, kui probleeme on juba täheldatud ja pole selge, "kuhu kaevata".
Tihti pole kellelgi õrna aimugi, mitu korda sekundis/minutis seda või teist skripti kutsutakse ja hakatakse optimeerima “puudutades”, alustades nendest kohtadest, mis tunduvad loogilisemad.
Mõned analüüsivad nginxi logisid, teised aga aeglaseid andmebaasipäringuid.
Pinba poleks muidugi üleliigne, kuid põhjuseid, miks igas projektis seda pole, on mitu.
Ja esimene põhjus on paigaldamine.
Selleks, et Pinba juurutusest enam-vähem mingi “väljalaske” kätte saada, on väga soovitav näha mõõdikuid mitte ainult viimaste minutite, vaid ka pikema aja (päevadest kuudeni) kohta.
Selleks peate:
installige php laiendus (ja võite soovida nginxi moodulit)
kompileerimislaiend mysql-ile
installige pinboard ja konfigureerige cron
Kuna Pinba kohta on vähe teavet, on paljudele jäänud mulje, et see töötas ainult PHP5 peal ja on juba ammu minevik, kuid nagu hiljem näeme, pole see nii.
Esimene samm on kõige lihtsam, kõik, mida pead tegema, on käivitada käsk:
apt install php-pinba
See laiendus on saadaval hoidlates kuni php 7.3 (kaasa arvatud) ja te ei pea midagi kompileerima.
Pärast installikäsu täitmist saame kohe töötava laienduse, mis kogub ja saadab iga skripti (tööaeg, mälu jne) mõõdikud vormingus protobuf udp kaudu aadressile 127.0.0.1:30002.
Seni pole keegi neid UDP-pakette püüdnud ega töötlenud, kuid see ei mõjuta kuidagi negatiivselt teie PHP-skriptide kiirust ega stabiilsust.
Kuni viimase ajani oli ainus rakendus, mis suutis neid UDP-pakette püüda ja töödelda pinba_mootor. Kirjeldus "lihtne ja sisutihe"installatsioon heidutab soovi seda kunagi uuesti lugeda ja sellesse süveneda. Sõltuvuste kilomeetrite pikkused loendid sisaldavad nii pakettide kui ka programmide nimetusi ja linke üksikutele lehtedele koos nende installimisega ning neil on oma lingid muudele sõltuvustele. Kellelgi pole aega ega tahtmist selle jamaga tegeleda.
Võib-olla on kunagi võimalik installida pinba10 ühe või kahe käsuga ja ei pea lugema hunnikut materjali, et aru saada, kuidas seda teha, kuid praegu see nii ei ole.
Kui olete installinud pinba_engine, on see vaid pool võitu. Lõppude lõpuks, ilma pinboard peate piirduma vaid viimaste minutite andmetega või peate andmed ise koondama, salvestama ja visualiseerima. Hea, et teadetetahvlit on üsna lihtne kasutada paigaldus.
Näib, milleks selline kannatus, kui kõik php-st saadavad mõõdikud on juba protobuf-vormingus udp-porti saadetud ja pole vaja muud, kui kirjutada rakendus, mis need kinni püüab ja mingisse salvestusruumi paigutab? Ilmselt asusid need arendajad, kes selle idee välja tulid, kohe oma ideid kirjutama, millest osa jõudis GitHubisse.
Järgnevalt on toodud ülevaade neljast avatud lähtekoodiga projektist, mis salvestavad mõõdikuid salvestusruumi, kust neid andmeid saab näiteks grafana abil hõlpsasti kätte saada ja visualiseerida.
udp server on liikvel, mis salvestab mõõdikud OpenTSDB-sse. Võib-olla kui kasutate oma projektis juba OpenTSDB-d, siis see lahendus teile sobib, vastasel juhul soovitan sellest mööda minna.
udp server on liikvel, samast brauser, mis seekord salvestab mõõdikud InfluxDB-sse. Paljud projektid kasutavad juba jälgimiseks InfluxDB-d, seega võib see lahendus neile ideaalselt sobida.
plussid:
InfluxDB võimaldab koondada saadud mõõdikud ja kustutada originaal pärast määratud aja möödumist.
miinuseid:
See lahendus ei salvesta taimerite kohta teavet.
InfluxDB salvestab saidi lehtede aadressid siltidena ja kui teil on palju unikaalseid leheaadresse, viib see selleni suurenenud tarbimine muutmälu. Teatud hetkest peale ta"hakkab mälu hulluks sööma". (allikas)
udp server on liikvel, mis salvestab mõõdikud ClickHouse'i. See on mu sõbra lahendus. Pärast sellega tutvumist otsustasin, et on aeg võtta ette Pinbu ja Clickhouse.
plussid:
Clickhouse sobib selliste ülesannete jaoks ideaalselt, see võimaldab teil andmeid nii palju tihendada, et saate salvestada kõik algandmed isegi ilma koondamisteta
vajaduse korral saate saadud mõõdikuid hõlpsasti koondada
udp server php-s, mis salvestab mõõdikud ClickHouse'i. See on minu lahendus, mis on pinba, ClickHouse'i ja protobufi tundmaõppimise tulemus. Kogu seda hunnikut sorteerides kirjutasin "kontseptsiooni tõendi", mis minu jaoks ootamatult ei kulutanud märkimisväärseid ressursse (30 MB RAM-i ja vähem kui 1% ühest kaheksast protsessorituumast), nii et otsustas seda avalikkusega jagada.
Eelised on samad, mis eelmisel lahendusel, samuti kasutasin tavalisi nimetusi algsest pinba_engine'ist. Lisasin ka konfiguratsiooni, mis võimaldab käivitada mitu pinbase serveri eksemplari korraga, et salvestada mõõdikuid erinevatesse tabelitesse – see on kasulik, kui soovite koguda andmeid mitte ainult php-st, vaid ka nginxist.
Puudused - "surmav viga" ja need pisiasjad, mis teile isiklikult ei sobi, kuid minu lahendus on "lihtne kui suss" ja koosneb ainult umbes 100 koodireast, nii et iga PHP arendaja saab muuta seda, mis talle ei meeldi. paari minutiga.
Tööpõhimõte
Kuulatakse UDP porti 30002. Kõik sissetulevad paketid dekodeeritakse protobuf skeemi järgi ja agregeeritakse. Kord minutis sisestatakse clickhouse'i pinba.requests tabelisse pakett. (kõik parameetrid on konfigureeritud konfig)
Natuke clickhouse’ist
Clickhouse toetab erinevaid andmesalvestusmootoreid. Kõige sagedamini kasutatav on MergeTree.
Kui otsustate mingil hetkel salvestada koondandmed kogu aja kohta ja töötlemata andmed ainult viimase kohta, saate luua materialiseeritud vaate koos rühmitamisega ja perioodiliselt puhastada peamist pinba.requests tabelit, samal ajal kui kõik andmed jäävad tabelisse alles. materialiseerunud vaade. Pealegi saab tabeli pinba.requests loomisel määrata “mootor = Null”, siis toorandmeid ei salvestata üldse kettale ning samal ajal satuvad need siiski materialiseerunud vaatesse ja salvestatakse koondatuna. . Ma kasutan seda skeemi nginxi mõõdikute jaoks, kuna nginxis on mul 50 korda rohkem päringuid kui php-s.
Niisiis, olete läbinud pika tee ja ma ei tahaks teid poolele teele jätta, nii et järgneb üksikasjalik kirjeldus minu lahenduse installimisest ja konfigureerimisest ning kõigest, mida vajate, ning lõkse, mis on põhjustanud rohkem kui ühe laeva. Avariid tegema. Kogu installiprotsessi on kirjeldatud Ubuntu 18.04 LTS ja Centos 7 jaoks; protsess võib teistes distributsioonides ja versioonides veidi erineda.
Paigaldamine
Panin kõik vajalikud käsud sisse dockerfile juhiste reprodutseeritavuse hõlbustamiseks. Allpool kirjeldatakse ainult lõkse.
php-pinba
Pärast installimist veenduge, et failis /etc/php/7.2/fpm/conf.d/20-pinba.ini oleks kõik suvandid kommenteerimata. Mõnel distributsioonil (nt centos) võib neid kommenteerida.
Installimise ajal palub clickhouse teil määrata vaikekasutajale parool. Vaikimisi on see kasutaja juurdepääsetav kõigilt IP-delt, nii et kui teie serveris pole tulemüüri, määrake sellele kindlasti parool. Seda saab teha ka pärast installimist failis /etc/clickhouse-server/users.xml.
Samuti väärib märkimist, et clickhouse kasutab mitut porti, sealhulgas 9000. Seda porti kasutatakse mõnes distributsioonis ka php-fpm jaoks (näiteks centos). Kui te juba kasutate seda porti, saate selle failis /etc/clickhouse-server/config.xml mõneks muuks muuta.
grafana koos clickhouse'i pistikprogrammiga
Pärast Grafana installimist kasutage sisselogimise administraatorit ja parooli administraatorit. Kui logite esimest korda sisse, palub Grafana teil määrata uus parool.
Järgmisena minge menüüsse "+" -> importimine ja märkige importimiseks armatuurlaua number 10011. Valmistasin selle armatuurlaua ette ja laadisin üles, et te ei peaks seda ise uuesti tegema.
Grafana toetab Clickhouse'iga töötamist kolmanda osapoole pistikprogrammi kaudu, kuid Grafanal pole hoiatusi kolmanda osapoole pistikprogrammide kohta (selle jaoks on pilet olnud juba mitu aastat).
pinba-server
Protobufi ja libeventi installimine on valikuline, kuid parandab pinba-serveri jõudlust. Kui installite pinba-serveri muusse kausta kui /opt, peate ka parandama systemd skript faili.
pinba moodul nginxi jaoks
Mooduli koostamiseks vajate sama nginxi versiooni lähtekoode, mis teie serverisse on juba installitud, samuti samu kompileerimisvõimalusi, vastasel juhul läheb ehitamine edukaks, kuid mooduli ühendamisel kuvatakse tõrge, et "moodul ei ühildu binaarselt." Kompileerimisvalikuid saab vaadata käsu nginx -V abil
Elu häkib
Kõik minu saidid töötavad ainult https-iga. Skeemiväli muutub mõttetuks, seega kasutan seda veebi/konsooli eraldamiseks.
Skriptides, millele on juurdepääs veebist, kasutan:
if (ini_get('pinba.enabled')) {
pinba_schema_set('web');
}
Ja konsooli skriptides (näiteks cron-skriptides):
if (ini_get('pinba.enabled')) {
pinba_schema_set('console');
}
Minu armatuurlaual Grafanas on veebi/konsooli lüliti statistika eraldi vaatamiseks.
Võite saata oma sildid ka Pinbale, näiteks:
pinba_tag_set('country', $countryCode);
See on kõik.
Palun vastake artikli all olevatele küsitlustele.
Nagu tavaliselt, hoiatan teid, et ma ei nõusta ega aita isiklike sõnumite kaudu Habris ja sotsiaalvõrgustikes.