Бұл мақалада мен 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 пакеттерін ұстап алатын және өңдей алатын жалғыз қолданба болды . Сипаттама""Орнату оны қайта оқуға және тереңірек үңілуге деген құштарлықты төмендетеді. Тәуелділіктердің километрлік тізімдерінде бумалардың атаулары да, бағдарламалардың атаулары да, орнатулары бар жеке беттерге сілтемелер де бар және олардың басқа тәуелділіктерге өз сілтемелері бар. Бұл сұмдықпен айналысуға ешкімнің уақыты да, қалауы да жоқ.
Орнату процесі болмады .
Мүмкін бір күні бір немесе екі пәрмен арқылы pinba10 орнатуға болады және оны қалай жасау керектігін түсіну үшін көптеген материалдарды оқудың қажеті жоқ, бірақ әзірше олай емес.
Егер сіз pinba_engine орнатсаңыз, бұл шайқастың жартысы ғана. Өйткені, онсыз соңғы бірнеше минуттардағы деректермен шектелуіңіз керек немесе деректерді өзіңіз жинақтап, сақтауыңыз және визуализациялауыңыз қажет. Пинбордты пайдалану өте қарапайым болғаны жақсы .
Егер php-тен барлық көрсеткіштер udp портына protobuf форматында жіберілген болса және сізге оларды ұстап алатын және оларды қандай да бір жадқа салатын қосымшаны жазу қажет болса, неге мұндай азап шегеді? Шамасы, бұл идеяны ұсынған әзірлеушілер бірден өз идеяларын жазуға отырды, олардың кейбіреулері GitHub-та аяқталды.
Төменде сақтаудағы метриканы сақтайтын төрт ашық бастапқы жобаға шолу берілген, олардан бұл деректерді оңай шығарып алуға және көрнекілеуге болады, мысалы, графана арқылы.
(2017 жылғы қараша)
метриканы OpenTSDB-ге сақтайтын udp сервері. Мүмкін сіз өз жобаңызда OpenTSDB пайдаланып жатсаңыз, бұл шешім сізге сәйкес келеді, әйтпесе мен оны өтуді ұсынамын.
(2018 жылғы маусым)
udp сервері сол жерден , бұл жолы көрсеткіштерді InfluxDB ішінде сақтайды. Көптеген жобалар бақылау үшін InfluxDB пайдалануда, сондықтан бұл шешім олар үшін тамаша болуы мүмкін.
Артықшылықтары:
- InfluxDB алынған көрсеткіштерді біріктіріп, белгіленген уақыттан кейін түпнұсқаны жойыңыз.
Кемшіліктері:
- Бұл шешім таймерлерде ақпаратты сақтамайды.
- InfluxDB сайт бетінің мекенжайларын тегтер ретінде сақтайды және сізде көптеген бірегей бет мекенжайлары болса, бұл әкеледі жедел жады. Белгілі бір сәттен бастап ол ««. ()
(2019 жылдың қаңтары)
ClickHouse ішіндегі көрсеткіштерді сақтайтын udp сервері. Бұл менің досымның шешімі. Онымен танысқаннан кейін мен Пинбу мен Кликхаусты қабылдаудың уақыты келді деп шештім.
Артықшылықтары:
- Clickhouse мұндай тапсырмалар үшін өте қолайлы; ол деректерді сығуға мүмкіндік береді, сондықтан сіз барлық бастапқы деректерді біріктірусіз де сақтай аласыз.
- қажет болса, нәтиже көрсеткіштерін оңай біріктіруге болады
- графана үшін дайын шаблон
- таймерлердегі ақпаратты сақтайды
Кемшіліктері:
- дерекқор мен кестелердің атын, сервер мекенжайы мен портын конфигурациялауға болатын конфигурация жоқ.
- өңделмеген деректерді сақтау кезінде бет пен домен мекенжайларын сақтау үшін көмекші сөздік кестесі пайдаланылады, бұл кейінгі сұрауларды қиындатады
- бірінші минустан кейінгі басқа кішкентай нәрселер
(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 файлындағы барлық параметрлердің түсініктемесіз екеніне көз жеткізіңіз. Кейбір дистрибутивтерде (мысалы, centos) оларға түсініктеме беруге болады.
extension=pinba.so
pinba.enabled=1
pinba.server=127.0.0.1:30002кликхаус
Орнату кезінде clickhouse әдепкі пайдаланушыға құпия сөз орнатуды сұрайды. Әдепкі бойынша, бұл пайдаланушыға барлық IP мекенжайларынан кіруге болады, сондықтан серверде желіаралық қалқан болмаса, оған құпия сөзді орнатуды ұмытпаңыз. Мұны /etc/clickhouse-server/users.xml файлында орнатқаннан кейін де жасауға болады.
Сондай-ақ, clickhouse бірнеше портты, соның ішінде 9000 портын пайдаланатынын атап өткен жөн. Бұл порт кейбір дистрибутивтерде php-fpm үшін де қолданылады (мысалы, centos). Егер сіз бұл портты бұрыннан пайдаланып жүрсеңіз, оны /etc/clickhouse-server/config.xml файлындағы басқа портқа өзгерте аласыз.
Clickhouse плагині бар графана
Grafana орнатқаннан кейін логин әкімшісін және әкімші құпия сөзін пайдаланыңыз. Сіз бірінші рет кірген кезде, Grafana сізден жаңа құпия сөз орнатуды сұрайды.
Содан кейін «+» -> импорттау мәзіріне өтіп, импорттау үшін бақылау тақтасының нөмірін көрсетіңіз . Мен бұл бақылау тақтасын өзіңіз қайта жасамау үшін дайындап жүктеп салдым.
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 сайтында билет жасаңыз.
Сондай-ақ лайк басып қолдаңыздар осы баптың .
Сауалнамаға тек тіркелген пайдаланушылар қатыса алады. , өтінемін.
Серверде қандай операциялық жүйені пайдаланасыз?
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
