Нақты уақытта PHP сценарийлерінің статистикасы және мониторингі. ClickHouse және Grafana Пинбаға көмекке келеді

Бұл мақалада мен pinba_engine және pinboard орнына clickhouse және grafana көмегімен пинбаны қалай пайдалану керектігін айтамын.

PHP жобасында pinba өнімділікпен не болып жатқанын түсінудің жалғыз сенімді жолы болуы мүмкін. Рас, пинба әдетте проблемалар байқалған кезде ғана жүзеге асырылады және «қайда қазу керек» анық емес.

Көбінесе бұл немесе басқа сценарий секундына/минутына қанша рет шақырылатынын ешкім білмейді және олар логикалық көрінетін жерлерден бастап «сенсорлық арқылы» оңтайландыруды бастайды.

Кейбіреулер nginx журналдарын талдайды, ал басқалары баяу дерекқор сұрауларын талдайды.

Әрине, пинба артық болмас еді, бірақ әр жобада оның болмауының бірнеше себептері бар.

Нақты уақытта PHP сценарийлерінің статистикасы және мониторингі. ClickHouse және Grafana Пинбаға көмекке келеді

Ал бірінші себеп - орнату.

Пинбаны жүзеге асырудан азды-көпті «шығарудың» қандай да бір түрін алу үшін тек соңғы минуттар үшін ғана емес, сонымен қатар ұзақ уақыт бойы (күндерден айларға дейін) көрсеткіштерді көру өте қажет.

Ол үшін сізге қажет:

  • php үшін кеңейтімді орнату (және nginx үшін модуль қажет болуы мүмкін)
  • MySQL кеңейтімін құрастыру
  • pinboard орнатыңыз және cron конфигурациялаңыз

Пинба туралы ақпараттың аздығына байланысты көптеген адамдар бұл тек PHP5-те жұмыс істеген және бұрыннан өткен нәрсе сияқты әсер қалдырады, бірақ кейінірек көретініміздей, олай емес.

Бірінші қадам - ​​ең қарапайым, сізге тек пәрменді орындау қажет:

apt install php-pinba

Бұл кеңейтім php 7.3 нұсқасына дейінгі репозиторийлерде қол жетімді және сізге ештеңе құрастырудың қажеті жоқ.

Орнату пәрменін орындағаннан кейін біз пішімде әрбір сценарийге (жұмыс уақыты, жад және т.б.) көрсеткіштерді жинайтын және жіберетін жұмыс кеңейтімін дереу аламыз. протобуф udp арқылы 127.0.0.1:30002.

Әзірге бұл UDP пакеттерін ешкім ұстаған немесе өңдеген жоқ, бірақ бұл PHP сценарийлерінің жылдамдығына немесе тұрақтылығына ешбір жағдайда теріс әсер етпейді.

Соңғы уақытқа дейін бұл UDP пакеттерін ұстап алатын және өңдей алатын жалғыз қолданба болды pinba_engine. Сипаттама"қарапайым және қысқаша"Орнату оны қайта оқуға және тереңірек үңілуге ​​деген құштарлықты төмендетеді. Тәуелділіктердің километрлік тізімдерінде бумалардың атаулары да, бағдарламалардың атаулары да, орнатулары бар жеке беттерге сілтемелер де бар және олардың басқа тәуелділіктерге өз сілтемелері бар. Бұл сұмдықпен айналысуға ешкімнің уақыты да, қалауы да жоқ.

Орнату процесі пинба2 болмады әсіресе оңайырақ.

Мүмкін бір күні бір немесе екі пәрмен арқылы pinba10 орнатуға болады және оны қалай жасау керектігін түсіну үшін көптеген материалдарды оқудың қажеті жоқ, бірақ әзірше олай емес.

Егер сіз pinba_engine орнатсаңыз, бұл шайқастың жартысы ғана. Өйткені, онсыз пинборд соңғы бірнеше минуттардағы деректермен шектелуіңіз керек немесе деректерді өзіңіз жинақтап, сақтауыңыз және визуализациялауыңыз қажет. Пинбордты пайдалану өте қарапайым болғаны жақсы орнату.

Егер php-тен барлық көрсеткіштер udp портына protobuf форматында жіберілген болса және сізге оларды ұстап алатын және оларды қандай да бір жадқа салатын қосымшаны жазу қажет болса, неге мұндай азап шегеді? Шамасы, бұл идеяны ұсынған әзірлеушілер бірден өз идеяларын жазуға отырды, олардың кейбіреулері GitHub-та аяқталды.

Төменде сақтаудағы метриканы сақтайтын төрт ашық бастапқы жобаға шолу берілген, олардан бұл деректерді оңай шығарып алуға және көрнекілеуге болады, мысалы, графана арқылы.

олегфедосеев/пинба-сервер (2017 жылғы қараша)

метриканы OpenTSDB-ге сақтайтын udp сервері. Мүмкін сіз өз жобаңызда OpenTSDB пайдаланып жатсаңыз, бұл шешім сізге сәйкес келеді, әйтпесе мен оны өтуді ұсынамын.

олегфедосеев/пинба-influxdb (2018 жылғы маусым)

udp сервері сол жерден хабарлаушы, бұл жолы көрсеткіштерді InfluxDB ішінде сақтайды. Көптеген жобалар бақылау үшін InfluxDB пайдалануда, сондықтан бұл шешім олар үшін тамаша болуы мүмкін.

Артықшылықтары:

  • InfluxDB ол мүмкіндік береді алынған көрсеткіштерді біріктіріп, белгіленген уақыттан кейін түпнұсқаны жойыңыз.

Кемшіліктері:

ClickHouse-Ninja/Proton (2019 жылдың қаңтары)

ClickHouse ішіндегі көрсеткіштерді сақтайтын udp сервері. Бұл менің досымның шешімі. Онымен танысқаннан кейін мен Пинбу мен Кликхаусты қабылдаудың уақыты келді деп шештім.

Артықшылықтары:

  • Clickhouse мұндай тапсырмалар үшін өте қолайлы; ол деректерді сығуға мүмкіндік береді, сондықтан сіз барлық бастапқы деректерді біріктірусіз де сақтай аласыз.
  • қажет болса, нәтиже көрсеткіштерін оңай біріктіруге болады
  • графана үшін дайын шаблон
  • таймерлердегі ақпаратты сақтайды

Кемшіліктері:

  • өлімге әкелетін кемшілік
  • дерекқор мен кестелердің атын, сервер мекенжайы мен портын конфигурациялауға болатын конфигурация жоқ.
  • өңделмеген деректерді сақтау кезінде бет пен домен мекенжайларын сақтау үшін көмекші сөздік кестесі пайдаланылады, бұл кейінгі сұрауларды қиындатады
  • бірінші минустан кейінгі басқа кішкентай нәрселер

pinba-server/pinba-server (2019 жылдың сәуірі)

ClickHouse ішіндегі көрсеткіштерді сақтайтын php ішіндегі udp сервері. Бұл менің шешімім, ол pinba, ClickHouse және protobuf-пен танысудың нәтижесі. Мен осы топтаманы сұрыптап жатқанда, мен күтпеген жерден айтарлықтай ресурстарды тұтынбаған «тұжырымдаманың дәлелін» жаздым (30 МБ жедел жады және сегіз процессор ядросының біреуінің 1% -нан азы), сондықтан мен жұртшылықпен бөлісуді жөн көрді.

Артықшылықтары алдыңғы шешіммен бірдей, мен бастапқы pinba_engine-дан әдеттегі атауларды да қолдандым. Мен сондай-ақ әртүрлі кестелерде метрикаларды сақтау үшін бірден бірнеше pinbase сервер данасын іске қосуға мүмкіндік беретін конфигурацияны қостым - бұл тек php-ден ғана емес, сонымен қатар nginx-тен де деректерді жинағыңыз келсе пайдалы.
Кемшіліктері - «өлімге әкелетін кемшілік» және жеке сізге сәйкес келмейтін ұсақ-түйектер, бірақ менің шешімім «тәпішке сияқты қарапайым» және шамамен 100 код жолынан тұрады, сондықтан кез келген РНР әзірлеушісі ұнамайтын нәрсені өзгерте алады. бірнеше минут ішінде.

Жұмыс принципі

UDP порты 30002 тыңдалады.Барлық кіріс пакеттер протобуф схемасына сәйкес декодталған және біріктірілген. Минутына бір рет пакет кликхаусқа pinba.requests кестесіне енгізіледі. (барлық параметрлер конфигурацияланған конфигурация)

Кликхаус туралы аздап

Clickhouse әртүрлі деректерді сақтау механизмдерін қолдайды. Ең жиі қолданылатыны MergeTree.

Егер қандай да бір сәтте сіз жиынтық деректерді барлық уақытта, ал бастапқы деректерді тек соңғысы үшін сақтауды шешсеңіз, онда топтастыру арқылы материалдандырылған көріністі жасауға және негізгі pinba.requests кестесін мерзімді түрде тазалауға болады, бұл ретте барлық деректер қалтада қалады. материалданған көрініс. Сонымен қатар, pinba.requests кестесін жасау кезінде «engine = Null» мәнін көрсетуге болады, содан кейін бастапқы деректер дискіге мүлдем сақталмайды, сонымен бірге ол материалдандырылған көріністе аяқталады және жинақталған түрде сақталады. . Мен бұл схеманы nginx метрикасына қолданамын, себебі nginx-те PHP-ге қарағанда 50 есе көп сұраулар бар.

Сонымен, сіз ұзақ жолдан өттіңіз және мен сізді жарты жолда қалдырғым келмейді, сондықтан менің шешімімнің орнатылуы мен конфигурациясының және сізге қажет нәрсенің егжей-тегжейлі сипаттамасы, сондай-ақ бірнеше кемені тудырған тұзақтар. апатқа ұшырау. Бүкіл орнату процесі Ubuntu 18.04 LTS және Centos 7 үшін сипатталған; басқа дистрибутивтер мен нұсқаларда процесс сәл өзгеше болуы мүмкін.

параметр

Мен барлық қажетті командаларды енгіздім Докер файлы нұсқаулардың қайталануын жеңілдету үшін. Төменде тек қателер сипатталады.

php-pinba

Орнатқаннан кейін /etc/php/7.2/fpm/conf.d/20-pinba.ini файлында барлық опцияларға түсініктеме алмағаныңызға көз жеткізіңіз. Кейбір дистрибутивтерде (мысалы, центос) оларға түсініктеме берілуі мүмкін.

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

кликхаус

Орнату кезінде clickhouse әдепкі пайдаланушыға құпия сөз орнатуды сұрайды. Әдепкі бойынша, бұл пайдаланушыға барлық IP мекенжайларынан кіруге болады, сондықтан серверде желіаралық қалқан болмаса, оған құпия сөзді орнатуды ұмытпаңыз. Мұны /etc/clickhouse-server/users.xml файлында орнатқаннан кейін де жасауға болады.

Сондай-ақ, clickhouse бірнеше порттарды, соның ішінде 9000-ды пайдаланатынын атап өткен жөн. Бұл порт кейбір дистрибутивтерде (мысалы, centos) php-fpm үшін де қолданылады. Бұл портты әлдеқашан пайдалансаңыз, оны /etc/clickhouse-server/config.xml файлында басқасына өзгертуге болады.

Clickhouse плагині бар графана

Grafana орнатқаннан кейін логин әкімшісін және әкімші құпия сөзін пайдаланыңыз. Сіз бірінші рет кірген кезде, Grafana сізден жаңа құпия сөз орнатуды сұрайды.

Содан кейін «+» -> импорттау мәзіріне өтіп, импорттау үшін бақылау тақтасының нөмірін көрсетіңіз 10011. Мен бұл бақылау тақтасын өзіңіз қайта жасамау үшін дайындап жүктеп салдым.

Grafana үшінші тарап плагині арқылы кликхауспен жұмыс істеуді қолдайды, бірақ Grafana-да үшінші тарап плагиндері туралы ескертулер жоқ (бұл үшін бірнеше жыл бойы билет бар).

pinba-сервер

Protobuf және libevent орнату міндетті емес, бірақ pinba серверінің жұмысын жақсартады. Егер сіз pinba-серверін /opt қалтасынан басқа қалтаға орнатсаңыз, онда сізге де түзету қажет болады жүйелік сценарий файл

nginx үшін pinba модулі

Модульді компиляциялау үшін сізге серверде орнатылған nginx нұсқасының бастапқы кодтары, сондай-ақ бірдей компиляция опциялары қажет, әйтпесе құрастыру сәтті болады, бірақ модульді қосу кезінде қате пайда болады. «Модуль екілік үйлесімді емес». Компиляция опцияларын nginx -V пәрмені арқылы көруге болады

Лайфхактар

Менің барлық сайттарым тек https арқылы жұмыс істейді. Схема өрісі мағынасыз болады, сондықтан мен оны веб/консольді бөлу үшін қолданамын.

Интернеттен қол жетімді сценарийлерде мен пайдаланамын:

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

Және консольдық сценарийлерде (мысалы, cron сценарийлері):

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

Менің Графанадағы бақылау тақтасында статистиканы бөлек көруге арналған веб/консоль қосқышы бар.

Сондай-ақ тегтеріңізді Pinba қызметіне жіберуге болады, мысалы:

pinba_tag_set('country', $countryCode);

Бар болғаны.

Мақаланың астындағы сауалнамаға жауап беріңіз.

Әдеттегідей, мен Habr және әлеуметтік желілердегі жеке хабарламалар арқылы кеңес бермейтінімді және көмектеспейтінімді ескертемін.

Github сайтында билет жасаңыз.

Сондай-ақ лайк басып қолдаңыздар ағылшынша нұсқа осы баптың reddit-те.

Сауалнамаға тек тіркелген пайдаланушылар қатыса алады. Кіру, өтінемін.

Серверде қандай операциялық жүйені пайдаланасыз?

  • Ubuntu

  • CentOS

  • Debian

  • Gentoo

  • Red Hat

  • Fedora

  • OpenSUSE

  • СуС

  • Unix

  • Windows

  • басқа

114 пайдаланушы дауыс берді. 11 пайдаланушы қалыс қалды.

Серверде PHP қандай нұсқасын пайдаланасыз?

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • басқа

105 пайдаланушы дауыс берді. 17 пайдаланушы қалыс қалды.

Сіз пинбаны қолданып көрдіңіз бе?

  • иә

  • жоқ, бірақ мен қалаймын

  • жоқ және мен қаламас едім

  • жоқ және ол туралы естіген жоқпын

100 пайдаланушы дауыс берді. 14 пайдаланушы қалыс қалды.

Pinba серверінің қай нұсқасын қолданып көргіңіз келеді?

  • pinba_engine (mysql қозғалтқышы)

  • pinba2 (mysql қозғалтқышы)

  • пинборд (PHP + MySQL)

  • olegfedoseev/pinba-сервер (бару + OpenTSDB)

  • olegfedoseev/pinba-influxdb (go + influxdb)

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

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

  • Мен өзімді жазамын

  • басқа

39 пайдаланушы дауыс берді. 47 пайдаланушы қалыс қалды.

Ақпарат көзі: www.habr.com

пікір қалдыру