PHP scenarijų statistika ir stebėjimas realiu laiku. Pinbai į pagalbą ateina ClickHouse ir Grafana

Šiame straipsnyje aš jums pasakysiu, kaip naudoti pinba su clickhouse ir grafana vietoj pinba_engine ir pinboard.

PHP projekte pinba yra bene vienintelis patikimas būdas suprasti, kas vyksta su našumu. Tiesa, pinba dažniausiai įdiegiama tik tada, kai jau pastebimos problemos ir neaišku, „kur kasti“.

Dažnai niekas neįsivaizduoja, kiek kartų per sekundę/min. iškviečiamas tas ar kitas scenarijus ir pradeda optimizuoti „palietus“, pradedant nuo tų vietų, kurios atrodo logiškiau.

Kai kurie analizuoja nginx žurnalus, o kiti analizuoja lėtas duomenų bazių užklausas.

Žinoma, pinba nebūtų nereikalinga, tačiau yra keletas priežasčių, kodėl ne kiekvienas projektas jį turi.

PHP scenarijų statistika ir stebėjimas realiu laiku. Pinbai į pagalbą ateina ClickHouse ir Grafana

Ir pirmoji priežastis yra įrengimas.

Norint daugiau ar mažiau gauti kažkokios „išmetimo“ iš „Pinba“ diegimo, labai pageidautina matyti metrikas ne tik paskutines minutes, bet ir ilgą laiką (nuo dienų iki mėnesių).

Tam reikia:

  • įdiekite php plėtinį (ir galbūt norėsite modulio, skirto nginx)
  • kompiliuoti mysql plėtinį
  • įdiekite pinboard ir sukonfigūruokite cron

Dėl nedidelio informacijos kiekio apie Pinba daugeliui susidaro įspūdis, kad jis veikė tik PHP5 ir jau seniai liko praeityje, tačiau, kaip pamatysime vėliau, taip nėra.

Pirmasis žingsnis yra paprasčiausias, viskas, ką jums reikia padaryti, tai paleisti komandą:

apt install php-pinba

Saugyklose šis plėtinys pasiekiamas iki php 7.3 imtinai ir jums nieko nereikia kompiliuoti.

Įvykdę diegimo komandą, iš karto gauname veikiantį plėtinį, kuris renka ir siunčia kiekvieno scenarijaus metrikas (veikimo laiką, atmintį ir kt.) tokiu formatu protobufas per udp į 127.0.0.1:30002.

Iki šiol niekas neužfiksavo ir neapdorojo šių UDP paketų, tačiau tai jokiu būdu neturi neigiamos įtakos jūsų PHP scenarijų greičiui ar stabilumui.

Iki šiol vienintelė programa, kuri galėjo sugauti ir apdoroti šiuos UDP paketus, buvo pinba_variklis. Apibūdinimas "paprastas ir glaustas"Instaliacija atgraso nuo noro dar kada nors skaityti ir į ją gilintis. Kilometro ilgio priklausomybių sąrašuose yra ir paketų, ir programų pavadinimai bei nuorodos į atskirus puslapius su jų įdiegimu, o tie turi savo nuorodas į kitas priklausomybes. Niekas neturi nei laiko, nei noro susidoroti su tokiais šūdais.

Montavimo procesas pinba2 nepadarė ypač lengviau.

Galbūt kada nors bus galima įdiegti pinba10 su viena ar dviem komandomis ir nereikės skaityti krūvos medžiagos, kad suprastum, kaip tai padaryti, bet kol kas taip nėra.

Jei įdiegiate pinba_engine, tai tik pusė mūšio. Juk be pinboard turėsite apsiriboti tik paskutinių kelių minučių duomenimis arba turėsite patys kaupti, saugoti ir vizualizuoti duomenis. Gerai, kad pinboard yra gana paprasta naudoti montavimas.

Atrodytų, kam tokia kančia, jei iš php visos metrikos jau siunčiamos į udp prievadą protobuf formatu ir tereikia parašyti aplikaciją, kuri juos sugautų ir įdės į kažkokią saugyklą? Matyt, tie kūrėjai, kurie sugalvojo šią idėją, iškart sėdo rašyti savo idėjas, kai kurios iš jų atsidūrė „GitHub“.

Toliau pateikiama keturių atvirojo kodo projektų, kuriuose saugoma metrika saugykloje, apžvalga, iš kurios šiuos duomenis galima lengvai gauti ir vizualizuoti, pavyzdžiui, naudojant grafana.

olegfedoseev/pinba-serveris (2017 m. lapkričio mėn.)

veikia udp serveris, kuris išsaugo metriką OpenTSDB. Galbūt, jei savo projekte jau naudojate OpenTSDB, tada šis sprendimas jums tiks, kitu atveju rekomenduoju jį praleisti.

olegfedoseev/pinba-influxdb (2018 m. birželis)

udp serveris veikia, iš to paties naršyklė, kuri šį kartą metriką saugo InfluxDB. Daugelis projektų jau naudoja InfluxDB stebėjimui, todėl šis sprendimas jiems gali puikiai tikti.

Argumentai "už":

  • InfluxDB leidžia apibendrinkite gautą metriką ir ištrinkite originalą po nurodyto laiko.

Trūkumai:

ClickHouse-Ninja/Proton (2019 m. sausio mėn.)

udp serveris, kuris išsaugo metriką „ClickHouse“. Tai mano draugo sprendimas. Būtent susipažinęs su juo nusprendžiau, kad laikas imtis Pinbu ir Clickhouse.

Argumentai "už":

  • „Clickhouse“ idealiai tinka tokioms užduotims atlikti, kad galėtumėte suspausti duomenis tiek, kad galėtumėte saugoti visus neapdorotus duomenis net ir be agregacijų
  • jei reikia, galite lengvai apibendrinti gautas metrikas
  • paruoštas grafanos šablonas
  • išsaugo informaciją apie laikmačius

Trūkumai:

  • lemtingas trūkumas
  • nėra konfigūracijos, kurioje galėtumėte konfigūruoti duomenų bazės ir lentelių pavadinimą, serverio adresą ir prievadą.
  • kai saugomi neapdoroti duomenys, pagalbinė žodyno lentelė naudojama puslapių ir domenų adresams saugoti, o tai apsunkina vėlesnes užklausas.
  • kitos smulkmenos, kurios išplaukia iš pirmo minuso

pinba serveris / pinba serveris (2019 m. balandžio mėn.)

udp serveris php, kuris išsaugo metriką ClickHouse. Tai yra mano sprendimas, kuris atsirado susipažinus su pinba, ClickHouse ir protobuf. Tvarkydama visą šitą krūvą parašiau „koncepcijos įrodymą“, kuris, man netikėtai, nesunaudojo didelių resursų (30 MB RAM ir mažiau nei 1% vieno iš aštuonių procesoriaus branduolių), todėl nusprendė pasidalinti ja su visuomene.

Privalumai tokie patys kaip ir ankstesnio sprendimo, taip pat naudojau įprastus pavadinimus iš originalaus pinba_engine. Taip pat pridėjau konfigūraciją, leidžiančią vienu metu paleisti kelis pinbase serverio egzempliorius, kad būtų galima išsaugoti metriką skirtingose ​​lentelėse - tai naudinga, jei norite rinkti duomenis ne tik iš php, bet ir iš nginx.
Trūkumai - “lemtinga brokas” ir tos smulkmenos, kurios tau asmeniškai netiks, bet mano sprendimas “paprastas kaip šlepetė” ir susideda tik iš apie 100 kodo eilučių, tad bet kuris PHP kūrėjas gali pakeisti tai, kas jam nepatinka. per porą minučių.

Veikimo principas

Klausomasi UDP prievado 30002 Visi įeinantys paketai iškoduojami pagal protobuf schemą ir sujungiami. Kartą per minutę paketas įterpiamas į clickhouse į pinba.requests lentelę. (visi parametrai sukonfigūruoti konfig)

Šiek tiek apie Clickhouse

„Clickhouse“ palaiko skirtingus duomenų saugojimo variklius. Dažniausiai naudojamas yra MergeTree.

Jei tam tikru momentu nuspręsite saugoti apibendrintus duomenis visam laikui, o neapdorotus – tik paskutinį kartą, galite sukurti materializuotą rodinį su grupavimu ir periodiškai išvalyti pagrindinę pinba.requests lentelę, o visi duomenys liks materializuotas vaizdas. Be to, kurdami pinba.requests lentelę galite nurodyti „engine = Null“, tada neapdoroti duomenys iš viso nebus išsaugomi diske, o tuo pat metu jie vis tiek atsidurs materializuotame rodinyje ir išsaugomi apibendrinti. . Šią schemą naudoju nginx metrikai, nes nginx turiu 50 kartų daugiau užklausų nei php.

Taigi, jūs nuėjote ilgą kelią ir aš nenorėčiau palikti jūsų pusiaukelėje, todėl toliau pateikiamas išsamus mano sprendimo diegimo ir konfigūracijos bei visko, ko jums reikia, aprašymas, taip pat spąstų, dėl kurių kilo ne vienas laivas. sudužti. Visas diegimo procesas aprašytas Ubuntu 18.04 LTS ir Centos 7, procesas gali šiek tiek skirtis naudojant kitus platinimus ir versijas.

Montavimas

Įdėjau visas reikalingas komandas dockerfile kad būtų lengviau atkurti instrukcijas. Toliau bus aprašyti tik spąstai.

php-pinba

Įdiegę įsitikinkite, kad faile /etc/php/7.2/fpm/conf.d/20-pinba.ini panaikinote visų parinkčių komentarus. Kai kuriuose platinimuose (pvz., centos) jie gali būti komentuojami.

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

clickhouse

Diegimo metu clickhouse paprašys nustatyti numatytojo vartotojo slaptažodį. Pagal numatytuosius nustatymus šis vartotojas pasiekiamas iš visų IP adresų, todėl jei savo serveryje neturite ugniasienės, būtinai nustatykite jam slaptažodį. Tai taip pat galima padaryti įdiegus /etc/clickhouse-server/users.xml faile.

Taip pat verta paminėti, kad clickhouse naudoja kelis prievadus, įskaitant 9000. Šis prievadas taip pat naudojamas php-fpm kai kuriuose platinimuose (pavyzdžiui, centos). Jei jau naudojate šį prievadą, galite jį pakeisti į kitą /etc/clickhouse-server/config.xml faile.

grafana su „clickhouse“ papildiniu

Įdiegę „Grafana“, naudokite prisijungimo administratorių ir slaptažodžio administratorių. Kai prisijungiate pirmą kartą, Grafana paprašys nustatyti naują slaptažodį.

Tada eikite į „+“ -> importavimo meniu ir nurodykite importuojamo prietaisų skydelio numerį 10011. Aš paruošiau ir įkėliau šią informacijos suvestinę, kad jums nereikėtų to daryti dar kartą.

„Grafana“ palaiko darbą su „clickhouse“ per trečiosios šalies įskiepį, tačiau „Grafana“ neturi įspėjimų apie trečiųjų šalių įskiepius (tam jau kelerius metus yra bilietas).

pinba serveris

Protobuf ir libevent įdiegimas yra neprivalomas, tačiau pagerina pinba serverio našumą. Jei pinba-server įdiegiate kitame aplanke nei /opt, taip pat turėsite taisyti sisteminis scenarijus failą.

Pinba modulis, skirtas nginx

Norint sukompiliuoti modulį, reikia tos pačios nginx versijos šaltinio kodų, kurie jau yra įdiegę jūsų serveryje, taip pat tų pačių kompiliavimo parinkčių, kitaip kūrimas bus sėkmingas, tačiau prijungus modulį bus pateikta klaida, kad „Modulis nėra suderinamas su dvejetainiu ryšiu“. Kompiliavimo parinktis galima peržiūrėti naudojant komandą nginx -V

Gyvenimas nulaužia

Visos mano svetainės veikia tik https. Schemos laukas netenka prasmės, todėl naudoju jį žiniatinkliui/konsolei atskirti.

Scenarijų, kurie pasiekiami iš žiniatinklio, naudoju:

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

Ir konsolės scenarijuose (pavyzdžiui, cron scenarijuose):

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

Mano „Grafana“ prietaisų skydelyje yra žiniatinklio / konsolės jungiklis, skirtas atskirai peržiūrėti statistiką.

Taip pat galite siųsti žymas Pinba, pavyzdžiui:

pinba_tag_set('country', $countryCode);

Štai ir viskas.

Prašome atsakyti į apklausas po straipsniu.

Kaip įprasta, perspėju, kad asmeninėmis žinutėmis Habr ir socialiniuose tinkluose nepatariu ir nepadedu.

Sukurkite bilietą „Github“.

Taip pat prašome palaikyti mygtukais Angliška versija šis straipsnis reddite.

Apklausoje gali dalyvauti tik registruoti vartotojai. Prisijungti, Prašau.

Kokią OS naudojate serveryje?

  • ubuntu

  • Centos

  • debian

  • "Gentoo"

  • "Red Hat"

  • Minkšta fetrinė skrybėlė

  • OpenSUSE

  • SUSE

  • unix

  • Windows

  • kitas

Balsavo 114 vartotojų. 11 vartotojai susilaikė.

Kokią php versiją naudojate serveryje?

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • kitas

Balsavo 105 vartotojų. 17 vartotojai susilaikė.

Ar kada nors naudojote pinbą?

  • taip

  • ne, bet norėčiau

  • ne ir nenorėčiau

  • ne ir apie ją negirdėjau

Balsavo 100 vartotojų. 14 vartotojai susilaikė.

Kurią Pinba serverio versiją norėtumėte išbandyti?

  • pinba_engine (mysql variklis)

  • pinba2 (mysql variklis)

  • pinboard (php + mysql)

  • olegfedoseev / pinba-server (eiti + OpenTSDB)

  • olegfedoseev / pinba-influxdb (go + influxdb)

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

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

  • Aš pats parašysiu savo

  • kitas

Balsavo 39 vartotojų. 47 vartotojai susilaikė.

Šaltinis: www.habr.com

Добавить комментарий