Statistiken an Iwwerwaachung vu PHP Scripten an Echtzäit. ClickHouse a Grafana kommen Pinba zur Hëllef

An dësem Artikel wäert ech Iech soen wéi Dir Pinba mat Clickhouse a Grafana benotzt anstatt Pinba_engine a Pinboard.

Op engem PHP-Projet ass Pinba vläicht deen eenzegen zouverléissege Wee fir ze verstoen wat mat der Leeschtung geschitt. True, Pinba gëtt normalerweis nëmme implementéiert wann d'Problemer scho beobachtet ginn an et ass net kloer "wou ze graven."

Dacks huet keen eng Ahnung wéivill Mol pro Sekonn/Minutt dat oder dat Skript genannt gëtt a se fänken un "vum Touch" ze optimiséieren, vun deenen Plazen un, déi méi logesch schéngen.

E puer analyséieren nginx Logbicher, anerer analyséieren lues Datebank Ufroen.

Pinba wier natierlech net iwwerflësseg, awer et gi verschidde Grënn firwat net all Projet et huet.

Statistiken an Iwwerwaachung vu PHP Scripten an Echtzäit. ClickHouse a Grafana kommen Pinba zur Hëllef

An den éischte Grond ass d'Installatioun.

Fir méi oder manner eng Zort "Auspuff" vun der Implementatioun vu Pinba ze kréien, ass et ganz wënschenswäert Metriken net nëmme fir déi lescht Minutten ze gesinn, awer och iwwer eng laang Zäit (vu Deeg bis Méint).

Dofir braucht Dir:

  • Installatioun Extensioun fir php (an Dir wëllt vläicht e Modul fir nginx)
  • kompiléieren Extensioun fir mysql
  • installéieren pinboard an configuréieren cron

Wéinst der klenger Quantitéit un Informatioun iwwer Pinba hunn vill Leit den Androck datt et nëmmen op PHP5 geschafft huet a scho laang eng Saach vun der Vergaangenheet ass, awer wéi mir spéider gesinn, ass dat net de Fall.

Den éischte Schrëtt ass am einfachsten, alles wat Dir maache musst ass de Kommando auszeféieren:

apt install php-pinba

Dës Extensioun ass verfügbar an de Repositories bis an abegraff php 7.3 an Dir braucht näischt ze kompiléieren.

Nom Ausféierung vum Installatiounskommando kréie mir direkt eng Aarbechtsextensioun déi Metriken fir all Skript (Laafzäit, Erënnerung, etc.) am Format sammelt a schéckt protobuf iwwer udp bis 127.0.0.1:30002.

Bis elo huet keen dës UDP Pakete gefaangen oder veraarbecht, awer dëst beaflosst op kee Fall negativ op d'Geschwindegkeet oder d'Stabilitéit vun Äre PHP Scripten.

Bis viru kuerzem war déi eenzeg Applikatioun déi dës UDP Pakete fangen a veraarbecht huet pinba_engine. Beschreiwung "einfach a präzis"Installatioun decouragéiert de Wonsch ëmmer erëm ze liesen an ze verdéiwen. Déi Kilometer laang Lëschte vun Ofhängegkeeten enthalen souwuel d'Nimm vu Packagen wéi och d'Nimm vu Programmer a Linken op eenzel Säite mat hirer Installatioun, an déi hunn hir eege Linken op aner Ofhängegkeeten. Keen huet d'Zäit oder de Wonsch mat dësem Schrecken ze këmmeren.

Installatioun Prozess pinb2 net gemaach besonnesch méi einfach.

Vläicht wäert et iergendwann méiglech sinn Pinba10 mat engem oder zwee Kommandoen z'installéieren an net eng Rëtsch Material ze liesen fir ze verstoen wéi et ze maachen, awer fir de Moment ass dat net de Fall.

Wann Dir Pinba_engine installéiert, dann ass dëst nëmmen d'Halschent vun der Schluecht. No all, ouni pinboard Dir musst Iech op Daten aus de leschte Minutten limitéieren, oder Dir musst d'Donnéeën selwer aggregéieren, späicheren a visualiséieren. Et ass gutt datt Pinboard relativ einfach ass ze benotzen Installatioun.

Et géif schéngen, firwat sou Leed wann all Metriken aus php schonn an den udp Hafen am Protobuf Format geschéckt ginn an alles wat Dir braucht ass eng Applikatioun ze schreiwen, déi se fänken an se an eng Aart vu Späichere setzen? Anscheinend hunn déi Entwéckler, déi mat dëser Iddi komm sinn, sech direkt gesat fir hir eegen Iddien ze schreiwen, e puer vun deenen op GitHub opgehalen hunn.

Déi folgend ass en Iwwerbléck vu véier Open Source Projeten, déi Metriken an der Späichere späicheren, aus deenen dës Donnéeën einfach erëmgewielt a visualiséiert kënne ginn, zum Beispill mat Grafana.

olegfedoseev/pinba-server (November 2017)

udp Server ënnerwee déi Metriken op OpenTSDB späichert. Vläicht wann Dir schonn OpenTSDB an Ärem Projet benotzt, da passt dës Léisung Iech, soss recommandéieren ech se laanscht ze goen.

olegfedoseev/pinba-influxdb (Juni 2018)

udp Server ënnerwee, vun der selwechter habrowser, déi dës Kéier d'Metriken an InfluxDB späichert. Vill Projete benotze scho InfluxDB fir Iwwerwaachung, sou datt dës Léisung perfekt fir si ass.

Pros:

  • Influx DB et erlaabt aggregéiert déi kritt Metriken, a läscht d'Original no enger spezifizéierter Zäit.

Muecht:

ClickHouse-Ninja/Proton (Januar 2019)

udp Server ënnerwee, déi Metriken am ClickHouse späichert. Dëst ass mäi Frënd seng Léisung. Et war no der Bekanntschaft datt ech decidéiert hunn datt et Zäit wier Pinbu an Clickhouse opzehuelen.

Pros:

  • Clickhouse ass ideal fir sou Aufgaben; et erlaabt Iech Daten esou vill ze kompriméieren datt Dir all déi Matière Daten och ouni Aggregatiounen späichere kënnt
  • wann néideg, kënnt Dir einfach déi resultéierend Metriken aggregéieren
  • fäerdege Schabloun fir Grafana
  • späichert Informatioun iwwer Timer

Muecht:

  • fatale Feeler
  • et gëtt keng Configuratioun an där Dir den Numm vun der Datebank an Dëscher, d'Adress an den Hafen vum Server konfiguréieren.
  • wann Dir Matière Daten späichert, gëtt en Hilfswörterbuchtabel benotzt fir Säiten- an Domainadressen ze späicheren, wat spéider Ufroen komplizéiert
  • aner kleng Saachen déi aus dem éischte Minus kommen

pinba-server/pinba-server (Abrëll 2019)

udp Server an php, déi Metriken am ClickHouse späichert. Dëst ass meng Léisung, déi d'Resultat ass fir Pinba, ClickHouse a Protobuf kennen ze léieren. Wärend ech dës ganz Rëtsch auszortéieren, hunn ech e "Beweis vum Konzept" geschriwwen, deen, onerwaart fir mech, keng bedeitend Ressourcen verbraucht huet (30 MB RAM a manner wéi 1% vun engem vun den aacht Prozessorkären), sou datt ech decidéiert et mat de Public ze deelen.

D'Virdeeler sinn d'selwecht wéi déi viregt Léisung, ech hunn och déi üblech Nimm aus dem Original pinba_engine benotzt. Ech hunn och eng Configuratioun bäigefüügt déi Iech erlaabt e puer Pinbase Server Instanzen gläichzäiteg ze lancéieren fir Metriken a verschiddenen Dëscher ze späicheren - dëst ass nëtzlech wann Dir Daten net nëmme vu php wëllt sammelen, awer och vun nginx.
Nodeeler - "fatale Feeler" an déi kleng Saachen, déi Iech net perséinlech passen, awer meng Léisung ass "sou einfach wéi e Pantoffel" a besteet aus nëmmen ongeféier 100 Zeilen Code, sou datt all PHP Entwéckler kann änneren wat hien net gär huet an e puer Minutten.

Wéi se funktionéiert

Den UDP Hafen 30002 gëtt nogelauschtert.All erakommen Pakete ginn no dem Protobuf Schema dekodéiert a aggregéiert. Eemol an der Minutt gëtt e Paket an d'Klickhaus an d'pinba.requests Tabelle gesat. (all Parameteren sinn konfiguréiert an config)

E bëssen iwwer Clickhouse

Clickhouse ënnerstëtzt verschidden Datelagerungsmotoren. Déi meescht benotzt ass MergeTree.

Wann Dir iergendwann décidéiert fir aggregéiert Donnéeën fir all Zäit ze späicheren, a Matière Daten nëmme fir déi lescht, da kënnt Dir eng materialiséierter Vue mat Gruppéierung erstellen, a periodesch den Haapt Pinba.requests Dësch botzen, während all Daten an der materialiséierter Vue. Ausserdeem, wann Dir de pinba.requests Dësch erstellt, kënnt Dir "Engine = Null" spezifizéieren, da ginn d'Rohdaten guer net op der Disk gespäichert, a gläichzäiteg wäerte se nach ëmmer an der materialiséierter Vue ophalen an aggregéiert gespäichert ginn . Ech benotzen dëse Schema fir nginx Metriken, well op nginx hunn ech 50 Mol méi Ufroe wéi op php.

Also, Dir sidd e laange Wee komm an ech wéilt dech net op d'Halschent verloossen, also wat folgend ass eng detailléiert Beschreiwung vun der Installatioun an der Konfiguratioun vu menger Léisung an alles wat Dir braucht, souwéi d'Fallen déi méi wéi ee Schëff verursaacht hunn ze crashen. De ganze Installatiounsprozess gëtt fir Ubuntu 18.04 LTS an Centos 7 beschriwwen; De Prozess kann liicht op aner Distributiounen a Versiounen ënnerscheeden.

Kader

Ech setzen all déi néideg Kommandoen an dockerfile fir d'Reproduktioun vun den Instruktiounen ze erliichteren. Nëmmen d'Feele ginn hei ënnen beschriwwen.

php-pinba

No der Installatioun, gitt sécher datt Dir an der Datei /etc/php/7.2/fpm/conf.d/20-pinba.ini all d'Optiounen unkommentéiert hutt. Op e puer Verdeelungen (zB Centos) kënne se kommentéiert ginn.

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

clickhouse

Wärend der Installatioun freet Clickhouse Iech e Passwuert fir den Default Benotzer ze setzen. Par défaut ass dëse Benotzer vun all IPen zougänglech, also wann Dir keng Firewall op Ärem Server hutt, gitt sécher e Passwuert dofir ze setzen. Dëst kann och no der Installatioun an der Datei /etc/clickhouse-server/users.xml gemaach ginn.

Et ass och ze bemierken datt Clickhouse verschidde Ports benotzt, dorënner 9000. Dëse Port gëtt och fir php-fpm an e puer Verdeelungen benotzt (zum Beispill Centos). Wann Dir schonn dësen Hafen benotzt, kënnt Dir en an en aneren an der Datei /etc/clickhouse-server/config.xml änneren.

grafana mat Clickhouse Plugin

Nodeems Dir Grafana installéiert hutt, benotzt de Login Admin a Passwuert Admin. Wann Dir Iech fir d'éischte Kéier aloggen, wäert Grafana Iech froen en neit Passwuert ze setzen.

Als nächst gitt op den "+" -> Import Menü a gitt d'Dashboardnummer fir den Import un 10011. Ech hunn dësen Dashboard virbereet an eropgelueden fir datt Dir et net erëm selwer maache musst.

Grafana ënnerstëtzt d'Aarbecht mat Clickhouse duerch en Drëtt-Partei Plugin, awer Grafana huet keng Alarmer fir Drëtt-Partei Plugins (et gouf e Ticket fir dëst fir e puer Joer).

pinba-server

Protobuf an libevent installéieren ass fakultativ, awer verbessert Pinba-Server Leeschtung. Wann Dir Pinba-Server an engem anere Fichier wéi /opt installéiert, da musst Dir och korrigéieren systemd Skript Datei.

pinba Modul fir nginx

Fir e Modul ze kompiléieren, braucht Dir Quellcodes vun der selwechter Versioun vun nginx déi schonn op Ärem Server installéiert ass, souwéi déiselwecht Kompiléierungsoptiounen, soss ass de Bau erfollegräich, awer wann Dir de Modul verbënnt, gëtt e Feeler geworf datt "De Modul ass net binär kompatibel." Kompilatiounsoptioune kënne gekuckt ginn mat dem nginx -V Kommando

Liewen hacks

All meng Siten funktionnéieren nëmmen op https. De Schemafeld gëtt sënnlos, also benotze ech et fir Web / Konsol ze trennen.

A Scripten déi vum Internet zougänglech sinn, benotzen ech:

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

An a Konsol Scripten (zum Beispill, Cron Scripten):

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

A mengem Dashboard zu Grafana gëtt et e Web / Konsol Schalter fir d'Statistiken separat ze gesinn.

Dir kënnt och Är Tags op Pinba schécken, zum Beispill:

pinba_tag_set('country', $countryCode);

Dat ass alles.

Äntwert w.e.g. d'Ëmfroen ënnert dem Artikel.

Wéi gewinnt warnen ech Iech datt ech net beroden oder hëllefen duerch perséinlech Messagen op Habr a sozialen Netzwierker.

Erstellt en Ticket op Github.

Ënnerstëtzt och w.e.g. mat Likes Englesch Versioun vun dësem Artikel op reddit.

Nëmme registréiert Benotzer kënnen un der Ëmfro deelhuelen. Umellen, wann ech glift.

Wéi eng OS benotzt Dir um Server?

  • Ubuntu

  • CentOS

  • Debian

  • Gentoo

  • Red Droe

  • Fedora

  • OpenSUSE

  • SCHWÄIZ

  • Unix

  • Windows

  • aaner

114 Benotzer hunn gestëmmt. 11 Benotzer hu sech enthalen.

Wéi eng Versioun vu php benotzt Dir um Server?

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • aaner

105 Benotzer hunn gestëmmt. 17 Benotzer hu sech enthalen.

Hutt Dir jeemools Pinba benotzt?

  • jo

  • nee, mee ech géif gären

  • nee an ech wéilt net

  • nee an hun nach net vun hatt héieren

100 Benotzer hunn gestëmmt. 14 Benotzer hu sech enthalen.

Wéi eng Versioun vum Pinba Server wëllt Dir probéieren?

  • pinba_engine (mysql engine)

  • pinba2 (mysql engine)

  • Pinboard (php + mysql)

  • olegfedoseev/pinba-server (goen + OpenTSDB)

  • olegfedoseev/pinba-influxdb (go + influxdb)

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

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

  • Ech schreiwen meng selwer

  • aaner

39 Benotzer hunn gestëmmt. 47 Benotzer hu sech enthalen.

Source: will.com

Setzt e Commentaire