ProHoster > blog > Gweinyddiaeth > Ystadegau a monitro sgriptiau PHP mewn amser real. Mae ClickHouse a Grafana yn mynd i gymorth Pinba
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.
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.
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.
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.
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:
Nid yw'r datrysiad hwn yn arbed gwybodaeth am amseryddion.
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
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.
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.