Statistik lan ngawasi skrip PHP ing wektu nyata. ClickHouse lan Grafana teka kanggo bantuan Pinba

Ing artikel iki aku bakal pitutur marang kowe carane nggunakake pinba karo clickhouse lan grafana tinimbang pinba_engine lan pinboard.

Ing proyek PHP, pinba mbok menawa siji-sijine cara sing bisa dipercaya kanggo mangerteni apa sing kedadeyan karo kinerja. Bener, pinba biasane dileksanakake mung nalika masalah wis diamati lan ora jelas "ing ngendi arep digali."

Asring ora ana sing ngerti carane kakehan per detik / menit iki utawa skrip kasebut diarani lan wiwit ngoptimalake "kanthi tutul", wiwit saka papan sing katon luwih logis.

Sawetara nganalisa log nginx, dene liyane nganalisa pitakon database alon.

Mesthine, pinba ora bakal berlebihan, nanging ana sawetara sebab kenapa ora saben proyek duwe.

Statistik lan ngawasi skrip PHP ing wektu nyata. ClickHouse lan Grafana teka kanggo bantuan Pinba

Lan alesan pisanan yaiku instalasi.

Supaya luwih utawa kurang njaluk sawetara jenis "knalpot" saka implementasine saka Pinba, iku banget seng di pengeni kanggo ndeleng metrik ora mung kanggo menit pungkasan, nanging uga ing wektu dawa (saka dina kanggo sasi).

Sampeyan kudu:

  • nginstal ekstensi kanggo php (lan sampeyan bisa uga pengin modul kanggo nginx)
  • kompilasi ekstensi kanggo mysql
  • nginstal pinboard lan konfigurasi cron

Amarga jumlah informasi sing sithik babagan Pinba, akeh wong sing duwe kesan yen mung bisa digunakake ing PHP5 lan wis suwe, nanging kaya sing bakal kita deleng mengko, iki ora kedadeyan.

Langkah pisanan sing paling gampang, sampeyan mung kudu mbukak perintah kasebut:

apt install php-pinba

Ekstensi iki kasedhiya ing repositori nganti lan kalebu php 7.3 lan sampeyan ora perlu ngumpulake apa-apa.

Sawise nglakokake perintah instalasi, kita langsung nampa ekstensi kerja sing ngumpulake lan ngirim metrik kanggo saben skrip (wektu mlaku, memori, lan sapiturute) ing format kasebut. protobuf liwat udp kanggo 127.0.0.1:30002.

Nganti saiki, ora ana sing nyekel utawa ngolah paket UDP iki, nanging iki ora mengaruhi kacepetan utawa stabilitas skrip PHP sampeyan.

Nganti saiki, mung aplikasi sing bisa nyekel lan ngolah paket UDP iki pinba_engine. Deskripsi"prasaja lan ringkes"Painstalan nyuda kepinginan kanggo maca lan nyelidiki maneh. Dhaptar dependensi sing dawane kilometer ngemot jeneng paket lan jeneng program lan pranala menyang kaca individu kanthi instalasi, lan sing duwe pranala dhewe menyang dependensi liyane. Ora ana sing duwe wektu utawa kepinginan kanggo ngatasi omong kosong iki.

Proses instalasi pinba2 dudu utamanΓ© luwih gampang.

Mbok menawa ing sawijining dina bisa nginstal pinba10 kanthi siji utawa loro printah lan ora kudu maca akeh materi kanggo mangerteni carane nindakake, nanging saiki iki ora.

Yen sampeyan wis nginstal pinba_engine, banjur iki mung setengah perang. Sawise kabeh, tanpa pinboard sampeyan kudu mbatesi data mung sawetara menit pungkasan, utawa sampeyan kudu nglumpukake, nyimpen, lan nggambarake data kasebut dhewe. Iku apik yen pinboard cukup gampang digunakake instalasi.

Kayane, kenapa penderitaan kaya ngono yen kabeh metrik saka php wis dikirim menyang port udp ing format protobuf lan sampeyan mung kudu nulis aplikasi sing bakal nyekel lan dilebokake ing sawetara jinis panyimpenan? Ketoke, para pangembang sing nggawe ide iki langsung lungguh kanggo nulis ide dhewe, sawetara sing ana ing GitHub.

Ing ngisor iki minangka ringkesan saka papat proyek open source sing nyimpen metrik ing panyimpenan, saka ngendi data iki bisa gampang dijupuk lan digambarake, contone, nggunakake grafana.

olegfedoseev / pinba-server (November 2017)

udp server on go sing nyimpen metrik menyang OpenTSDB. Mbok menawa sampeyan wis nggunakake OpenTSDB ing proyek sampeyan, solusi iki bakal cocog karo sampeyan, yen ora, aku nyaranake ngliwati.

olegfedoseev/pinba-influxdb (Juni 2018)

udp server on go, saka padha habrowser, sing wektu iki nyimpen metrik ing InfluxDB. Akeh proyek sing wis nggunakake InfluxDB kanggo ngawasi, mula solusi iki bisa uga cocog kanggo dheweke.

Pros:

  • InfluxDB Nanging ngidini ngumpulake metrik sing ditampa, lan mbusak sing asli sawise wektu tartamtu.

Cons:

ClickHouse-Ninja/Proton (Januari 2019)

udp server on go, sing nyimpen metrik ing ClickHouse. Iki solusine kancaku. Iku sawise njupuk kenalan karo aku mutusakΓ© sing iku wektu kanggo njupuk ing Pinbu lan Clickhouse.

Pros:

  • Clickhouse cocog kanggo tugas kasebut; ngidini sampeyan ngompres data supaya sampeyan bisa nyimpen kabeh data mentah sanajan tanpa agregasi.
  • yen dibutuhake, sampeyan bisa kanthi gampang nglumpukake metrik sing diasilake
  • cithakan siap kanggo grafana
  • nyimpen informasi ing timer

Cons:

  • cacat fatal
  • ora ana konfigurasi sing bisa ngatur jeneng database lan tabel, alamat lan port server.
  • nalika nyimpen data mentah, tabel kamus tambahan digunakake kanggo nyimpen alamat kaca lan domain, sing nyebabake pitakon sabanjure.
  • bab cilik liyane sing tindakake saka minus pisanan

pinba-server / pinba-server (April 2019)

server udp ing php, sing nyimpen metrik ing ClickHouse. Iki minangka solusiku, yaiku asil saka ngerteni pinba, ClickHouse lan protobuf. Nalika aku ngurutake kabeh klompok iki, aku nulis "bukti konsep", sing ora disangka-sangka kanggo aku, ora nggunakake sumber daya sing signifikan (30 MB RAM lan kurang saka 1% saka siji saka wolung inti prosesor), mula aku mutusake kanggo nuduhake karo umum.

Kaluwihan padha karo solusi sadurungΓ©, Aku uga digunakake jeneng biasanipun saka pinba_engine asli. Aku uga nambahake konfigurasi sing ngidini sampeyan miwiti sawetara conto server pinbase bebarengan kanggo nyimpen metrik ing tabel sing beda - iki migunani yen sampeyan pengin ngumpulake data ora mung saka php, nanging uga saka nginx.
Kekurangan - "cacat fatal" lan barang-barang cilik sing ora cocog karo sampeyan, nanging solusiku "kaya sandal" lan mung ana 100 baris kode, mula pangembang PHP bisa ngganti apa sing ora disenengi. ing sawetara menit.

Cara kerjane

Port UDP 30002 dirungokake. Kabeh paket sing mlebu didekode miturut skema protobuf lan dikumpulake. Sawise menit, paket dilebokake menyang clickhouse menyang meja pinba.requests. (kabeh paramèter dikonfigurasi ing konfigurasi)

A sethitik babagan clickhouse

Clickhouse ndhukung mesin panyimpenan data sing beda. Sing paling umum digunakake yaiku MergeTree.

Yen ing sawetara titik sampeyan arep kanggo nyimpen data dikumpulake kanggo kabeh wektu, lan data mentah mung kanggo pungkasan, sampeyan bisa nggawe tampilan materialized karo klompok, lan periodik ngresiki tabel pinba.requests utama, nalika kabeh data bakal tetep ing tampilan materialized. Menapa malih, nalika nggawe tabel pinba.requests, sampeyan bisa nemtokake "engine = Null", banjur data mentah ora bakal disimpen ing disk ing kabeh, lan ing wektu sing padha isih bakal rampung ing tampilan materialized lan disimpen aggregated. . Aku nggunakake skema iki kanggo metrik nginx, amarga ing nginx aku duwe panjaluk kaping 50 luwih akeh tinimbang ing php.

Dadi, sampeyan wis adoh banget lan aku ora pengin ninggalake sampeyan separo, mula ing ngisor iki minangka katrangan rinci babagan instalasi lan konfigurasi solusiku lan kabeh sing dibutuhake, uga pitfalls sing nyebabake luwih saka siji kapal. kanggo nabrak. Proses instalasi kabeh diterangake kanggo Ubuntu 18.04 LTS lan Centos 7; proses kasebut bisa uga beda-beda ing distribusi lan versi liyane.

Instalasi

Aku sijine kabeh printah perlu ing file docker kanggo nggampangake reproducibility instruksi. Mung pitfalls bakal diterangake ing ngisor iki.

php-pinba

Sawise instalasi, priksa manawa ing file /etc/php/7.2/fpm/conf.d/20-pinba.ini sampeyan wis mbatalake kabeh pilihan. Ing sawetara distribusi (contone centos) bisa uga dikomentari.

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

clickhouse

Sajrone instalasi, clickhouse bakal njaluk sampeyan nyetel sandhi kanggo pangguna standar. Kanthi gawan, pangguna iki bisa diakses saka kabeh IP, dadi yen sampeyan ora duwe firewall ing server sampeyan, priksa manawa sampeyan nyetel sandhi kasebut. Iki uga bisa ditindakake sawise instalasi ing file /etc/clickhouse-server/users.xml.

Sampeyan uga kudu dicathet yen clickhouse nggunakake sawetara port, kalebu 9000. Port iki uga digunakake kanggo php-fpm ing sawetara distribusi (contone, centos). Yen sampeyan wis nggunakake port iki, sampeyan bisa ngganti menyang liyane ing file /etc/clickhouse-server/config.xml.

grafana karo plugin clickhouse

Sawise nginstal Grafana, gunakake admin login lan admin sandhi. Nalika sampeyan mlebu pisanan, Grafana bakal njaluk sampeyan nyetel sandhi anyar.

Sabanjure, pindhah menyang "+" -> menu impor lan nuduhake nomer dashboard kanggo ngimpor 10011. Aku nyiapake lan upload dashboard iki supaya sampeyan ora kudu nindakake dhewe maneh.

Grafana ndhukung nggarap clickhouse liwat plugin pihak katelu, nanging Grafana ora duwe tandha kanggo plugin pihak katelu (wis ana tiket kanggo sawetara taun).

pinba-server

Nginstal protobuf lan libevent opsional, nanging nambah kinerja pinba-server. Yen sampeyan nginstal pinba-server ing folder liyane saka /opt, sampeyan uga kudu mbenerake skrip systemd ngajukake

modul pinba kanggo nginx

Kanggo ngumpulake modul, sampeyan butuh kode sumber versi nginx sing padha sing wis diinstal ing server sampeyan, uga opsi kompilasi sing padha, yen ora, mbangun bakal sukses, nanging nalika nyambungake modul kasebut, kesalahan bakal dibuwang. "Modul kasebut ora kompatibel karo binar." Opsi kompilasi bisa dideleng nggunakake printah nginx -V

Peretasan urip

Kabeh situsku mung bisa digunakake ing https. Bidang skema dadi ora ana gunane, mula aku gunakake kanggo misahake web/konsol.

Ing skrip sing bisa diakses saka web sing aku gunakake:

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

Lan ing skrip konsol (contone, skrip cron):

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

Ing dashboard ing Grafana ana switch web / konsol kanggo ndeleng statistik kanthi kapisah.

Sampeyan uga bisa ngirim tag menyang Pinba, contone:

pinba_tag_set('country', $countryCode);

Iku kabeh.

Mangga wangsulana jajak pendapat ing ngisor artikel kasebut.

Kaya biasane, aku ngelingake yen aku ora menehi saran utawa mbantu liwat pesen pribadi ing Habr lan jaringan sosial.

Nggawe tiket ing Github.

Uga tulung dukung karo seneng versi Inggris wacana iki ing reddit.

Mung pangguna pangguna sing bisa melu survey. mlebunggih.

OS apa sing sampeyan gunakake ing server?

  • ubuntu

  • CentOS

  • Debian

  • Gentoo

  • Red Hat

  • Fedora

  • OpenSUSE

  • SUKSAN

  • Unix

  • Windows

  • liyane

114 pangguna milih. 11 kedhaftar abstained.

Apa versi php sing sampeyan gunakake ing server?

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • liyane

105 pangguna milih. 17 kedhaftar abstained.

Apa sampeyan wis tau nggunakake pinba?

  • ya

  • ora, nanging aku pengin

  • ora lan aku ora pengin

  • ora lan durung krungu bab dheweke

100 pangguna milih. 14 kedhaftar abstained.

Versi server Pinba endi sing arep dicoba?

  • pinba_engine (mysql engine)

  • pinba2 (mysql engine)

  • 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)

  • Aku bakal nulis dhewe

  • liyane

39 pangguna milih. 47 kedhaftar abstained.

Source: www.habr.com

Add a comment