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.

PHP skriptide statistika ja jälgimine reaalajas. ClickHouse ja Grafana tulevad Pinbale appi

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.

Paigaldusprotsess pinba2 ei teinud eriti lihtsam.

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.

olegfedoseev/pinba-server (november 2017)

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.

olegfedoseev/pinba-influxdb (juuni 2018)

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:

ClickHouse-Ninja/Proton (jaanuar 2019)

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
  • valmis mall grafana jaoks
  • salvestab teavet taimerite kohta

miinuseid:

  • saatuslik viga
  • puudub konfiguratsioon, milles saaks konfigureerida andmebaasi ja tabelite nime, serveri aadressi ja porti.
  • algandmete salvestamisel kasutatakse lehe- ja domeeniaadresside salvestamiseks abisõnastiku tabelit, mis raskendab järgnevaid päringuid
  • muud pisiasjad, mis esimesest miinusest tulenevad

pinba-server/pinba-server (aprill 2019)

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.

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

clickhouse

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.

Looge pilet Githubis.

Samuti palun toetage meeldimistega Ingliskeelne versioon selle artikli redditis.

Küsitluses saavad osaleda ainult registreerunud kasutajad. Logi sissepalun.

Mis OS-i sa serveris kasutad?

  • Ubuntu

  • CentOS

  • Debian

  • Gentoo

  • Red Hat

  • Fedora

  • OpenSUSE

  • SUSE

  • Unix

  • Windows

  • muu

114 kasutajat hääletas. 11 kasutajat jäi erapooletuks.

Mis php versiooni sa serveris kasutad?

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • muu

105 kasutajat hääletas. 17 kasutajat jäi erapooletuks.

Kas olete kunagi pinbat kasutanud?

  • jah

  • ei, aga ma tahaks

  • ei ja ma ei tahaks

  • ei ja pole temast kuulnud

100 kasutajat hääletas. 14 kasutajat jäi erapooletuks.

Millist Pinba serveri versiooni soovite proovida?

  • pinba_engine (mysql mootor)

  • pinba2 (mysql mootor)

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

  • Ma kirjutan enda oma

  • muu

39 kasutajat hääletas. 47 kasutajat jäi erapooletuks.

Allikas: www.habr.com

Lisa kommentaar