ProHoster > Блог > басқарма > Нақты уақытта PHP сценарийлерінің статистикасы және мониторингі. ClickHouse және Grafana Пинбаға көмекке келеді
Нақты уақытта PHP сценарийлерінің статистикасы және мониторингі. ClickHouse және Grafana Пинбаға көмекке келеді
Бұл мақалада мен pinba_engine және pinboard орнына clickhouse және grafana көмегімен пинбаны қалай пайдалану керектігін айтамын.
PHP жобасында pinba өнімділікпен не болып жатқанын түсінудің жалғыз сенімді жолы болуы мүмкін. Рас, пинба әдетте проблемалар байқалған кезде ғана жүзеге асырылады және «қайда қазу керек» анық емес.
Көбінесе бұл немесе басқа сценарий секундына/минутына қанша рет шақырылатынын ешкім білмейді және олар логикалық көрінетін жерлерден бастап «сенсорлық арқылы» оңтайландыруды бастайды.
Кейбіреулер nginx журналдарын талдайды, ал басқалары баяу дерекқор сұрауларын талдайды.
Әрине, пинба артық болмас еді, бірақ әр жобада оның болмауының бірнеше себептері бар.
Ал бірінші себеп - орнату.
Пинбаны жүзеге асырудан азды-көпті «шығарудың» қандай да бір түрін алу үшін тек соңғы минуттар үшін ғана емес, сонымен қатар ұзақ уақыт бойы (күндерден айларға дейін) көрсеткіштерді көру өте қажет.
Ол үшін сізге қажет:
php үшін кеңейтімді орнату (және nginx үшін модуль қажет болуы мүмкін)
MySQL кеңейтімін құрастыру
pinboard орнатыңыз және cron конфигурациялаңыз
Пинба туралы ақпараттың аздығына байланысты көптеген адамдар бұл тек PHP5-те жұмыс істеген және бұрыннан өткен нәрсе сияқты әсер қалдырады, бірақ кейінірек көретініміздей, олай емес.
Бірінші қадам - ең қарапайым, сізге тек пәрменді орындау қажет:
apt install php-pinba
Бұл кеңейтім php 7.3 нұсқасына дейінгі репозиторийлерде қол жетімді және сізге ештеңе құрастырудың қажеті жоқ.
Орнату пәрменін орындағаннан кейін біз пішімде әрбір сценарийге (жұмыс уақыты, жад және т.б.) көрсеткіштерді жинайтын және жіберетін жұмыс кеңейтімін дереу аламыз. протобуф udp арқылы 127.0.0.1:30002.
Әзірге бұл UDP пакеттерін ешкім ұстаған немесе өңдеген жоқ, бірақ бұл PHP сценарийлерінің жылдамдығына немесе тұрақтылығына ешбір жағдайда теріс әсер етпейді.
Соңғы уақытқа дейін бұл UDP пакеттерін ұстап алатын және өңдей алатын жалғыз қолданба болды pinba_engine. Сипаттама"қарапайым және қысқаша"Орнату оны қайта оқуға және тереңірек үңілуге деген құштарлықты төмендетеді. Тәуелділіктердің километрлік тізімдерінде бумалардың атаулары да, бағдарламалардың атаулары да, орнатулары бар жеке беттерге сілтемелер де бар және олардың басқа тәуелділіктерге өз сілтемелері бар. Бұл сұмдықпен айналысуға ешкімнің уақыты да, қалауы да жоқ.
Мүмкін бір күні бір немесе екі пәрмен арқылы pinba10 орнатуға болады және оны қалай жасау керектігін түсіну үшін көптеген материалдарды оқудың қажеті жоқ, бірақ әзірше олай емес.
Егер сіз pinba_engine орнатсаңыз, бұл шайқастың жартысы ғана. Өйткені, онсыз пинборд соңғы бірнеше минуттардағы деректермен шектелуіңіз керек немесе деректерді өзіңіз жинақтап, сақтауыңыз және визуализациялауыңыз қажет. Пинбордты пайдалану өте қарапайым болғаны жақсы орнату.
Егер php-тен барлық көрсеткіштер udp портына protobuf форматында жіберілген болса және сізге оларды ұстап алатын және оларды қандай да бір жадқа салатын қосымшаны жазу қажет болса, неге мұндай азап шегеді? Шамасы, бұл идеяны ұсынған әзірлеушілер бірден өз идеяларын жазуға отырды, олардың кейбіреулері GitHub-та аяқталды.
Төменде сақтаудағы метриканы сақтайтын төрт ашық бастапқы жобаға шолу берілген, олардан бұл деректерді оңай шығарып алуға және көрнекілеуге болады, мысалы, графана арқылы.
метриканы OpenTSDB-ге сақтайтын udp сервері. Мүмкін сіз өз жобаңызда OpenTSDB пайдаланып жатсаңыз, бұл шешім сізге сәйкес келеді, әйтпесе мен оны өтуді ұсынамын.
udp сервері сол жерден хабарлаушы, бұл жолы көрсеткіштерді InfluxDB ішінде сақтайды. Көптеген жобалар бақылау үшін InfluxDB пайдалануда, сондықтан бұл шешім олар үшін тамаша болуы мүмкін.
Артықшылықтары:
InfluxDB ол мүмкіндік береді алынған көрсеткіштерді біріктіріп, белгіленген уақыттан кейін түпнұсқаны жойыңыз.
Кемшіліктері:
Бұл шешім таймерлерде ақпаратты сақтамайды.
InfluxDB сайт бетінің мекенжайларын тегтер ретінде сақтайды және сізде көптеген бірегей бет мекенжайлары болса, бұл әкеледі тұтынудың артуы жедел жады. Белгілі бір сәттен бастап ол «есінен танғандай жадын жей бастайды«. (көзі)
ClickHouse ішіндегі көрсеткіштерді сақтайтын udp сервері. Бұл менің досымның шешімі. Онымен танысқаннан кейін мен Пинбу мен Кликхаусты қабылдаудың уақыты келді деп шештім.
Артықшылықтары:
Clickhouse мұндай тапсырмалар үшін өте қолайлы; ол деректерді сығуға мүмкіндік береді, сондықтан сіз барлық бастапқы деректерді біріктірусіз де сақтай аласыз.
қажет болса, нәтиже көрсеткіштерін оңай біріктіруге болады
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 файлында барлық опцияларға түсініктеме алмағаныңызға көз жеткізіңіз. Кейбір дистрибутивтерде (мысалы, центос) оларға түсініктеме берілуі мүмкін.
Орнату кезінде 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 және әлеуметтік желілердегі жеке хабарламалар арқылы кеңес бермейтінімді және көмектеспейтінімді ескертемін.