Statistiko kaj monitorado de PHP-skriptoj en reala tempo. ClickHouse kaj Grafana venas al la helpo de Pinba

En ĉi tiu artikolo mi rakontos al vi kiel uzi pinba kun clickhouse kaj grafana anstataŭ pinba_engine kaj pinboard.

En PHP-projekto, pinba estas eble la sola fidinda maniero kompreni kio okazas kun rendimento. Vere, pinba estas kutime efektivigita nur kiam problemoj jam estas observitaj kaj ne estas klare "kie fosi".

Ofte neniu havas ideon kiom da fojoj en sekundo/minuto tiu aŭ alia skripto estas vokita kaj ili komencas optimumigi "per tuŝo", komencante de tiuj lokoj kiuj ŝajnas pli logikaj.

Iuj analizas nginx-protokolojn, dum aliaj analizas malrapidajn datumbazajn demandojn.

Kompreneble, pinba ne estus superflua, sed estas pluraj kialoj, kial ne ĉiu projekto havas ĝin.

Statistiko kaj monitorado de PHP-skriptoj en reala tempo. ClickHouse kaj Grafana venas al la helpo de Pinba

Kaj la unua kialo estas instalado.

Por pli-malpli akiri iun specon de "elĉerpo" de la efektivigo de Pinba, estas tre dezirinde vidi metrikojn ne nur dum la lastaj minutoj, sed ankaŭ dum longa tempo (de tagoj ĝis monatoj).

Por fari tion, vi bezonas:

  • instalu etendon por php (kaj vi eble volas modulon por nginx)
  • kompilu etendon por mysql
  • instali pinboard kaj agordi cron

Pro la malgranda kvanto da informoj pri Pinba, multaj homoj havas la impreson, ke ĝi funkciis nur ĉe PHP5 kaj delonge estas afero de la pasinteco, sed kiel ni vidos poste, tio ne estas la kazo.

La unua paŝo estas la plej simpla, ĉio, kion vi bezonas fari, estas ruli la komandon:

apt install php-pinba

Ĉi tiu etendo disponeblas en la deponejoj ĝis kaj inkluzive de php 7.3 kaj vi ne bezonas kompili ion ajn.

Post la ekzekuto de la instala komando, ni tuj ricevas funkciantan etendon, kiu kolektas kaj sendas metrikojn por ĉiu skripto (funkcidaŭro, memoro, ktp.) en la formato protobuf per udp al 127.0.0.1:30002.

Ĝis nun neniu kaptis aŭ prilaboris ĉi tiujn UDP-pakaĵojn, sed ĉi tio neniel influas negative la rapidecon aŭ stabilecon de viaj PHP-skriptoj.

Ĝis antaŭ nelonge, la sola aplikaĵo kiu povis kapti kaj procesi ĉi tiujn UDP-pakojn estis pinba_engine. Priskribo "simpla kaj konciza"instalado malkuraĝigas la deziron iam legi kaj enprofundiĝi en ĝin denove. La kilometraj listoj de dependecoj enhavas kaj la nomojn de pakaĵoj kaj la nomojn de programoj kaj ligilojn al unuopaj paĝoj kun sia instalaĵo, kaj tiuj havas siajn proprajn ligilojn al aliaj dependencajoj. Neniu havas la tempon aŭ deziron trakti ĉi tiun aĉaĵon.

Instalada procezo pinba2 ne faris precipe pli facila.

Eble iam eblos instali pinba10 per unu aŭ du komandoj kaj ne devos legi amason da materialo por kompreni kiel fari ĝin, sed nuntempe ĉi tio ne estas la kazo.

Se vi instalas pinba_engine, tiam ĉi tio estas nur duono de la batalo. Post ĉio, sen pintotabulo vi devos limigi vin al datumoj de nur la lastaj minutoj, aŭ vi mem devos kunigi, stoki kaj bildigi la datumojn. Estas bone, ke pintabulo estas sufiĉe simpla uzebla instalado.

Ŝajnus, kial tia sufero, se ĉiuj metrikoj de php estas jam senditaj al la udp-haveno en protobuf-formato kaj vi bezonas nur skribi aplikaĵon, kiu kaptos ilin kaj metos ilin en ian stokadon? Ŝajne, tiuj programistoj, kiuj elpensis ĉi tiun ideon, tuj sidiĝis por skribi siajn proprajn ideojn, iuj el kiuj finiĝis sur GitHub.

La sekvanta estas superrigardo de kvar malfermfontaj projektoj, kiuj konservas metrikojn en stokado, el kiuj ĉi tiuj datumoj povas esti facile reakiritaj kaj bildigitaj, ekzemple, uzante grafana.

olegfedoseev/pinba-servilo (novembro 2017)

udp-servilo survoje, kiu konservas metrikojn al OpenTSDB. Eble se vi jam uzas OpenTSDB en via projekto, tiam ĉi tiu solvo konvenos al vi, alie mi rekomendas preterpasi ĝin.

olegfedoseev/pinba-influxdb (junio 2018)

udp-servilo sur iri, de la sama retumilo, kiu ĉi-foje konservas la metrikojn en InfluxDB. Multaj projektoj jam uzas InfluxDB por monitorado, do ĉi tiu solvo povas esti perfekta por ili.

Pros:

  • InfluxDB permesas al kunigu la ricevitajn metrikojn, kaj forigu la originalon post difinita tempo.

Kons:

Alklaku House-Ninja/Proton (januaro 2019)

udp-servilo survoje, kiu konservas metrikojn en ClickHouse. Jen la solvo de mia amiko. Estis post konatiĝo kun ĝi, ke mi decidis, ke estas tempo por alfronti Pinbu kaj Clickhouse.

Pros:

  • Clickhouse estas ideala por tiaj taskoj; ĝi permesas vin kunpremi datumojn tiom multe, ke vi povas stoki ĉiujn krudajn datumojn eĉ sen agregaĵoj.
  • se necese, vi povas facile kunigi la rezultajn metrikojn
  • preta ŝablono por grafana
  • konservas informojn pri temporiziloj

Kons:

  • fatala difekto
  • ne ekzistas agordo en kiu vi povas agordi la nomon de la datumbazo kaj tabeloj, la adreson kaj havenon de la servilo.
  • dum stokado de krudaj datumoj, helpvortartabelo estas uzata por stoki paĝo- kaj domajnaj adresoj, kio malfaciligas postajn demandojn.
  • aliaj malgrandaj aferoj, kiuj sekvas de la unua minuso

pinba-servilo/pinba-servilo (aprilo 2019)

udp-servilo en php, kiu konservas metrikojn en ClickHouse. Jen mia solvo, kiu estas la rezulto de koni pinba, ClickHouse kaj protobuf. Dum mi ordigis ĉi tiun tutan aron, mi skribis "konceptpruvon", kiu, neatendite por mi, ne konsumis gravajn rimedojn (30 MB da RAM kaj malpli ol 1% de unu el la ok procesoraj kernoj), do mi decidis dividi ĝin kun la publiko.

La avantaĝoj estas la samaj kiel la antaŭa solvo, mi ankaŭ uzis la kutimajn nomojn el la originala pinba_engine. Mi ankaŭ aldonis agordon, kiu ebligas al vi lanĉi plurajn petbazajn servilojn samtempe por konservi metrikojn en malsamaj tabeloj - tio estas utila se vi volas kolekti datumojn ne nur de php, sed ankaŭ de nginx.
Malavantaĝoj - "fatala difekto" kaj tiuj etaj aferoj, kiuj ne konvenos al vi persone, sed mia solvo estas "same simpla kiel pantofloj" kaj konsistas el nur ĉirkaŭ 100 linioj de kodo, do ĉiu PHP-programisto povas ŝanĝi tion, kion li ne ŝatas. post kelkaj minutoj.

Kiel ĝi funkcias

Aŭskultas UDP-haveno 30002. Ĉiuj envenantaj pakoj estas malkoditaj laŭ la protobuf-skemo kaj agregitaj. Unufoje minuton, paketo estas enigita en la klakdomon en la tablon pinba.requests. (ĉiuj parametroj estas agorditaj en agordo)

Iom pri clickhouse

Clickhouse subtenas malsamajn datumajn motorojn. La plej ofte uzata estas MergeTree.

Se iam vi decidas stoki agregitajn datumojn por ĉiam, kaj krudajn datumojn nur por la lasta, tiam vi povas krei materiigitan vidon kun grupiĝo, kaj periode purigi la ĉefan pinba.requests-tabelon, dum ĉiuj datumoj restos en la materiigita vido. Plie, kreante la tablon pinba.requests, vi povas specifi "motoro = Null", tiam la krudaj datumoj tute ne estos konservitaj al disko, kaj samtempe ĝi ankoraŭ finiĝos en la materiigita vido kaj estos konservita agregata. . Mi uzas ĉi tiun skemon por nginx-metrikoj, ĉar ĉe nginx mi havas 50 fojojn pli da petoj ol ĉe php.

Do, vi iris longan vojon kaj mi ne ŝatus lasi vin duonvoje, do kio sekvas estas detala priskribo de la instalado kaj agordo de mia solvo kaj ĉio, kion vi bezonas, kaj ankaŭ la malfacilaĵojn, kiuj kaŭzis pli ol unu ŝipon. kraŝi. La tuta instala procezo estas priskribita por Ubuntu 18.04 LTS kaj Centos 7; la procezo povas iomete malsami en aliaj distribuoj kaj versioj.

fikso

Mi enmetis ĉiujn necesajn komandojn dockerfile por faciligi reprodukteblecon de instrukcioj. Nur la malfacilaĵoj estos priskribitaj sube.

php-pinba

Post instalado, certigu, ke en la dosiero /etc/php/7.2/fpm/conf.d/20-pinba.ini vi malkomentis ĉiujn opciojn. Ĉe kelkaj distribuoj (ekz. centoj) ili povas esti komentitaj.

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

klakdomo

Dum instalado, clickhouse petos vin agordi pasvorton por la defaŭlta uzanto. Defaŭlte, ĉi tiu uzanto estas alirebla de ĉiuj IP-oj, do se vi ne havas fajroŝirmilon sur via servilo, nepre agordu pasvorton por ĝi. Ĉi tio ankaŭ povas esti farita post instalado en la /etc/clickhouse-server/users.xml dosiero.

Estas ankaŭ notinde, ke clickhouse uzas plurajn havenojn, inkluzive de 9000. Ĉi tiu haveno ankaŭ estas uzata por php-fpm en iuj distribuoj (ekzemple centos). Se vi jam uzas ĉi tiun pordon, vi povas ŝanĝi ĝin al alia en la dosiero /etc/clickhouse-server/config.xml.

grafana kun aldonaĵo clickhouse

Post instalo de Grafana, uzu la ensalutan administranton kaj pasvortan administranton. Kiam vi ensalutas unuafoje, Grafana petos vin agordi novan pasvorton.

Poste, iru al la "+" -> import-menuo kaj indiku la panelan numeron por importo 10011. Mi preparis kaj alŝutis ĉi tiun panelon por ke vi ne devu fari ĝin mem denove.

Grafana subtenas labori kun clickhouse per triaparta kromaĵo, sed Grafana ne havas atentigojn por triaj kromaĵoj (ekzistis bileto por tio de pluraj jaroj).

pinba-servilo

Instali protobuf kaj libevent estas laŭvola, sed plibonigas la agadon de pinba-servilo. Se vi instalas pinba-server en dosierujo krom /opt, tiam vi ankaŭ devos korekti systemd-skripto dosiero.

pinba modulo por nginx

Por kompili modulon, vi bezonas fontkodojn de la sama versio de nginx, kiu jam estas instalita en via servilo, kaj ankaŭ la samajn kompilopciojn, alie la konstruo sukcesos, sed kiam li konektos la modulon, eraro estos ĵetita, ke "la modulo ne estas duuma kongrua." Kompilaj opcioj videblas per la komando nginx -V

Vivaj hakoj

Ĉiuj miaj retejoj funkcias nur ĉe https. La skema kampo fariĝas sensenca, do mi uzas ĝin por apartigi retejon/konzolon.

En skriptoj alireblaj de la reto mi uzas:

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

Kaj en konzolaj skriptoj (ekzemple, cron-skriptoj):

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

En mia panelo en Grafana estas interreto/konzola ŝaltilo por vidi statistikojn aparte.

Vi ankaŭ povas sendi viajn etikedojn al Pinba, ekzemple:

pinba_tag_set('country', $countryCode);

Tio estas ĉio.

Bonvolu respondi la balotenketojn sub la artikolo.

Kiel kutime, mi avertas vin, ke mi ne konsilas aŭ helpas per personaj mesaĝoj en Habr kaj sociaj retoj.

Kreu bileton sur Github.

Ankaŭ bonvolu subteni per ŝatoj Angla versio ĉi tiu artikolo sur reddit.

Nur registritaj uzantoj povas partopreni la enketon. Ensaluti, bonvolu.

Kiun OS vi uzas sur la servilo?

  • ubuntu

  • CentOS

  • Debian

  • Gentoo

  • ruĝa Ĉapelo

  • Fedora

  • OpenSUSE

  • Svislando

  • Unikso

  • fenestroj

  • alia

114 uzantoj voĉdonis. 11 uzantoj sindetenis.

Kiun version de php vi uzas en la servilo?

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • alia

105 uzantoj voĉdonis. 17 uzantoj sindetenis.

Ĉu vi iam uzis pinba?

  • jes

  • ne, sed mi ŝatus

  • ne kaj mi ne volus

  • ne kaj ne aŭdis pri ŝi

100 uzantoj voĉdonis. 14 uzantoj sindetenis.

Kiun version de Pinba-servilo vi ŝatus provi?

  • pinba_engine (mysql-motoro)

  • pinba2 (mysql-motoro)

  • stirtabulo (php + mysql)

  • olegfedoseev/pinba-servilo (iru + OpenTSDB)

  • olegfedoseev/pinba-influxdb (iru + influxdb)

  • pinba-servilo/pinba-servilo (iru + klakdomo)

  • pinba-servilo/pinba-servilo (php + klakdomo)

  • Mi mem skribos la mian

  • alia

39 uzantoj voĉdonis. 47 uzantoj sindetenis.

fonto: www.habr.com

Aldoni komenton