Takwimu na ufuatiliaji wa hati za PHP kwa wakati halisi. ClickHouse na Grafana huja kusaidia Pinba

Katika makala hii nitakuambia jinsi ya kutumia pinba na clickhouse na grafana badala ya pinba_engine na pinboard.

Kwenye mradi wa PHP, pinba labda ndiyo njia pekee ya kuaminika ya kuelewa kinachotokea na utendaji. Kweli, pinba kawaida hutekelezwa tu wakati matatizo tayari yameonekana na haijulikani wazi "wapi kuchimba."

Mara nyingi hakuna mtu anayejua ni mara ngapi kwa sekunde / dakika hii au hati hiyo inaitwa na wanaanza kuboresha "kwa kugusa", kuanzia maeneo ambayo yanaonekana kuwa ya kimantiki zaidi.

Baadhi huchambua kumbukumbu za nginx, huku wengine wakichanganua hoja za hifadhidata polepole.

Bila shaka, pinba haitakuwa ya juu zaidi, lakini kuna sababu kadhaa kwa nini si kila mradi unao.

Takwimu na ufuatiliaji wa hati za PHP kwa wakati halisi. ClickHouse na Grafana huja kusaidia Pinba

Na sababu ya kwanza ni ufungaji.

Ili kupata zaidi au chini ya aina fulani ya "kutolea nje" kutoka kwa utekelezaji wa Pinba, ni kuhitajika sana kuona metrics si tu kwa dakika za mwisho, lakini pia kwa muda mrefu (kutoka siku hadi miezi).

Kwa hili unahitaji:

  • sasisha kiendelezi cha php (na unaweza kutaka moduli ya nginx)
  • kukusanya ugani kwa mysql
  • sakinisha ubao wa pini na usanidi cron

Kwa sababu ya kiasi kidogo cha habari kuhusu Pinba, watu wengi wana maoni kwamba ilifanya kazi tu kwenye PHP5 na kwa muda mrefu imekuwa jambo la zamani, lakini kama tutakavyoona baadaye, hii sivyo.

Hatua ya kwanza ni rahisi zaidi, unachohitaji kufanya ni kutekeleza amri:

apt install php-pinba

Kiendelezi hiki kinapatikana kwenye hazina hadi na kujumuisha php 7.3 na hauitaji kukusanya chochote.

Baada ya kutekeleza amri ya usakinishaji, mara moja tunapokea kiendelezi cha kufanya kazi ambacho hukusanya na kutuma metriki kwa kila hati (wakati wa kuendesha, kumbukumbu, nk) katika umbizo. protobuf kupitia udp hadi 127.0.0.1:30002.

Kufikia sasa hakuna mtu aliyekamata au kuchakata pakiti hizi za UDP, lakini hii haiathiri kwa njia yoyote vibaya kasi au uthabiti wa hati zako za PHP.

Hadi hivi majuzi, programu pekee ambayo inaweza kupata na kuchakata pakiti hizi za UDP ilikuwa pinba_injini. Maelezo"rahisi na mafupi" usakinishaji hukatisha tamaa hamu ya kusoma na kutafakari tena. Orodha za urefu wa kilomita za vitegemezi zina majina ya vifurushi na majina ya programu na viungo vya kurasa za kibinafsi na usakinishaji wao, na hizo zina viungo vyao vya kutegemea vingine. Hakuna mtu ana wakati au hamu ya kukabiliana na ujinga huu.

Utaratibu wa uingizaji pini2 hakufanya hivyo hasa rahisi zaidi.

Labda siku moja itawezekana kufunga pinba10 na amri moja au mbili na sio lazima kusoma rundo la nyenzo kuelewa jinsi ya kuifanya, lakini kwa sasa sivyo.

Ikiwa utasakinisha pinba_engine, basi hii ni nusu tu ya vita. Baada ya yote, bila ubao itabidi ujiwekee kikomo kwa data kutoka kwa dakika chache zilizopita, au itabidi ujumlishe, uhifadhi, na uone data hiyo mwenyewe. Ni vizuri kwamba pinboard ni rahisi kutumia ufungaji.

Inaonekana, kwa nini mateso kama haya ikiwa metriki zote kutoka kwa php tayari zimetumwa kwenye bandari ya udp katika muundo wa protobuf na unachohitaji ni kuandika programu ambayo itawashika na kuwaweka katika aina fulani ya hifadhi? Inavyoonekana, watengenezaji hao ambao walikuja na wazo hili mara moja waliketi kuandika mawazo yao wenyewe, ambayo baadhi yao yaliishia kwenye GitHub.

Ufuatao ni muhtasari wa miradi minne ya programu huria ambayo huhifadhi vipimo katika hifadhi, ambapo data hii inaweza kurejeshwa kwa urahisi na kuonekana, kwa mfano, kwa kutumia grafana.

olegfedoseev/pinba-server (Novemba 2017)

udp server on go ambayo huhifadhi metriki kwa OpenTSDB. Labda ikiwa tayari unatumia OpenTSDB katika mradi wako, basi suluhisho hili litakufaa, vinginevyo ninapendekeza kuipitisha.

olegfedoseev/pinba-influxdb (Juni 2018)

udp seva juu ya kwenda, kutoka sawa kivinjari, ambayo wakati huu huhifadhi vipimo katika InfluxDB. Miradi mingi tayari inatumia InfluxDB kwa ufuatiliaji, kwa hivyo suluhisho hili linaweza kuwa bora kwao.

Faida:

  • InfluxDB inaruhusu kusanya vipimo vilivyopokelewa, na ufute asili baada ya muda maalum.

Minus:

ClickHouse-Ninja/Proton (Januari 2019)

udp seva unapoenda, ambayo huhifadhi metriki katika ClickHouse. Hili ni suluhisho la rafiki yangu. Ilikuwa baada ya kufahamiana nayo ndipo niliamua kuwa ni wakati wa kuchukua Pinbu na Clickhouse.

Faida:

  • Clickhouse ni bora kwa kazi kama hizi; hukuruhusu kubana data kiasi kwamba unaweza kuhifadhi data zote mbichi hata bila mikusanyiko.
  • ikihitajika, unaweza kujumlisha vipimo vinavyotokana kwa urahisi
  • template tayari kwa ajili ya grafana
  • huhifadhi habari kwenye vipima muda

Minus:

  • dosari mbaya
  • hakuna usanidi ambao unaweza kusanidi jina la hifadhidata na meza, anwani na bandari ya seva.
  • wakati wa kuhifadhi data mbichi, jedwali la kamusi kisaidizi hutumika kuhifadhi anwani za ukurasa na kikoa, jambo ambalo linatatiza maswali yanayofuata.
  • vitu vingine vidogo vinavyofuata kutoka kwa minus ya kwanza

pinba-server/pinba-server (Aprili 2019)

udp seva katika php, ambayo huhifadhi metriki katika ClickHouse. Hili ndilo suluhisho langu, ambalo ni matokeo ya kujua pinba, ClickHouse na protobuf. Nilipokuwa nikipanga kundi hili lote, niliandika "uthibitisho wa dhana", ambayo, bila kutarajia kwangu, haikutumia rasilimali muhimu (30 MB ya RAM na chini ya 1% ya moja ya cores nane za processor), kwa hivyo mimi. aliamua kuishiriki na umma.

Faida ni sawa na suluhisho la awali, pia nilitumia majina ya kawaida kutoka kwa pinba_engine ya awali. Pia niliongeza usanidi unaokuwezesha kuzindua matukio kadhaa ya seva ya pinbase mara moja ili kuokoa metriki katika jedwali tofauti - hii ni muhimu ikiwa unataka kukusanya data sio tu kutoka kwa php, lakini pia kutoka kwa nginx.
Hasara - "dosari mbaya" na vitu hivyo vidogo ambavyo havitakufaa wewe binafsi, lakini suluhisho langu ni "rahisi kama slipper" na linajumuisha tu mistari 100 ya nambari, kwa hivyo msanidi programu yeyote wa PHP anaweza kubadilisha kile ambacho hapendi. katika dakika chache.

Kanuni ya uendeshaji

UDP port 30002 inasikilizwa. Pakiti zote zinazoingia hutambulishwa kulingana na mpango wa protobuf na kujumlishwa. Mara moja kwa dakika, pakiti huingizwa kwenye bofya kwenye jedwali la pinba.requests. (vigezo vyote vimesanidiwa ndani usanidi)

Kidogo kuhusu clickhouse

Clickhouse inasaidia injini tofauti za kuhifadhi data. Inayotumika sana ni MergeTree.

Iwapo wakati fulani utaamua kuhifadhi data iliyojumlishwa kwa wakati wote, na data mbichi kwa mara ya mwisho pekee, basi unaweza kuunda mwonekano halisi kwa kuweka kambi, na mara kwa mara kusafisha jedwali kuu la pinba.requests, huku data yote itasalia kwenye jedwali mtazamo wa kimaumbile. Zaidi ya hayo, wakati wa kuunda jedwali la pinba.requests, unaweza kutaja "injini = Null", basi data ghafi haitahifadhiwa kwenye diski kabisa, na wakati huo huo bado itaishia kwenye mtazamo wa kimwili na kuokolewa kwa jumla. . Ninatumia mpango huu kwa metriki za nginx, kwa sababu kwenye nginx nina maombi mara 50 zaidi kuliko kwenye php.

Kwa hivyo, umetoka mbali na nisingependa kukuacha nusu, kwa hivyo kinachofuata ni maelezo ya kina ya usakinishaji na usanidi wa suluhisho langu na kila kitu unachohitaji, pamoja na mitego ambayo imesababisha zaidi ya meli moja. kuanguka. Mchakato mzima wa usakinishaji umeelezewa kwa Ubuntu 18.04 LTS na Centos 7; mchakato unaweza kutofautiana kidogo kwenye usambazaji na matoleo mengine.

Ufungaji

Ninaweka amri zote muhimu Dockerfile kuwezesha uzalishwaji wa maagizo. Shida tu zitaelezewa hapa chini.

php-pinba

Baada ya usakinishaji, hakikisha kwamba katika faili ya /etc/php/7.2/fpm/conf.d/20-pinba.ini umetoa chaguzi zote. Kwenye baadhi ya usambazaji (kwa mfano centos) zinaweza kutolewa maoni.

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

clickhouse

Wakati wa usakinishaji, clickhouse itakuuliza kuweka nenosiri kwa mtumiaji chaguo-msingi. Kwa chaguo-msingi, mtumiaji huyu anapatikana kutoka kwa IP zote, hivyo ikiwa huna firewall kwenye seva yako, hakikisha kuweka nenosiri kwa ajili yake. Hili pia linaweza kufanywa baada ya usakinishaji katika /etc/clickhouse-server/users.xml faili.

Inafaa pia kuzingatia kwamba clickhouse hutumia bandari kadhaa, ikiwa ni pamoja na 9000. Bandari hii pia hutumiwa kwa php-fpm katika usambazaji fulani (kwa mfano, centos). Ikiwa tayari unatumia bandari hii, unaweza kuibadilisha hadi nyingine katika faili ya /etc/clickhouse-server/config.xml.

grafana na programu-jalizi ya kubofya

Baada ya kusakinisha Grafana, tumia msimamizi wa kuingia na nenosiri. Unapoingia kwa mara ya kwanza, Grafana atakuuliza uweke nenosiri jipya.

Ifuatayo, nenda kwa "+" -> menyu ya kuingiza na uonyeshe nambari ya dashibodi ya kuagiza 10011. Nilitayarisha na kupakia dashibodi hii ili usilazimike kuifanya mwenyewe tena.

Grafana inasaidia kufanya kazi na kubofya kupitia programu-jalizi ya mtu wa tatu, lakini Grafana haina arifa za programu-jalizi za wahusika wengine (kumekuwa na tikiti ya hii kwa miaka kadhaa).

pinba-server

Kusakinisha protobuf na libevent ni hiari, lakini huboresha utendaji wa seva ya pinba. Ikiwa utasakinisha pinba-server kwenye folda nyingine isipokuwa / opt, basi utahitaji pia kusahihisha hati ya mfumo faili.

pinba moduli ya nginx

Ili kuunda moduli, unahitaji nambari za chanzo za toleo lile lile la nginx ambalo tayari limewekwa kwenye seva yako, na vile vile chaguzi sawa za ujumuishaji, vinginevyo ujenzi utafanikiwa, lakini wakati wa kuunganisha moduli, hitilafu itatupwa. "moduli haioani na njia mbili." Chaguzi za mkusanyiko zinaweza kutazamwa kwa kutumia nginx -V amri

Maisha hacks

Tovuti zangu zote hufanya kazi kwenye https pekee. Sehemu ya schema inakuwa haina maana, kwa hivyo ninaitumia kutenganisha wavuti/koni.

Katika maandishi ambayo yanapatikana kutoka kwa wavuti ninayotumia:

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

Na katika maandishi ya koni (kwa mfano, maandishi ya cron):

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

Kwenye dashibodi yangu huko Grafana kuna swichi ya wavuti/koni ya kutazama takwimu kando.

Unaweza pia kutuma vitambulisho vyako kwa Pinba, kwa mfano:

pinba_tag_set('country', $countryCode);

Ni hayo tu.

Tafadhali jibu kura zilizo chini ya kifungu.

Kama kawaida, ninakuonya kwamba sishauri au kusaidia kupitia ujumbe wa kibinafsi kwenye Habr na mitandao ya kijamii.

Unda tikiti kwenye Github.

Pia tafadhali support kwa likes Toleo la Kiingereza Makala hii kwenye reddit.

Watumiaji waliojiandikisha pekee ndio wanaweza kushiriki katika utafiti. Weka sahihitafadhali.

Unatumia OS gani kwenye seva?

  • Ubuntu

  • CentOS

  • Debian

  • Gentoo

  • Red Hat

  • Fedora

  • OpenSUSE

  • SWITZERLAND

  • Unix

  • Windows

  • nyingine

Watumiaji 114 walipiga kura. Watumiaji 11 walijizuia.

Je, unatumia toleo gani la php kwenye seva?

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • nyingine

Watumiaji 105 walipiga kura. Watumiaji 17 walijizuia.

Je, umewahi kutumia pinba?

  • ndiyo

  • hapana, lakini ningependa

  • hapana na nisingetaka

  • hapana na sijasikia habari zake

Watumiaji 100 walipiga kura. Watumiaji 14 walijizuia.

Je, ungependa kujaribu toleo gani la seva ya Pinba?

  • pinba_engine (injini ya mysql)

  • pinba2 (injini ya mysql)

  • ubao wa pini (php + mysql)

  • olegfedoseev/pinba-server (nenda + OpenTSDB)

  • olegfedoseev/pinba-influxdb (kwenda + influxdb)

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

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

  • Nitaandika yangu mwenyewe

  • nyingine

Watumiaji 39 walipiga kura. Watumiaji 47 walijizuia.

Chanzo: mapenzi.com

Kuongeza maoni