PHP скрипттеринин статистикасы жана мониторинги реалдуу убакытта. ClickHouse жана Grafana Пинбага жардамга келишет

Бул макалада мен сизге pinba_engine жана pinboard ордуна кликхаус жана графана менен пинбаны кантип колдонууну айтып берем.

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. Сүрөттөмө "жөнөкөй жана кыска"Орнотуу аны кайра окуп чыгуу каалоосун токтотот. Көз карандылыктардын километрлик тизмелери пакеттердин атын да, программалардын атын да камтыйт жана аларды орнотуу менен жеке барактарга шилтемелерди камтыйт жана алардын башка көз карандылыктарга өз шилтемелери бар. Эч кимдин бул башаламандык менен күрөшүүгө убактысы да, каалоосу да жок.

орнотуу жараяны pinba2 жок өзгөчө жеңил.

Балким, качандыр бир күнү pinba10ду бир же эки буйрук менен орнотууга болот жана аны кантип жасоону түшүнүү үчүн бир топ материалдарды окуунун кереги жок, бирок азыр андай эмес.

Эгер сиз pinba_engine орнотсоңуз, анда бул согуштун жарымы гана. Кантсе да, жок ПИН кароо сиз өзүңүздү акыркы бир нече мүнөттөрдөгү маалыматтар менен чектешиңиз керек, болбосо маалыматтарды өзүңүз чогултуп, сактап жана визуализациялашыңыз керек болот. Пинбордду колдонуу абдан жөнөкөй болгону жакшы орнотуу.

Эгерде php'ден бардык метрикалар protobuf форматында udp портуна жөнөтүлгөн болсо жана сизге аларды кармап, кандайдыр бир сактагычка жайгаштыра турган тиркеме жазуу керек болсо, эмне үчүн мынчалык кыйналып жатат? Сыягы, бул идеяны ойлоп тапкан иштеп чыгуучулар дароо өз идеяларын жазуу үчүн отурушту, алардын айрымдары GitHub'та аяктады.

Төмөндө сактагычта метриканы сактаган төрт ачык булак долбоорлоруна сереп берилген, алардан бул маалыматтарды оңой эле чыгарып алууга жана визуалдаштырууга болот, мисалы, графананы колдонуу.

olegfedoseev/pinba-server (2017-жылдын ноябрь айы)

метрикаларды OpenTSDBге сактаган udp сервери. Балким, эгер сиз долбооруңузда OpenTSDB колдонуп жатсаңыз, анда бул чечим сизге ылайыктуу болот, антпесе мен аны өткөрүп берүүнү сунуштайм.

olegfedoseev/pinba-influxdb (2018-жылдын июнь айы)

udp сервери ошол эле жерден habrowser, бул жолу көрсөткүчтөрдү 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гө жакын код саптарынан турат, ошондуктан ар бир PHP иштеп чыгуучусу өзүнө жакпаган нерсени өзгөртө алат. бир нече мүнөттүн ичинде.

Иштөө принциби

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

Clickhouse жөнүндө бир аз

Clickhouse ар кандай маалыматтарды сактоо кыймылдаткычтарын колдойт. Эң көп колдонулганы - MergeTree.

Эгер кандайдыр бир учурда сиз топтолгон маалыматтарды бардык убакытка, ал эми чийки маалыматтарды акыркысы үчүн гана сактоону чечсеңиз, анда сиз топтоо менен материалдашкан көрүнүштү түзүп, негизги pinba.requests таблицасын мезгил-мезгили менен тазалай аласыз, мында бардык маалыматтар сактагычта кала берет. материалдык көрүнүш. Мындан тышкары, pinba.requests таблицасын түзүп жатканда, сиз "кыймылдаткыч = 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

Орнотуу учурунда, Clickhouse сизден демейки колдонуучу үчүн сырсөз коюуну суранат. Демейки боюнча, бул колдонуучуга бардык IP даректеринен кирүүгө болот, андыктан сервериңизде брандмауэр жок болсо, ага сырсөз коюуну унутпаңыз. Бул /etc/clickhouse-server/users.xml файлына орнотулгандан кийин да жасалышы мүмкүн.

Белгилей кетчү нерсе, Clickhouse бир нече портторду колдонот, анын ичинде 9000. Бул порт кээ бир дистрибуцияларда php-fpm үчүн да колдонулат (мисалы, centos). Эгер сиз бул портту мурунтан эле колдонсоңуз, аны /etc/clickhouse-server/config.xml файлында башкасына өзгөртө аласыз.

Clickhouse плагини менен графана

Grafana орнотулгандан кийин, логин администраторун жана сырсөз администраторун колдонуңуз. Биринчи жолу киргениңизде, Grafana сизден жаңы сырсөз коюуну суранат.

Андан кийин, "+" -> импорттоо менюсуна барып, импорттоо үчүн панелдин номерин көрсөтүңүз 10011. Мен бул тактаны даярдап жүктөдүм, ошондуктан сиз муну кайра өзүңүз кылбаңыз.

Grafana үчүнчү тараптын плагини аркылуу Clickhouse менен иштөөнү колдойт, бирок Grafana үчүнчү тараптын плагиндери үчүн эскертүүлөргө ээ эмес (бул үчүн билет бир нече жылдан бери бар).

pinba-сервер

Protobuf жана libevent орнотуу милдеттүү эмес, бирок pinba-сервердин иштешин жакшыртат. Эгерде сиз pinba-серверди /opt папкасынан башка папкага орнотсоңуз, анда сиз да оңдооңуз керек болот системалык скрипт файл

nginx үчүн pinba модулу

Модулду компиляциялоо үчүн сизге сервериңизде орнотулган nginx версиясынын баштапкы коддору, ошондой эле ошол эле компиляция параметрлери керек, антпесе куруу ийгиликтүү болот, бирок модулду туташтырууда ката чыгат. "Модуль экилик шайкеш келбейт." Компиляция параметрлерин nginx -V буйругу аркылуу көрүүгө болот

Life Hacks

Менин бардык сайттарым бир гана 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

  • Кызыл шляпа

  • Fedora

  • OpenSUSE

  • splash =

  • Unix

  • Windows

  • башка

114 колдонуучу добуш берди. 11 колдонуучу добуш берүүдөн баш тартты.

Сиз серверде PHPдин кайсы версиясын колдонуп жатасыз?

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • башка

105 колдонуучу добуш берди. 17 колдонуучу добуш берүүдөн баш тартты.

Пинбаны колдонуп көрдүңүз беле?

  • ооба

  • жок, бирок мен каалайт элем

  • жок жана мен каалабайт элем

  • жок жана ал жөнүндө уккан эмесмин

100 колдонуучу добуш берди. 14 колдонуучу добуш берүүдөн баш тартты.

Pinba серверинин кайсы версиясын сынап көргүңүз келет?

  • pinba_engine (MYSQL кыймылдаткычы)

  • pinba2 (Mysql кыймылдаткычы)

  • pinboard (PHP + MySQL)

  • olegfedoseev/pinba-server (go + OpenTSDB)

  • olegfedoseev/pinba-influxdb (go + influxdb)

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

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

  • Мен өзүмдү өзүм жазам

  • башка

39 колдонуучу добуш берди. 47 колдонуучу добуш берүүдөн баш тартты.

Source: www.habr.com

Комментарий кошуу