Dalam artikel ini, saya akan menunjukkan kepada Anda bagaimana menggunakan pinba dengan clickhouse dan grafana alih-alih pinba_engine dan pinboard.
Pada proyek phba, pinba mungkin satu-satunya cara yang dapat diandalkan untuk memahami apa yang terjadi dengan kinerja. Benar, pinba biasanya diterapkan hanya ketika masalah sudah diamati dan tidak jelas di mana untuk menggali.
Seringkali tidak ada yang tahu berapa kali per detik / menit sebuah skrip tertentu dipanggil dan mulai mengoptimalkan "dengan sentuhan", mulai dari tempat-tempat yang tampak lebih logis.
Seseorang menganalisis log nginx, dan seseorang memperlambat permintaan dalam DB.
Tentu saja pinba tidak akan berlebihan, tetapi ada beberapa alasan mengapa itu tidak ada di setiap proyek.

Dan alasan pertama adalah instalasi.
Agar kurang lebih mendapatkan semacam "pembuangan" dari pengenalan pinba, sangat diinginkan untuk melihat metrik tidak hanya pada menit terakhir, tetapi juga dalam jangka waktu yang lama (dari hari ke bulan).
Untuk melakukan ini, Anda perlu:
- instal ekstensi untuk php (dan mungkin Anda menginginkan modul untuk nginx)
- kompilasi ekstensi untuk mysql
- instal pinboard dan konfigurasikan cron
Karena sedikit informasi tentang pinba, banyak yang memiliki kesan bahwa itu hanya bekerja pada php5 dan telah lama di masa lalu, tetapi seperti yang akan kita lihat nanti, ini tidak begitu.
Langkah pertama adalah yang termudah, yang perlu Anda lakukan adalah menjalankan perintah:
apt install php-pinba
Dalam repositori, ekstensi ini sesuai dengan php 7.3 inklusif dan Anda tidak perlu mengkompilasi apa pun.
Setelah menjalankan perintah instalasi, kami segera mendapatkan ekstensi yang sudah berfungsi yang mengumpulkan dan mengirim metrik setiap skrip (durasi, memori, dll.) Dalam format
protobuf dengan udp ke 127.0.0.1
{0002 .
Belum ada yang menangkap atau memproses paket udp ini, tetapi tidak memengaruhi kecepatan atau stabilitas skrip php Anda.
Sampai saat ini, hanya
pinba_engine adalah satu-satunya aplikasi yang dapat menangkap dan memproses paket udp ini. Deskripsi tentang instalasi yang "
sederhana dan ringkas " tidak mendorong keinginan untuk membaca dan mempelajari lagi. Dalam daftar ketergantungan sepanjang kilometer ada nama paket dan nama program serta tautan ke masing-masing halaman dengan pemasangannya, dan mereka memiliki tautan sendiri ke dependensi lain. Untuk menghadapi omong kosong ini, tidak ada yang punya waktu maupun keinginan.
Proses instalasi
pinba2 tidak menjadi
lebih mudah .
Mungkin suatu hari pinba10 dapat diinstal dengan satu atau dua perintah dan tidak membaca banyak materi untuk memahami bagaimana melakukan ini, tetapi sejauh ini tidak demikian.
Jika Anda masih memasang pinba_engine, maka ini hanya setengah dari pertarungan. Lagipula, tanpa
pinboard, Anda harus membatasi diri hanya untuk data dalam beberapa menit terakhir atau untuk menggabungkan, menyimpan dan memvisualisasikan data Anda sendiri. Ada baiknya bahwa pinboard cukup mudah
dipasang .
Kelihatannya, mengapa penderitaan seperti itu jika semua metrik dari php sudah pergi ke port udp dalam format protobuf dan semua yang diperlukan adalah menulis aplikasi yang akan menangkap dan menyimpannya dalam beberapa jenis penyimpanan? Rupanya, para pengembang yang datang dengan ide ini segera duduk untuk menulis sepeda sendiri, beberapa di antaranya jatuh di github.
Berikut ini adalah ulasan dari empat proyek sumber terbuka yang menyimpan metrik dalam penyimpanan, dari mana data ini mudah didapat dan divisualisasikan, misalnya, menggunakan grafana.
udp server on go, yang menyimpan metrik di OpenTSDB. Mungkin jika Anda sudah menggunakan OpenTSDB pada proyek, maka solusi seperti itu akan cocok untuk Anda jika tidak saya sarankan lewat.
udp server on go, dari
habrayuzer yang sama yang kali ini menyimpan metrik di InfluxDB. Pada banyak proyek, InfluxDB sudah digunakan untuk pemantauan, jadi solusi ini bisa sangat bagus untuk mereka.
Pro:
- InfluxDB memungkinkan Anda untuk mengumpulkan metrik yang diterima, dan menghapus yang asli setelah waktu yang ditentukan.
Cons:
udp server on go yang menyimpan metrik di ClickHouse. Ini adalah keputusan teman saya. Setelah berkenalan dengannya, saya memutuskan bahwa sudah waktunya untuk menggunakan pinbu dan clickhouse.
Pro:
- Clickhouse sangat ideal untuk tugas-tugas seperti itu, memungkinkan Anda untuk memampatkan data begitu banyak sehingga Anda dapat menyimpan semua data mentah bahkan tanpa agregasi
- jika diperlukan, Anda dapat dengan mudah mengumpulkan metrik yang dihasilkan
- template siap pakai untuk grafana
- menyimpan informasi pengatur waktu
Cons:
kesalahan fatal- tidak ada konfigurasi yang memungkinkan untuk mengkonfigurasi nama database dan tabel, alamat dan port server.
- saat menyimpan data mentah, tabel kamus tambahan digunakan untuk menyimpan halaman dan alamat domain, yang selanjutnya mempersulit kueri
- hal-hal kecil lainnya yang mengalir dari minus pertama
server udp di php yang menyimpan metrik di ClickHouse. Ini adalah solusi saya yang dihasilkan dari kenalan saya dengan pinba, ClickHouse dan protobuf. Ketika saya berurusan dengan kelompok ini, saya menulis "bukti konsep", yang secara tak terduga bagi saya tidak mengkonsumsi sumber daya yang signifikan (30 MB RAM dan kurang dari 1% dari salah satu dari delapan inti prosesor), jadi saya memutuskan untuk membagikannya kepada publik.
Pro sama seperti pada solusi sebelumnya, saya juga menggunakan nama biasa dari pinba_engine asli. Saya juga menambahkan konfigurasi yang memungkinkan Anda menjalankan beberapa instance pinbaserver sekaligus untuk menyimpan metrik ke tabel yang berbeda - ini berguna jika Anda ingin mengumpulkan data tidak hanya dari php, tetapi juga dari nginx.
Kontra - "kesalahan fatal" dan hal-hal kecil yang secara pribadi Anda tidak akan merasa nyaman, tetapi solusi saya adalah "sesederhana sandal" dan hanya terdiri dari sekitar 100 baris kode, sehingga setiap pengembang php dapat mengubah apa yang tidak ia sukai dalam beberapa menit.
Prinsip kerjaPort udp 30002 didengarkan. Semua paket yang masuk didekodekan sesuai dengan skema protobuf dan diagregasi. Sekali semenit, paket dimasukkan ke dalam rumah klik di tabel pinba.requests. (semua parameter dikonfigurasi dalam
konfigurasi )
Sedikit tentang clickhouseClickhouse mendukung berbagai mesin penyimpanan. Yang paling umum digunakan adalah MergeTree.
Jika pada suatu saat Anda memutuskan untuk menyimpan data teragregasi sepanjang waktu, dan hanya data mentah untuk yang terakhir, maka Anda dapat membuat tampilan terwujud dengan pengelompokan, dan membersihkan pinba.requests utama tabel secara berkala, sementara semua data akan tetap dalam tampilan terwujud. Selain itu, saat membuat tabel pinba.requests, Anda dapat menentukan "engine = Null", maka data mentah tidak akan disimpan ke disk sama sekali dan pada saat yang sama itu akan tetap masuk ke tampilan terwujud dan disimpan agregat. Saya menggunakan skema ini untuk metrik nginx, karena pada nginx saya memiliki permintaan 50 kali lebih banyak daripada di php.
Jadi, Anda telah menempuh perjalanan jauh dan saya tidak ingin meninggalkan Anda di tengah jalan, maka akan ada deskripsi terperinci tentang pemasangan dan konfigurasi solusi saya dan semua yang Anda butuhkan, serta jebakan yang menimpa lebih dari satu kapal. Seluruh proses instalasi dijelaskan untuk Ubuntu 18.04 LTS dan Centos 7, pada distribusi dan versi lain prosesnya mungkin sedikit berbeda.
Instalasi
Saya membuat semua perintah yang diperlukan di
Dockerfile untuk memfasilitasi reproduksibilitas instruksi. Hanya jebakan yang akan dijelaskan di bawah ini.
php pinbaSetelah instalasi, pastikan bahwa dalam file /etc/php/7.2/fpm/conf.d/20-pinba.ini Anda memiliki semua opsi uncommented. Dalam beberapa distribusi (misalnya, centos) mereka dapat dikomentari.
extension=pinba.so pinba.enabled=1 pinba.server=127.0.0.1:30002
clickhouseSelama instalasi, clickhouse akan meminta Anda untuk mengatur kata sandi untuk pengguna default. Secara default, pengguna ini tersedia dari semua ip, jadi jika Anda tidak memiliki firewall di server, pastikan untuk mengatur kata sandi untuk itu. Ini juga dapat dilakukan setelah instalasi di file /etc/clickhouse-server/users.xml.
Perlu dicatat bahwa clickhouse menggunakan beberapa port, termasuk 9000. Port ini juga digunakan untuk php-fpm di beberapa distribusi (misalnya, centos). Jika Anda sudah menggunakan port ini, Anda dapat mengubahnya ke port lain di file /etc/clickhouse-server/config.xml.
grafana dengan plugin clickhouseSetelah menginstal grafana, gunakan nama pengguna admin dan kata sandi admin. Di pintu masuk pertama, graphan akan meminta Anda untuk mengatur kata sandi baru.
Selanjutnya, buka menu "+" -> impor dan tentukan nomor dasbor untuk impor
10011 . Saya menyiapkan dan mengisi dasbor ini sehingga Anda tidak perlu melakukannya sendiri lagi.
Grafana mendukung bekerja dengan clickhouse melalui plug-in pihak ketiga, tetapi untuk plug-in pihak ketiga, grafana tidak bekerja peringatan (tiket untuk ini telah berlangsung selama beberapa tahun).
server pinbaMenginstal protobuf dan libevent adalah opsional, tetapi meningkatkan kinerja server pinba. Jika Anda menginstal server pinba di folder selain / opt, maka Anda juga perlu memperbaiki file
skrip systemd .
modul pinba di bawah nginxUntuk mengkompilasi modul, Anda memerlukan sumber-sumber dari versi nginx yang sama yang sudah diinstal pada server Anda, serta opsi kompilasi yang sama, jika tidak perakitan akan berhasil, tetapi ketika modul terhubung, kesalahan akan dihasilkan bahwa modul tersebut tidak kompatibel dengan biner. Opsi kompilasi dapat dilihat menggunakan perintah nginx -V
Peretasan seumur hidupSemua situs saya hanya berfungsi di https. Bidang skema menjadi tidak berarti, jadi saya menggunakannya untuk memisahkan web / konsol.
Dalam skrip yang dapat diakses dari web saya menggunakan:
if (ini_get('pinba.enabled')) { pinba_schema_set('web'); }
Dan di konsol (misalnya, mahkota skrip):
if (ini_get('pinba.enabled')) { pinba_schema_set('console'); }
Di dasbor saya di graphan ada saklar web / konsol untuk melihat statistik secara terpisah.
Anda juga dapat mentransfer tag Anda ke pinbu, misalnya:
pinba_tag_set('country', $countryCode);
Itu saja.Permintaan besar untuk menjawab polling di bawah artikel.
Secara tradisional, saya memperingatkan bahwa saya tidak memberi saran dan tidak membantu melalui pesan pribadi Habr dan jejaring sosial.
Mulai tiket di github.
Juga, tolong dukung
versi bahasa Inggris dari artikel ini
di reddit dengan suka .