Ystadegau a monitro sgriptiau PHP mewn amser real. Mae ClickHouse a Grafana yn mynd i gymorth Pinba

Yn yr erthygl hon byddaf yn dweud wrthych sut i ddefnyddio pinba gyda clickhouse a grafana yn lle pinba_engine a pinboard.

Ar brosiect PHP, efallai mai pinba yw'r unig ffordd ddibynadwy o ddeall beth sy'n digwydd gyda pherfformiad. Yn wir, dim ond pan welir problemau eisoes ac nid yw'n glir "ble i gloddio" y caiff pinba ei weithredu fel arfer.

Yn aml nid oes gan neb unrhyw syniad sawl gwaith yr eiliad/munud y gelwir hyn neu'r sgript honno ac maent yn dechrau optimeiddio β€œtrwy gyffwrdd”, gan ddechrau o'r lleoedd hynny sy'n ymddangos yn fwy rhesymegol.

Mae rhai yn dadansoddi logiau nginx, tra bod eraill yn dadansoddi ymholiadau cronfa ddata araf.

Wrth gwrs, ni fyddai pinba yn ddiangen, ond mae sawl rheswm pam nad oes gan bob prosiect ef.

Ystadegau a monitro sgriptiau PHP mewn amser real. Mae ClickHouse a Grafana yn mynd i gymorth Pinba

A'r rheswm cyntaf yw gosod.

Er mwyn cael rhyw fath o β€œgwacΓ‘u” fwy neu lai o weithrediad Pinba, mae'n ddymunol iawn gweld metrigau nid yn unig am y munudau olaf, ond hefyd dros gyfnod hir o amser (o ddyddiau i fisoedd).

Ar gyfer hyn mae angen:

  • gosod estyniad ar gyfer php (ac efallai y byddwch am fodiwl ar gyfer nginx)
  • llunio estyniad ar gyfer mysql
  • gosod pinfwrdd a ffurfweddu cron

Oherwydd y swm bach o wybodaeth am Pinba, mae llawer o bobl yn cael yr argraff mai dim ond ar PHP5 y bu'n gweithio a'i fod wedi bod yn rhywbeth o'r gorffennol ers tro, ond fel y gwelwn yn ddiweddarach, nid yw hyn yn wir.

Y cam cyntaf yw'r symlaf, y cyfan sy'n rhaid i chi ei wneud yw rhedeg y gorchymyn:

apt install php-pinba

Mae'r estyniad hwn ar gael yn y storfeydd hyd at ac yn cynnwys php 7.3 ac nid oes angen i chi lunio unrhyw beth.

Ar Γ΄l gweithredu'r gorchymyn gosod, rydym yn derbyn estyniad gweithio ar unwaith sy'n casglu ac yn anfon metrigau ar gyfer pob sgript (amser rhedeg, cof, ac ati) yn y fformat protobuf trwy udp i 127.0.0.1:30002.

Hyd yn hyn nid oes neb wedi dal na phrosesu'r pecynnau CDU hyn, ond nid yw hyn mewn unrhyw ffordd yn effeithio'n negyddol ar gyflymder na sefydlogrwydd eich sgriptiau PHP.

Tan yn ddiweddar, yr unig gais a allai ddal a phrosesu'r pecynnau CDU hyn oedd pinba_engine. Disgrifiad"syml a chryno" gosod yn digalonni yr awydd i byth ddarllen ac ymchwilio iddo eto. Mae'r rhestrau o ddibyniaethau cilomedr o hyd yn cynnwys enwau pecynnau ac enwau rhaglenni a dolenni i dudalennau unigol gyda'u gosodiad, ac mae gan y rheini eu dolenni eu hunain i ddibyniaethau eraill. Nid oes gan neb yr amser na'r awydd i ddelio Γ’'r crap hwn.

Proses osod pinba2 na wnaeth yn enwedig yn haws.

Efallai ryw ddydd y bydd yn bosibl gosod pinba10 gydag un neu ddau o orchmynion a pheidio Γ’ gorfod darllen criw o ddeunydd i ddeall sut i'w wneud, ond am y tro nid yw hyn yn wir.

Os ydych chi'n gosod pinba_engine, yna dim ond hanner y frwydr yw hyn. Wedi'r cyfan, heb bwrdd pin bydd yn rhaid i chi gyfyngu'ch hun i ddata o'r ychydig funudau olaf yn unig, neu bydd yn rhaid i chi agregu, storio a delweddu'r data eich hun. Mae'n dda bod pinfwrdd yn eithaf syml i'w ddefnyddio gosod.

Mae'n ymddangos, pam dioddefaint o'r fath os yw'r holl fetrigau o php eisoes yn cael eu hanfon i'r porthladd udp mewn fformat protobuf a'r cyfan sydd ei angen arnoch yw ysgrifennu cais a fydd yn eu dal a'u rhoi mewn rhyw fath o storfa? Yn Γ΄l pob tebyg, eisteddodd y datblygwyr hynny a luniodd y syniad hwn ar unwaith i ysgrifennu eu syniadau eu hunain, a daeth rhai ohonynt i ben ar GitHub.

Mae'r canlynol yn drosolwg o bedwar prosiect ffynhonnell agored sy'n arbed metrigau wrth storio, y gellir eu defnyddio'n hawdd i adfer a delweddu'r data hwn, er enghraifft, gan ddefnyddio grafana.

colegfedoseev/pinba-server (Tachwedd 2017)

gweinydd udp wrth fynd sy'n arbed metrigau i OpenTSDB. Efallai os ydych chi eisoes yn defnyddio OpenTSDB yn eich prosiect, yna bydd yr ateb hwn yn addas i chi, fel arall rwy'n argymell ei basio heibio.

olegfedoseev/pinba-influxdb (Mehefin 2018)

gweinydd udp ar go, o'r un haborwr, sydd y tro hwn yn storio'r metrigau yn InfluxDB. Mae llawer o brosiectau eisoes yn defnyddio InfluxDB ar gyfer monitro, felly efallai y bydd yr ateb hwn yn berffaith ar eu cyfer.

Manteision:

  • MewnlifDB yn caniatΓ‘u agregu'r metrigau a dderbyniwyd, a dileu'r gwreiddiol ar Γ΄l amser penodedig.

Cons:

CliciwchHouse-Ninja/Proton (Ionawr 2019)

gweinydd udp wrth fynd, sy'n arbed metrigau yn ClickHouse. Dyma ateb fy ffrind. Ar Γ΄l dod yn gyfarwydd ag ef y penderfynais ei bod yn bryd cymryd Pinbu a Clickhouse.

Manteision:

  • Mae Clickhouse yn ddelfrydol ar gyfer tasgau o'r fath; mae'n caniatΓ‘u ichi gywasgu data cymaint fel y gallwch chi storio'r holl ddata crai hyd yn oed heb agregau
  • os oes angen, gallwch chi agregu'r metrigau canlyniadol yn hawdd
  • templed parod ar gyfer grafana
  • yn arbed gwybodaeth am amseryddion

Cons:

  • nam angheuol
  • nid oes unrhyw gyfluniad lle gallwch chi ffurfweddu enw'r gronfa ddata a thablau, cyfeiriad a phorth y gweinydd.
  • wrth storio data crai, defnyddir tabl geiriadur ategol i storio cyfeiriadau tudalennau a pharth, sy'n cymhlethu ymholiadau dilynol
  • pethau bychain eraill sy'n dilyn o'r minws cyntaf

pinba-server/pinba-gweinydd (Ebrill 2019)

gweinydd udp yn php, sy'n arbed metrigau yn ClickHouse. Dyma fy ateb, sef canlyniad dod i adnabod pinba, ClickHouse a protobuf. Tra roeddwn yn rhoi trefn ar y criw cyfan hwn, ysgrifennais β€œprawf o gysyniad”, nad oedd, yn annisgwyl i mi, yn defnyddio adnoddau sylweddol (30 MB o RAM a llai nag 1% o un o'r wyth craidd prosesydd), felly fe wnes i penderfynu ei rannu gyda'r cyhoedd.

Mae'r manteision yr un fath Γ’'r datrysiad blaenorol, defnyddiais yr enwau arferol o'r pinba_engine gwreiddiol hefyd. Ychwanegais hefyd ffurfwedd sy'n eich galluogi i lansio sawl achos gweinydd pinbase ar unwaith er mwyn arbed metrigau mewn gwahanol dablau - mae hyn yn ddefnyddiol os ydych chi am gasglu data nid yn unig o php, ond hefyd o nginx.
Anfanteision - β€œdiffyg angheuol” a'r pethau bach hynny na fydd yn addas i chi'n bersonol, ond fy ateb yw β€œmor syml Γ’ sliper” ac mae'n cynnwys dim ond tua 100 llinell o god, felly gall unrhyw ddatblygwr PHP newid yr hyn nad yw'n ei hoffi mewn cwpl o funudau.

Egwyddor o weithredu

Gwrandewir ar borthladd CDU 30002. Mae'r holl becynnau sy'n dod i mewn yn cael eu dadgodio yn unol Γ’'r cynllun protobuf a'u hagregu. Unwaith y funud, mae pecyn yn cael ei fewnosod yn y clickhouse yn y tabl pinba.requests. (mae'r holl baramedrau wedi'u ffurfweddu i mewn cyfluniad)

Ychydig am clickhouse

Mae Clickhouse yn cefnogi gwahanol beiriannau storio data. Yr un a ddefnyddir amlaf yw MergeTree.

Os byddwch ar ryw adeg yn penderfynu storio data cyfanredol am yr holl amser, a data crai yn unig ar gyfer yr un olaf, yna gallwch greu golygfa wedi'i gwireddu gyda grwpio, a glanhau'r prif dabl pinba.requests o bryd i'w gilydd, tra bydd yr holl ddata yn aros yn y golygfa wedi'i gwireddu. Ar ben hynny, wrth greu'r tabl pinba.requests, gallwch nodi β€œengine = Null”, yna ni fydd y data crai yn cael ei gadw ar ddisg o gwbl, ac ar yr un pryd bydd yn dal i fod yn y golwg wedi'i wireddu a bydd yn cael ei gadw'n gyfannol . Rwy'n defnyddio'r cynllun hwn ar gyfer metrigau nginx, oherwydd ar nginx mae gen i 50 gwaith yn fwy o geisiadau nag ar php.

Felly, rydych chi wedi dod yn bell ac ni hoffwn eich gadael hanner ffordd, felly mae'r hyn sy'n dilyn yn ddisgrifiad manwl o osod a chyfluniad fy ateb a phopeth sydd ei angen arnoch chi, yn ogystal Γ’'r peryglon sydd wedi achosi mwy nag un llong i ddamwain. Disgrifir y broses osod gyfan ar gyfer Ubuntu 18.04 LTS a Centos 7; gall y broses amrywio ychydig ar ddosbarthiadau a fersiynau eraill.

Gosod

Rhoddais yr holl orchmynion angenrheidiol i mewn Dockerfile i hwyluso atgynhyrchu cyfarwyddiadau. Dim ond y peryglon fydd yn cael eu disgrifio isod.

php-pinba

Ar Γ΄l ei osod, gwnewch yn siΕ΅r eich bod wedi nodi'r holl opsiynau yn y ffeil /etc/php/7.2/fpm/conf.d/20-pinba.ini. Ar rai dosraniadau (ee centos) gellir rhoi sylwadau arnynt.

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

clichouse

Yn ystod y gosodiad, bydd clickhouse yn gofyn ichi osod cyfrinair ar gyfer y defnyddiwr diofyn. Yn ddiofyn, mae'r defnyddiwr hwn yn hygyrch o bob IP, felly os nad oes gennych wal dΓ’n ar eich gweinydd, gwnewch yn siΕ΅r eich bod yn gosod cyfrinair ar ei gyfer. Gellir gwneud hyn hefyd ar Γ΄l gosod yn y ffeil /etc/clickhouse-server/users.xml.

Mae'n werth nodi hefyd bod clickhouse yn defnyddio sawl porthladd, gan gynnwys 9000. Defnyddir y porthladd hwn hefyd ar gyfer php-fpm mewn rhai dosbarthiadau (er enghraifft, centos). Os ydych chi eisoes yn defnyddio'r porthladd hwn, gallwch ei newid i un arall yn y ffeil /etc/clickhouse-server/config.xml.

grafana gyda ategyn clickhouse

Ar Γ΄l gosod Grafana, defnyddiwch y gweinydd mewngofnodi a gweinyddwr cyfrinair. Pan fyddwch yn mewngofnodi am y tro cyntaf, bydd Grafana yn gofyn ichi osod cyfrinair newydd.

Nesaf, ewch i'r ddewislen "+" -> mewnforio a nodwch rif y dangosfwrdd ar gyfer mewnforio 10011. Paratoais a uwchlwythais y dangosfwrdd hwn fel nad oes yn rhaid i chi ei wneud eich hun eto.

Mae Grafana yn cefnogi gweithio gyda clickhouse trwy ategyn trydydd parti, ond nid oes gan Grafana rybuddion ar gyfer ategion trydydd parti (mae tocyn wedi bod ar gyfer hyn ers sawl blwyddyn).

pinba-gweinydd

Mae gosod protobuf a libevent yn ddewisol, ond mae'n gwella perfformiad gweinydd pinba. Os ydych chi'n gosod pinba-server mewn ffolder heblaw / opt, yna bydd angen i chi hefyd gywiro sgript systemd ffeil.

modiwl pinba ar gyfer nginx

I lunio modiwl, mae angen codau ffynhonnell arnoch o'r un fersiwn o nginx sydd eisoes wedi'i osod ar eich gweinydd, yn ogystal Γ’'r un opsiynau casglu, fel arall bydd yr adeiladwaith yn llwyddiannus, ond wrth gysylltu'r modiwl, bydd gwall yn cael ei daflu. β€œNid yw’r modiwl yn gydnaws Γ’ deuaidd.” Gellir gweld opsiynau casglu gan ddefnyddio'r gorchymyn nginx -V

Haciau bywyd

Mae fy holl wefannau yn gweithio ar https yn unig. Mae'r maes sgema yn mynd yn ddiystyr, felly rwy'n ei ddefnyddio i wahanu gwe / consol.

Mewn sgriptiau sy'n hygyrch o'r we rwy'n defnyddio:

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

Ac mewn sgriptiau consol (er enghraifft, sgriptiau cron):

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

Yn fy dangosfwrdd yn Grafana mae switsh gwe/consol ar gyfer gweld ystadegau ar wahΓ’n.

Gallwch hefyd anfon eich tagiau i Pinba, er enghraifft:

pinba_tag_set('country', $countryCode);

Dyna i gyd.

Atebwch y polau o dan yr erthygl.

Yn Γ΄l yr arfer, rwy'n eich rhybuddio nad wyf yn cynghori nac yn helpu trwy negeseuon personol ar Habr a rhwydweithiau cymdeithasol.

Creu tocyn ar Github.

Hefyd, cefnogwch gyda hoffterau Fersiwn Saesneg yr erthygl hon ar reddit.

Dim ond defnyddwyr cofrestredig all gymryd rhan yn yr arolwg. Mewngofnodios gwelwch yn dda.

Pa OS ydych chi'n ei ddefnyddio ar y gweinydd?

  • Ubuntu

  • CentOS

  • Debian

  • Gentoo

  • Red Hat

  • Fedora

  • OpenSUSE

  • SWITZERLAND

  • Unix

  • ffenestri

  • eraill

Pleidleisiodd 114 o ddefnyddwyr. Ataliodd 11 o ddefnyddwyr.

Pa fersiwn o php ydych chi'n ei ddefnyddio ar y gweinydd?

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • eraill

Pleidleisiodd 105 o ddefnyddwyr. Ataliodd 17 o ddefnyddwyr.

Ydych chi erioed wedi defnyddio pinba?

  • ie

  • na, ond hoffwn i

  • na a fyddwn i ddim eisiau

  • na, a heb glywed amdani

Pleidleisiodd 100 o ddefnyddwyr. Ataliodd 14 o ddefnyddwyr.

Pa fersiwn o weinydd Pinba hoffech chi roi cynnig arni?

  • pinba_engine (peiriant mysql)

  • pinba2 (peiriant mysql)

  • pinfwrdd (php + mysql)

  • olegfedoseev/gweinydd pinba (ewch + OpenTSDB)

  • olegfedoseev/pinba-influxdb (mynd + mewnlifiad)

  • pinba-server/pinba-server (ewch + clicws)

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

  • Ysgrifennaf fy un i fy hun

  • eraill

Pleidleisiodd 39 o ddefnyddwyr. Ataliodd 47 o ddefnyddwyr.

Ffynhonnell: hab.com

Ychwanegu sylw