Statistik og overvågning af PHP scripts i realtid. ClickHouse og Grafana kommer Pinba til hjælp

I denne artikel vil jeg fortælle dig, hvordan du bruger pinba 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. Sandt nok implementeres pinba normalt kun, når problemer allerede er observeret, og det ikke er klart "hvor man skal grave."

Ofte aner ingen, hvor mange gange i sekundet/minut dette eller hint script kaldes, og de begynder at optimere "ved berøring", startende fra de steder, der virker mere logiske.

Nogle analyserer nginx-logfiler, mens andre analyserer langsomme databaseforespørgsler.

Selvfølgelig ville pinba ikke være overflødigt, men der er flere grunde til, at ikke alle projekter har det.

Statistik og overvågning af PHP scripts i realtid. ClickHouse og Grafana kommer Pinba til hjælp

Og den første grund er installation.

For mere eller mindre at få en form for "udstødning" fra implementeringen af ​​Pinba, er det meget ønskeligt at se målinger ikke kun for de sidste minutter, men også over en lang periode (fra dage til måneder).

Til dette har du brug for:

  • installer udvidelse til php (og du vil måske have et modul til nginx)
  • kompilér udvidelse til mysql
  • installer pinboard og konfigurer cron

På grund af den lille mængde information om Pinba, har mange mennesker indtryk af, at det kun fungerede på PHP5 og længe har været fortid, men som vi vil se senere, er det ikke tilfældet.

Det første trin er det enkleste, alt du skal gøre er at køre kommandoen:

apt install php-pinba

Denne udvidelse er tilgængelig i arkiverne til og med php 7.3, og du behøver ikke at kompilere noget.

Efter at have udført installationskommandoen modtager vi straks en fungerende udvidelse, der indsamler og sender metrics for hvert script (køretid, hukommelse osv.) i formatet protobuf via udp til 127.0.0.1:30002.

Indtil videre har ingen fanget eller behandlet disse UDP-pakker, men dette påvirker ikke på nogen måde negativt hastigheden eller stabiliteten af ​​dine PHP-scripts.

Indtil for nylig var den eneste applikation, der kunne fange og behandle disse UDP-pakker pinba_motor. Beskrivelse "enkel og kortfattet" Installationen afskrækker lysten til nogensinde at læse og dykke ned i den igen. De kilometerlange lister over afhængigheder indeholder både navne på pakker og navne på programmer og links til individuelle sider med deres installation, og disse har deres egne links til andre afhængigheder. Ingen har tid eller lyst til at beskæftige sig med dette lort.

Installationsproces pinba2 gjorde ikke især lettere.

Måske en dag vil det være muligt at installere pinba10 med en eller to kommandoer og ikke behøver at læse en masse materiale for at forstå, hvordan man gør det, men for nu er det ikke tilfældet.

Hvis du installerer pinba_engine, så er dette kun halvdelen af ​​kampen. Efter alt uden pinboard du bliver nødt til at begrænse dig til data fra kun de sidste par minutter, eller du bliver nødt til selv at samle, gemme og visualisere dataene. Det er godt, at pinboard er ret simpelt at bruge installation.

Det ser ud til, hvorfor sådan en lidelse, hvis alle metrikker fra php allerede er sendt til udp-porten i protobuf-format, og alt hvad du behøver er at skrive et program, der fanger dem og lægger dem i en form for lager? Tilsyneladende satte de udviklere, der kom med denne idé, sig straks ned for at skrive deres egne ideer, hvoraf nogle endte på GitHub.

Det følgende er en oversigt over fire open source-projekter, der gemmer metrics i storage, hvorfra disse data nemt kan hentes og visualiseres, for eksempel ved hjælp af grafana.

olegfedoseev/pinba-server (november 2017)

udp-server på farten, der gemmer metrics til OpenTSDB. Måske hvis du allerede bruger OpenTSDB i dit projekt, så vil denne løsning passe dig, ellers anbefaler jeg at gå forbi.

olegfedoseev/pinba-influxdb (juni 2018)

udp server på farten, fra samme habrowser, som denne gang gemmer metrics i InfluxDB. Mange projekter bruger allerede InfluxDB til overvågning, så denne løsning kan være perfekt til dem.

Teknikere:

  • TilstrømningDB Det gør det muligt samle de modtagne målinger, og slet originalen efter en angivet tid.

Ulemper:

Klik House-Ninja/Proton (januar 2019)

udp-server på farten, som gemmer metrics i ClickHouse. Dette er min vens løsning. Det var efter at have stiftet bekendtskab med det, at jeg besluttede, at det var tid til at tage imod Pinbu og Clickhouse.

Teknikere:

  • Clickhouse er ideel til sådanne opgaver; det giver dig mulighed for at komprimere data så meget, at du kan gemme alle de rå data selv uden aggregering
  • Hvis det er nødvendigt, kan du nemt samle de resulterende metrics
  • færdiglavet skabelon til grafana
  • gemmer oplysninger om timere

Ulemper:

  • fatal fejl
  • der er ingen konfiguration, hvor du kan konfigurere navnet på databasen og tabellerne, adressen og porten på serveren.
  • ved lagring af rådata bruges en hjælpeordbogstabel til at gemme side- og domæneadresser, hvilket komplicerer efterfølgende forespørgsler
  • andre småting, der følger af første minus

pinba-server/pinba-server (april 2019)

udp-server i php, som gemmer metrics i ClickHouse. Dette er min løsning, som er resultatet af at lære pinba, ClickHouse og protobuf at kende. Mens jeg ordnede hele denne flok, skrev jeg et "proof of concept", som uventet for mig ikke tærede væsentlige ressourcer (30 MB RAM og mindre end 1% af en af ​​de otte processorkerner), så jeg besluttede at dele det med offentligheden.

Fordelene er de samme som den tidligere løsning, jeg brugte også de sædvanlige navne fra den originale pinba_engine. Jeg tilføjede også en konfiguration, der giver dig mulighed for at starte flere pinbase-serverinstanser på én gang for at gemme metrics i forskellige tabeller - dette er nyttigt, hvis du vil indsamle data ikke kun fra php, men også fra nginx.
Ulemper - "fatal defekt" og de små ting, der ikke passer dig personligt, men min løsning er "så simpel som en tøffel" og består kun af omkring 100 linjer kode, så enhver PHP-udvikler kan ændre, hvad han ikke kan lide på et par minutter.

Virkemåde

Der lyttes til UDP-port 30002. Alle indgående pakker afkodes i henhold til protobuf-skemaet og aggregeres. En gang i minuttet indsættes en pakke i klikhuset i pinba.requests-tabellen. (alle parametre er konfigureret i config)

Lidt om clickhouse

Clickhouse understøtter forskellige datalagringsmotorer. Den mest brugte er MergeTree.

Hvis du på et tidspunkt beslutter dig for at gemme aggregerede data for alle tider og kun rådata for den sidste, så kan du oprette en materialiseret visning med gruppering og periodisk rense pinba.requests-hovedtabellen, mens alle data forbliver i materialiseret syn. Desuden, når du opretter pinba.requests-tabellen, kan du angive "engine = Null", så vil de rå data slet ikke blive gemt på disken, og samtidig vil de stadig ende i den materialiserede visning og blive gemt aggregeret . Jeg bruger denne ordning til nginx-metrics, fordi på nginx har jeg 50 gange flere anmodninger end på php.

Så du er nået langt, og jeg vil ikke forlade dig halvvejs, så det følgende er en detaljeret beskrivelse af installationen og konfigurationen af ​​min løsning og alt, hvad du har brug for, samt de faldgruber, der har forårsaget mere end ét skib at styrte. Hele installationsprocessen er beskrevet for Ubuntu 18.04 LTS og Centos 7; processen kan afvige lidt på andre distributioner og versioner.

Installation

Jeg sætter alle de nødvendige kommandoer ind Dockerfil for at lette reproducerbarheden af ​​instruktioner. Kun faldgruberne vil blive beskrevet nedenfor.

php-pinba

Efter installationen skal du sørge for, at du i filen /etc/php/7.2/fpm/conf.d/20-pinba.ini har fjernet alle mulighederne. På nogle fordelinger (f.eks. centos) kan de blive kommenteret ud.

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

klikhus

Under installationen vil clickhouse bede dig om at indstille en adgangskode til standardbrugeren. Som standard er denne bruger tilgængelig fra alle IP'er, så hvis du ikke har en firewall på din server, skal du sørge for at angive en adgangskode til den. Dette kan også gøres efter installationen i filen /etc/clickhouse-server/users.xml.

Det er også værd at bemærke, at clickhouse bruger flere porte, inklusive 9000. Denne port bruges også til php-fpm i nogle distributioner (for eksempel centos). Hvis du allerede bruger denne port, kan du ændre den til en anden i filen /etc/clickhouse-server/config.xml.

grafana med clickhouse plugin

Når du har installeret Grafana, skal du bruge login-admin og adgangskodeadmin. Når du logger på første gang, vil Grafana bede dig om at angive en ny adgangskode.

Gå derefter til "+" -> importmenuen og angiv dashboardnummeret for import 10011. Jeg forberedte og uploadede dette dashboard, så du ikke behøver at gøre det selv igen.

Grafana understøtter arbejde med clickhouse gennem et tredjeparts plugin, men Grafana har ikke advarsler for tredjeparts plugins (der har været en billet til dette i flere år).

pinba-server

Installation af protobuf og libevent er valgfrit, men forbedrer pinba-serverens ydeevne. Hvis du installerer pinba-server i en anden mappe end /opt, så skal du også rette systemd script fil.

pinba-modul til nginx

For at kompilere modulet skal du bruge kildekoder af den samme version af nginx, som allerede er installeret på din server, samt de samme kompileringsmuligheder, ellers vil opbygningen lykkes, men når modulet tilsluttes, vil der blive kastet en fejl, der "modulet er ikke binært kompatibelt." Kompileringsindstillinger kan ses ved hjælp af kommandoen nginx -V

Livet hacks

Alle mine sider fungerer kun på https. Skemafeltet bliver meningsløst, så jeg bruger det til at adskille web/konsol.

I scripts, der er tilgængelige fra nettet, bruger jeg:

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

Og i konsolscripts (for eksempel cron-scripts):

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

I mit dashboard i Grafana er der en web/konsol switch til at se statistik separat.

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

pinba_tag_set('country', $countryCode);

Det er alt.

Svar venligst på afstemningerne under artiklen.

Som sædvanlig advarer jeg dig om, at jeg ikke rådgiver eller hjælper gennem personlige beskeder på Habr og sociale netværk.

Opret en billet på Github.

Støt også gerne med likes engelsk version denne artikel på reddit.

Kun registrerede brugere kan deltage i undersøgelsen. Log ind, Vær venlig.

Hvilket OS bruger du på serveren?

  • Ubuntu

  • CentOS

  • Debian

  • Gentoo

  • Red Hat

  • Fedora

  • OpenSUSE

  • SCHWEIZ

  • Unix

  • Windows

  • andre

114 brugere stemte. 11 brugere undlod at stemme.

Hvilken version af php bruger du på serveren?

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • andre

105 brugere stemte. 17 brugere undlod at stemme.

Har du nogensinde brugt pinba?

  • ja

  • nej, men det vil jeg gerne

  • nej og det vil jeg ikke

  • nej og har ikke hørt om hende

100 brugere stemte. 14 brugere undlod at stemme.

Hvilken version af Pinba-serveren vil du prøve?

  • pinba_engine (mysql-motor)

  • pinba2 (mysql-motor)

  • opslagstavle (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 skriver selv min

  • andre

39 brugere stemte. 47 brugere undlod at stemme.

Kilde: www.habr.com

Tilføj en kommentar