Real vaxt rejimində PHP skriptlərinin statistikası və monitorinqi. ClickHouse və Grafana Pinbanın köməyinə gedir

Bu yazıda sizə pinba_engine və pinboard əvəzinə clickhouse və grafana ilə pinbadan necə istifadə edəcəyinizi izah edəcəyəm.

PHP layihəsində pinba, performansla nə baş verdiyini anlamaq üçün bəlkə də yeganə etibarlı yoldur. Düzdür, pinba adətən yalnız problemlər müşahidə edildikdə və "harada qazılacağı" bəlli olmayanda həyata keçirilir.

Çox vaxt heç kim bu və ya digər skriptin saniyədə/dəqiqədə neçə dəfə çağırıldığını bilmir və onlar daha məntiqli görünən yerlərdən başlayaraq “toxunmaqla” optimallaşdırmağa başlayırlar.

Bəziləri nginx qeydlərini təhlil edir, digərləri isə yavaş verilənlər bazası sorğularını təhlil edir.

Əlbəttə ki, pinba artıq olmazdı, lakin hər layihədə bunun olmamasının bir neçə səbəbi var.

Real vaxt rejimində PHP skriptlərinin statistikası və monitorinqi. ClickHouse və Grafana Pinbanın köməyinə gedir

Və ilk səbəb quraşdırmadır.

Pinba-nın tətbiqindən daha çox və ya daha az bir növ "egzoz" əldə etmək üçün ölçüləri yalnız son dəqiqələr üçün deyil, həm də uzun müddət (günlərdən aylara qədər) görmək çox arzu edilir.

Bunun üçün sizə lazım:

  • php üçün uzantı quraşdırın (və nginx üçün modul istəyə bilərsiniz)
  • mysql üçün genişləndirmə tərtib edin
  • pinboard quraşdırın və cronu konfiqurasiya edin

Pinba haqqında məlumatların az olması səbəbindən bir çox insanlarda onun yalnız PHP5 üzərində işlədiyi və çoxdan keçmişdə qaldığı təəssüratları yaranır, lakin sonradan görəcəyimiz kimi, belə deyil.

İlk addım ən sadədir, sizə lazım olan bütün əmri yerinə yetirməkdir:

apt install php-pinba

Bu genişləndirmə php 7.3-ə qədər olan depolarda mövcuddur və siz heç nə tərtib etməyə ehtiyac duymursunuz.

Quraşdırma əmrini yerinə yetirdikdən sonra dərhal formatda hər bir skript (işləmə vaxtı, yaddaş və s.) üçün metrikləri toplayan və göndərən işləyən bir uzantı alırıq. protobuf udp vasitəsilə 127.0.0.1:30002.

İndiyə qədər heç kim bu UDP paketlərini tutmayıb və ya emal etməyib, lakin bu, PHP skriptlərinizin sürətinə və ya sabitliyinə heç bir şəkildə mənfi təsir göstərmir.

Son vaxtlara qədər bu UDP paketlərini tuta və emal edə bilən yeganə proqram idi pinba_mühərriki. Təsvir"sadə və qısa" Quraşdırma onu yenidən oxumaq və araşdırmaq istəyini azaldır. Kilometrlik asılılıq siyahıları həm paketlərin adlarını, həm də proqramların adlarını və onların quraşdırılması ilə birlikdə ayrı-ayrı səhifələrə keçidləri ehtiva edir və onların digər asılılıqlara öz keçidləri var. Heç kimin bu axmaqlıqla məşğul olmağa vaxtı və arzusu yoxdur.

Quraşdırma prosesi pinba2 etmədi xüsusilə asan.

Ola bilsin ki, nə vaxtsa pinba10-u bir və ya iki əmrlə quraşdırmaq mümkün olacaq və bunu necə edəcəyinizi başa düşmək üçün bir dəstə materialı oxumaq lazım olmayacaq, amma hələlik bu belə deyil.

Əgər pinba_engine quraşdırırsınızsa, bu, döyüşün yalnız yarısıdır. Axı, onsuz pinboard özünüzü yalnız son bir neçə dəqiqədəki məlumatlarla məhdudlaşdırmalı olacaqsınız və ya məlumatları özünüz toplamalı, saxlamalı və vizuallaşdırmalısınız. Yaxşı ki, pinboarddan istifadə etmək olduqca sadədir quraşdırma.

Deyəsən, php-dən bütün ölçülər protobuf formatında udp portuna göndərilibsə və sizə lazım olan tək şey onları tutacaq və bir növ yaddaşa yerləşdirəcək bir proqram yazmaqdırsa, niyə belə əziyyət çəkirsiniz? Göründüyü kimi, bu ideya ilə çıxış edən tərtibatçılar dərhal öz fikirlərini yazmaq üçün oturdular, bəziləri GitHub-da sona çatdı.

Aşağıda ölçüləri yaddaşda saxlayan dörd açıq mənbəli layihənin icmalı verilmişdir, onlardan bu verilənləri asanlıqla əldə etmək və vizuallaşdırmaq olar, məsələn, qrafanadan istifadə etməklə.

olegfedoseev/pinba-server (Noyabr 2017)

Metrikləri OpenTSDB-də saxlayan udp serveri. Bəlkə də layihənizdə artıq OpenTSDB-dən istifadə edirsinizsə, bu həll sizə uyğun olacaq, əks halda onu keçməyi məsləhət görürəm.

olegfedoseev/pinba-influxdb (iyun 2018)

udp serveri də eyni habrowser, bu dəfə ölçüləri InfluxDB-də saxlayır. Bir çox layihələr artıq monitorinq üçün InfluxDB-dən istifadə edir, ona görə də bu həll onlar üçün mükəmməl ola bilər.

Pros:

  • InfluxDB imkan alınan ölçüləri birləşdirin və müəyyən vaxtdan sonra orijinalı silin.

Eksiler:

ClickHouse-Ninja/Proton (Yanvar 2019)

ClickHouse-da ölçüləri saxlayan udp server. Bu mənim dostumun həllidir. Məhz onunla tanış olduqdan sonra qərara gəldim ki, Pinbu və Clickhouse ilə məşğul olmaq vaxtıdır.

Pros:

  • Clickhouse bu cür tapşırıqlar üçün idealdır; o, məlumatları o qədər sıxışdırmağa imkan verir ki, bütün xam məlumatları hətta birləşmələr olmadan da saxlaya bilərsiniz.
  • tələb olunarsa, əldə edilən göstəriciləri asanlıqla birləşdirə bilərsiniz
  • qrafana üçün hazır şablon
  • taymerlərdə məlumatları saxlayır

Eksiler:

  • ölümcül qüsur
  • verilənlər bazası və cədvəllərin adını, serverin ünvanını və portunu konfiqurasiya edə biləcəyiniz heç bir konfiqurasiya yoxdur.
  • xam məlumatları saxlayarkən səhifə və domen ünvanlarını saxlamaq üçün köməkçi lüğət cədvəlindən istifadə olunur ki, bu da sonrakı sorğuları çətinləşdirir
  • ilk minusdan gələn digər kiçik şeylər

pinba-server/pinba-server (Aprel 2019)

ClickHouse-da ölçüləri saxlayan php-də udp server. Bu, pinba, ClickHouse və protobuf ilə tanış olmağın nəticəsi olan mənim həllimdir. Bütün bu dəstəni çeşidləyərkən, gözlənilmədən mənim üçün əhəmiyyətli resursları (30 MB RAM və səkkiz prosessor nüvəsindən birinin 1% -dən azını) istehlak etməyən "konsepsiya sübutu" yazdım. ictimaiyyətlə bölüşmək qərarına gəldi.

Üstünlüklər əvvəlki həll ilə eynidir, mən də orijinal pinba_engine-dən adi adlardan istifadə etdim. Mən həmçinin müxtəlif cədvəllərdə ölçüləri saxlamaq üçün bir neçə pinbase server nümunəsini işə salmağa imkan verən konfiqurasiya əlavə etdim - bu, yalnız php-dən deyil, həm də nginx-dən məlumat toplamaq istəyirsinizsə faydalıdır.
Dezavantajlar - "ölümcül qüsur" və şəxsən sizə yaraşmayan kiçik şeylər, lakin mənim həllim "başmaq qədər sadədir" və cəmi 100 sətir koddan ibarətdir, buna görə də hər hansı bir PHP tərtibçisi bəyənmədiyi şeyi dəyişə bilər. bir neçə dəqiqəyə.

Əməliyyat prinsipi

UDP port 30002 dinlənilir.Bütün daxil olan paketlər protobuf sxeminə uyğun olaraq deşifrə edilir və yığılır. Dəqiqədə bir dəfə pinba.requests cədvəlinə klikxanaya paket daxil edilir. (bütün parametrlər konfiqurasiya edilmişdir konfiqurasiya)

Clickhouse haqqında bir az

Clickhouse müxtəlif məlumat saxlama mühərriklərini dəstəkləyir. Ən çox istifadə edilən MergeTree-dir.

Əgər nə vaxtsa siz bütün vaxtlar üçün ümumiləşdirilmiş məlumatları və yalnız sonuncu üçün xam məlumatları saxlamaq qərarına gəlsəniz, o zaman qruplaşdırma ilə maddiləşdirilmiş görünüş yarada və vaxtaşırı olaraq əsas pinba.requests cədvəlini təmizləyə bilərsiniz, bütün məlumatlar isə həmin cədvəldə qalacaq. maddiləşmiş görünüş. Üstəlik, pinba.requests cədvəlini yaradarkən siz “mühərrik = Null” təyin edə bilərsiniz, onda xam məlumatlar ümumiyyətlə diskdə saxlanmayacaq və eyni zamanda o, yenə də materiallaşdırılmış görünüşdə başa çatacaq və ümumiləşdirilmiş şəkildə saxlanılacaq. . Mən bu sxemdən nginx ölçüləri üçün istifadə edirəm, çünki nginx-də php-dən 50 dəfə çox sorğum var.

Beləliklə, siz uzun bir yol qət etdiniz və sizi yarı yolda tərk etmək istəməzdim, buna görə də mənim həllimin quraşdırılması və konfiqurasiyası və sizə lazım olan hər şey, habelə birdən çox gəmiyə səbəb olan tələlərin ətraflı təsviri. çökmək. Bütün quraşdırma prosesi Ubuntu 18.04 LTS və Centos 7 üçün təsvir edilmişdir; proses digər paylama və versiyalarda bir qədər fərqli ola bilər.

Quraşdırma

Bütün lazımi əmrləri daxil etdim Docker faylı təlimatların təkrar istehsalını asanlaşdırmaq üçün. Yalnız tələlər aşağıda təsvir ediləcəkdir.

php-pinba

Quraşdırıldıqdan sonra /etc/php/7.2/fpm/conf.d/20-pinba.ini faylında bütün seçimləri şərh etmədiyinizə əmin olun. Bəzi paylamalarda (məsələn, centos) onlar şərh edilə bilər.

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

klik evi

Quraşdırma zamanı clickhouse sizdən standart istifadəçi üçün parol təyin etməyi xahiş edəcək. Varsayılan olaraq, bu istifadəçi bütün IP-lərdən əldə edilə bilər, buna görə də serverinizdə firewall yoxdursa, onun üçün parol təyin etdiyinizə əmin olun. Bu, /etc/clickhouse-server/users.xml faylında quraşdırıldıqdan sonra da edilə bilər.

Onu da qeyd etmək lazımdır ki, clickhouse bir neçə portdan, o cümlədən 9000-dən istifadə edir. Bu port həmçinin bəzi paylanmalarda (məsələn, centos) php-fpm üçün istifadə olunur. Əgər siz artıq bu portdan istifadə edirsinizsə, onu /etc/clickhouse-server/config.xml faylında digərinə dəyişə bilərsiniz.

clickhouse plagini ilə grafana

Grafana quraşdırdıqdan sonra giriş admini və parol adminindən istifadə edin. İlk dəfə daxil olduğunuz zaman Grafana sizdən yeni parol təyin etməyi xahiş edəcək.

Sonra "+" -> idxal menyusuna keçin və idxal üçün tablosunun nömrəsini göstərin 10011. Mən bu tablosunu hazırladım və yüklədim ki, bir daha özünüz etməməlisiniz.

Grafana üçüncü tərəf plaginləri vasitəsilə klikxana ilə işləməyi dəstəkləyir, lakin Grafana üçüncü tərəf plaginləri üçün xəbərdarlıqlara malik deyil (bir neçə ildir ki, bunun üçün bilet var).

pinba-server

Protobuf və libevent quraşdırmaq isteğe bağlıdır, lakin pinba-server performansını yaxşılaşdırır. Əgər siz pinba-server-i /opt-dan başqa bir qovluğa quraşdırırsınızsa, onda siz də düzəliş etməlisiniz sistemli skript fayl.

nginx üçün pinba modulu

Modulu tərtib etmək üçün sizə artıq serverinizdə quraşdırılmış eyni nginx versiyasının mənbə kodları və eyni tərtib seçimləri lazımdır, əks halda quraşdırma uğurlu olacaq, lakin modulu birləşdirən zaman xəta yaranacaq. "modul binar uyğun deyil." Kompilyasiya seçimlərinə nginx -V əmrindən istifadə etməklə baxmaq olar

Həyat hackləri

Bütün saytlarım yalnız https üzərində işləyir. Sxema sahəsi mənasız olur, ona görə də veb/konsolu ayırmaq üçün ondan istifadə edirəm.

İstifadə etdiyim internetdən əldə edilə bilən skriptlərdə:

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

Və konsol skriptlərində (məsələn, cron skriptləri):

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

Grafanadakı idarə panelimdə statistikaya ayrıca baxmaq üçün veb/konsol keçidi var.

Siz həmçinin teqlərinizi Pinba-ya göndərə bilərsiniz, məsələn:

pinba_tag_set('country', $countryCode);

Vəssalam.

Zəhmət olmasa məqalənin altındakı sorğulara cavab verin.

Həmişə olduğu kimi sizə xəbərdarlıq edirəm ki, Habr və sosial şəbəkələrdə şəxsi mesajlar vasitəsilə məsləhət və ya kömək etmirəm.

Github-da bilet yaradın.

Siz də bəyənərək dəstək olun Ingilis versiyası bu yazı reddit-də.

Sorğuda yalnız qeydiyyatdan keçmiş istifadəçilər iştirak edə bilər. Daxil olunxahiş edirəm.

Serverdə hansı ƏS-dən istifadə edirsiniz?

  • Ubuntu

  • CentOS

  • Debian

  • Gentoo

  • Red Hat

  • Fedora

  • OpenSUSE

  • İSVİÇRE

  • Unix

  • Windows

  • digər

114 istifadəçi səs verib. 11 istifadəçi bitərəf qalıb.

Serverdə hansı php versiyasından istifadə edirsiniz?

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • digər

105 istifadəçi səs verib. 17 istifadəçi bitərəf qalıb.

Heç pinba istifadə etmisiniz?

  • bəli

  • yox, amma mən istərdim

  • yox və mən istəməzdim

  • yox və onun haqqında eşitməmişəm

100 istifadəçi səs verib. 14 istifadəçi bitərəf qalıb.

Pinba serverinin hansı versiyasını sınamaq istərdiniz?

  • pinba_engine (mysql mühərriki)

  • pinba2 (mysql mühərriki)

  • pinboard (php + mysql)

  • olegfedoseev/pinba-server (get + OpenTSDB)

  • olegfedoseev/pinba-influxdb (get + influxdb)

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

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

  • Mən özüm yazacam

  • digər

39 istifadəçi səs verib. 47 istifadəçi bitərəf qalıb.

Mənbə: www.habr.com

Добавить комментарий