PHP скриптүүдийн статистик ба хяналтыг бодит цаг хугацаанд хийх. ClickHouse болон Grafana нар Пинбагийн тусламжид ирдэг

Энэ нийтлэлд би pinba-г pinba_engine болон pinboard-ийн оронд clickhouse, grafana-тай хэрхэн ашиглахыг танд хэлэх болно.

PHP төсөл дээр pinba нь гүйцэтгэлд юу болж байгааг ойлгох цорын ганц найдвартай арга байж магадгүй юм. Асуудал аль хэдийн ажиглагдаж, "хаана ухах" нь тодорхойгүй үед л пинба ихэвчлэн хэрэгждэг нь үнэн.

Ихэнхдээ энэ эсвэл өөр скриптийг секундэд хэдэн удаа дууддагийг хэн ч мэдэхгүй бөгөөд тэд илүү логик мэт санагдах газруудаас эхлээд "хүрэх замаар" оновчтой болгож эхэлдэг.

Зарим нь nginx бүртгэлд дүн шинжилгээ хийдэг бол зарим нь удаан мэдээллийн сангийн асуулгад дүн шинжилгээ хийдэг.

Мэдээжийн хэрэг, пинба нь илүүц байх болно, гэхдээ төсөл болгонд байдаггүй хэд хэдэн шалтгаан бий.

PHP скриптүүдийн статистик ба хяналтыг бодит цаг хугацаанд хийх. ClickHouse болон Grafana нар Пинбагийн тусламжид ирдэг

Мөн эхний шалтгаан нь суурилуулалт юм.

Пинбагийн хэрэгжилтээс ямар нэгэн "яндан" авахын тулд зөвхөн сүүлийн минутанд төдийгүй урт хугацааны туршид (өдөрөөс сар хүртэл) хэмжигдэхүүнийг харах нь зүйтэй юм.

Үүнийг хийхийн тулд танд дараахь зүйл хэрэгтэй:

  • php-д зориулсан өргөтгөл суулгах (мөн та nginx-д зориулсан модулийг хүсч магадгүй)
  • mysql-д зориулсан өргөтгөлийг эмхэтгэх
  • самбар суулгаж, cron-г тохируулна уу

Пинбагийн тухай мэдээлэл бага учраас олон хүмүүс энэ нь зөвхөн PHP5 дээр ажиллаж байсан бөгөөд аль эрт дээр үед өнгөрсөн мэт сэтгэгдэл төрүүлдэг ч дараа нь харах болно, энэ нь тийм биш юм.

Эхний алхам бол хамгийн энгийн бөгөөд та дараах тушаалыг ажиллуулахад л хангалттай.

apt install php-pinba

Энэ өргөтгөл нь php 7.3 хүртэл хадгалагдах боломжтой бөгөөд та юу ч эмхэтгэх шаардлагагүй.

Суулгах командыг гүйцэтгэсний дараа бид скрипт бүрийн хэмжигдэхүүнийг (ажиллуулах хугацаа, санах ой гэх мэт) форматаар цуглуулж илгээдэг ажлын өргөтгөлийг шууд хүлээн авдаг. протобуф udp-ээр дамжуулан 127.0.0.1:30002.

Одоогоор хэн ч эдгээр UDP пакетуудыг барьж, боловсруулаагүй байгаа ч энэ нь таны PHP скриптүүдийн хурд, тогтвортой байдалд ямар ч байдлаар сөргөөр нөлөөлөхгүй.

Саяхныг хүртэл эдгээр UDP пакетуудыг барьж, боловсруулж чадах цорын ганц программ байсан pinba_хөдөлгүүр. Тодорхойлолт "энгийн бөгөөд товч"Суулгах нь үүнийг дахин уншиж, судлах хүслийг бууруулдаг. Хамааралтай зүйлсийн нэг километр урт жагсаалт нь багцын нэр, програмын нэр, тэдгээрийн суулгацын хамт тусдаа хуудсуудын холбоосыг агуулдаг бөгөөд тэдгээр нь бусад хамааралтай өөрийн гэсэн холбоостой байдаг. Хэнд ч энэ новшийг даван туулах цаг, хүсэл байхгүй.

Суулгах үйл явц пинба2 тэгээгүй ялангуяа илүү хялбар.

Магадгүй хэзээ нэгэн цагт pinba10-г нэг юмуу хоёр тушаалаар суулгах боломжтой болох бөгөөд үүнийг хэрхэн хийхийг ойлгохын тулд олон тооны материалыг унших шаардлагагүй, гэхдээ одоогоор тийм биш байна.

Хэрэв та pinba_engine суулгасан бол энэ нь зөвхөн тулааны тал хувь юм. Эцсийн эцэст, үгүй самбар та зөвхөн сүүлийн хэдэн минутын өгөгдөлд өөрийгөө хязгаарлах хэрэгтэй болно, эсвэл та өөрөө өгөгдлийг нэгтгэж, хадгалж, дүрслэн харуулах хэрэгтэй болно. Самбарыг ашиглахад маш энгийн байгаа нь сайн хэрэг суурилуулалт.

Хэрэв php-ийн бүх хэмжүүрүүд protobuf форматаар udp порт руу аль хэдийн илгээгдсэн бөгөөд танд хэрэгтэй зүйл бол тэдгээрийг барьж аваад ямар нэгэн хадгалах санд байрлуулах програм бичихэд л хангалттай юм бол яагаад ийм зовлонтой байх шиг байна вэ? Энэ санааг гаргасан хөгжүүлэгчид тэр даруй өөрсдийн санаагаа бичихээр суусан бололтой, зарим нь GitHub дээр дуусав.

Дараах нь хэмжигдэхүүнийг хадгалахад хадгалдаг дөрвөн нээлттэй эхийн төслийн тойм бөгөөд эдгээрээс өгөгдлийг хялбархан олж авч, жишээ нь графана ашиглан дүрслэн харуулах боломжтой.

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

OpenTSDB-д хэмжигдэхүүнийг хадгалдаг udp сервер ажиллаж байна. Магадгүй та OpenTSDB-г төсөлдөө аль хэдийн ашиглаж байгаа бол энэ шийдэл танд тохирох болно, эс тэгвээс би үүнийг өнгөрөөхийг зөвлөж байна.

olegfedoseev/pinba-influxdb (2018 оны XNUMX-р сар)

udp сервер нь мөн адил habrowser, энэ удаад хэмжүүрүүдийг InfluxDB-д хадгалдаг. Олон төслүүд InfluxDB-г хяналтандаа ашиглаж байгаа тул энэ шийдэл нь тэдний хувьд төгс байж болох юм.

Нөхцөл:

  • InfluxDB Энэ нь олгодог Хүлээн авсан хэмжүүрүүдийг нэгтгэж, тодорхой хугацааны дараа эх хувийг устгана.

Нөхцөл байдал:

ClickHouse-Ninja/Proton (2019 оны XNUMX-р сар)

ClickHouse-д хэмжүүрүүдийг хадгалдаг udp сервер. Энэ бол миний найзын шийдэл. Яг үүнтэй танилцсаны дараа би Пинбу, Кликхаус хоёрыг авах цаг нь болсон гэж шийдсэн.

Нөхцөл:

  • Clickhouse нь ийм ажлуудад тохиромжтой; энэ нь өгөгдлийг маш их шахах боломжийг олгодог бөгөөд ингэснээр та бүх түүхий өгөгдлийг нэгтгэлгүйгээр хадгалах боломжтой.
  • шаардлагатай бол та үр дүнгийн хэмжигдэхүүнийг хялбархан нэгтгэж болно
  • графанагийн бэлэн загвар
  • таймер дээрх мэдээллийг хадгалдаг

Нөхцөл байдал:

  • үхлийн дутагдал
  • Мэдээллийн сан болон хүснэгтийн нэр, серверийн хаяг, портыг тохируулах тохиргоо байхгүй байна.
  • түүхий өгөгдлийг хадгалахдаа хуудас болон домэйн хаягийг хадгалахад туслах толь бичгийн хүснэгтийг ашигладаг бөгөөд энэ нь дараагийн асуулгад хүндрэл учруулдаг.
  • эхний хасахаас дагах бусад жижиг зүйлүүд

pinba-server/pinba-server (2019 оны XNUMX-р сар)

ClickHouse-д хэмжүүрүүдийг хадгалдаг php дахь udp сервер. Энэ бол pinba, ClickHouse, protobuf-тай танилцсаны үр дүн болох миний шийдэл юм. Би энэ бүхэл бүтэн багцыг цэгцэлж байхдаа "үзэл баримтлалын нотолгоо" бичсэн бөгөөд энэ нь миний хувьд гэнэтийн байдлаар тийм ч их нөөц зарцуулаагүй (30 МБ RAM ба найман процессорын нэг цөмийн 1% -иас бага), тиймээс би олон нийтэд хүргэхээр шийдлээ.

Давуу талууд нь өмнөх шийдэлтэй адил бөгөөд би мөн анхны pinba_engine-ийн ердийн нэрийг ашигласан. Би бас өөр өөр хүснэгтэд хэмжигдэхүүнийг хадгалахын тулд хэд хэдэн pinbase серверийн тохиолдлуудыг нэг дор ажиллуулах боломжийг олгодог тохиргоог нэмсэн - энэ нь зөвхөн php-ээс гадна nginx-ээс мэдээлэл цуглуулахыг хүсвэл хэрэг болно.
Сул тал - "үхлийн дутагдал" болон таны хувьд тохирохгүй жижиг зүйлүүд, гэхдээ миний шийдэл бол "шаахай шиг энгийн" бөгөөд ердөө 100 мөр кодоос бүрддэг тул ямар ч PHP хөгжүүлэгч дургүй зүйлээ өөрчлөх боломжтой. хэдхэн минутын дотор.

Хэрхэн ажилладаг

UDP порт 30002-г сонсож байна.Бүх ирж буй пакетуудыг protobuf схемийн дагуу тайлж, нэгтгэдэг. Минутанд нэг удаа пакетыг clickhouse руу pinba.requests хүснэгтэд оруулна. (бүх параметрүүдийг дотор нь тохируулсан тохиргоо)

Clickhouse-ийн талаар бага зэрэг

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

Суулгах явцад clickhouse танаас анхдагч хэрэглэгчийн нууц үгийг тохируулахыг хүсэх болно. Анхдагч байдлаар, энэ хэрэглэгч бүх IP хаягаас хандах боломжтой тул хэрэв таны серверт галт хана байхгүй бол түүнд нууц үг оруулахаа мартуузай. Үүнийг /etc/clickhouse-server/users.xml файлд суулгасны дараа хийж болно.

Clickhouse нь 9000 зэрэг хэд хэдэн порт ашигладаг гэдгийг тэмдэглэх нь зүйтэй. Энэ порт нь зарим түгээлтийн (жишээ нь, centos) php-fpm-д ашиглагддаг. Хэрэв та энэ портыг аль хэдийн ашигласан бол /etc/clickhouse-server/config.xml файлаас өөр порт руу сольж болно.

Clickhouse залгаастай графана

Grafana-г суулгасны дараа нэвтрэх админ болон нууц үгийн админыг ашиглана уу. Таныг анх удаа нэвтрэх үед Grafana танаас шинэ нууц үг оруулахыг хүсэх болно.

Дараа нь "+" -> импортын цэс рүү очоод импортын хяналтын самбарын дугаарыг зааж өгнө үү 10011. Та өөрөө дахин хийх шаардлагагүй гэж би энэ хяналтын самбарыг бэлтгэж байршуулсан.

Grafana нь гуравдагч талын залгаасуудаар дамжуулан clickhouse-тай ажиллахыг дэмждэг боловч Grafana-д гуравдагч талын залгаасуудын талаар анхааруулга байдаггүй (энэ нь хэдэн жилийн турш тасалбар байсан).

pinba-сервер

Protobuf болон libevent суулгах нь сонголттой боловч pinba-серверийн гүйцэтгэлийг сайжруулдаг. Хэрэв та /opt-оос өөр фолдерт pinba-server суулгасан бол мөн засах шаардлагатай болно системийн скрипт файл.

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

  • улаан малгай

  • Федора

  • 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 (явж + influxdb)

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

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

  • Би өөрөө бичих болно

  • бусад

39 хэрэглэгч санал өгсөн. 47 хэрэглэгч түдгэлзсэн.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх