ProHoster > ΠΠ»ΠΎΠ³ > Administrasi > Statistik lan ngawasi skrip PHP ing wektu nyata. ClickHouse lan Grafana teka kanggo bantuan Pinba
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.
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.
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.
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.
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.
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.
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.
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.