I denne artikel vil jeg fortælle, hvordan man bruger pinba sammen med clickhouse og grafana i stedet for pinba_engine og pinboard.
På et PHP-projekt er pinba måske den eneste pålidelige måde at forstå, hvad der sker med ydeevnen. Dog implementeres pinba normalt kun, når der allerede er observeret problemer, og det er uklart, "hvor man skal grave".
Ofte har ingen nogen idé om, hvor mange gange per sekund/minut et bestemt script kaldes, og man begynder at optimere "i blinde", startende med de steder, der virker mest logiske.
Nogen analyserer logs fra nginx, mens andre ser på langsomme databaseforespørgsler.
Selvfølgelig ville pinba ikke være overflødig, men der er flere grunde til, at det ikke findes på hvert projekt.
Den første grund er installationen.
For at få en nogenlunde "udbytte" fra implementeringen af pinba er det meget ønskeligt at se metrics ikke kun for de seneste minutter, men over en længere periode (fra dage til måneder).
Til dette skal du:
- installere en extension til php (og muligvis vil du have en modul til nginx)
- kompilere extension til mysql
- installere pinboard og konfigurere cron
På grund af den begrænsede information om pinba har mange fået det indtryk, at det kun fungerede på php5 og er for længe siden blevet forældet, men som vi vil se senere — det er ikke sandt.
Det første trin er det enkleste, det kræver kun at udføre kommandoen:
apt install php-pinbaI repositories er denne extension tilgængelig op til php 7.3 inklusiv, og du skal ikke kompilere noget.
Efter udførelsen af installationskommandoen får vi straks en fungerende extension, der indsamler og sender metrics for hvert script (kørevarighed, hukommelse osv.) i formatet over udp til 127.0.0.1:30002.
Disse udp-pakker bliver endnu ikke fanget eller behandlet af nogen, men det påvirker på ingen måde hastigheden eller stabiliteten for dine php-scripts.
Indtil for nylig var den eneste applikation, der kunne fange og behandle disse udp-pakker, . Beskrivelsen "" installationen får en til at miste lysten til nogensinde at læse eller forstå det igen. I kilometerlange afhængighedslister er der både pakke- og programnavne samt links til individuelle sider med deres installation, og disse har også deres egne links til andre afhængigheder. Ingen har hverken tid eller lyst til at forholde sig til det her.
Installationsprocessen blev ikke nemmere .
Måske engang kan pinba10 installeres med en eller to kommandoer uden at skulle læse en masse materiale for at forstå, hvordan det gøres, men indtil videre er det ikke tilfældet.
Hvis du alligevel har installeret pinba_engine, er det kun halvdelen af arbejdet. For uden bliver du nødt til at begrænse dig til dataene kun for de sidste par minutter, eller selv at aggregere, gemme og visualisere dataene. Heldigvis er pinboard ganske let at .
Det kan virke unødvendigt at gennemgå så meget, når alle målinger fra php allerede sendes til udp-porten i protobuf-format, og alt hvad der kræves, er at skrive en applikation, der fanger dem og gemmer dem i et eller andet lager? Det ser ud til, at de udviklere, som fik denne tanke, straks gik i gang med at skrive deres egne løsninger, hvoraf nogle er endt på GitHub.
Dernæst følger en oversigt over fire open source-projekter, der gemmer målinger i lagre, hvorfra disse data nemt kan hentes og visualiseres, for eksempel med grafana.
(november 2017)
udp-server i Go, der gemmer målinger i OpenTSDB. Hvis OpenTSDB allerede bruges i dit projekt, kan denne løsning være passende, ellers anbefaler jeg at gå forbi.
(juni 2018)
udp-server i Go, fra den samme , som denne gang gemmer målinger i InfluxDB. Mange projekter bruger allerede InfluxDB til overvågning, så denne løsning kan være ideel for dem.
Fordele:
- InfluxDB aggregere de indsamlede målinger, og originalen slette efter en angiven tid.
Ulemper:
- denne løsning gemmer ikke information om tidtagere.
- InfluxDB vil gemme websidernes adresser som tags, og hvis du har mange unikke webadresser, vil det føre til af hukommelse. På et bestemt tidspunkt vil den "«. ()
(januar 2019)
udp-server i Go, der gemmer målinger i ClickHouse. Denne løsning tilhører min ven. Det var efter at have set denne, at jeg besluttede, at det var tid til at tage fat på pinba og ClickHouse.
Fordele:
- ClickHouse er perfekt til sådanne opgaver, det tillader at komprimere data så meget, at du kan gemme alle rå data selv uden aggregation
- hvis nødvendigt, så kan du nemt aggregere de indsamlede målinger
- færdig skabelon til grafana
- gemmer information om tidtagere
Ulemper:
- der er ingen konfiguration, hvor du kan indstille navnet på databasen og tabellerne, adressen og porten til serveren.
- ved gemmelse af rå data anvendes en hjælpeordbogstabel til at gemme webadresser og domæner, hvilket komplicerer forespørgslerne bagefter.
- andre småting, der følger af den første ulempe.
(april 2019)
en udp-server på php, som gemmer metrikker i ClickHouse. Dette er min løsning, resultatet af at have stiftet bekendtskab med pinba, ClickHouse og protobuf. Mens jeg arbejdede med hele denne opsætning skrev jeg et 'proof of concept', som i overraskelse for mig ikke krævede signifikante ressourcer (30 MB RAM og mindre end 1% af en af de otte CPU-kerner), så jeg besluttede at dele det med offentligheden.
Fordele — de samme som i den tidligere løsning, og jeg har også brugt velkendte betegnelser fra den oprindelige pinba_engine. Jeg har desuden tilføjet en konfiguration, der gør det muligt at starte flere instanser af pinba-serveren, så metrikkerne kan gemmes i forskellige tabeller — dette er nyttigt, hvis du ønsker at indsamle data ikke kun fra php, men også fra nginx.
Ulemper — 'fatal mangel' og de småting, som ikke vil tilfredsstille dig personligt, men min løsning er 'så simpelt som en sandal' og består kun af cirka 100 linjer kode, så enhver php-udvikler kan ændre det, han ikke er tilfreds med, på et par minutter.
Arbejdets princip
udp-port 30002 lyttes til. Alle indkommende pakker dekodes i henhold til protobuf-schemaet og aggregeres. En gang i minuttet indsættes en pakke i ClickHouse i tabellen pinba.requests. (alle parametre kan indstilles i )
Lidt om ClickHouse
ClickHouse understøtter forskellige datalagringsteknologier. Den mest anvendte er MergeTree.
Hvis du på et tidspunkt beslutter at gemme aggregerede data over tid og rå data kun over den seneste periode, kan du oprette en materialized view med gruppering, og den primære tabel pinba.requests kan rengøres periodisk, mens alle data forbliver i materialized view. Desuden, når du opretter tabellen pinba.requests, kan du angive 'engine = Null', så rå data slet ikke gemmes på disk, men de vil stadig komme ind i materialized view og gemmes aggregeret. Jeg bruger denne opsætning til metrics fra nginx, fordi jeg har 50 gange flere anmodninger på nginx end på php.
Så, du har gjort en lang rejse, og jeg vil ikke forlade dig halvmidts, så her er en detaljeret beskrivelse af installationen og konfigurationen af min løsning, samt alt hvad du får brug for, og de faldgruber, som ikke én skib har ramt. Hele installationsprocessen er beskrevet for Ubuntu 18.04 LTS og Centos 7, og processen kan variere en smule på andre distributioner og versioner.
Installation
Alle nødvendige kommandoer har jeg samlet i for at lette reproducerbarheden af instruktionerne. Nedenfor vil jeg kun beskrive faldgruberne.
php-pinba
Efter installationen skal du sikre dig, at alle indstillinger i filen /etc/php/7.2/fpm/conf.d/20-pinba.ini er udkommenteret. I nogle distributioner (for eksempel centos) kan de være kommenteret.
extension=pinba.so
pinba.enabled=1
pinba.server=127.0.0.1:30002clickhouse
Under installationen vil clickhouse bede dig om at angive en adgangskode til brugeren default. Som standard er denne bruger tilgængelig fra alle ip'er, så hvis du ikke har en firewall på serveren, så sørg for at angive en adgangskode. Dette kan også gøres efter installationen i filen /etc/clickhouse-server/users.xml.
Det er også vigtigt at bemærke, at clickhouse bruger flere porte, herunder 9000. Denne port bruges også af php-fpm i nogle distributioner (for eksempel centos). Hvis denne port allerede er i brug, kan du ændre den til en anden i filen /etc/clickhouse-server/config.xml.
grafana med plugin til clickhouse
Efter installeringen af grafana skal du bruge login admin og adgangskode admin. Ved første login vil grafana bede dig om at angive en ny adgangskode.
Gå derefter til menuen «+» -> import og angiv nummeret på dashboardet for importen . Dette dashboard har jeg forberedt og uploadet, så du ikke skal gøre det selv igen.
Grafana understøtter integration med clickhouse via et tredjepartsplugin, men advarsler fungerer ikke for tredjepartsplugins i grafana (en ticket om dette har været åben i flere år).
pinba-server
Installation af protobuf og libevent er ikke obligatorisk, men forbedrer ydeevnen for pinba-server. Hvis du installerer pinba-server i en anden mappe end /opt, skal du også justere filen.
pinba-modul til nginx
For compiling the module, you need the source files of the same nginx version that is already installed on your server, as well as the same compilation options; otherwise, the build will succeed, but connecting the module will result in an error stating that "the module is not binary compatible." You can check the compilation options using the command nginx -V
Livstips
All my websites operate solely over https. The schema field becomes meaningless, so I use it to differentiate between web/console.
In the scripts that are accessible from the web, I use:
if (ini_get('pinba.enabled')) {
pinba_schema_set('web');
}
And in console scripts (for example, cron scripts):
if (ini_get('pinba.enabled')) {
pinba_schema_set('console');
}In my Grafana dashboard, there is a web/console switch for viewing statistics separately.
You can also pass your own tags to pinba, for example:
pinba_tag_set('country', $countryCode);Det var alt.
Please respond to the surveys under the article.
Traditionally, I warn that I do not consult or help through personal messages on Habr and social networks.
Create a ticket on GitHub.
Please also support with likes the denne artikel .
Kun registrerede brugere kan deltage i undersøgelsen. , please.
What OS are you using on the server?
Ubuntu
CentOS
Debian
Gentoo
Red Hat
Fedora
Den første version af Archify-scriptet er tilgængelig, hvilket gør det muligt at skifte til Arch Linux fra andre distributioner, mens brugere, indholdet af kataloget /home og monteringspunkter bevares.
SuSE
Unix
Windows
andet
114 users voted. 11 users abstained.
Which version of PHP are you using on the server?
7.3
7.2
7.1
7.0
5
andet
105 users voted. 17 users abstained.
Have you ever used pinba?
ja
no, but I would like to
no, and I wouldn’t want to
no, and I haven't heard of it
100 users voted. 14 users abstained.
Which version of the pinba server would you like to try?
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)
I'll write my own
andet
39 users voted. 47 users abstained.
Kilde: habr.com
