Statisztika és valós idejű PHP script monitorozás. A ClickHouse és a Grafana segít a Pinbának

Ebben a cikkben elmondom, hogyan lehet a pinbát a Clickhouse-szal és a Grafanával együtt használni a pinba_engine és a pinboard helyett.

A PHP-projektek esetében a pinba valószínűleg az egyetlen megbízható módja annak, hogy megértsük, mi történik a teljesítménnyel. Általában a pinbát akkor vezetik be, amikor már teljesítményproblémák merülnek fel, és nem világos, hogy "hol kell keresni".

Gyakran senki sem tudja, hogy másodpercenként vagy percen belül hányszor hívják meg az adott szkriptet, és "tapogatózás" alapján kezdik el optimalizálni, a látszólag logikus helyekről indulva.

Valaki az nginx naplóit elemzi, míg mások a lassú SQL lekérdezéseket vizsgálják.

Természetesen a pinba nem lenne felesleges, de több oka van annak, hogy miért nem áll rendelkezésre minden projektben.

Statisztika és valós idejű PHP script monitorozás. A ClickHouse és a Grafana segít a Pinbának

Az első ok az, hogy a telepítés.

Ahhoz, hogy nyereséget lehessen húzni a pinba bevezetéséből, nagyon kívánatos, hogy a metrikákat ne csak az utolsó percekben lássuk, hanem hosszú távon is (napokról hónapokra).

Ehhez szükséges:

  • telepíteni egy PHP bővítményt (és talán egy nginx modult is szeretne),
  • lefordítani a MySQL bővítményt,
  • telepíteni a pinboardot és beállítani a cron-t.

A pinbával kapcsolatos korlátozott információ miatt sokan úgy vélik, hogy az csak PHP5-ön működött, és már rég elavult, de ahogy később látni fogjuk, ez nem igaz.

Az első lépés a legegyszerűbb; csak annyit kell tennie, hogy végrehajtani a parancsot:

apt install php-pinba

A verziótárakban ez a bővítmény egészen PHP 7.3-ig elérhető, és nincs szüksége semmilyen fordításra.

A telepítési parancs végrehajtása után azonnal működő bővítményt kapunk, amely összegyűjti és megküldi minden szkript metrikáját (futási idő, memória stb.) az alábbi formátumban: protobuf UDP-n a 127.0.0.1:30002-re.

Ezeket az UDP csomagokat még senki sem fogja és dolgozza fel, de ez nem befolyásolja a PHP szkriptek sebességét vagy stabilitását.

Nemrégig a pinba UDP csomagok rögzítésére és feldolgozására alkalmazásként csak a pinba_engine. A "egyszerű és világos" telepítési leírás kedvét szegheti bárkinek, akinek valaha is újra kedve lenne ezt olvasni és megérteni. A kilométeres függőségi listákban vannak csomagnév és programnevek, valamint linkek az egyes telepítésekhez, de azoknak is vannak más függőségeik. Senkinek sincs ideje vagy kedve, hogy elmerüljön ebben a zűrzavarban.

A telepítési folyamat pinba2 nem lett különösebben könnyű..

Talán egyszer elérhető lesz a pinba10 telepítése egy-két parancssorban, és nem szükséges majd rengeteget olvasni ahhoz, hogy megértsük, hogyan csináljuk, de ez még nem így van.

Ha végül telepítette a pinba_engine-t, akkor ez csak a feladat fele. Mivel anélkül, hogy pinboard , csak az utolsó néhány perc adataira korlátozódik, vagy saját magának kell aggregálnia, tárolnia és vizualizálnia az adatokat. Szerencsére a pinboard elég egyszerű a telepítést.

Első pillantásra miért kellene szenvedni, ha minden metrika a php-ból már UDP-porton keresztül érkezik protobuf formátumban, és csupán annyit kell tenni, hogy írjunk egy alkalmazást, amely fogja és tárolja ezeket az adatokat valamilyen tárolóban? Valószínűleg azok a fejlesztők, akiknek ez a gondolat eszükbe jutott, azonnal a saját megoldásuk írásába kezdtek, melyek közül néhány a GitHub-ra került.

Ezután négy nyílt forráskódú projekt áttekintése következik, amelyek a metrikákat tárolják olyan tárolókban, ahonnan az adatok könnyen hozzáférhetők és vizualizálhatók például a grafana segítségével.

olegfedoseev/pinba-server (2017 november)

UDP szerver Go nyelven, amely a metrikákat OpenTSDB-be menti. Ha az OpenTSDB már használatban van a projektjében, akkor ez a megoldás megfelelő lehet, különben javaslom, hogy kerüljön el.

olegfedoseev/pinba-influxdb (2018 június)

UDP szerver Go nyelven, ugyanattól a habrayuser, amely ezúttal az InfluxDB-be menti a metrikákat. Sok projekt számára a monitoring során már most is használják az InfluxDB-t, így számukra ez a megoldás tökéletesen megfelelhet.

Előnyök:

  • InfluxDB MMM-DD-YYYY aggregálni a kapott metrikákat, az eredetit pedig törölni egy beállított idő elteltével.

Hátrányok:

ClickHouse-Ninja/Proton (2019 január)

UDP szerver Go nyelven, amely a metrikákat ClickHouse-ba menti. Ez egy barátom megoldása. Éppen azután döntöttem úgy, hogy foglalkozom a pinbával és a ClickHouse-szal, miután megismertem őt.

Előnyök:

  • A ClickHouse tökéletesen alkalmas az ilyen feladatokra, lehetővé teszi az adatok annyira való tömörítését, hogy az összes nyers adatot tárolhatja aggregációk nélkül is.
  • Ha szükséges, akkor a kapott metrikákat könnyen aggregálhatja.
  • kész sablon grafanához
  • tárolja az időzítők adatait

Hátrányok:

  • fatális hiányosság
  • Nincs olyan konfiguráció, amelyben beállítható lenne az adatbázis és a táblák neve, a szerver címe és portja.
  • A nyers adatok mentésekor egy segéd szótárelőzmény táblázatot használunk a weboldalak és domainek címének tárolására, ami később bonyolítja le a lekérdezéseket.
  • Egyéb apróságok, amelyek az első hátrányból következnek.

pinba-server/pinba-server (2019 április)

UDP szerver PHP-ban, amely a metrikákat a ClickHouse-ban tárolja. Ez az én megoldásom, amely a pinbával, ClickHouse-szal és protobuf-bal való ismerkedésem eredménye. Míg sorra jártam ezt az egészet, írtam egy "proof of concept-et", amely váratlanul, számomra nem igényelt jelentős erőforrásokat (30 MB RAM és kevesebb mint 1% az egyik nyolc procesor magból), ezért úgy döntöttem, hogy megosztom a nyilvánossággal.

Előnyök — ugyanazok, mint a korábbi megoldásnál, a megszokott elnevezéseket is használtam az eredeti pinba_engine-ből. Továbbá hozzáadtam egy konfigurációt, amely lehetővé teszi több pinba-szerver példány egyidejű indítását, hogy a metrikákat külön táblákba menthessük — ez hasznos, ha nemcsak PHP-ból, hanem Nginx-ből is kíván adatait gyűjteni.
Hátrányok — "fatális hiba" és az apróságok, amelyek személy szerint nem fognak tetszeni, de az én megoldásom "olyasmi, mint egy papucs", mindössze körülbelül 100 sor kód áll, így bármely PHP fejlesztő pár perc alatt meg tudja változtatni azt, ami nem tetszik neki.

A működés elve

Az UDP 30002-es port figyelése zajlik. Minden bejövő csomag a protobuf séma szerint kerül dekódolásra és aggregálásra. Egy percenként egy csomagot helyezünk el a ClickHouse pinba.requests táblájába. (Minden paraméter konfigurálható a konfigurációban.)

Kicsit a ClickHouse-ról

A ClickHouse különböző adattárolási motorokat támogat. A leggyakrabban használt motor a MergeTree.

Ha valamilyen időpontban úgy dönt, hogy az összes időszakos aggregált adatot tárolja, míg a nyers adatokat csak az utolsó időszakban, létrehozhat egy anyagolt nézetet csoportosítással, és időközönként ürítheti a fő pinba.requests tábláját, minden adat megmarad az anyagolt nézetben. Továbbá, amikor létrehozza a pinba.requests táblát, megadhatja az "engine = Null" értéket, akkor a nyers adatok nem lesznek mentve lemezre, és mégis bekerülnek az anyagolt nézetbe és aggregáltan megmaradnak. E hiba sebességekkel dolgozom az Nginx metrikákkal, mert az Nginx-re 50-szer annyi kérdésem van, mint a PHP-ra.

Így hát, hosszú utat tettél meg, és nem szeretném, ha félúton hagynálak, ezért itt van egy részletes leírás a megoldásom telepítéséről és beállításáról, valamint mindenről, amire szükséged lehet, és azokról a buktatókról, amelyekbe nem egy hajó ütközött. A telepítési folyamatot az Ubuntu 18.04 LTS és a Centos 7 számára írtuk le, más disztribúciókban és verziókban a folyamat kismértékben eltérhet.

Telepítés

Minden szükséges parancsot kiemeltem a Dockerfile megkönnyítve az utasítások reprodukálását. Az alábbiakban csak a buktatókat fogom ismertetni.

php-pinba

A telepítés után győződj meg róla, hogy a /etc/php/7.2/fpm/conf.d/20-pinba.ini fájlban minden lehetőség fel van kommentálva. Néhány disztribúcióban (például centos) ezek megjegyzés alatt állhatnak.

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

clickhouse

A clickhouse telepítésekor megkérdezi tőled a jelszót a default felhasználóhoz. Alapértelmezés szerint ez a felhasználó minden IP-címről elérhető, ezért ha nincs tűzfala a szerveren, mindenképpen állíts be neki jelszót. Ezt a telepítés után is megteheted a /etc/clickhouse-server/users.xml fájlban.

Érdemes figyelni arra is, hogy a clickhouse több portot használ, beleértve a 9000-es portot. Ez a port szintén használt a php-fpm által néhány disztribúcióban (például centos). Ha ez a port már foglalt, módosíthatod egy másikra a /etc/clickhouse-server/config.xml fájlban.

grafana clickhouse pluginnal

A grafana telepítése után használd az admin bejelentkezést és az admin jelszót. Először belépve a grafana kérni fog egy új jelszó megadását.

Ezután menj a "+" menübe -> importálás, és add meg a számot a jelentés importálásához. 10011Ezt a jelentést elkészítettem és feltöltöttem, hogy ne kelljen újra elkészítened.

A grafana támogatja a clickhouse használatát egy külső pluginnal, de a külső pluginek esetében a grafana riasztásai nem működnek (a jegy erre már több éve megvan).

pinba-server

A protobuf és a libevent telepítése nem kötelező, de javítja a pinba-server teljesítményét. Ha a pinba-server-t a /opt mappától eltérő helyre telepíted, akkor a systemd scriptet is módosítanod kell.

pinba-modul nginx-hez

A modul összeállításához szükség van azokra a forrásokra, amelyek az nginx azon verziójával egyeznek, amely már telepítve van a szerverén, valamint ugyanezekre a fordítási opciókra, különben a build sikeres lesz, de a modul csatlakoztatásakor hibaüzenetet kapunk, miszerint "a modul binárisan inkompatibilis". A fordítási opciókat az nginx -V parancs kiadásával lehet megnézni.

Tippek

Nálam az összes webhely csak https-en működik. A schema mező értelmetlenné válik, ezért azt a web/konzol elválasztására használom.

Az interneten elérhető szkriptekben a következőket használom:

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

A konzolban (például a cron szkriptekben):

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

A grafanában a műszerpanelemen van egy web/konzol kapcsoló a statisztikák külön megtekintésére.

A pinbában saját címkéket is át lehet adni, például:

pinba_tag_set('country', $countryCode);

Ennyit erről.

Kérem, válaszoljon a cikk alatti kérdőívekre.

Hagyományosan figyelmeztetem, hogy nem nyújtok konzultációt és nem segítek a Habr privát üzenetein és a közösségi médiákon keresztül.

Nyisson egy jegyet a GitHubon.

Kérem, támogassa lájkokkal az angol verziót ezen cikket a Redditen.

Csak a regisztrált felhasználók vehetnek részt a szavazáson. Kérem, jelentkezzen be., kérem.

Milyen operációs rendszert használ a szerveren?

  • Ubuntu

  • CentOS

  • Debian

  • Gentoo

  • Red Hat

  • Fedora

  • OpenSUSE

  • SuSE

  • Unix

  • Windows

  • egyebek

114 felhasználó szavazott. 11 felhasználó tartózkodott.

Milyen PHP verziót használ a szerveren?

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • egyebek

105 felhasználó szavazott. 17 felhasználó tartózkodott.

Használt valaha pinbát?

  • igen

  • nem, de szeretném

  • nem és nem is szeretném

  • nem és nem hallottam róla

100 felhasználó szavazott. 14 felhasználó tartózkodott.

Milyen pinba-szerver verziót szeretne kipróbálni?

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

  • írok egy sajátot

  • egyebek

39 felhasználó szavazott. 47 felhasználó tartózkodott.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster