Омор ва мониторинги скриптҳои PHP дар вақти воқеӣ. ClickHouse ва Grafana ба кӯмаки Пинба мераванд

Дар ин мақола ман ба шумо мегӯям, ки чӣ тавр ба ҷои pinba_engine ва pinboard истифода бурдани пинба бо клик ва графана.

Дар лоиҳаи PHP, pinba шояд ягона роҳи боэътимоди фаҳмидани он, ки бо иҷроиш чӣ рӯй медиҳад. Дуруст аст, ки пинба одатан танҳо вақте амалӣ карда мешавад, ки мушкилот аллакай мушоҳида карда мешаванд ва "куҷо кофтан" маълум нест.

Аксар вақт ҳеҷ кас тасаввуроте надорад, ки ин ё он скрипт дар як сония/дақиқа чанд маротиба даъват карда мешавад ва онҳо аз он ҷойҳое, ки мантиқтар ба назар мерасанд, ба оптимизатсияи "бо ламс" шурӯъ мекунанд.

Баъзеҳо гузоришҳои nginx-ро таҳлил мекунанд, дар ҳоле ки дигарон дархостҳои сусти пойгоҳи додаҳоро таҳлил мекунанд.

Албатта, пинба зиёдатӣ нахоҳад буд, аммо якчанд сабабҳо мавҷуданд, ки чаро ҳар як лоиҳа онро надорад.

Омор ва мониторинги скриптҳои PHP дар вақти воқеӣ. ClickHouse ва Grafana ба кӯмаки Пинба мераванд

Ва сабаби аввал ин насб аст.

Барои он ки аз татбиқи Пинба кам ё камтар як навъ "харҷ" ба даст оред, дидани метрика на танҳо дар дақиқаҳои охир, балки дар тӯли муддати тӯлонӣ (аз рӯзҳо то моҳҳо) хеле матлуб аст.

Барои ин ба шумо лозим аст:

  • васеъшавиро барои php насб кунед (ва шумо метавонед модул барои nginx мехоҳед)
  • васеъшавӣ барои MySQL тартиб диҳед
  • pinboard насб кунед ва cron-ро танзим кунед

Аз сабаби кам будани маълумот дар бораи Pinba, бисёриҳо таассурот доранд, ки он танҳо дар PHP5 кор мекард ва кайҳо дар гузашта боқӣ мондааст, аммо тавре ки баъдтар мебинем, ин тавр нест.

Қадами аввал соддатарин аст, танҳо ба шумо лозим аст, ки фармонро иҷро кунед:

apt install php-pinba

Ин васеъшавӣ дар анборҳо то php 7.3 дастрас аст ва ба шумо чизе тартиб додан лозим нест.

Пас аз иҷрои фармони насб, мо фавран васеъшавии кореро мегирем, ки барои ҳар як скрипт (вақти кор, хотира ва ғайра) дар формат ҷамъоварӣ ва ирсол мекунад. протобуф тавассути UDP ба 127.0.0.1:30002.

То ҳол ҳеҷ кас ин бастаҳои UDP-ро дастгир ё коркард накардааст, аммо ин ба ҳеҷ ваҷҳ ба суръат ё устувории скриптҳои PHP-и шумо таъсири манфӣ намерасонад.

То ба наздикӣ, ягона барномае, ки метавонад ин бастаҳои UDP-ро дастгир ва коркард кунад pinba_муҳаррик. Тавсифи "содда ва мухтасар" насбкунӣ хоҳиши бори дигар хондан ва омӯхтани онро бозмедорад. Рӯйхати як километрии вобастагӣ ҳам номи бастаҳо ва ҳам номи барномаҳо ва истинодҳо ба саҳифаҳои алоҳида бо насби онҳоро дар бар мегирад ва онҳо пайвандҳои худро ба дигар вобастагӣ доранд. Ҳеҷ кас вақт ва хоҳиши мубориза бо ин бадбахтиро надорад.

Раванди насбкунӣ пинба2 накард махсусан осонтар аст.

Шояд рӯзе pinba10-ро бо як ё ду фармон насб кардан мумкин бошад ва барои фаҳмидани он ки чӣ тавр ин корро кардан лозим нест, ки як даста маводро хонед, аммо ҳоло ин тавр нест.

Агар шумо pinba_engine насб кунед, пас ин танҳо нисфи ҷанг аст. Охир, бе пинборт шумо бояд худро бо маълумот аз чанд дақиқаи охир маҳдуд кунед, вагарна шумо бояд маълумотро худатон ҷамъ кунед, нигоҳ доред ва визуалӣ кунед. Ин хуб аст, ки pinboard барои истифода хеле осон аст насб.

Чунин ба назар мерасад, ки чаро ин қадар ранҷ мекашад, агар ҳама ченакҳо аз php аллакай ба порти udp дар формати protobuf фиристода шуда бошанд ва ба шумо танҳо навиштани барномае лозим аст, ки онҳоро гирифта, дар ягон анбор ҷойгир кунад? Эҳтимол, он таҳиягароне, ки ин идеяро пешниҳод карданд, фавран барои навиштани ғояҳои худ нишастанд, ки баъзеи онҳо дар GitHub ба охир расиданд.

Дар зер шарҳи чаҳор лоиҳаи кушодаасос оварда шудааст, ки ченакҳоро дар анбор нигоҳ медоранд, ки аз онҳо ин маълумотро ба осонӣ гирифтан ва дидан мумкин аст, масалан, бо истифода аз графана.

олегфедосеев/пинба-сервер (ноябри 2017)

сервери udp дар роҳ, ки ченакҳоро дар OpenTSDB захира мекунад. Эҳтимол, агар шумо аллакай дар лоиҳаи худ OpenTSDB-ро истифода баред, пас ин ҳалли шумо ба шумо мувофиқ хоҳад буд, вагарна ман тавсия медиҳам, ки аз он гузаред.

олегфедосеев/пинба-influxdb (Июни соли 2018)

сервери udp дар рафтан, аз ҳамон хабаргузор, ки ин дафъа ченакҳоро дар InfluxDB нигоҳ медорад. Бисёре аз лоиҳаҳо аллакай InfluxDB-ро барои мониторинг истифода мебаранд, аз ин рӯ ин қарор метавонад барои онҳо комил бошад.

Тарафдор:

  • InfluxDB Ин имкон медиҳад, ченакҳои гирифташударо ҷамъ кунед ва аслро пас аз вақти муайян нест кунед.

Эзоҳ:

ClickHouse-Ninja/Proton (январи 2019)

сервери udp дар ҳаракат аст, ки ченакҳоро дар ClickHouse сарфа мекунад. Ин роҳи ҳалли дӯсти ман аст. Маҳз пас аз шиносоӣ бо он ман қарор додам, ки вақти он расидааст, ки Пинбу ва Кликхаусро қабул кунам.

Тарафдор:

  • Clickhouse барои чунин вазифаҳо беҳтарин аст; он ба шумо имкон медиҳад, ки маълумотро чунон фишурда кунед, ки шумо метавонед тамоми маълумоти хомро ҳатто бидуни ҷамъкунӣ нигоҳ доред
  • агар лозим бошад, шумо метавонед ба осонӣ ченакҳои натиҷаро ҷамъ кунед
  • шаблони тайёр барои графана
  • маълумотро дар таймерҳо захира мекунад

Эзоҳ:

  • камбудии марговар
  • ягон конфигуратсия вуҷуд надорад, ки дар он шумо метавонед номи пойгоҳи додаҳо ва ҷадвалҳо, суроға ва порти серверро танзим кунед.
  • ҳангоми нигоҳ доштани маълумоти хом, ҷадвали луғати ёрирасон барои нигоҳ доштани суроғаҳои саҳифа ва домен истифода мешавад, ки ин дархостҳои минбаъдаро мушкил мекунад
  • дигар чизҳои хурд, ки аз минуси аввал пайравӣ мекунанд

pinba-server/pinba-server (апрели 2019)

сервери udp дар php, ки ченакҳоро дар ClickHouse захира мекунад. Ин ҳалли ман аст, ки натиҷаи шиносоӣ бо pinba, ClickHouse ва protobuf аст. Ҳангоме ки ман тамоми ин дастаро ҷудо мекардам, ман "далели консепсия" навиштам, ки барои ман ғайричашмдошт захираҳои назаррасро истеъмол намекард (30 МБ RAM ва камтар аз 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 аз шумо хоҳиш мекунад, ки барои корбари пешфарз парол таъин кунед. Бо нобаёнӣ, ин корбар аз ҳама 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-server-ро дар ҷузвдони ғайр аз /opt насб кунед, пас шумо низ бояд ислоҳ кунед скрипти системавӣ файл

модули pinba барои nginx

Барои тартиб додани модул ба шумо кодҳои сарчашмаи ҳамон версияи 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

  • Федора

  • 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)

  • pinboard (php + mysql)

  • olegfedoseev/pinba-server (равед + OpenTSDB)

  • olegfedoseev/pinba-influxdb (рафта + influxdb)

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

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

  • Ман худамро менависам

  • дигар

39 корбар овоз доданд. 47 корбар худдорӣ карданд.

Манбаъ: will.com

Илова Эзоҳ