Statistikk og overvåking av PHP-skript i sanntid. ClickHouse og Grafana kommer Pinba til unnsetning

I denne artikkelen vil jeg fortelle deg hvordan du bruker pinba med clickhouse og grafana i stedet for pinba_engine og pinboard.

På et PHP-prosjekt er pinba kanskje den eneste pålitelige måten å forstå hva som skjer med ytelsen. Sant, pinba implementeres vanligvis bare når problemer allerede er observert og det ikke er klart "hvor du skal grave."

Ofte er det ingen som har noen anelse om hvor mange ganger per sekund/minutt dette eller det skriptet kalles, og de begynner å optimalisere "ved berøring", med utgangspunkt i de stedene som virker mer logiske.

Noen analyserer nginx-logger, mens andre analyserer trege databasespørringer.

Selvfølgelig ville ikke pinba være overflødig, men det er flere grunner til at ikke alle prosjekter har det.

Statistikk og overvåking av PHP-skript i sanntid. ClickHouse og Grafana kommer Pinba til unnsetning

Og den første grunnen er installasjon.

For mer eller mindre å få en slags "eksos" fra implementeringen av Pinba, er det veldig ønskelig å se beregninger ikke bare for de siste minuttene, men også over en lang periode (fra dager til måneder).

For dette trenger du:

  • installer utvidelse for php (og du vil kanskje ha en modul for nginx)
  • kompiler utvidelse for mysql
  • installer pinboard og konfigurer cron

På grunn av den lille informasjonen om Pinba er det mange som har inntrykk av at det bare fungerte på PHP5 og lenge har vært en saga blott, men som vi skal se senere er ikke dette tilfellet.

Det første trinnet er det enkleste, alt du trenger å gjøre er å kjøre kommandoen:

apt install php-pinba

Denne utvidelsen er tilgjengelig i depotene til og med php 7.3, og du trenger ikke å kompilere noe.

Etter å ha utført installasjonskommandoen, mottar vi umiddelbart en fungerende utvidelse som samler inn og sender beregninger for hvert skript (kjøretid, minne osv.) i formatet protobuf via udp til 127.0.0.1:30002.

Så langt har ingen fanget eller behandlet disse UDP-pakkene, men dette påvirker ikke på noen måte negativt hastigheten eller stabiliteten til PHP-skriptene dine.

Inntil nylig var den eneste applikasjonen som kunne fange og behandle disse UDP-pakkene pinba_motor. Beskrivelse "enkelt og kortfattetInstallasjonen fraråder ønsket om å lese og fordype seg i den igjen. De kilometerlange listene over avhengigheter inneholder både navn på pakker og navn på programmer og lenker til individuelle sider med deres installasjon, og de har egne lenker til andre avhengigheter. Ingen har tid eller lyst til å takle denne dritten.

Installasjonsprosess pinba2 gjorde det ikke spesielt lettere.

Kanskje en dag vil det være mulig å installere pinba10 med en eller to kommandoer og ikke trenger å lese en haug med materiale for å forstå hvordan du gjør det, men foreløpig er dette ikke tilfelle.

Hvis du installerer pinba_engine, er dette bare halve kampen. Tross alt uten pinboard du må begrense deg til data fra bare de siste minuttene, eller du må samle, lagre og visualisere dataene selv. Det er bra at oppslagstavlen er ganske enkel å bruke installasjon.

Det ser ut til, hvorfor slike lidelser hvis alle beregningene fra php allerede er sendt til udp-porten i protobuf-format og alt du trenger er å skrive et program som vil fange dem og legge dem i en slags lagring? Tilsynelatende satte de utviklerne som kom opp med denne ideen seg umiddelbart ned for å skrive sine egne ideer, hvorav noen endte opp på GitHub.

Følgende er en oversikt over fire åpen kildekode-prosjekter som lagrer beregninger i lagring, hvorfra disse dataene enkelt kan hentes og visualiseres, for eksempel ved hjelp av grafana.

olegfedoseev/pinba-server (november 2017)

udp-server på farten som lagrer beregninger til OpenTSDB. Kanskje hvis du allerede bruker OpenTSDB i prosjektet ditt, så vil denne løsningen passe deg, ellers anbefaler jeg å gå forbi.

olegfedoseev/pinba-influxdb (juni 2018)

udp server på farten, fra samme habrowser, som denne gangen lagrer beregningene i InfluxDB. Mange prosjekter bruker allerede InfluxDB for overvåking, så denne løsningen kan være perfekt for dem.

Pros:

  • TilstrømningDB den lar samle de mottatte beregningene, og slett originalen etter en angitt tid.

Cons:

Klikk House-Ninja/Proton (januar 2019)

udp-server på farten, som lagrer beregninger i ClickHouse. Dette er min venns løsning. Det var etter å ha blitt kjent med det at jeg bestemte meg for at det var på tide å ta fatt på Pinbu og Clickhouse.

Pros:

  • Clickhouse er ideell for slike oppgaver; det lar deg komprimere data så mye at du kan lagre alle rådata selv uten aggregering
  • om nødvendig kan du enkelt samle de resulterende beregningene
  • ferdig mal for grafana
  • lagrer informasjon om tidtakere

Cons:

  • fatal feil
  • det er ingen konfigurasjon der du kan konfigurere navnet på databasen og tabellene, adressen og porten til serveren.
  • når du lagrer rådata, brukes en hjelpeordboktabell til å lagre side- og domeneadresser, noe som kompliserer påfølgende spørringer
  • andre småting som følger av første minus

pinba-server/pinba-server (april 2019)

udp-server i php, som lagrer beregninger i ClickHouse. Dette er min løsning, som er resultatet av å bli kjent med pinba, ClickHouse og protobuf. Mens jeg sorterte ut hele denne gjengen, skrev jeg et "proof of concept", som, uventet for meg, ikke forbrukte betydelige ressurser (30 MB RAM og mindre enn 1% av en av de åtte prosessorkjernene), så jeg bestemte seg for å dele det med publikum.

Fordelene er de samme som den forrige løsningen, jeg brukte også de vanlige navnene fra den originale pinba_engine. Jeg har også lagt til en konfigurasjon som lar deg starte flere pinbase-serverforekomster samtidig for å lagre beregninger i forskjellige tabeller - dette er nyttig hvis du vil samle inn data ikke bare fra php, men også fra nginx.
Ulemper - "fatal feil" og de små tingene som ikke vil passe deg personlig, men løsningen min er "så enkel som en tøffel" og består av bare rundt 100 linjer med kode, så enhver PHP-utvikler kan endre det han ikke liker på et par minutter.

Prinsippet om drift

Det lyttes til UDP-port 30002. Alle innkommende pakker dekodes i henhold til protobuf-skjemaet og aggregeres. En gang i minuttet settes en pakke inn i klikkhuset i pinba.requests-tabellen. (alle parametere er konfigurert i konfig)

Litt om clickhouse

Clickhouse støtter forskjellige datalagringsmotorer. Den mest brukte er MergeTree.

Hvis du på et tidspunkt bestemmer deg for å lagre aggregerte data for alltid, og rådata bare for siste gang, kan du lage en materialisert visning med gruppering, og periodisk rense pinba.requests-hovedtabellen, mens alle data forblir i materialisert syn. Dessuten, når du oppretter pinba.requests-tabellen, kan du spesifisere "engine = Null", da vil ikke rådataene bli lagret på disk i det hele tatt, og samtidig vil de fortsatt ende opp i den materialiserte visningen og lagres aggregert . Jeg bruker dette opplegget for nginx-målinger, fordi på nginx har jeg 50 ganger flere forespørsler enn på php.

Så du har kommet langt og jeg vil ikke forlate deg halvveis, så det som følger er en detaljert beskrivelse av installasjonen og konfigurasjonen av løsningen min og alt du trenger, samt fallgruvene som har forårsaket mer enn ett skip å kræsje. Hele installasjonsprosessen er beskrevet for Ubuntu 18.04 LTS og Centos 7; prosessen kan variere noe på andre distribusjoner og versjoner.

Installasjon

Jeg legger inn alle nødvendige kommandoer Dockerfile for å lette reproduserbarheten av instruksjoner. Bare fallgruvene vil bli beskrevet nedenfor.

php-pinba

Etter installasjonen, sørg for at du har ukommentert alle alternativene i filen /etc/php/7.2/fpm/conf.d/20-pinba.ini. På enkelte distribusjoner (f.eks. centos) kan de bli kommentert ut.

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

klikkhus

Under installasjonen vil clickhouse be deg angi et passord for standardbrukeren. Som standard er denne brukeren tilgjengelig fra alle IP-er, så hvis du ikke har en brannmur på serveren din, sørg for å angi et passord for den. Dette kan også gjøres etter installasjon i filen /etc/clickhouse-server/users.xml.

Det er også verdt å merke seg at clickhouse bruker flere porter, inkludert 9000. Denne porten brukes også for php-fpm i enkelte distribusjoner (for eksempel centos). Hvis du allerede bruker denne porten, kan du endre den til en annen i filen /etc/clickhouse-server/config.xml.

grafana med clickhouse-plugin

Etter å ha installert Grafana, bruk påloggingsadmin og passordadmin. Når du logger inn for første gang, vil Grafana be deg angi et nytt passord.

Gå deretter til "+" -> import-menyen og angi dashbordnummeret for import 10011. Jeg forberedte og lastet opp dette dashbordet slik at du ikke trenger å gjøre det selv igjen.

Grafana støtter arbeid med clickhouse gjennom en tredjeparts plugin, men Grafana har ikke varsler for tredjeparts plugins (det har vært en billett for dette i flere år).

pinba-server

Installering av protobuf og libevent er valgfritt, men forbedrer pinba-serverytelsen. Hvis du installerer pinba-server i en annen mappe enn /opt, må du også korrigere systemd skript fil.

pinba-modul for nginx

For å kompilere en modul trenger du kildekoder av samme versjon av nginx som allerede er installert på serveren din, samt de samme kompileringsalternativene, ellers vil byggingen lykkes, men når du kobler til modulen, vil det bli kastet en feil som "modulen er ikke binærkompatibel." Kompileringsalternativer kan vises ved å bruke nginx -V-kommandoen

Livstips

Alle nettstedene mine fungerer kun på https. Skjemafeltet blir meningsløst, så jeg bruker det til å skille web/konsoll.

I skript som er tilgjengelige fra nettet bruker jeg:

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

Og i konsollskript (for eksempel cron-skript):

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

I dashbordet mitt i Grafana er det en web-/konsollbryter for å se statistikk separat.

Du kan også sende taggene dine til Pinba, for eksempel:

pinba_tag_set('country', $countryCode);

Det er alt.

Vennligst svar på meningsmålingene under artikkelen.

Som vanlig advarer jeg deg om at jeg ikke gir råd eller hjelper gjennom personlige meldinger på Habr og sosiale nettverk.

Lag en billett på Github.

Støtt også med likes engelsk versjon denne artikkelen på reddit.

Kun registrerte brukere kan delta i undersøkelsen. Logg inn, vær så snill.

Hvilket OS bruker du på serveren?

  • Ubuntu

  • CentOS

  • Debian

  • Gentoo

  • Red Hat

  • Fedora

  • OpenSUSE

  • SUSE

  • Unix

  • Windows

  • andre

114 brukere stemte. 11 brukere avsto.

Hvilken versjon av php bruker du på serveren?

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • andre

105 brukere stemte. 17 brukere avsto.

Har du noen gang brukt pinba?

  • ja

  • nei, men jeg vil gjerne

  • nei og jeg vil ikke

  • nei og har ikke hørt om henne

100 brukere stemte. 14 brukere avsto.

Hvilken versjon av Pinba-serveren vil du prøve?

  • pinba_engine (mysql-motor)

  • pinba2 (mysql-motor)

  • oppslagstavle (php + mysql)

  • olegfedoseev/pinba-server (go + OpenTSDB)

  • olegfedoseev/pinba-influxdb (go + influxdb)

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

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

  • Jeg skal skrive min selv

  • andre

39 brukere stemte. 47 brukere avsto.

Kilde: www.habr.com

Legg til en kommentar