Real vaqt rejimida PHP skriptlarining statistikasi va monitoringi. ClickHouse va Grafana Pinba yordamiga keladi

Ushbu maqolada men sizga pinba_engine va pinboard o'rniga clickhouse va grafana bilan pinbadan qanday foydalanishni aytib beraman.

PHP loyihasida pinba, ehtimol, ishlash bilan nima sodir bo'layotganini tushunishning yagona ishonchli usulidir. To'g'ri, pinba odatda muammolar allaqachon kuzatilgan va "qaerda qazish kerakligi" aniq bo'lmaganda amalga oshiriladi.

Ko'pincha hech kim u yoki bu skript soniyada / daqiqada necha marta chaqirilishini bilmaydi va ular mantiqiyroq ko'rinadigan joylardan boshlab "tegish orqali" optimallashni boshlaydilar.

Ba'zilar nginx jurnallarini tahlil qiladilar, boshqalari esa sekin ma'lumotlar bazasi so'rovlarini tahlil qiladilar.

Albatta, pinba ortiqcha bo'lmaydi, lekin har bir loyihada bunday bo'lmasligining bir qancha sabablari bor.

Real vaqt rejimida PHP skriptlarining statistikasi va monitoringi. ClickHouse va Grafana Pinba yordamiga keladi

Va birinchi sabab - o'rnatish.

Pinba-ni amalga oshirishdan ko'proq yoki kamroq "egzoz" olish uchun ko'rsatkichlarni nafaqat oxirgi daqiqalarda, balki uzoq vaqt davomida (kunlardan oylargacha) ko'rish juda ma'qul.

Buning uchun sizga kerak:

  • php uchun kengaytmani o'rnating (va siz nginx uchun modulni xohlashingiz mumkin)
  • mysql uchun kengaytmani kompilyatsiya qilish
  • pinboardni o'rnating va cronni sozlang

Pinba haqidagi ma'lumotlarning kamligi tufayli ko'pchilikda u faqat PHP5 da ishlagan va uzoq vaqtdan beri o'tmishda qolib ketgandek taassurot qoldiradi, ammo keyinroq ko'rib chiqamizki, bunday emas.

Birinchi qadam eng oddiy, siz faqat buyruqni bajarishingiz kerak:

apt install php-pinba

Ushbu kengaytma php 7.3 gacha bo'lgan omborlarda mavjud va siz hech narsani kompilyatsiya qilishingiz shart emas.

O'rnatish buyrug'ini bajarganimizdan so'ng, biz darhol formatda har bir skript (ish vaqti, xotira va boshqalar) uchun o'lchovlarni to'playdigan va yuboradigan ishlaydigan kengaytmani olamiz. protobuf udp orqali 127.0.0.1:30002.

Hozircha hech kim ushbu UDP paketlarini ushlamagan yoki qayta ishlamagan, ammo bu PHP skriptlarining tezligi yoki barqarorligiga hech qanday salbiy ta'sir ko'rsatmaydi.

Yaqin vaqtgacha ushbu UDP paketlarini ushlay oladigan va qayta ishlay oladigan yagona dastur edi pinba_engine. Tavsif "oddiy va qisqacha" o'rnatish uni qayta o'qish va o'rganish istagini yo'qotadi. Bir kilometr uzunlikdagi bog'liqliklar ro'yxati paketlar nomlarini ham, dasturlarning nomlarini ham, ularni o'rnatish bilan alohida sahifalarga havolalarni o'z ichiga oladi va ularning boshqa bog'liqliklarga o'z havolalari mavjud. Hech kimning bu axlat bilan shug'ullanishga vaqti yoki istagi yo'q.

O'rnatish jarayoni pinba2 qilmadi ayniqsa osonroq.

Ehtimol, bir kun kelib pinba10-ni bir yoki ikkita buyruq bilan o'rnatish mumkin bo'ladi va buni qanday qilishni tushunish uchun bir nechta materiallarni o'qish shart emas, ammo hozircha bunday emas.

Agar siz pinba_engine-ni o'rnatgan bo'lsangiz, bu urushning faqat yarmi. Axir, holda pinboard soβ€˜nggi bir necha daqiqadagi ma’lumotlar bilan cheklanishingiz yoki ma’lumotlarni oβ€˜zingiz jamlashingiz, saqlashingiz va vizualizatsiya qilishingiz kerak boβ€˜ladi. Yaxshisi, pinboarddan foydalanish juda oddiy o'rnatish.

Agar php-dan barcha o'lchovlar protobuf formatida udp portiga yuborilgan bo'lsa va sizga kerak bo'lgan narsa ularni ushlab, qandaydir xotiraga joylashtiradigan dastur yozish bo'lsa, nega bunday azob-uqubatlar paydo bo'ladi? Ko'rinishidan, ushbu g'oyani ilgari surgan ishlab chiquvchilar darhol o'z g'oyalarini yozish uchun o'tirishdi, ularning ba'zilari GitHub-da tugadi.

Quyida ko'rsatkichlarni saqlashda saqlaydigan to'rtta ochiq manba loyihasining umumiy ko'rinishi keltirilgan, ulardan bu ma'lumotlarni osongina olish va vizualizatsiya qilish, masalan, grafana yordamida.

olegfedoseev/pinba-server (2017 yil noyabr)

ko'rsatkichlarni OpenTSDB-ga saqlaydigan udp server. Ehtimol, agar siz allaqachon loyihangizda OpenTSDB dan foydalanayotgan bo'lsangiz, unda ushbu yechim sizga mos keladi, aks holda men uni o'tkazishni tavsiya qilaman.

olegfedoseev/pinba-influxdb (2018 yil iyun)

udp serveri ham xuddi shunday habrowser, bu safar ko'rsatkichlarni InfluxDB da saqlaydi. Ko'pgina loyihalar allaqachon monitoring uchun InfluxDB dan foydalanmoqda, shuning uchun bu yechim ular uchun mukammal bo'lishi mumkin.

Taroziga soling:

  • InfluxDB Bu beradi olingan ko'rsatkichlarni jamlang va belgilangan vaqtdan keyin asl nusxani o'chiring.

Kamchiliklari:

ClickHouse-Ninja/Proton (2019 yil yanvar)

ClickHouse-da ko'rsatkichlarni saqlaydigan udp server. Bu mening do'stimning yechimi. U bilan tanishganimdan so'ng, men Pinbu va Clickhouse bilan shug'ullanish vaqti keldi, deb qaror qildim.

Taroziga soling:

  • Clickhouse bunday vazifalar uchun juda mos keladi; u sizga ma'lumotlarni shunchalik siqish imkonini beradiki, siz barcha xom ma'lumotlarni yig'ishsiz ham saqlashingiz mumkin.
  • agar kerak bo'lsa, olingan ko'rsatkichlarni osongina jamlashingiz mumkin
  • grafana uchun tayyor shablon
  • taymerlarda ma'lumotlarni saqlaydi

Kamchiliklari:

  • halokatli kamchilik
  • Ma'lumotlar bazasi va jadvallar nomini, server manzili va portini sozlashingiz mumkin bo'lgan konfiguratsiya yo'q.
  • xom ma'lumotlarni saqlashda sahifa va domen manzillarini saqlash uchun yordamchi lug'at jadvali ishlatiladi, bu keyingi so'rovlarni murakkablashtiradi
  • birinchi minusdan keyingi boshqa kichik narsalar

pinba-server/pinba-server (2019 yil aprel)

ClickHouse-da o'lchovlarni saqlaydigan php-dagi udp server. Bu mening yechimim, bu pinba, ClickHouse va protobuf bilan tanishish natijasidir. Men bu to'plamni saralayotganda, men kutilmaganda men uchun muhim resurslarni (30 MB operativ xotira va sakkiz protsessor yadrosidan birining 1% dan kamrog'i) iste'mol qilmagan "kontseptsiya isbotini" yozdim. jamoatchilik bilan baham ko'rishga qaror qildi.

Afzalliklar oldingi yechim bilan bir xil, men asl pinba_engine-dan odatiy nomlardan ham foydalanganman. Shuningdek, men turli jadvallarda o'lchovlarni saqlash uchun bir vaqtning o'zida bir nechta pinbase server nusxalarini ishga tushirish imkonini beruvchi konfiguratsiyani qo'shdim - bu nafaqat php-dan, balki nginx-dan ham ma'lumotlarni to'plashni istasangiz foydali bo'ladi.
Kamchiliklari - "halokatli kamchilik" va shaxsan sizga mos kelmaydigan kichik narsalar, lekin mening yechimim "terlik kabi oddiy" va atigi 100 qator kodlardan iborat, shuning uchun har qanday PHP dasturchisi o'ziga yoqmaydigan narsani o'zgartirishi mumkin. bir necha daqiqada.

Ish printsipi

UDP port 30002 tinglanadi.Barcha kiruvchi paketlar protobuf sxemasiga muvofiq dekodlanadi va umumlashtiriladi. Bir daqiqada bir paket pinba.requests jadvaliga clickhouse ichiga kiritiladi. (barcha parametrlar sozlangan konfiguratsiya)

Clickhouse haqida bir oz

Clickhouse turli xil ma'lumotlarni saqlash mexanizmlarini qo'llab-quvvatlaydi. Eng ko'p ishlatiladigan MergeTree.

Agar biror nuqtada siz jamlangan ma'lumotlarni butun vaqt davomida va xom ma'lumotlarni faqat oxirgi marta saqlashga qaror qilsangiz, unda siz guruhlash bilan moddiylashtirilgan ko'rinishni yaratishingiz va vaqti-vaqti bilan asosiy pinba.requests jadvalini tozalashingiz mumkin, shu bilan birga barcha ma'lumotlar sahifada qoladi. moddiylashtirilgan ko'rinish. Bundan tashqari, pinba.requests jadvalini yaratishda siz "dvigatel = Null" ni belgilashingiz mumkin, keyin xom ma'lumotlar diskda umuman saqlanmaydi va shu bilan birga u materiallashtirilgan ko'rinishda tugaydi va jamlangan holda saqlanadi. . Men ushbu sxemani nginx o'lchovlari uchun ishlataman, chunki nginx-da PHP-ga qaraganda 50 marta ko'proq so'rovlar bor.

Shunday qilib, siz uzoq yo'lni bosib o'tdingiz va men sizni yarim yo'lda qoldirmoqchi emasman, shuning uchun mening yechimimning o'rnatilishi va konfiguratsiyasi va sizga kerak bo'lgan hamma narsa, shuningdek, bir nechta kemalarni keltirib chiqaradigan tuzoqlarning batafsil tavsifi. qulash. Butun o'rnatish jarayoni Ubuntu 18.04 LTS va Centos 7 uchun tavsiflangan; jarayon boshqa tarqatish va versiyalarda biroz farq qilishi mumkin.

sozlama

Men barcha kerakli buyruqlarni kiritdim Docker fayli ko'rsatmalarning takrorlanishini osonlashtirish uchun. Quyida faqat tuzoqlar tasvirlangan.

php-pinba

O'rnatishdan so'ng, /etc/php/7.2/fpm/conf.d/20-pinba.ini faylida barcha variantlarga izoh qoldirganingizga ishonch hosil qiling. Ba'zi tarqatishlarda (masalan, centos) ular sharhlanishi mumkin.

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

klik uyi

O'rnatish vaqtida clickhouse sizdan standart foydalanuvchi uchun parol o'rnatishingizni so'raydi. Odatiy bo'lib, ushbu foydalanuvchiga barcha IP-lardan kirish mumkin, shuning uchun serveringizda xavfsizlik devori bo'lmasa, unga parol o'rnatishni unutmang. Buni /etc/clickhouse-server/users.xml faylida o'rnatilgandan keyin ham qilish mumkin.

Shuni ham ta'kidlash joizki, clickhouse bir nechta portlardan foydalanadi, jumladan 9000. Bu port ba'zi tarqatishlarda (masalan, centos) php-fpm uchun ham ishlatiladi. Agar siz allaqachon ushbu portdan foydalansangiz, uni /etc/clickhouse-server/config.xml faylida boshqasiga o'zgartirishingiz mumkin.

Clickhouse plagini bilan grafana

Grafana-ni o'rnatganingizdan so'ng, administrator login va parol administratoridan foydalaning. Birinchi marta kirganingizda, Grafana sizdan yangi parol o'rnatishingizni so'raydi.

Keyin, "+" -> import menyusiga o'ting va import uchun asboblar paneli raqamini ko'rsating 10011. Men bu asboblar panelini o'zingiz qayta ishlamasligingiz uchun tayyorladim va yukladim.

Grafana uchinchi tomon plaginlari orqali clickhouse bilan ishlashni qo'llab-quvvatlaydi, ammo Grafana uchinchi tomon plaginlari uchun ogohlantirishlarga ega emas (buning uchun chipta bir necha yillardan beri mavjud).

pinba-server

Protobuf va libeventni o'rnatish ixtiyoriy, ammo pinba-server ish faoliyatini yaxshilaydi. Agar siz pinba-serverni /optdan boshqa papkaga o'rnatsangiz, siz ham tuzatishingiz kerak bo'ladi tizimli skript fayl

nginx uchun pinba moduli

Modulni kompilyatsiya qilish uchun sizga serveringizda allaqachon o'rnatilgan nginx versiyasining manba kodlari va bir xil kompilyatsiya opsiyalari kerak bo'ladi, aks holda qurish muvaffaqiyatli bo'ladi, lekin modulni ulashda xatolik yuzaga keladi. "modul ikkilik mos emas." Kompilyatsiya variantlarini nginx -V buyrug'i yordamida ko'rish mumkin

Hayot xakerlari

Mening barcha saytlarim faqat https da ishlaydi. Sxema maydoni ma'nosiz bo'lib qoladi, shuning uchun men uni veb/konsolni ajratish uchun ishlataman.

Internetdan foydalanish mumkin bo'lgan skriptlarda men foydalanaman:

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

Va konsol skriptlarida (masalan, cron skriptlari):

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

Grafanadagi asboblar panelida statistikani alohida ko'rish uchun veb/konsol kaliti mavjud.

Shuningdek, teglaringizni Pinba-ga yuborishingiz mumkin, masalan:

pinba_tag_set('country', $countryCode);

Ana xolos.

Iltimos, maqola ostidagi so'rovlarga javob bering.

Odatdagidek sizni ogohlantiraman, men Habr va ijtimoiy tarmoqlardagi shaxsiy xabarlar orqali maslahat bermayman yoki yordam bermayman.

Github-da chipta yarating.

Shuningdek, like bilan qo'llab-quvvatlang Inglizcha versiyasi Ushbu maqolaning redditda.

So'rovda faqat ro'yxatdan o'tgan foydalanuvchilar ishtirok etishlari mumkin. tizimga kirishiltimos.

Serverda qaysi operatsion tizimdan foydalanasiz?

  • Ubuntu

  • CentOs

  • Debian

  • Gentoo

  • Red Hat

  • Fedora

  • OpenSUSE

  • SUSE

  • Unix

  • Windows

  • boshqa

114 foydalanuvchi ovoz berdi. 11 nafar foydalanuvchi betaraf qolgan.

Serverda PHP ning qaysi versiyasidan foydalanasiz?

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • boshqa

105 foydalanuvchi ovoz berdi. 17 nafar foydalanuvchi betaraf qolgan.

Hech qachon pinba ishlatganmisiz?

  • ha

  • yo'q, lekin men xohlayman

  • yo'q va men xohlamayman

  • yo'q va u haqida eshitmaganman

100 foydalanuvchi ovoz berdi. 14 nafar foydalanuvchi betaraf qolgan.

Pinba serverining qaysi versiyasini sinab ko'rmoqchisiz?

  • pinba_engine (mysql dvigateli)

  • pinba2 (mysql dvigateli)

  • pinboard (PHP + MySQL)

  • olegfedoseev/pinba-server (o'tish + OpenTSDB)

  • olegfedoseev/pinba-influxdb (go + influxdb)

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

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

  • Men o'zimni yozaman

  • boshqa

39 foydalanuvchi ovoz berdi. 47 nafar foydalanuvchi betaraf qolgan.

Manba: www.habr.com

a Izoh qo'shish