Statistik sareng ngawaskeun skrip PHP sacara real waktos. ClickHouse sareng Grafana sumping ngabantosan Pinba

Dina artikel ieu kuring bakal ngabejaan ka maneh kumaha ngagunakeun pinba kalawan clickhouse na grafana tinimbang pinba_engine na pinboard.

Dina proyék PHP, pinba panginten mangrupikeun hiji-hijina cara anu tiasa dipercaya pikeun ngartos naon anu lumangsung dina pagelaran. Leres, pinba biasana dilaksanakeun ngan nalika masalah parantos dititénan sareng teu jelas "dimana ngagali."

Mindeng teu saurang ogé boga pamanggih sabaraha kali per detik / menit ieu atawa éta naskah disebut jeung maranéhna ngawitan ngaoptimalkeun "ku touch", mimitian ti eta tempat nu sigana leuwih logis.

Sababaraha nganalisis log nginx, sedengkeun anu sanésna nganalisis pamundut database anu lambat.

Tangtosna, pinba moal superfluous, tapi aya sababaraha alesan naha henteu unggal proyék gaduh eta.

Statistik sareng ngawaskeun skrip PHP sacara real waktos. ClickHouse sareng Grafana sumping ngabantosan Pinba

Jeung alesan kahiji nyaéta instalasi.

Dina raraga leuwih atawa kirang meunang sababaraha jenis "knalpot" ti palaksanaan Pinba, éta pisan desirable ningali metrics teu ukur keur menit panungtungan, tapi ogé dina jangka waktu nu lila (ti poé ka bulan).

Pikeun ieu anjeun butuh:

  • install extension pikeun php (jeung anjeun bisa jadi hoyong modul pikeun nginx)
  • compile extension pikeun mysql
  • install pinboard tur ngonpigurasikeun cron

Kusabab jumlah leutik inpormasi ngeunaan Pinba, seueur jalma gaduh gambaran yén éta ngan ukur damel dina PHP5 sareng parantos lami janten jaman baheula, tapi sakumaha anu bakal urang tingali engké, ieu sanés masalahna.

Hambalan munggaran nyaéta pangbasajanna, sadaya anu anjeun kedah laksanakeun nyaéta ngajalankeun paréntah:

apt install php-pinba

Ekstensi ieu sayogi dina repositori dugi ka sareng kalebet php 7.3 sareng anjeun henteu kedah nyusun nanaon.

Saatos ngalaksanakeun paréntah panginstalan, urang langsung nampi ekstensi kerja anu ngumpulkeun sareng ngirim métrik pikeun tiap naskah (waktos ngajalankeun, mémori, jsb) dina format. protobuf via udp ka 127.0.0.1:30002.

Sajauh ieu teu saurang ogé geus bray atawa ngolah pakét UDP ieu, tapi ieu teu sagala cara négatip mangaruhan laju atawa stabilitas Aksara PHP Anjeun.

Nepi ka ayeuna, hiji-hijina aplikasi nu bisa nyekel jeung ngolah pakét UDP ieu pinba_engine. Katerangan"basajan tur singket"Pamasangan ngahalangan kahayang pikeun kantos maca sareng ngalenyepan deui. Daptar dependensi anu panjangna kilométer ngandung duanana nami bungkusan sareng nami program sareng tautan ka halaman individu sareng pamasanganana, sareng anu gaduh tautan sorangan ka dependensi anu sanés. Taya sahijieun boga waktu atawa kahayang pikeun nungkulan crap ieu.

Proses instalasi pinba2 henteu utamana gampang.

Panginten someday bakal tiasa pasang pinba10 sareng hiji atanapi dua paréntah sareng henteu kedah maca sakumpulan bahan pikeun ngartos kumaha ngalakukeunana, tapi ayeuna ieu sanés masalahna.

Upami anjeun masang pinba_engine, maka ieu ngan ukur satengah perangna. Barina ogé, tanpa pinboard Anjeun kudu ngawatesan diri kana data ti ngan sababaraha menit panungtungan, atawa anjeun bakal kudu agrégat, nyimpen, jeung visualize data diri. Ieu alus nu pinboard cukup basajan ngagunakeun pamasangan.

Éta sigana, naha sangsara sapertos kitu upami sadaya métrik tina php parantos dikirim ka port udp dina format protobuf sareng anu anjeun peryogikeun nyaéta nyerat aplikasi anu bakal nyekel aranjeunna sareng nempatkeun aranjeunna dina sababaraha jinis panyimpenan? Tétéla, maranéhanana pamekar anu datang nepi ka ide ieu langsung diuk handap nulis ideu sorangan, sababaraha nu réngsé nepi di GitHub.

Di handap ieu tinjauan opat proyék open source nu nyimpen métrik dina gudang, ti mana data ieu bisa gampang dimeunangkeun tur visualized, contona, ngagunakeun grafana.

olegfedoseev / pinba-server (Nopémber 2017)

udp server on lebet nu nyimpen metrics ka OpenTSDB. Panginten upami anjeun parantos nganggo OpenTSDB dina proyék anjeun, maka solusi ieu bakal cocog sareng anjeun, upami henteu, kuring nyarankeun ngalangkunganana.

olegfedoseev / pinba-influxdb (Juni 2018)

udp server on lebet, ti sarua habrowser, anu waktos ieu nyimpen métrik dina InfluxDB. Seueur proyék anu parantos nganggo InfluxDB pikeun ngawaskeun, janten solusi ieu tiasa sampurna pikeun aranjeunna.

pro:

  • InfluxDB Hal ieu ngamungkinkeun agrégat métrik anu ditampi, sareng hapus anu asli saatos waktos anu ditangtukeun.

kontra:

ClickHouse-Ninja/Proton (Januari 2019)

udp server on lebet, nu nyimpen metrics di ClickHouse. Ieu solusi sobat urang. Ieu sanggeus meunang acquainted jeung eta nu kuring mutuskeun yén éta waktu nyandak on Pinbu na Clickhouse.

pro:

  • Clickhouse idéal pikeun tugas-tugas sapertos kitu; éta ngamungkinkeun anjeun pikeun niiskeun data pisan anu anjeun tiasa nyimpen sadaya data atah sanaos tanpa agrégasi.
  • lamun diperlukeun, anjeun bisa kalayan gampang agrégat metrics hasilna
  • template siap-dijieun pikeun grafana
  • nyimpen informasi dina timers

kontra:

  • cacad fatal
  • teu aya config dimana anjeun tiasa ngonpigurasikeun nami database sareng tabel, alamat sareng port server.
  • nalika nyimpen data atah, tabel kamus bantu dipaké pikeun nyimpen kaca jeung alamat domain, nu complicates queries saterusna.
  • hal saeutik séjén nu nuturkeun ti minus munggaran

pinba-server / pinba-server (April 2019)

udp server di php, nu nyimpen metrics di ClickHouse. Ieu leyuran abdi, nu mangrupa hasil meunang uninga pinba, ClickHouse na protobuf. Bari kuring nyortir kaluar sakabeh kebat ieu, Kuring nulis "bukti konsép", nu, disangka keur kuring, teu meakeun sumberdaya signifikan (30 MB RAM jeung kirang ti 1% tina salah sahiji dalapan cores processor), jadi kuring mutuskeun pikeun ngabagikeunana ka masarakat.

Kauntungannana sarua jeung solusi saméméhna, Kuring ogé dipaké ngaran dawam ti pinba_engine aslina. Kuring ogé nambahkeun hiji config nu ngidinan Anjeun pikeun ngajalankeun sababaraha instansi server pinbase sakaligus pikeun ngahemat metrics dina tabel béda - ieu mangpaat lamun rék ngumpulkeun data teu ukur ti php, tapi ogé ti nginx.
Kakurangan - "cacat fatal" sareng hal-hal alit anu henteu cocog sareng anjeun pribadi, tapi solusi kuring "sasederhana sandal" sareng ngan ukur diwangun ku 100 garis kode, ku kituna naon waé pamekar PHP tiasa ngarobih naon anu anjeunna henteu resep. dina sababaraha menit.

Kumaha karya

Port UDP 30002 didangukeun. Sadaya pakét anu asup dikodekeun dumasar kana skéma protobuf sareng agrégat. Sakali menit, pakét diselapkeun kana clickhouse kana tabel pinba.requests. (sadayana parameter dikonpigurasi dina config)

A saeutik ngeunaan clickhouse

Clickhouse ngadukung mesin panyimpen data anu béda. Anu paling sering dianggo nyaéta MergeTree.

Lamun di sawatara titik mutuskeun pikeun nyimpen data aggregated pikeun sakabéh waktu, sarta data atah ngan pikeun panungtungan, mangka anjeun bisa nyieun tempoan materialized kalawan grouping, sarta périodik ngabersihan tabel pinba.requests utama, bari sakabeh data bakal tetep dina pintonan materialized. Leuwih ti éta, nalika nyieun tabel pinba.requests, anjeun bisa nangtukeun "mesin = Null", lajeng data atah moal disimpen kana disk pisan, sarta dina waktos anu sareng eta masih bakal mungkas nepi di view materialized tur disimpen aggregated. . Kuring make skéma ieu metrics nginx, sabab on nginx kuring boga 50 kali leuwih requests ti on php.

Janten, anjeun parantos tebih sareng kuring henteu hoyong ngantunkeun anjeun satengahna, janten anu di handap ieu mangrupikeun pedaran lengkep ngeunaan pamasangan sareng konfigurasi solusi kuring sareng sadayana anu anjeun peryogikeun, ogé pitfalls anu nyababkeun langkung ti hiji kapal. ngadat. Sakabéh prosés pamasangan dijelaskeun pikeun Ubuntu 18.04 LTS sareng Centos 7; prosésna tiasa rada bénten dina distribusi sareng versi anu sanés.

setting

Kuring nempatkeun sagala paréntah diperlukeun dina dockerfile pikeun mempermudah reproducibility instruksi. Ngan pitfalls bakal dijelaskeun di handap.

php-pinba

Saatos instalasi, pastikeun yén dina /etc/php/7.2/fpm/conf.d/20-pinba.ini file anjeun geus uncommented sadaya pilihan. Dina sababaraha distribusi (misalna centos) aranjeunna tiasa dikoméntarkeun.

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

clickhouse

Salila pamasangan, clickhouse bakal naroskeun anjeun nyetél kecap konci pikeun pangguna standar. Sacara standar, pangguna ieu tiasa diaksés tina sadaya IP, janten upami anjeun teu gaduh firewall dina server anjeun, pastikeun pikeun nyetél kecap akses pikeun éta. Ieu ogé bisa dipigawé sanggeus instalasi dina file /etc/clickhouse-server/users.xml.

Éta ogé sia ​​noting yén clickhouse ngagunakeun sababaraha palabuhan, kaasup 9000. port ieu ogé dipaké pikeun php-fpm dina sababaraha sebaran (Contona, centos). Upami anjeun parantos nganggo port ieu, anjeun tiasa ngarobih kana anu sanés dina file /etc/clickhouse-server/config.xml.

grafana sareng plugin clickhouse

Saatos masang Grafana, anggo admin login sareng admin sandi. Lamun anjeun asup pikeun kahiji kalina, Grafana bakal nanya ka anjeun nyetel sandi anyar.

Teras, angkat ka "+" -> ménu impor sareng nunjukkeun nomer dasbor pikeun impor 10011. Kuring nyiapkeun sareng unggah dasbor ieu supados anjeun henteu kedah ngalakukeun deui nyalira.

Grafana ngadukung gawé bareng clickhouse ngaliwatan plugin pihak katilu, tapi Grafana teu gaduh panggeuing pikeun plugins pihak katilu (aya tikét pikeun ieu sababaraha taun).

pinba-server

Masang protobuf na libevent nyaeta pilihan, tapi ngaronjatkeun kinerja pinba-server. Upami anjeun masang pinba-server dina polder sanés / opt, maka anjeun ogé kedah ngabenerkeun skrip systemd file.

modul pinba pikeun nginx

Pikeun nyusun modul, anjeun peryogi kode sumber tina vérsi nginx anu sami anu parantos dipasang dina server anjeun, ogé pilihan kompilasi anu sami, upami henteu ngawangun bakal suksés, tapi nalika nyambungkeun modul, kasalahan bakal dialungkeun. "Modulna henteu cocog binér." Pilihan kompilasi tiasa ditingali nganggo paréntah nginx -V

Hacks kahirupan

Sadaya situs abdi dianggo ukur dina HTTPS. Widang schema janten euweuh hartina, jadi kuring make eta pikeun misahkeun web / konsol.

Dina skrip anu tiasa diaksés tina wéb kuring nganggo:

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

Sareng dina skrip konsol (contona, skrip cron):

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

Dina dasbor kuring di Grafana aya saklar wéb / konsol pikeun ningali statistik sacara misah.

Anjeun ogé tiasa ngirim tag anjeun ka Pinba, contona:

pinba_tag_set('country', $countryCode);

Éta hungkul.

Mangga ngajawab polling di handap artikel.

Sakumaha biasa, kuring ngingetkeun yén kuring henteu mamatahan atanapi ngabantosan pesen pribadi dina Habr sareng jaringan sosial.

Jieun tikét dina Github.

Ogé punten ngarojong kalayan likes Vérsi Inggris Artikel ieu dina reddit.

Ngan pamaké nu kadaptar bisa ilubiung dina survey. Daptar, Punten.

OS naon anu anjeun anggo dina server?

  • Ubuntu

  • CentOS

  • Debian

  • Gentoo

  • red Hat

  • Fedora

  • OpenSUSE

  • SUKSUL

  • Unix

  • Windows

  • nu lain

114 pamaké milih. 11 pamaké abstained.

Naon versi php anu anjeun anggo dina server?

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • nu lain

105 pamaké milih. 17 pamaké abstained.

Dupi anjeun kantos nganggo pinba?

  • nuhun

  • henteu, tapi abdi hoyong

  • henteu sareng abdi henteu hoyong

  • henteu sareng teu acan nguping anjeunna

100 pamaké milih. 14 pamaké abstained.

Vérsi mana tina server Pinba anjeun hoyong nyobian?

  • pinba_engine (mesin mysql)

  • pinba2 (mesin mysql)

  • pinboard (php + mysql)

  • olegfedoseev/pinba-server (go + OpenTSDB)

  • olegfedoseev/pinba-influxdb (go + influxdb)

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

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

  • Kuring gé nulis milik sorangan

  • nu lain

39 pamaké milih. 47 pamaké abstained.

sumber: www.habr.com

Tambahkeun komentar