Statistik dan pemantauan skrip PHP secara real time. ClickHouse dan Grafana pergi ke Pinba untuk bantuan

Pada artikel ini saya akan menjelaskan cara menggunakan pinba dengan clickhouse dan grafana daripada pinba_engine dan pinboard.

Pada proyek php pinba mungkin satu-satunya cara yang dapat diandalkan untuk memahami apa yang terjadi dengan kinerja. Tetapi biasanya orang mulai menggunakan pinba hanya ketika masalah sudah diamati dan tidak jelas ke mana harus mencari.

Seringkali pengembang tidak tahu berapa banyak RPS yang dimiliki setiap skrip. Jadi mereka mulai mengoptimalkan mulai dari tempat yang sepertinya bermasalah.

Seseorang menganalisis log nginx, dan seseorang lambat dalam database.

Tentu saja pinba tidak akan berlebihan, tetapi ada beberapa alasan mengapa itu tidak ada di setiap proyek.



Dan alasan pertama adalah instalasi.

Untuk mendapatkan sedikit lebih banyak keuntungan dari penggunaan pinba, sangat diinginkan untuk melihat metrik tidak hanya pada menit-menit terakhir, tetapi juga dalam periode waktu yang panjang (dari hari ke bulan).

Untuk itu Anda perlu:

  • instal ekstensi untuk php (dan Anda mungkin ingin memiliki modul untuk nginx)
  • kompilasi ekstensi untuk mysql
  • instal pinboard dan konfigurasikan cron

Karena kami memiliki sedikit informasi tentang pinba baru-baru ini, banyak orang berpikir bahwa itu hanya bekerja pada php5 dan telah hilang, tetapi seperti yang akan kita lihat nanti, itu tidak benar.

Langkah pertama adalah yang termudah, yang perlu Anda lakukan adalah menjalankan perintah:

apt install php-pinba 

Dalam repositori ekstensi ini ada hingga 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 dari setiap skrip (durasi, memori, dll.) Dengan udp di 127.0.0.1:370002 dalam format protobuf .

Kami belum memiliki aplikasi untuk menangkap dan memproses paket udp ini, tetapi ini tidak mempengaruhi kecepatan atau stabilitas skrip php Anda.

Sampai saat ini, hanya pinba_engine yang bisa menangkap dan memproses paket udp ini. Deskripsi tentang instalasi " sederhana " tidak akan pernah membacanya lagi. Dalam daftar panjang dependensi ada nama paket dan nama program serta tautan ke halaman lain dengan dependensi lain. Tidak ada yang punya waktu atau keinginan untuk berurusan dengan omong kosong ini.

Proses instalasi untuk pinba2 tidak terlalu mudah .

Mungkin di fitur pinba10 dapat diinstal dengan satu atau dua perintah dan tanpa membaca banyak hal untuk mengetahui bagaimana melakukannya, tetapi untuk saat ini tidak seperti itu.

Instalasi pinba_engine hanya setengah dari cerita. Lagi pula, tanpa pinboard, Anda akan memiliki data terbatas hanya untuk beberapa menit terakhir. Ada baiknya bahwa pinboard cukup sederhana dalam instalasi .

Tetapi semua metrik dari php sudah masuk ke port udp dalam format protobuf dan yang diperlukan hanyalah menulis aplikasi yang dapat menangkap paket udp dan meletakkannya di beberapa jenis penyimpanan? Tampaknya, para pengembang yang berpikir demikian mereka membuat aplikasi sendiri dan beberapa di antaranya menerbitkannya di githab.

Di bawah ini adalah ulasan dari empat proyek sumber terbuka yang menyimpan metrik dalam penyimpanan, dari mana data ini mudah diperoleh dan divisualisasikan oleh grafana.

olegfedoseev / pinba-influxdb (November 2017)


udp server di golang, yang menyimpan metrik di OpenTSDB. Mungkin jika Anda sudah menggunakan OpenTSDB pada proyek Anda, maka solusi seperti itu cocok untuk Anda.

olegfedoseev / pinba-influxdb (Juni 2018)


udp server di golang, dari pengguna github yang sama, yang kali ini menyimpan metrik di InfluxDB. Banyak proyek sudah menggunakan InfluxDB untuk pemantauan, jadi solusi ini mungkin bagus untuk mereka.

pro:

  • Influx memungkinkan untuk mengagregasi metrik yang dihasilkan dan menghapus yang asli setelah waktu yang ditentukan.

kontra:

  • solusi ini tidak menyimpan informasi untuk penghitung waktu.
  • InfluxDB akan menyimpan alamat halaman sebagai tag dan jika Anda memiliki banyak alamat unik halaman, itu akan meningkatkan konsumsi RAM. Dari titik tertentu, itu akan " mulai menggunakan banyak memori ". ( sumber )

ClickHouse-Ninja / Proton (Januari 2019)


server udp di golang, yang menyimpan metrik di ClickHouse. Ini adalah aplikasi teman saya. Setelah menggunakan saya mulai bekerja pada aplikasi saya sendiri untuk pinba dengan clickhouse.

pro:

  • Clickhouse sangat ideal untuk tugas seperti itu, memungkinkan Anda untuk mengompres data sehingga Anda dapat menyimpan semua data mentah bahkan tanpa agregasi
  • jika perlu, Anda dapat dengan mudah mengumpulkan metrik yang dihasilkan
  • template siap untuk grafana
  • menyimpan informasi untuk penghitung waktu

kontra:

  • Tidak ditemukan di sini
  • tidak ada konfigurasi untuk nama database dan tabel, untuk alamat dan porta
    server.
  • hal-hal kecil lainnya yang mengalir dari minus pertama

server pinba / server pinba (April 2019)


udp server di php, yang menyimpan metrik di ClickHouse. Ini adalah aplikasi saya, yang merupakan hasil RND saya dari pinba, ClickHouse dan protobuf. Saya menulis "proof of concept", yang secara tak terduga bagi saya tidak mengkonsumsi sumber daya yang signifikan (30 MB RAM dan kurang dari 1% dari salah satu dari delapan core prosesor), jadi saya memutuskan untuk membagikannya kepada orang-orang.

Keuntungannya sama seperti pada solusi sebelumnya, saya juga menggunakan nama biasa dari pinba_engine asli. Saya juga menambahkan konfigurasi yang memungkinkan Anda menjalankan beberapa instance pinbasver untuk menyimpan metrik ke tabel yang berbeda - ini berguna jika Anda ingin mengumpulkan pengukuran tidak hanya dari php, tetapi juga dari nginx.

Kontra - "Tidak ditemukan di sini" dan hal-hal kecil yang tidak cocok untuk Anda secara pribadi, tetapi solusi saya sangat sederhana dan hanya terdiri dari sekitar 100 baris kode, sehingga setiap pengembang-php dapat mengubah apa pun dalam beberapa menit yang ia lakukan. tidak suka.

Bagaimana cara kerjanya

Ini mendengarkan udp-port 30002. Semua paket yang masuk didekodekan sesuai dengan skema protobuf dan diagregasi. Satu menit, kumpulan paket dimasukkan ke dalam rumah klik di tabel pinba.requests. (semua pengaturan dikonfigurasi dalam konfigurasi )

Tentang ClickHouse

Clickhouse mendukung berbagai mesin penyimpan data. Yang paling umum digunakan adalah MergeTree.

Jika pada suatu saat Anda memutuskan untuk menyimpan data teragregasi untuk semua waktu, dan hanya data mentah untuk yang terakhir, Anda dapat membuat tampilan terwujud dengan mengelompokkan dan secara berkala membersihkan tabel utama pinba.requests, sementara semua data tetap dalam tampilan terwujud. Selain itu, Anda dapat menentukan "engine = Null" untuk tabel pinba.requests, sehingga data mentah tidak akan disimpan ke disk sama sekali dan pada saat yang sama itu masih akan dimasukkan dalam tampilan terwujud. Saya menggunakan skema ini untuk metrik nginx, karena pada nginx saya memiliki permintaan 50 kali lebih banyak daripada di php.

Anda telah menempuh perjalanan panjang, sehingga akan ada deskripsi terperinci tentang pemasangan dan konfigurasi solusi saya dan semua yang Anda butuhkan. Seluruh proses instalasi dijelaskan untuk Ubuntu 18.04 LTS dan Centos 7, pada distribusi dan versi lain prosesnya mungkin sedikit berbeda.

Instalasi


Saya telah menempatkan semua perintah yang diperlukan ke Dockerfile untuk reproduksibilitas instruksi. Hanya masalah yang akan dijelaskan di bawah ini.

php pinba

Setelah instalasi, pastikan Anda telah menghapus komentar semua opsi di file /etc/php/7.2/fpm/conf.d/20-pinba.ini. Dalam beberapa distribusi (misalnya, centos) dapat dikomentari.

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

clickhouse

Selama 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 Anda, silakan setel kata sandi. Ini juga dapat dilakukan setelah instalasi di file /etc/clickhouse-server/users.xml.

Perhatikan juga 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 clickhouse

Setelah menginstal grafana, gunakan nama pengguna "admin" dan kata sandi "admin". Ketika Anda pertama kali masuk, grafana akan meminta Anda untuk membuat kata sandi baru.

Selanjutnya, buka menu "+" -> impor dan tentukan jumlah dasbor untuk mengimpor 10011 . Saya menyiapkan dasbor ini sehingga Anda tidak perlu melakukannya sendiri lagi.

Grafana mendukung ClickHouse oleh plugin pihak ketiga, tetapi grafana tidak mendukung peringatan untuk plugin pihak ketiga (tiket sudah ada beberapa tahun).

server pinba

Menginstal protobuf dan libevent adalah opsional, tetapi meningkatkan kinerja server pinba. Jika Anda menginstal server pinba di folder selain / opt, maka Anda juga perlu mengubah file skrip systemd .

pinba-module di bawah nginx

Untuk mengkompilasi modul, Anda memerlukan kode sumber dari versi nginx yang sama yang sudah diinstal di server Anda, serta opsi kompilasi yang sama, jika tidak perakitan akan berhasil, tetapi ketika modul terhubung, Anda akan kesalahan " modul ini tidak kompatibel biner. " Opsi kompilasi dapat dilihat dengan menggunakan perintah "nginx -V".

Lifehacks

Semua situs saya hanya berfungsi di https. Jadi saya menggunakan bidang "skema" untuk memisahkan web / konsol.
Dalam skrip web saya menggunakan:

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

dan di konsol (misalnya, skrip-cron):

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

Di dasbor saya di grafana ada saklar web / konsol untuk melihat statistik secara terpisah.
Anda juga dapat mengirim tag Anda ke pinba, misalnya:

 pinba_tag_set('country', $countryCode); 

Itu saja.

Anda juga dapat membaca versi Rusia .

Harap jawab survei di bawah artikel dan dukung saya di Reddit .

Source: https://habr.com/ru/post/id449818/


All Articles