PHP սկրիպտների վիճակագրություն և մոնիտորինգ իրական ժամանակում: ClickHouse-ը և Grafana-ն օգնության են հասնում Փինբային

Այս հոդվածում ես ձեզ կասեմ, թե ինչպես օգտագործել pinba-ն clickhouse-ի և grafana-ի հետ՝ pinba_engine-ի և pinboard-ի փոխարեն:

PHP նախագծում pinba-ն թերևս միակ հուսալի միջոցն է՝ հասկանալու, թե ինչ է կատարվում կատարողականի հետ: Ճիշտ է, pinba-ն սովորաբար իրականացվում է միայն այն ժամանակ, երբ խնդիրներն արդեն նկատվում են, և պարզ չէ, թե «որտեղ փորել»:

Հաճախ ոչ ոք չի պատկերացնում, թե վայրկյան/րոպե քանի անգամ է կանչվում այս կամ այն ​​սցենարը և սկսում են օպտիմալացնել «հպումով»՝ սկսած այն վայրերից, որոնք ավելի տրամաբանական են թվում։

Ոմանք վերլուծում են nginx տեղեկամատյանները, իսկ մյուսները վերլուծում են տվյալների բազայի դանդաղ հարցումները:

Իհարկե, pinba-ն ավելորդ չէր լինի, բայց կան մի քանի պատճառներ, թե ինչու ոչ ամեն նախագիծ ունի այն:

PHP սկրիպտների վիճակագրություն և մոնիտորինգ իրական ժամանակում: ClickHouse-ը և Grafana-ն օգնության են հասնում Փինբային

Եվ առաջին պատճառը տեղադրումն է:

Pinba-ի իրագործումից քիչ թե շատ ինչ-որ «արտահոսք» ստանալու համար շատ ցանկալի է չափումներ տեսնել ոչ միայն վերջին րոպեների, այլև երկար ժամանակի ընթացքում (օրից ամիսներ):

Դրա համար անհրաժեշտ է.

  • տեղադրել ընդլայնում php-ի համար (և գուցե ցանկանաք մոդուլ nginx-ի համար)
  • կազմել ընդլայնում mysql-ի համար
  • տեղադրել pinboard և կարգավորել cron-ը

Pinba-ի մասին տեղեկատվության փոքր քանակի պատճառով շատերի մոտ տպավորություն է ստեղծվում, որ այն աշխատում է միայն PHP5-ով և վաղուց անցյալում է մնացել, բայց ինչպես հետագայում կտեսնենք, դա այդպես չէ:

Առաջին քայլը ամենապարզն է, ընդամենը պետք է գործարկել հրամանը.

apt install php-pinba

Այս ընդլայնումը հասանելի է մինչև php 7.3 ներառյալ պահոցներում, և ձեզ հարկավոր չէ որևէ բան կազմել:

Տեղադրման հրամանը կատարելուց հետո մենք անմիջապես ստանում ենք աշխատանքային ընդլայնում, որը հավաքում և ուղարկում է չափումներ յուրաքանչյուր սցենարի համար (աշխատանքի ժամանակ, հիշողություն և այլն) ձևաչափով։ պրոտոբուֆ udp-ի միջոցով մինչև 127.0.0.1:30002:

Մինչ այժմ ոչ ոք չի բռնել կամ մշակել այս UDP փաթեթները, բայց դա որևէ կերպ բացասաբար չի ազդում ձեր PHP սկրիպտների արագության կամ կայունության վրա:

Մինչև վերջերս միակ հավելվածը, որը կարող էր բռնել և մշակել այս UDP փաթեթները, դա էր pinba_շարժիչ. Նկարագրություն»պարզ և հակիրճ« Տեղադրումը հուսահատեցնում է երբևէ կարդալու և նորից խորանալու ցանկությունը: Կախվածությունների կիլոմետրանոց ցուցակները պարունակում են և՛ փաթեթների անունները, և՛ ծրագրերի անվանումները, և դրանց տեղադրմամբ առանձին էջերի հղումներ, և դրանք ունեն իրենց սեփական հղումները դեպի այլ կախվածություններ: Ոչ ոք ժամանակ կամ ցանկություն չունի զբաղվելու այս հիմարությամբ:

Տեղադրման գործընթացը pinba2 չի արել հատկապես ավելի հեշտ է.

Միգուցե մի օր հնարավոր լինի տեղադրել pinba10-ը մեկ կամ երկու հրամաններով և ստիպված չլինել կարդալ մի խումբ նյութեր՝ հասկանալու համար, թե ինչպես դա անել, բայց առայժմ դա այդպես չէ:

Եթե ​​դուք իսկապես տեղադրեք pinba_engine, ապա սա գործի միայն կեսն է: Ի վերջո, առանց pinboard դուք պետք է սահմանափակվեք միայն վերջին մի քանի րոպեների տվյալներով, կամ դուք պետք է ինքներդ հավաքեք, պահպանեք և պատկերացրեք տվյալները: Լավ է, որ pinboard-ը բավականին պարզ է օգտագործման համար տեղադրում.

Թվում է, թե ինչու են այդքան տառապանքները, եթե php-ի բոլոր չափումները արդեն ուղարկվում են udp նավահանգիստ պրոտոբուֆ ձևաչափով, և ձեզ հարկավոր է միայն ծրագիր գրել, որը կբռնի դրանք և կդնի դրանք ինչ-որ պահեստում: Ըստ երևույթին, այն ծրագրավորողները, ում մոտ այս գաղափարը ծագեց, անմիջապես նստեցին գրելու իրենց սեփական գաղափարները, որոնցից մի քանիսն ավարտվեցին GitHub-ում։

Ստորև ներկայացված է չորս բաց կոդով նախագծերի ակնարկ, որոնք պահպանում են չափումները պահեստում, որոնցից այս տվյալները կարելի է հեշտությամբ առբերել և պատկերացնել, օրինակ՝ օգտագործելով grafana:

olegfedoseev/pinba-server (նոյեմբեր 2017)

udp սերվեր, որը պահպանում է չափումները OpenTSDB-ում: Միգուցե, եթե դուք արդեն օգտագործում եք OpenTSDB ձեր նախագծում, ապա այս լուծումը կհամապատասխանի ձեզ, հակառակ դեպքում խորհուրդ եմ տալիս անցնել այն:

olegfedoseev/pinba-influxdb (Հունիս 2018)

udp սերվերը գնում է, նույնից բրաուզեր, որն այս անգամ չափումները պահում է InfluxDB-ում: Շատ նախագծեր արդեն օգտագործում են InfluxDB մոնիտորինգի համար, ուստի այս լուծումը կարող է կատարյալ լինել նրանց համար:

Կոալիցիայում:

  • Ներխուժում թույլ է տալիս հավաքել ստացված ցուցանիշները և ջնջել բնօրինակը սահմանված ժամանակից հետո:

Դեմ:

ClickHouse-Ninja/Proton (Հունվար 2019)

udp սերվերը գնում է, որը պահպանում է չափումները ClickHouse-ում: Սա իմ ընկերոջ լուծումն է։ Դրան ծանոթանալուց հետո որոշեցի, որ ժամանակն է զբաղվել Pinbu-ի և Clickhouse-ի հետ:

Կոալիցիայում:

  • Clickhouse-ը իդեալական է նման առաջադրանքների համար, այն թույլ է տալիս այնքան սեղմել տվյալները, որ կարող եք պահպանել բոլոր չմշակված տվյալները նույնիսկ առանց ագրեգացիաների:
  • անհրաժեշտության դեպքում, դուք հեշտությամբ կարող եք համախմբել ստացված ցուցանիշները
  • պատրաստի կաղապար գրաֆանայի համար
  • պահպանում է տեղեկատվությունը ժամանակաչափերի վրա

Դեմ:

  • ճակատագրական թերություն
  • Չկա կոնֆիգուր, որտեղ դուք կարող եք կարգավորել տվյալների բազայի և աղյուսակների անվանումը, սերվերի հասցեն և նավահանգիստը:
  • չմշակված տվյալները պահելու ժամանակ օգտագործվում է բառարանի օժանդակ աղյուսակ՝ էջի և տիրույթի հասցեները պահելու համար, ինչը բարդացնում է հետագա հարցումները։
  • այլ մանրուքներ, որոնք հետևում են առաջին մինուսից

pinba-server/pinba-server (ապրիլ 2019)

udp սերվեր php-ում, որը պահպանում է չափումները ClickHouse-ում: Սա իմ լուծումն է, որը Pinba-ի, ClickHouse-ի և protobuf-ի հետ ծանոթանալու արդյունք է: Մինչ ես դասավորում էի այս ամբողջ փունջը, ես գրեցի «հայեցակարգի ապացույց», որն ինձ համար անսպասելիորեն չէր սպառում զգալի ռեսուրսներ (30 ՄԲ օպերատիվ հիշողություն և ութ պրոցեսորային միջուկներից մեկի 1%-ից պակաս), ուստի ես որոշել է կիսվել հանրության հետ:

Առավելությունները նույնն են, ինչ նախորդ լուծումը, ես օգտագործել եմ նաև բնօրինակ pinba_engine-ի սովորական անունները։ Ես նաև ավելացրեցի կոնֆիգուր, որը թույլ է տալիս միանգամից գործարկել մի քանի pinbase սերվերի օրինակներ՝ տարբեր աղյուսակներում չափումները պահպանելու համար. սա օգտակար է, եթե ցանկանում եք տվյալներ հավաքել ոչ միայն php-ից, այլև nginx-ից:
Թերությունները՝ «ճակատագրական թերություն» և այն փոքր բաները, որոնք ձեզ անձամբ չեն սազում, բայց իմ լուծումը «հողաթափի պես պարզ է» և բաղկացած է ընդամենը մոտ 100 տող կոդից, այնպես որ ցանկացած PHP ծրագրավորող կարող է փոխել այն, ինչ իրեն դուր չի գալիս։ մի երկու րոպեից:

Principle շահագործման

UDP պորտը լսվում է 30002: Բոլոր մուտքային փաթեթները վերծանվում են ըստ protobuf սխեմայի և ագրեգացված: Րոպեը մեկ անգամ փաթեթը տեղադրվում է clickhouse-ի մեջ՝ pinba.requests աղյուսակում: (բոլոր պարամետրերը կազմաձևված են կազմաձևում)

Մի փոքր clickhouse-ի մասին

Clickhouse-ն աջակցում է տվյալների պահպանման տարբեր շարժիչներ: Առավել հաճախ օգտագործվողը MergeTree-ն է:

Եթե ​​ինչ-որ պահի որոշեք պահել ագրեգացված տվյալները բոլոր ժամանակների համար, և հում տվյալները միայն վերջինի համար, ապա կարող եք ստեղծել նյութականացված տեսք խմբավորման միջոցով և պարբերաբար մաքրել հիմնական pinba.requests աղյուսակը, մինչդեռ բոլոր տվյալները կմնան աղյուսակում: նյութականացված տեսակետ. Ավելին, pinba.requests աղյուսակը ստեղծելիս կարող եք նշել «շարժիչ = Null», ապա չմշակված տվյալները ընդհանրապես չեն պահվի սկավառակի վրա, և միևնույն ժամանակ այն կհայտնվի նյութականացված տեսքում և կպահվի ագրեգացված: . Ես օգտագործում եմ այս սխեման nginx չափումների համար, քանի որ nginx-ում ես 50 անգամ ավելի շատ հարցումներ ունեմ, քան php-ում:

Այսպիսով, դուք երկար ճանապարհ եք անցել, և ես չէի ցանկանա ձեզ կիսատ թողնել, ուստի ստորև ներկայացված է իմ լուծման և այն ամենի տեղադրման և կազմաձևման մանրամասն նկարագրությունը, ինչ ձեզ հարկավոր է, ինչպես նաև այն որոգայթները, որոնք առաջացրել են մեկից ավելի նավեր: վթարի ենթարկվել. Ամբողջ տեղադրման գործընթացը նկարագրված է Ubuntu 18.04 LTS-ի և Centos 7-ի համար; գործընթացը կարող է փոքր-ինչ տարբերվել այլ բաշխումների և տարբերակների վրա:

Տեղակայում

Ես տեղադրեցի բոլոր անհրաժեշտ հրամանները dockerfile հեշտացնել հրահանգների վերարտադրելիությունը: Ստորև նկարագրված կլինեն միայն որոգայթները:

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-ներից, այնպես որ, եթե ձեր սերվերի վրա firewall չունեք, համոզվեք, որ դրա համար գաղտնաբառ սահմանեք: Դա կարելի է անել նաև /etc/clickhouse-server/users.xml ֆայլում տեղադրվելուց հետո։

Հարկ է նաև նշել, որ clickhouse-ն օգտագործում է մի քանի պորտ, ներառյալ 9000-ը: Եթե ​​դուք արդեն օգտագործում եք այս նավահանգիստը, կարող եք այն փոխել մյուսի /etc/clickhouse-server/config.xml ֆայլում:

grafana clickhouse plugin-ով

Grafana-ն տեղադրելուց հետո օգտագործեք մուտքի ադմինիստրատորը և գաղտնաբառը: Երբ առաջին անգամ մուտք գործեք, Grafana-ն ձեզ կխնդրի նոր գաղտնաբառ սահմանել:

Այնուհետև անցեք «+» -> ներմուծման ընտրացանկ և նշեք ներմուծման վահանակի համարը 10011. Ես պատրաստել և վերբեռնել եմ այս վահանակը, որպեսզի դուք ստիպված չլինեք դա նորից անել ինքներդ:

Grafana-ն աջակցում է clickhouse-ի հետ աշխատել երրորդ կողմի փլագինների միջոցով, սակայն Grafana-ն երրորդ կողմի փլագինների համար ծանուցումներ չունի (դրա համար տոմս կա արդեն մի քանի տարի):

pinba-սերվեր

Protobuf-ի և libevent-ի տեղադրումը պարտադիր չէ, բայց բարելավում է pinba-սերվերի աշխատանքը: Եթե ​​դուք pinba-սերվերը տեղադրում եք /opt-ից այլ թղթապանակում, ապա ձեզ նույնպես պետք է ուղղել համակարգված սցենար ֆայլը:

Pinba մոդուլ nginx-ի համար

Մոդուլ կազմելու համար ձեզ անհրաժեշտ են nginx-ի նույն տարբերակի սկզբնական կոդերը, որն արդեն տեղադրված է ձեր սերվերում, ինչպես նաև նույն կոմպիլյացիայի տարբերակները, հակառակ դեպքում կառուցումը հաջող կլինի, բայց մոդուլը միացնելիս սխալ կուղարկվի, որ. «Մոդուլը երկուական համատեղելի չէ»: Կազմման ընտրանքները կարելի է դիտել nginx -V հրամանի միջոցով

Կյանքը կոտրում է

Իմ բոլոր կայքերն աշխատում են միայն https-ով։ Սխեմայի դաշտը դառնում է անիմաստ, ուստի ես այն օգտագործում եմ վեբ/կոնսոլից առանձնացնելու համար:

Համացանցից հասանելի սցենարներում ես օգտագործում եմ՝

if (ini_get('pinba.enabled')) {
    pinba_schema_set('web');
}

Իսկ կոնսոլի սկրիպտներում (օրինակ՝ cron scripts).

if (ini_get('pinba.enabled')) {
    pinba_schema_set('console');
}

Grafana-ի իմ վահանակում կա վեբ/վահանակային անջատիչ՝ վիճակագրությունը առանձին դիտելու համար:

Դուք կարող եք նաև ուղարկել ձեր պիտակները Pinba-ին, օրինակ՝

pinba_tag_set('country', $countryCode);

Այսքանը.

Խնդրում ենք պատասխանել հոդվածի տակ գտնվող հարցումներին։

Ինչպես միշտ, զգուշացնում եմ, որ չեմ խորհուրդ տալիս և չեմ օգնում Habr-ում և սոցիալական ցանցերում անձնական հաղորդագրությունների միջոցով։

Ստեղծեք տոմս Github-ում:

Խնդրում ենք նաև աջակցել հավանումներով Անգլերեն տարբերակ այս հոդվածը reddit-ում.

Հարցմանը կարող են մասնակցել միայն գրանցված օգտվողները։ Մուտք գործել, խնդրում եմ:

Ի՞նչ ՕՀ եք օգտագործում սերվերի վրա:

  • Ubuntu

  • CentOS

  • Debian

  • Gentoo

  • Red Hat

  • Fedora

  • OpenSUSE- ը

  • ՍՈՒՍ

  • Յունիքս

  • Windows

  • այլ

Քվեարկել է 114 օգտատեր։ 11 օգտատեր ձեռնպահ է մնացել։

php-ի ո՞ր տարբերակն եք օգտագործում սերվերում:

  • 7.3

  • 7.2

  • 7.1

  • 7.0

  • 5

  • այլ

Քվեարկել է 105 օգտատեր։ 17 օգտատեր ձեռնպահ է մնացել։

Երբևէ օգտագործե՞լ եք pinba-ն:

  • այո

  • ոչ, բայց ես կցանկանայի

  • ոչ, և ես չէի ցանկանա

  • ոչ և չեմ լսել նրա մասին

Քվեարկել է 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

Добавить комментарий