ProHoster > Blog > Ma'muriyat > Real vaqt rejimida PHP skriptlarining statistikasi va monitoringi. ClickHouse va Grafana Pinba yordamiga keladi
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.
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.
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.
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.
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:
Ushbu yechim taymerlardagi ma'lumotlarni saqlamaydi.
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
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.
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.