Horumarinta plugin ee Grafana: taariikhda darbo waaweyn

Salaamu caleykum Dhowr bilood ka hor, waxaan bilownay mashruuceena cusub ee isha furan ee wax soo saarka - plugin Grafana ee la socodka kubernetes, kaas oo aan ugu yeernay DevOpsProdigy KubeGraf. Koodhka isha plugin ayaa laga heli karaa at kaydka dadweynaha ee GitHub. Maqaalkan waxaan rabnaa inaan kula wadaagno sheekada sida aan u abuurnay plugin, aaladaha aan isticmaalnay iyo wixii dhib ah ee aan la kulannay intii lagu jiray geeddi-socodka horumarinta. Aan tagno!

Qaybta 0-hordhac: sideen ku gaadhnay meeshan?

Fikradda ah in aan u qorno plugin noo gaar ah ee Grafan waxay noogu timid si shil ah. Shirkaddayadu waxay kormeeraysay mashaariicda shabakada ee heerarka kala duwan ee kakanaanta in ka badan 10 sano. Inta lagu jiro wakhtigan, waxaanu ururinay qadar badan oo khibrad ah, kiisas xiiso leh, iyo waayo-aragnimada isticmaalka hababka kala duwan ee kormeerka. Mararka qaarkood waxaan is weydiinnay: "Ma jiraa qalab sixir ah oo lagu kormeerayo Kubernetes, si, sida ay yiraahdaan, "deji oo illow"? Prometheus + Grafana isku darka. Iyo sida xalalka diyaarka ah ee xirmadan, waxaa jira qalab badan oo noocyo kala duwan ah: prometheus-operator, set of kubernetes-mixin dashboards, grafana-kubernetes-app.

Qalabka 'grafana-kubernetes-app plugin' wuxuu u muuqday midka ugu xiisaha badan annaga, laakiin lama taageerin in ka badan hal sano, sidoo kale, kuma shaqeyn karto noocyada cusub ee node- dhoofiyaha iyo kube-state-metrics. Marna waxaanu go'aansanay: "Miyaynan qaadanayn go'aankayaga?"

Waa maxay fikradaha aan go'aansanay inaan ku hirgelino pluginkeena:

  • sawiridda "maabka codsiga": soo bandhigid habboon ee codsiyada kutlada, oo lagu kooxeeyay meelo magacyo ah, hawlgelin...;
  • muuqaalaynta isku xirka sida "diridda - adeegga (+ dekedaha)".
  • aragtida qaybinta codsiyada kutlada ee qanjidhada kooxda.
  • ururinta mitirka iyo macluumaadka laga helay ilo dhowr ah: Prometheus iyo k8s api server.
  • la socodka labada qaybood ee kaabayaasha ah (isticmaalka wakhtiga CPU, xusuusta, nidaamka-hoosaadka diskka, shabakada) iyo macquulka codsiga --xaalka-caafimaadka, tirada nuqulada la heli karo, macluumaadka ku saabsan gudbinta imtixaanada noolasha/diyaarowga.

Qaybta 1: Waa maxay "Plugin Grafana"?

Marka laga eego dhinaca farsamada, plugin-ka loogu talagalay Grafana waa kontaroole xagal, kaas oo lagu kaydiyo tusaha xogta Grafana (/var/grafana/plugins/ /dist/module.js) waxaana lagu shubi karaa sidii module SystemJS ah. Sidoo kale buug-gacmeedkan waa inuu jiraa faylka plugin.json oo ka kooban dhammaan macluumaadka meta ee ku saabsan plugin kaaga: magaca, nooca, nooca plugin, xiriirinta kaydka/goobta/ shatiga, ku-tiirsanaanta, iyo wixii la mid ah.

Horumarinta plugin ee Grafana: taariikhda darbo waaweyn
module.ts

Horumarinta plugin ee Grafana: taariikhda darbo waaweyn
plugin.json

Sida aad ku arki karto shaashadda, waxaanu cayimay plugin.type = app. Sababtoo ah plugins for Grafana waxay noqon kartaa saddex nooc:

guddi: nooca ugu caansan ee plugin - waa guddi lagu sawirayo cabbir kasta, oo loo isticmaalo in lagu dhiso dashboards kala duwan.
ilaha xogta: plugin ku xidhaha ilaha xogta qaar (tusaale, Prometheus-datasource, ClickHouse-datasource, ElasticSearch-datasource).
app: Plugin kuu ogolaanaya inaad dhisto arjigaaga hore ee gudaha Grafana, abuurto bogag HTML kuu gaar ah oo aad gacanta ku gasho isha xogta si aad u aragto xog kala duwan. Sidoo kale, furayaasha noocyada kale (sourcesource, panel) iyo dashboards kala duwan ayaa loo isticmaali karaa ku tiirsanaanta.

Horumarinta plugin ee Grafana: taariikhda darbo waaweyn
Tusaalaha ku tiirsanaanta plugin ee leh nooca=app.

Waxaad isticmaali kartaa JavaScript iyo TypeScript labadaba sidii barnaamij barnaamij ahaan (anaga ayaa dooranay). U diyaar garowga hello-world plugins nooc kasta oo aad awooddo raadi xiriirkaKaydkani waxa uu ka kooban yahay tiro badan oo xidhmo-bilow ah (xitaa waxa jira tusaale tijaabo ah oo plugin ah oo ku jira React) oo leh dhisayaal hore loo rakibay oo habaysan.

Qaybta 2: diyaarinta deegaanka deegaanka

Si aan uga shaqayno plugin-ka, waxaanu si dabiici ah ugu baahanahay koox kubernetes ah oo leh dhammaan agabyadii hore loo rakibay: prometheus, node-porter, kube-state-metrics, grafana. Deegaanka waa in loo dejiyaa si dhakhso ah, sahlan oo dabiici ah, iyo si loo hubiyo dib-u-celinta kulul, tusaha xogta Grafana waa in si toos ah looga dhejiyaa mashiinka horumariyaha.

Habka ugu habboon, fikraddayada, si aan ula shaqeyno gudaha kubernetes waa minikube. Talaabada xigta waa in lagu rakibo isku darka Prometheus + Grafana adoo isticmaalaya prometheus-operator. IN maqaalkan Habka rakibida prometheus-operator on minikube si faahfaahsan ayaa loo sharaxay. Si aad u suurtageliso adkaysiga, waa inaad dejisaa cabbirka adkaysi: run galka jaantusyada/grafana/values.yaml, ku dar PV adiga kuu gaar ah iyo PVC oo ku cadd si joogta ah.

Qoraalkeena ugu dambeeya ee soo-bandhigidda minikube wuxuu u eg yahay sidan:

minikube start --kubernetes-version=v1.13.4 --memory=4096 --bootstrapper=kubeadm --extra-config=scheduler.address=0.0.0.0 --extra-config=controller-manager.address=0.0.0.0
minikube mount 
/home/sergeisporyshev/Projects/Grafana:/var/grafana --gid=472 --uid=472 --9p-version=9p2000.L

Qaybta 3: horumarka dhabta ah

Qaabka shayga

Diyaarinta hirgelinta plugin, waxaan go'aansanay inaan sharaxno dhammaan hay'adaha aasaasiga ah ee Kubernetes ee aan ku shaqeyn doono qaabka fasalada TypeScript: pod, deployment, daemonset, statefulset, shaqo, cronjob, adeeg, noode, magac. Mid kasta oo ka mid ah fasalladani waxay ka dhaxlaan fasalka BaseModel ee caadiga ah, kaas oo qeexaya dhisaha, burburiyaha, hababka cusboonaysiinta iyo beddelka muuqaalka. Mid kasta oo ka mid ah fasallada ayaa qeexaya xiriirka hoose ee lala yeesho hay'adaha kale, tusaale ahaan, liiska boodhadhka ee nooc ka mid ah geynta.

import {Pod} from "./pod";
import {Service} from "./service";
import {BaseModel} from './traits/baseModel';

export class Deployment extends BaseModel{
   pods: Array<Pod>;
   services: Array<Service>;

   constructor(data: any){
       super(data);
       this.pods = [];
       this.services = [];
   }
}

Anagoo kaashanayna qalab-sameeyaha, waxaan soo bandhigi karnaa ama dejin karnaa cabbirka cidda aan u baahanahay qaab ku habboon oo la akhriyi karo. Tusaale ahaan, wax soo saarka qaabaysan ee qanjidhada cpu ee la qoondeeyey:

get cpuAllocatableFormatted(){
   let cpu = this.data.status.allocatable.cpu;
   if(cpu.indexOf('m') > -1){
       cpu = parseInt(cpu)/1000;
   }
   return cpu;
}

Pages

Liistada dhammaan boggaga plugin ayaa markii hore lagu sifeeyay pluing.json ee qaybta ku-tiirsanaanta:

Horumarinta plugin ee Grafana: taariikhda darbo waaweyn

Qeybta bog kasta waa in aan ku tilmaannaa MAGACA BOGGA (kadib waxaa loo rogi doonaa slug kaas oo boggan lagu heli karo); Magaca qaybta mas'uulka ka ah hawlgalka boggan (liiska qaybaha waxaa loo dhoofiyaa module.ts); Muujinaya doorka isticmaalaha ee shaqada boggan la heli karo iyo dejinta marinka dhinaca bar-side.

Qaybta mas'uulka ka ah hawlgalka bogga, waa in aan dejinno templateUrl, halkaas oo aan u gudubno dariiqa faylka html oo leh calaamad. Gudaha kantaroolka, iyada oo loo marayo duritaanka ku-tiirsanaanta, waxaan ku geli karnaa ilaa 2 adeeg oo xagal muhiim ah:

  • backendSrv - adeeg bixiya isdhexgalka serverka API ee Grafana;
  • datasourceSrv - adeeg siiya is dhexgalka maxalliga ah dhammaan ilaha xogta ee lagu rakibay Grafana kaaga (tusaale, habka .getAll() - soo celisa liiska dhammaan ilaha xogta la rakibay; .hel() ) - soo celisa tusaale ahaan shay xog gaar ah.

Horumarinta plugin ee Grafana: taariikhda darbo waaweyn

Horumarinta plugin ee Grafana: taariikhda darbo waaweyn

Horumarinta plugin ee Grafana: taariikhda darbo waaweyn

Qaybta 4: xogta isha

Marka laga eego aragtida Grafana, ilaha xogta waa isla plugin la mid ah kuwa kale oo dhan: waxay leedahay moduleka barta laga soo galo.js, waxaa jira fayl wata macluumaadka meta plugin.json. Marka la samaynayo plugin leh nooca = app, waxaan la falgali karnaa labada xogta ee jira (tusaale, prometheus-datasource) iyo annaga, kuwaas oo aan si toos ah ugu kaydin karno tusaha plugin (dist/datasource/*) ama ku rakibida ku tiirsanaanta. Xaaladeena, isha xogta waxay la socotaa koodka plugin. Waxa kale oo lagama maarmaan ah in la haysto template config.html iyo Kontoroolka ConfigCtrl, kaas oo loo isticmaali doono tusaale ahaan bogga qaabaynta ilaha xogta iyo kontaroolaha Xogta, kaas oo fuliya macquulnimada ilaha xogtaada.

KubeGraf plugin, laga bilaabo barta is dhexgalka isticmaalaha, isha xogta waa tusaale koox kubernetes ah oo fulisa awoodaha soo socda (koodka isha ayaa diyaar ah link):

  • xog ururinta k8s api-server (helitaanka liiska magacyada meelaha la geynayo...)
  • Codsiyada wakiil ka ah ilaha xogta-prometheus (taas oo lagu doortay goobaha plugin ee koox kasta oo gaar ah) iyo habaynta jawaabaha si loo isticmaalo xogta labadaba boggaga taagan iyo gudaha dashboards.
  • Cusbooneysiinta xogta boggaga plugin ee taagan (oo leh qiime cusbooneysiin go'an).
  • habaynta weydiimaha si loo soo saaro xaashi template ah grafana-dashboards (qaabka metriFindQuery()

Horumarinta plugin ee Grafana: taariikhda darbo waaweyn

Horumarinta plugin ee Grafana: taariikhda darbo waaweyn

Horumarinta plugin ee Grafana: taariikhda darbo waaweyn

  • tijaabada isku xirka kooxda k8s ee ugu dambeeya.
testDatasource(){
   let url = '/api/v1/namespaces';
   let _url = this.url;
   if(this.accessViaToken)
       _url += '/__proxy';
   _url += url;
   return this.backendSrv.datasourceRequest({
       url: _url,
       method: "GET",
       headers: {"Content-Type": 'application/json'}
   })
       .then(response => {
           if (response.status === 200) {
               return {status: "success", message: "Data source is OK", title: "Success"};
           }else{
               return {status: "error", message: "Data source is not OK", title: "Error"};
           }
       }, error => {
           return {status: "error", message: "Data source is not OK", title: "Error"};
       })
}

Qodob gaar ah oo xiiso leh, fikradayada, waa hirgelinta habka xaqiijinta iyo oggolaanshaha xogta xogta. Caadi ahaan, meel ka baxsan sanduuqa, waxaan u isticmaali karnaa ku dhex-dhismay xogta qaybta Grafana datasourceHttpSettings si loo habeeyo gelitaanka isha xogta ugu dambeysa. Isticmaalka qaybtan, waxaan u habayn karnaa gelitaanka isha xogta http anagoo cayimayna url iyo goobaha xaqiijinta/oggolaanshaha aasaasiga ah: erayga sirta ah ee gelitaanka, ama macmiilka-cert/macmiilka-furaha. Si loo hirgeliyo awoodda lagu habeeyo gelitaanka iyadoo la adeegsanayo calaamadda xanbaarsan (heerka de facto ee k8s), waxay ahayd inaan wax yar sameyno.

Si loo xalliyo dhibaatadan, waxaad isticmaali kartaa habka Grafana "Plugin Routes" ee ku dhex jira (faahfaahin dheeraad ah at bogga rasmiga ah ee dukumentiyada). Dejinta ilaha xogtayada, waxaanu ku dhawaaqi karnaa xeerar habayn ah oo uu farsamayn doono serferka proxy ee grafana. Tusaale ahaan, barta dhamaadka shaqsi kasta waxa suurtagal ah in la dejiyo madax ama urls oo leh suurtogalnimada in la isku habeeyo, xogta laga soo qaadi karo jsonData iyo sugiddaJsonData (si loo kaydiyo ereyada sirta ah ama calaamadaha qaab sir ah). Tusaalahayaga, weydiimaha sida /__proxy/api/v1/namespaces waxa lagu xidhi doonaa url ee foomka
/api/v8/namespaces oo leh Oggolaanshaha: madaxa xanbaarsan.

Horumarinta plugin ee Grafana: taariikhda darbo waaweyn

Horumarinta plugin ee Grafana: taariikhda darbo waaweyn

Dabiici ahaan, si aan ula shaqeyno k8s api server waxaan u baahanahay isticmaale leh marin akhri kaliya, muujinta abuurista kaas oo aad sidoo kale ka heli karto plugin isha code.

Qeybta 5: sii deynta

Horumarinta plugin ee Grafana: taariikhda darbo waaweyn

Markaad qorto pluginkaaga Grafana, waxaad si dabiici ah u rabi doontaa inaad ka dhigto mid si guud loo heli karo. Grafana kani waa maktabad plugins ah oo halkan laga heli karo grafana.com/grafana/plugins

Si plugin kaaga uu uga helo dukaanka rasmiga ah, waxaad u baahan tahay inaad PR ka samayso kaydkanadiga oo ku dara macluumaadka sidan oo kale ah faylka repo.json:

Horumarinta plugin ee Grafana: taariikhda darbo waaweyn

halka nooca uu yahay nooca plugin kaaga, url waa isku xirka kaydka, iyo go'aanku waa hash-ka ballanta kaas oo nooc gaar ah oo plugin ah la heli karo.

Wax soo saarka waxaad ku arki doontaa sawir cajiib ah sida:

Horumarinta plugin ee Grafana: taariikhda darbo waaweyn

Xogta loogu talagalay waxaa si toos ah loogala soo bixi doonaa Readme.md, Changelog.md iyo faylka plugin.json ee leh sharaxaadda plugin.

Qaybta 6: halkii gabagabada

Ma aan joojin horumarinta plugin our ka dib markii la sii daayo. Hadda waxaan ka shaqeyneynaa inaan si sax ah ula socono isticmaalka ilaha qanjidhada kooxda, soo bandhigida astaamo cusub si aan u wanaajino UX, iyo sidoo kale qadarin badan oo jawaab celin ah oo la helay ka dib markii la rakibo plugin labadaba macaamiisheena iyo dadka GitHub (haddii aad ka tagto Arrinkaaga ama codsigaaga jiid, aad ayaan ugu farxi doonaa :)

Waxaan rajeyneynaa in maqaalkani uu kaa caawin doono inaad fahamto qalab cajiib ah sida Grafana iyo, laga yaabee, inaad qorto plugin adiga kuu gaar ah.

Mahadsanid!)

Source: www.habr.com

Add a comment