PHP-skriptien tilastot ja seuranta reaaliajassa. ClickHouse ja Grafana tulevat Pinban avuksi

Tässä artikkelissa kerron kuinka käyttää pinbaa clickhousen ja grafanan kanssa pinba_engine:n ja pinboardin sijaan.

PHP-projektissa pinba on ehkä ainoa luotettava tapa ymmärtää, mitä suorituskyvylle tapahtuu. Totta, pinba otetaan yleensä käyttöön vasta, kun ongelmia on jo havaittu, eikä ole selvää "minne kaivaa".

Usein kenelläkään ei ole aavistustakaan kuinka monta kertaa sekunnissa/minuutissa tätä tai toista skriptiä kutsutaan ja he alkavat optimoida "kosketuksella" alkaen niistä paikoista, jotka näyttävät loogisemmilta.

Jotkut analysoivat nginx-lokeja, kun taas toiset analysoivat hitaita tietokantakyselyitä.

Pinba ei tietenkään olisi tarpeeton, mutta on useita syitä, miksi jokaisessa projektissa sitä ei ole.

PHP-skriptien tilastot ja seuranta reaaliajassa. ClickHouse ja Grafana tulevat Pinban avuksi

Ja ensimmäinen syy on asennus.

Jotta Pinban toteutuksesta saadaan enemmän tai vähemmän "pakokaasu", on erittäin toivottavaa nähdä mittareita paitsi viimeisiltä minuuteilta myös pitkältä ajanjaksolta (päivistä kuukausiin).

Tätä varten tarvitset:

  • asenna laajennus php:lle (ja saatat haluta moduulin nginxille)
  • käännöslaajennus mysql:lle
  • asenna pinboard ja määritä cron

Koska Pinbasta on vähän tietoa, monet ihmiset ovat saaneet vaikutelman, että se toimi vain PHP5:ssä ja on ollut pitkään menneisyyttä, mutta kuten tulemme myöhemmin näkemään, näin ei ole.

Ensimmäinen vaihe on yksinkertaisin, sinun tarvitsee vain suorittaa komento:

apt install php-pinba

Tämä laajennus on saatavilla arkistoissa php 7.3:een asti, eikä sinun tarvitse kääntää mitään.

Asennuskomennon suorittamisen jälkeen saamme välittömästi toimivan laajennuksen, joka kerää ja lähettää mittareita jokaiselle skriptille (ajoaika, muisti jne.) muodossa protobuf udp:n kautta numeroon 127.0.0.1:30002.

Toistaiseksi kukaan ei ole saanut kiinni tai käsitellyt näitä UDP-paketteja, mutta tämä ei millään tavalla vaikuta negatiivisesti PHP-skriptiesi nopeuteen tai vakauteen.

Viime aikoihin asti ainoa sovellus, joka pystyi sieppaamaan ja käsittelemään nämä UDP-paketit, oli pinba_moottori. Kuvaus "yksinkertainen ja ytimekäs"installaatio lannistaa halusta lukea ja syventyä siihen uudelleen. Kilometrin mittaiset riippuvuusluettelot sisältävät sekä pakettien että ohjelmien nimet ja linkit yksittäisille sivuille asennusineen, ja niillä on omat linkit muihin riippuvuuksiin. Kenelläkään ei ole aikaa tai halua käsitellä tätä paskaa.

Asennusprosessi pinba2 ei tehnyt varsinkin helpompaa.

Ehkä joskus on mahdollista asentaa pinba10 yhdellä tai kahdella komennolla, eikä sinun tarvitse lukea materiaalia ymmärtääkseen, miten se tehdään, mutta toistaiseksi näin ei ole.

Jos asennat pinba_engine, tämä on vain puoli voittoa. Loppujen lopuksi ilman ilmoitustaulu sinun on rajoituttava vain viimeisten minuuttien tietoihin tai sinun on koottava, tallennettava ja visualisoitava tiedot itse. On hyvä, että pinboard on melko yksinkertainen käyttää asennus.

Näyttäisi siltä, ​​että miksi tällainen kärsimys, jos kaikki php:n mittarit lähetetään jo udp-porttiin protobuf-muodossa ja sinun tarvitsee vain kirjoittaa sovellus, joka ottaa ne kiinni ja laittaa ne jonkinlaiseen tallennustilaan? Ilmeisesti ne kehittäjät, jotka keksivät tämän idean, istuivat heti alas kirjoittamaan omia ideoitaan, joista osa päätyi GitHubiin.

Seuraavassa on yleiskatsaus neljästä avoimen lähdekoodin projektista, jotka tallentavat mittareita tallennustilaan, joista nämä tiedot voidaan helposti hakea ja visualisoida esimerkiksi grafanan avulla.

olegfedoseev/pinba-palvelin (marraskuu 2017)

udp-palvelin käynnissä, joka tallentaa mittareita OpenTSDB:hen. Ehkä jos käytät jo OpenTSDB:tä projektissasi, tämä ratkaisu sopii sinulle, muuten suosittelen sen ohittamista.

olegfedoseev/pinba-influxdb (kesäkuu 2018)

udp-palvelin käynnissä, samasta selain, joka tällä kertaa tallentaa tiedot InfluxDB:hen. Monet projektit käyttävät jo InfluxDB:tä seurantaan, joten tämä ratkaisu saattaa olla heille täydellinen.

Plussat:

  • TuloDB sen avulla koota vastaanotetut tiedot ja poista alkuperäinen tietyn ajan kuluttua.

Miinukset:

ClickHouse-Ninja/Proton (tammikuu 2019)

udp-palvelin on liikkeellä, mikä tallentaa mittareita ClickHousessa. Tämä on ystäväni ratkaisu. Tutustuttuani siihen päätin, että on aika kohdata Pinbu ja Clickhouse.

Plussat:

  • Clickhouse on ihanteellinen tällaisiin tehtäviin; sen avulla voit pakata tietoja niin paljon, että voit tallentaa kaiken raakadatan jopa ilman aggregaatioita
  • Tarvittaessa voit helposti koota tuloksena saadut tiedot
  • valmis malli grafanalle
  • tallentaa ajastimien tiedot

Miinukset:

  • kuolettava virhe
  • ei ole konfiguraatiota, jossa voit määrittää tietokannan ja taulukoiden nimen, palvelimen osoitteen ja portin.
  • raakadataa tallennettaessa käytetään sivu- ja verkkotunnusten tallentamiseen apusanakirjataulukkoa, mikä vaikeuttaa myöhempiä kyselyitä
  • muita pieniä asioita, jotka seuraavat ensimmäisestä miinuksesta

pinba-palvelin/pinba-palvelin (huhtikuu 2019)

udp-palvelin php:ssä, joka tallentaa mittarit ClickHousessa. Tämä on ratkaisuni, joka on tulosta pinbaan, ClickHouseen ja protobufiin tutustumisesta. Lajitellessani tätä koko joukkoa kirjoitin "konseptin todisteen", joka minulle yllättäen ei kuluttanut merkittäviä resursseja (30 Mt RAM-muistia ja alle 1 % yhdestä kahdeksasta prosessoriytimestä), joten päätti jakaa sen yleisön kanssa.

Edut ovat samat kuin edellisessä ratkaisussa, käytin myös alkuperäisen pinba_enginen tavallisia nimiä. Lisäsin myös konfiguraation, jonka avulla voit käynnistää useita pinbase-palvelinesiintymiä kerralla, jotta voit tallentaa mittareita eri taulukoihin - tämä on hyödyllistä, jos haluat kerätä tietoja paitsi php:stä myös nginxistä.
Haitat - "kohtalokas virhe" ja ne pienet asiat, jotka eivät sovi sinulle henkilökohtaisesti, mutta ratkaisuni on "yksinkertainen kuin tohveli" ja koostuu vain noin 100 koodirivistä, joten kuka tahansa PHP-kehittäjä voi muuttaa mistä hän ei pidä muutaman minuutin päästä.

Toimintaperiaate

Kuunnellaan UDP-porttia 30002. Kaikki saapuvat paketit dekoodataan protobuf-kaavan mukaisesti ja kootaan yhteen. Kerran minuutissa paketti lisätään clickhouseen pinba.requests-taulukkoon. (kaikki parametrit on määritetty config)

Hieman clickhousesta

Clickhouse tukee erilaisia ​​tiedontallennusmoottoreita. Yleisimmin käytetty on MergeTree.

Jos päätät jossain vaiheessa tallentaa koottuja tietoja koko ajalta ja raakadataa vain viimeiseltä, voit luoda materialisoidun näkymän ryhmittelyllä ja puhdistaa pinba.requests-päätaulukon ajoittain, kun kaikki tiedot säilyvät toteutunut näkemys. Lisäksi pinba.requests-taulukkoa luotaessa voit määrittää "engine = Null", jolloin raakadataa ei tallenneta levylle ollenkaan, ja samalla se päätyy edelleen materialisoituun näkymään ja tallennetaan aggregoituna. . Käytän tätä järjestelmää nginx-mittareihin, koska nginxillä minulla on 50 kertaa enemmän pyyntöjä kuin php:ssä.

Olet siis päässyt pitkän tien, enkä haluaisi jättää sinua puoliväliin, joten seuraavassa on yksityiskohtainen kuvaus ratkaisuni asennuksesta ja konfiguroinnista ja kaikesta mitä tarvitset, sekä sudenkuopat, jotka ovat aiheuttaneet useamman kuin yhden laivan törmätä. Koko asennusprosessi on kuvattu Ubuntu 18.04 LTS:lle ja Centos 7:lle; prosessi voi vaihdella hieman muissa jakeluissa ja versioissa.

Asennus

Laitoin kaikki tarvittavat komennot Dockerfile helpottaa ohjeiden toistettavuutta. Vain sudenkuopat kuvataan alla.

php-pinba

Varmista asennuksen jälkeen, että olet poistanut kaikki vaihtoehdot /etc/php/7.2/fpm/conf.d/20-pinba.ini-tiedostossa. Joissakin jakeluissa (esim. centos) ne voidaan kommentoida pois.

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

clickhouse

Asennuksen aikana clickhouse pyytää sinua asettamaan salasanan oletuskäyttäjälle. Oletuksena tämä käyttäjä on käytettävissä kaikilta IP-osoitteilta, joten jos palvelimellasi ei ole palomuuria, muista asettaa sille salasana. Tämä voidaan tehdä myös asennuksen jälkeen /etc/clickhouse-server/users.xml-tiedostossa.

On myös syytä huomata, että clickhouse käyttää useita portteja, mukaan lukien 9000. Tätä porttia käytetään myös php-fpm joissakin jakeluissa (esim. centos). Jos käytät jo tätä porttia, voit vaihtaa sen toiseen /etc/clickhouse-server/config.xml-tiedostossa.

grafana clickhouse-laajennuksella

Kun olet asentanut Grafana, käytä kirjautumisjärjestelmänvalvojaa ja salasanaa admin. Kun kirjaudut sisään ensimmäisen kerran, Grafana pyytää sinua asettamaan uuden salasanan.

Siirry seuraavaksi "+" -> tuontivalikkoon ja ilmoita tuotava hallintapaneelin numero 10011. Valmistelin ja latasin tämän hallintapaneelin, jotta sinun ei tarvitse tehdä sitä itse uudelleen.

Grafana tukee työskentelyä clickhousen kanssa kolmannen osapuolen liitännäisen kautta, mutta Grafanalla ei ole varoituksia kolmannen osapuolen laajennuksista (tälle on ollut lippu useiden vuosien ajan).

pinba-palvelin

Protobufin ja libeventin asentaminen on valinnaista, mutta parantaa pinba-palvelimen suorituskykyä. Jos asennat pinba-serverin muuhun kansioon kuin /opt, sinun on myös korjattava systemd-skripti tiedosto.

pinba-moduuli nginxille

Moduulin kääntämiseen tarvitaan lähdekoodit samasta nginx-versiosta, joka on jo asennettu palvelimellesi, sekä samat käännösasetukset, muuten koonti onnistuu, mutta moduulia kytkettäessä tulee virheilmoitus "moduuli ei ole binääriyhteensopiva." Käännösasetukset voidaan tarkastella komennolla nginx -V

Niksit

Kaikki sivustoni toimivat vain https:llä. Kaavakenttä muuttuu merkityksettömäksi, joten käytän sitä verkon/konsolin erottamiseen.

Skripteissä, jotka ovat käytettävissä verkosta, käytän:

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

Ja konsolin komentosarjoissa (esimerkiksi cron-skriptit):

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

Grafanan kojelaudassani on verkko-/konsolikytkin tilastojen katsomista varten erikseen.

Voit myös lähettää tunnisteitasi Pinbaan, esimerkiksi:

pinba_tag_set('country', $countryCode);

Siinä kaikki.

Ole hyvä ja vastaa artikkelin alla oleviin kyselyihin.

Kuten tavallista, varoitan sinua, etten neuvo tai auta henkilökohtaisten viestien kautta Habrissa ja sosiaalisessa mediassa.

Luo lippu Githubissa.

Tue myös tykkäyksellä englanninkielinen versio tässä artikkelissa redditissä.

Vain rekisteröityneet käyttäjät voivat osallistua kyselyyn. Kirjaudu sisään, ole kiltti.

Mitä käyttöjärjestelmää käytät palvelimella?

  • Ubuntu

  • CentOS

  • Debian

  • Gentoo

  • Red Hat

  • Fedora

  • OpenSUSE

  • SVEITSI

  • unix

  • Windows

  • muut

114 käyttäjää äänesti. 11 käyttäjää pidättyi äänestämästä.

Mitä php-versiota käytät palvelimella?

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • muut

105 käyttäjää äänesti. 17 käyttäjää pidättyi äänestämästä.

Oletko koskaan käyttänyt pinbaa?

  • kyllä

  • ei, mutta haluaisin

  • ei enkä haluaisi

  • ei, enkä ole kuullut hänestä

100 käyttäjää äänesti. 14 käyttäjää pidättyi äänestämästä.

Mitä Pinba-palvelimen versiota haluaisit kokeilla?

  • pinba_engine (mysql-moottori)

  • pinba2 (mysql-moottori)

  • pinboard (php + mysql)

  • olegfedoseev/pinba-server (go + OpenTSDB)

  • olegfedoseev/pinba-influxdb (go + influxdb)

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

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

  • Kirjoitan omani itse

  • muut

39 käyttäjää äänesti. 47 käyttäjää pidättyi äänestämästä.

Lähde: will.com

Lisää kommentti