Statistiken en monitoaring fan PHP-skripts yn echte tiid. ClickHouse en Grafana komme Pinba te helpen

Yn dit artikel sil ik jo fertelle hoe't jo pinba brûke kinne mei clickhouse en grafana ynstee fan pinba_engine en pinboard.

Op in PHP-projekt is pinba miskien de ienige betroubere manier om te begripen wat der bart mei prestaasjes. Wier, pinba wurdt normaal allinich ymplementearre as problemen al wurde waarnommen en it is net dúdlik "wêr te graven."

Faak hat gjinien in idee hoefolle kearen per sekonde/minút dit of dat skript wurdt neamd en se begjinne te optimalisearjen "troch oanreitsjen", útgeande fan dy plakken dy't lykje mear logysk.

Guon analysearje nginx-logs, wylst oaren trage databankfragen analysearje.

Fansels soe pinba net oerstallich wêze, mar d'r binne ferskate redenen wêrom net elk projekt it hat.

Statistiken en monitoaring fan PHP-skripts yn echte tiid. ClickHouse en Grafana komme Pinba te helpen

En de earste reden is ynstallaasje.

Om mear of minder in soarte fan "útput" te krijen fan 'e ymplemintaasje fan Pinba, is it tige winsklik om metriken te sjen net allinich foar de lêste minuten, mar ek oer in lange perioade (fan dagen oant moannen).

Hjirfoar moatte jo:

  • ynstallearje tafoeging foar php (en jo wolle miskien in module foar nginx)
  • kompilearje tafoeging foar mysql
  • ynstallearje pinboard en konfigurearje cron

Troch de lytse hoemannichte ynformaasje oer Pinba hawwe in protte minsken de yndruk dat it allinich wurke op PHP5 en hat al lang in ding fan it ferline west, mar sa't wy letter sille sjen, is dit net it gefal.

De earste stap is de ienfâldichste, alles wat jo hoege te dwaan is it kommando útfiere:

apt install php-pinba

Dizze tafoeging is beskikber yn 'e repositories oant en mei php 7.3 en jo hoege neat te kompilearjen.

Nei it útfieren fan it ynstallaasjekommando krije wy fuortendaliks in wurkjende tafoeging dy't metriken sammelet en ferstjoert foar elk skript (rinnende tiid, ûnthâld, ensfh.) Yn it formaat protobuf fia udp nei 127.0.0.1:30002.

Oant no hat gjinien dizze UDP-pakketten fongen of ferwurke, mar dit hat op gjin inkelde manier negatyf ynfloed op de snelheid of stabiliteit fan jo PHP-skripts.

Oant koartlyn wie de ienige applikaasje dy't dizze UDP-pakketten koe fange en ferwurkje pinba_engine. Beskriuwing "ienfâldich en bondich" ynstallaasje ûntmoediget de winsk om der oait wer yn te lêzen en te ferdjipjen. De kilometerlange listen fan ôfhinklikens befetsje sawol de nammen fan pakketten as de nammen fan programma's en keppelings nei yndividuele siden mei har ynstallaasje, en dy hawwe har eigen keppelings nei oare ôfhinklikens. Nimmen hat de tiid of winsk om te gean mei dizze crap.

Ynstallaasjeproses fyn 2 net benammen makliker.

Miskien ienris sil it mooglik wêze om pinba10 mei ien of twa kommando's te ynstallearjen en net in boskje materiaal te lêzen om te begripen hoe't jo it moatte dwaan, mar foar no is dit net it gefal.

As jo ​​​​pinba_engine ynstallearje, dan is dit mar de helte fan 'e slach. Nei alle gedachten sûnder pinboard jo moatte josels beheine ta gegevens fan allinich de lêste pear minuten, of jo moatte de gegevens sels aggregearje, opslaan en visualisearje. It is goed dat pinboard frij ienfâldich te brûken is ynstallaasje.

It soe lykje, wêrom sa'n lijen as alle metriken fan php binne al stjoerd nei de udp-poarte yn protobuf-formaat en alles wat jo nedich binne is in applikaasje te skriuwen dy't se sil fange en yn in soarte fan opslach pleatse? Blykber sieten dy ûntwikkelders dy't mei dit idee kamen fuortendaliks har eigen ideeën te skriuwen, wêrfan guon op GitHub einigen.

It folgjende is in oersjoch fan fjouwer iepen boarne-projekten dy't metriken yn opslach bewarje, wêrfan dizze gegevens maklik ophelle en visualisearre wurde kinne, bygelyks mei grafana.

olegfedoseev/pinba-tsjinner (novimber 2017)

udp-tsjinner ûnderweis dy't metriken opslaat yn OpenTSDB. Miskien as jo OpenTSDB al brûke yn jo projekt, dan sil dizze oplossing jo passe, oars advisearje ik it troch te gean.

olegfedoseev/pinba-influxdb (juny 2018)

udp tsjinner op gean, fan itselde habrowser, dy't dizze kear de metriken opslaan yn InfluxDB. In protte projekten brûke al InfluxDB foar tafersjoch, dus dizze oplossing kin perfekt wêze foar har.

Pros:

  • InfluxDB stiet ta sammelje de ûntfongen metriken, en wiskje it orizjineel nei in opjûne tiid.

Cons:

ClickHouse-Ninja/Proton (jannewaris 2019)

udp-tsjinner ûnderweis, dy't metriken opslaat yn ClickHouse. Dit is de oplossing fan myn freon. It wie nei it yn 'e kunde kommen dat ik besleat dat it tiid wie om Pinbu en Clickhouse op te nimmen.

Pros:

  • Clickhouse is ideaal foar sokke taken; it lit jo gegevens safolle komprimearje dat jo alle rûge gegevens kinne opslaan, sels sûnder aggregaasjes
  • as it nedich is, kinne jo de resultearjende metriken maklik aggregearje
  • klear sjabloan foar grafana
  • besparret ynformaasje oer timers

Cons:

  • fatale flater
  • d'r is gjin konfiguraasje wêryn jo de namme fan 'e databank en tabellen, it adres en de poarte fan' e tsjinner ynstelle kinne.
  • by it opslaan fan rûge gegevens, wurdt in helpwurdboektabel brûkt om side- en domeinadressen op te slaan, wat folgjende fragen komplisearret
  • oare lytse dingen dy't folgje út de earste minus

pinba-tsjinner/pinba-tsjinner (april 2019)

udp-tsjinner yn php, dy't metriken opslaat yn ClickHouse. Dit is myn oplossing, dat is it resultaat fan it learen fan pinba, ClickHouse en protobuf. Wylst ik dizze hiele bosk útsocht, skreau ik in "proof of concept", dy't, ûnferwachts foar my, gjin wichtige boarnen konsumeare (30 MB RAM en minder dan 1% fan ien fan 'e acht prosessorkearnen), dus ik besletten om it te dielen mei it publyk.

De foardielen binne itselde as de foarige oplossing, ik brûkte ek de gewoane nammen fan 'e orizjinele pinba_engine. Ik haw ek in konfiguraasje tafoege wêrmei jo ferskate pinbase-tsjinner-ynstânsjes tagelyk kinne starte om metriken yn ferskate tabellen te bewarjen - dit is handich as jo gegevens net allinich fan php wolle sammelje, mar ek fan nginx.
Neidielen - "fatale flater" en dy lytse dingen dy't jo persoanlik net passe, mar myn oplossing is "sa ienfâldich as in slipper" en bestiet út mar sawat 100 rigels koade, sadat elke PHP-ûntwikkelder kin feroarje wat hy net leuk hat yn in pear minuten.

Hoe't it wurket

Der wurdt harke nei UDP-poarte 30002. Alle ynkommende pakketten wurde dekodearre neffens it protobuf-skema en aggregearre. Ien kear yn 'e minút wurdt in pakket yn 'e klikhûs yn' e pinba.requests-tabel ynfoege. (alle parameters binne konfigurearre yn konfiguraasje)

In bytsje oer clickhouse

Clickhouse stipet ferskate motoren foar gegevensopslach. De meast brûkte is MergeTree.

As jo ​​op in stuit beslute om aggregearre gegevens foar altyd op te slaan, en rau gegevens allinich foar de lêste, dan kinne jo in materialisearre werjefte meitsje mei groepearring, en periodyk de haad pinba.requests-tabel skjinmeitsje, wylst alle gegevens yn 'e bliuwe materialized werjefte. Boppedat kinne jo by it oanmeitsjen fan de pinba.requests-tabel "engine = Null" oantsjutte, dan wurde de rauwe gegevens hielendal net op skiif bewarre, en tagelyk sille se noch yn 'e materialisearre werjefte einigje en aggregearre wurde bewarre. . Ik brûk dit skema foar nginx-metriken, om't ik op nginx 50 kear mear oanfragen haw as op php.

Dat, jo binne in lange wei kommen en ik soe jo net healwei litte wolle, dus wat folget is in detaillearre beskriuwing fan 'e ynstallaasje en konfiguraasje fan myn oplossing en alles wat jo nedich binne, lykas de falkûlen dy't mear dan ien skip hawwe feroarsake te crashen. It hiele ynstallaasjeproses wurdt beskreaun foar Ubuntu 18.04 LTS en Centos 7; it proses kin wat ferskille op oare distribúsjes en ferzjes.

ynstelling

Ik set alle nedige kommando's yn dockerfile om de reprodusearberens fan ynstruksjes te fasilitearjen. Allinnich de falkûlen sille hjirûnder beskreaun wurde.

php-pinba

Nei ynstallaasje, soargje derfoar dat jo yn it /etc/php/7.2/fpm/conf.d/20-pinba.ini-bestân jo alle opsjes unkommentearre hawwe. Op guon distribúsjes (bgl. centos) kinne se kommentaar wurde.

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

klikhûs

Tidens de ynstallaasje sil clickhouse jo freegje om in wachtwurd yn te stellen foar de standertbrûker. Standert is dizze brûker tagonklik fan alle IP's, dus as jo gjin firewall op jo tsjinner hawwe, wês dan wis dat jo in wachtwurd foar ynstelle. Dit kin ek dien wurde nei ynstallaasje yn it /etc/clickhouse-server/users.xml-bestân.

It is ek de muoite wurdich opskriuwen dat clickhouse brûkt ferskate havens, ynklusyf 9000. Dizze haven wurdt ek brûkt foar php-fpm yn guon distribúsjes (Bygelyks, centos). As jo ​​​​dizze poarte al brûke, kinne jo it feroarje nei in oare yn it /etc/clickhouse-server/config.xml-bestân.

grafana mei clickhouse plugin

Nei it ynstallearjen fan Grafana, brûk de oanmeldadmin en wachtwurdbehearder. As jo ​​​​de earste kear ynlogge, sil Grafana jo freegje om in nij wachtwurd yn te stellen.

Gean dan nei it "+" -> ymportmenu en jou it dashboardnûmer oan foar ymportearjen 10011. Ik haw dit dashboard taret en uploade, sadat jo it sels net wer hoege te dwaan.

Grafana stipet wurkjen mei clickhouse fia in plugin fan tredden, mar Grafana hat gjin warskôgings foar plugins fan tredden (d'r is in kaartsje foar dit foar ferskate jierren).

pinba-tsjinner

It ynstallearjen fan protobuf en libevent is opsjoneel, mar ferbetteret pinba-tsjinner prestaasjes. As jo ​​pinba-tsjinner yn in oare map dan /opt ynstallearje, dan moatte jo ek korrigearje systemd skript map.

pinba module foar nginx

Om in module te kompilearjen hawwe jo boarnekoades nedich fan deselde ferzje fan nginx dy't al op jo server is ynstalleare, lykas deselde kompilaasjeopsjes, oars sil de bou suksesfol wêze, mar by it ferbinen fan de module sil in flater wurde smiten dy't "de module is net binêr kompatibel." Kompilaasje-opsjes kinne wurde besjoen mei it kommando nginx -V

Life hacks

Al myn siden wurkje allinich op https. It skemafjild wurdt sinleas, dus ik brûk it om web / konsole te skieden.

Yn skripts dy't tagonklik binne fan it web brûke ik:

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

En yn konsoleskripts (bygelyks cron-skripts):

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

Yn myn dashboard yn Grafana is d'r in web- / konsole-skeakel om statistyk apart te besjen.

Jo kinne jo tags ek nei Pinba stjoere, bygelyks:

pinba_tag_set('country', $countryCode);

Da's alles.

Beantwurdzje asjebleaft de peilings ûnder it artikel.

Lykas gewoanlik warskôgje ik jo dat ik net advisearje of help troch persoanlike berjochten op Habr en sosjale netwurken.

Meitsje in kaartsje op Github.

Stypje ek graach mei likes Ingelske ferzje dit artikel op reddit.

Allinnich registrearre brûkers kinne meidwaan oan 'e enkête. Ynlogge, asjebleaft.

Hokker OS brûke jo op 'e tsjinner?

  • ubuntu

  • CentOS

  • Debian

  • Gentoo

  • Reade hoed

  • Fedora

  • OpenSUSE

  • SWITSERLÂN

  • Unix

  • Windows

  • oare

114 brûkers stimden. 11 brûkers ûntholden har.

Hokker ferzje fan php brûke jo op 'e tsjinner?

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • oare

105 brûkers stimden. 17 brûkers ûntholden har.

Hawwe jo oait pinba brûkt?

  • ja

  • nee, mar ik soe graach wolle

  • nee en ik soe net wolle

  • nee en noch net fan har heard

100 brûkers stimden. 14 brûkers ûntholden har.

Hokker ferzje fan Pinba-tsjinner wolle jo besykje?

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

  • Ik skriuw myn sels

  • oare

39 brûkers stimden. 47 brûkers ûntholden har.

Boarne: www.habr.com

Add a comment