ProHoster > Օրագիր > Վարչակազմը > PHP սկրիպտների վիճակագրություն և մոնիտորինգ իրական ժամանակում: ClickHouse-ը և Grafana-ն օգնության են հասնում Փինբային
PHP սկրիպտների վիճակագրություն և մոնիտորինգ իրական ժամանակում: ClickHouse-ը և Grafana-ն օգնության են հասնում Փինբային
Այս հոդվածում ես ձեզ կասեմ, թե ինչպես օգտագործել pinba-ն clickhouse-ի և grafana-ի հետ՝ pinba_engine-ի և pinboard-ի փոխարեն:
PHP նախագծում pinba-ն թերևս միակ հուսալի միջոցն է՝ հասկանալու, թե ինչ է կատարվում կատարողականի հետ: Ճիշտ է, pinba-ն սովորաբար իրականացվում է միայն այն ժամանակ, երբ խնդիրներն արդեն նկատվում են, և պարզ չէ, թե «որտեղ փորել»:
Հաճախ ոչ ոք չի պատկերացնում, թե վայրկյան/րոպե քանի անգամ է կանչվում այս կամ այն սցենարը և սկսում են օպտիմալացնել «հպումով»՝ սկսած այն վայրերից, որոնք ավելի տրամաբանական են թվում։
Ոմանք վերլուծում են nginx տեղեկամատյանները, իսկ մյուսները վերլուծում են տվյալների բազայի դանդաղ հարցումները:
Իհարկե, pinba-ն ավելորդ չէր լինի, բայց կան մի քանի պատճառներ, թե ինչու ոչ ամեն նախագիծ ունի այն:
Եվ առաջին պատճառը տեղադրումն է:
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_շարժիչ. Նկարագրություն»պարզ և հակիրճ« Տեղադրումը հուսահատեցնում է երբևէ կարդալու և նորից խորանալու ցանկությունը: Կախվածությունների կիլոմետրանոց ցուցակները պարունակում են և՛ փաթեթների անունները, և՛ ծրագրերի անվանումները, և դրանց տեղադրմամբ առանձին էջերի հղումներ, և դրանք ունեն իրենց սեփական հղումները դեպի այլ կախվածություններ: Ոչ ոք ժամանակ կամ ցանկություն չունի զբաղվելու այս հիմարությամբ:
Միգուցե մի օր հնարավոր լինի տեղադրել pinba10-ը մեկ կամ երկու հրամաններով և ստիպված չլինել կարդալ մի խումբ նյութեր՝ հասկանալու համար, թե ինչպես դա անել, բայց առայժմ դա այդպես չէ:
Եթե դուք իսկապես տեղադրեք pinba_engine, ապա սա գործի միայն կեսն է: Ի վերջո, առանց pinboard դուք պետք է սահմանափակվեք միայն վերջին մի քանի րոպեների տվյալներով, կամ դուք պետք է ինքներդ հավաքեք, պահպանեք և պատկերացրեք տվյալները: Լավ է, որ pinboard-ը բավականին պարզ է օգտագործման համար տեղադրում.
Թվում է, թե ինչու են այդքան տառապանքները, եթե php-ի բոլոր չափումները արդեն ուղարկվում են udp նավահանգիստ պրոտոբուֆ ձևաչափով, և ձեզ հարկավոր է միայն ծրագիր գրել, որը կբռնի դրանք և կդնի դրանք ինչ-որ պահեստում: Ըստ երևույթին, այն ծրագրավորողները, ում մոտ այս գաղափարը ծագեց, անմիջապես նստեցին գրելու իրենց սեփական գաղափարները, որոնցից մի քանիսն ավարտվեցին GitHub-ում։
Ստորև ներկայացված է չորս բաց կոդով նախագծերի ակնարկ, որոնք պահպանում են չափումները պահեստում, որոնցից այս տվյալները կարելի է հեշտությամբ առբերել և պատկերացնել, օրինակ՝ օգտագործելով grafana:
udp սերվեր, որը պահպանում է չափումները OpenTSDB-ում: Միգուցե, եթե դուք արդեն օգտագործում եք OpenTSDB ձեր նախագծում, ապա այս լուծումը կհամապատասխանի ձեզ, հակառակ դեպքում խորհուրդ եմ տալիս անցնել այն:
udp սերվերը գնում է, նույնից բրաուզեր, որն այս անգամ չափումները պահում է InfluxDB-ում: Շատ նախագծեր արդեն օգտագործում են InfluxDB մոնիտորինգի համար, ուստի այս լուծումը կարող է կատարյալ լինել նրանց համար:
Կոալիցիայում:
Ներխուժում թույլ է տալիս հավաքել ստացված ցուցանիշները և ջնջել բնօրինակը սահմանված ժամանակից հետո:
Դեմ:
Այս լուծումը չի խնայում ժմչփերի մասին տեղեկատվությունը:
udp սերվերը գնում է, որը պահպանում է չափումները ClickHouse-ում: Սա իմ ընկերոջ լուծումն է։ Դրան ծանոթանալուց հետո որոշեցի, որ ժամանակն է զբաղվել Pinbu-ի և Clickhouse-ի հետ:
Կոալիցիայում:
Clickhouse-ը իդեալական է նման առաջադրանքների համար, այն թույլ է տալիս այնքան սեղմել տվյալները, որ կարող եք պահպանել բոլոր չմշակված տվյալները նույնիսկ առանց ագրեգացիաների:
անհրաժեշտության դեպքում, դուք հեշտությամբ կարող եք համախմբել ստացված ցուցանիշները
Չկա կոնֆիգուր, որտեղ դուք կարող եք կարգավորել տվյալների բազայի և աղյուսակների անվանումը, սերվերի հասցեն և նավահանգիստը:
չմշակված տվյալները պահելու ժամանակ օգտագործվում է բառարանի օժանդակ աղյուսակ՝ էջի և տիրույթի հասցեները պահելու համար, ինչը բարդացնում է հետագա հարցումները։
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) դրանք կարող են մեկնաբանվել:
Տեղադրման ընթացքում 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-ում և սոցիալական ցանցերում անձնական հաղորդագրությունների միջոցով։