Ukuphuhliswa kweplugin yeGrafana: imbali yeeshots ezinkulu

Molweni nonke! Kwiinyanga ezimbalwa ezidlulileyo, saphehlelela iprojekthi yethu entsha yomthombo ovulekileyo kwimveliso- iplagi yeGrafana yokubeka iliso kubernetes, esiyibize ngokuba yimveliso. DevOpsProdigy KubeGraf. Ikhowudi yomthombo weplagi iyafumaneka indawo yokugcina yoluntu kwi-GitHub. Kwaye kweli nqaku sifuna ukwabelana nawe ibali lendlela esenze ngayo iplagin, zeziphi izixhobo esazisebenzisayo kunye neziphi iingozi esiye sadibana nazo ngexesha lophuhliso. Masihambe!

Icandelo 0 - intshayelelo: sifike njani kweli nqanaba?

Umbono wokubhala iplagin yethu yeGrafan yeza kuthi ngengozi. Inkampani yethu ibibeke esweni iiprojekthi zewebhu zamanqanaba ahlukeneyo obunzima ngaphezulu kweminyaka eli-10. Ngeli xesha, siye saqokelela inani elikhulu lobuchule, iimeko ezinomdla, kunye namava ekusebenziseni iinkqubo ezahlukeneyo zokubeka iliso. Kwaye ngaxa lithile sazibuza: "Ngaba kukho isixhobo somlingo sokubeka iliso ku-Kubernetes, ukuze, njengoko besithi, "uyibeke kwaye uyilibale"?" Prometheus + Grafana indibaniselwano. Kwaye njengezisombululo esele zenziwe zale mfumba, kukho isethi enkulu yeentlobo ngeentlobo zezixhobo: iprometheus-operator, iseti ye-kubernetes-mixin dashboards, grafana-kubernetes-app.

I-plugin ye-grafana-kubernetes-app ibonakala iyona ndlela inomdla kakhulu kuthi, kodwa ayizange ixhaswe ngaphezu konyaka kwaye, ngaphezu koko, ayikwazi ukusebenza ngeenguqulelo ezintsha ze-node-exporter kunye ne-kube-state-metrics. Kwaye ngaxa lithile sagqiba kwelokuba: "Ngaba akufuneki sizenzele isigqibo?"

Zeziphi izimvo esigqibe ekubeni siziphumeze kwiplagin yethu:

  • ukubonwa kwe "imephu yesicelo": unikezelo olufanelekileyo lwezicelo kwiqela, ezidityaniswe ngeendawo zamagama, ukuthunyelwa...;
  • ukubonwa koqhagamshelo olufana β€œnokusasazwa-inkonzo (+iizibuko)”.
  • umboniso wokusasazwa kwezicelo zeqela kuzo zonke iindawo zeqela.
  • ingqokelela yeemetrics kunye nolwazi oluvela kwimithombo emininzi: Prometheus kunye ne-k8s api umncedisi.
  • ukubeka esweni zombini inxalenye yeziseko (ukusetyenziswa kwexesha le-CPU, imemori, i-disk subsystem, inethiwekhi) kunye nengqiqo yesicelo - iipods zesimo sempilo, inani leekopi ezifumanekayo, ulwazi malunga nokudlula iimvavanyo zokuphila / ukulungela.

Icandelo 1: Yintoni i-β€œplugin yaseGrafana”?

Ukusuka kwimbono yobugcisa, iplagin yeGrafana sisilawuli se-angular, egcinwe kulawulo lwedatha yaseGrafana (/var/grafana/plugins/ /dist/module.js) kwaye ingalayishwa njengemodyuli yeSystemJS. Kwakhona kule ncwadana kufuneka kubekho ifayile ye-plugin.json equlethe yonke ingcaciso ye-meta malunga neplagin yakho: igama, uguqulelo, uhlobo lwe-plugin, izixhumanisi kwindawo yokugcina / indawo / ilayisenisi, ukuxhomekeka, njalo njalo.

Ukuphuhliswa kweplugin yeGrafana: imbali yeeshots ezinkulu
imodyuli.ts

Ukuphuhliswa kweplugin yeGrafana: imbali yeeshots ezinkulu
iplagin.json

Njengoko ubona kwiscreenshot, sichaze iplagin.type = app. Kuba iiplagi zeGrafana zinokuba ziintlobo ezintathu:

lenjongo: olona hlobo luxhaphakileyo lweplagi - yiphaneli yokubonisa naziphi na iimetriki, ezisetyenziselwa ukwakha iideshbhodi ezahlukeneyo.
umthombo wedatha: isidibanisi seplagin kumthombo othile wedatha (umzekelo, iPrometheus-datasource, ClickHouse-datasource, ElasticSearch-datasource).
app: I-plugin ekuvumela ukuba wakhe isicelo sakho sangaphambili ngaphakathi kweGrafana, yenza amaphepha akho e-html kwaye ufikelele ngesandla kwi-datasource ukuze ubone idatha eyahlukeneyo. Kwakhona, iiplagi zolunye uhlobo (umthombo wedatha, iphaneli) kunye needeshibhodi ezahlukeneyo zingasetyenziswa njengokuxhomekeka.

Ukuphuhliswa kweplugin yeGrafana: imbali yeeshots ezinkulu
Umzekelo oxhomekeke kwi-plugin enohlobo=app.

Ungasebenzisa zombini iJavaScript kunye ne-TypeScript njengolwimi lwenkqubo (siyikhethile). Amalungiselelo eeplagi ze-hello-world zalo naluphi na uhlobo onokuthi ngalo fumana ikhonkco: le ndawo yokugcina iqulethe inani elikhulu leepakethe zokuqala (kukho nomzekelo wokulinga we-plugin kwi-React) kunye nabakhi abafakelweyo kunye nabacwangcisiweyo.

Icandelo 2: ukulungisa okusingqongileyo kwendawo

Ukusebenza kwiplagin, ngokwendalo sifuna i-kubernetes cluster nazo zonke izixhobo ezifakwe ngaphambili: prometheus, node-exporter, kube-state-metrics, grafana. Imeko-bume kufuneka imiselwe ngokukhawuleza, ngokulula nangendalo, kwaye ukuqinisekisa ukulayishwa kwakhona okushushu, uluhlu lwedatha yeGrafana kufuneka inyuswe ngokuthe ngqo kumatshini womphuhlisi.

Eyona ndlela ilula, ngokoluvo lwethu, ukusebenza kwindawo kunye ne-kubernetes minikube. Isinyathelo esilandelayo kukufaka i-Prometheus + Grafana indibaniselwano usebenzisa i-prometheus-operator. IN Oku kubhaliwe Inkqubo yokufaka i-prometheus-opharetha kwi-minikube ichazwe ngokweenkcukacha. Ukuvumela ukuzingisa, kufuneka usete iparameter ukuzingisa: yinyani kwiitshathi/grafana/values.yaml ifayile, yongeza eyakho iPV kunye nePVC kwaye uzikhankanye kwi persistence.existingClaim parameter

Iskripthi sethu sokugqibela seminikube sijongeka ngolu hlobo:

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

Icandelo 3: uphuhliso lokwenene

Imodeli Yento

Ukulungiselela ukuphumeza i-plugin, sagqiba ekubeni sichaze zonke izinto ezisisiseko ze-Kubernetes esiza kusebenza nazo ngendlela yeeklasi ze-TypeScript: i-pod, i-deployment, i-daemoset, i-statefulset, umsebenzi, i-cronjob, inkonzo, i-node, indawo yamagama. Nganye kwezi klasi ilifa kwiklasi ye-BaseModel eqhelekileyo, echaza umakhi, umakhi, iindlela zokuhlaziya kunye nokutshintsha ukubonakala. Nganye yeeklasi ichaza ubudlelwane obufakwe kwindlwane kunye namanye amaziko, umzekelo, uluhlu lweepod zequmrhu lohlobo lokusasazwa.

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 = [];
   }
}

Ngoncedo lwee-getters kunye neeseta, sinokubonisa okanye ukuseta iimetriki zequmrhu esizifunayo ngendlela efanelekileyo nefundekayo. Umzekelo, imveliso efomathiweyo yee-cpu node ezabiwayo:

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

amaphepha

Uluhlu lwamaphepha ethu e-plugin luchazwe ekuqaleni kwipluing.json yethu kwicandelo lokuxhomekeka:

Ukuphuhliswa kweplugin yeGrafana: imbali yeeshots ezinkulu

Kwibhloko yephepha ngalinye kufuneka sibonise i-PAGE NAME (iya kuguqulwa ibe yi-slug eli phepha liza kufikeleleka ngalo); Igama lecandelo elinoxanduva lokusebenza kweli phepha (uluhlu lwamacandelo luthunyelwa ngaphandle kwimodyuli.ts); ebonisa indima yomsebenzisi apho umsebenzi neli phepha ukhoyo kunye nezicwangciso zokukhangela kwibar esecaleni.

Kwicandelo elinoxanduva lokusebenza kwephepha, kufuneka sisete i-templateUrl, sigqithise apho umendo wefayile ye-html ngophawu. Ngaphakathi kwesilawuli, ngenaliti yokuxhomekeka, sinokufikelela kwiinkonzo ezi-2 ezibalulekileyo ze-angular:

  • backendSrv - inkonzo ebonelela ngonxibelelwano kunye nomncedisi we Grafana API;
  • datasourceSrv - inkonzo ebonelela ngonxibelelwano lwasekuhlaleni nayo yonke imithombo yedatha efakwe kwiGrafana yakho (umzekelo, indlela ye.getAll() - ibuyisela uluhlu lwazo zonke iimithombo zedatha ezifakiweyo; .get( ) - ibuyisela into engumzekelo yedatha ethile.

Ukuphuhliswa kweplugin yeGrafana: imbali yeeshots ezinkulu

Ukuphuhliswa kweplugin yeGrafana: imbali yeeshots ezinkulu

Ukuphuhliswa kweplugin yeGrafana: imbali yeeshots ezinkulu

Icandelo 4: umthombo wedatha

Ukusuka kwimbono kaGrafana, i-datasource ifana ncamashi ne-plugin njengazo zonke ezinye: inendawo yayo yokungena imodyuli.js, kukho ifayile eneenkcukacha zemeta plugin.json. Xa uphuhlisa i-plugin ngohlobo = i-app, sinokusebenzisana nazo zombini iidatha ezikhoyo (umzekelo, i-prometheus-datasource) kunye neyethu, esinokuyigcina ngokuthe ngqo kwi-plugin directory (dist/datasource/*) okanye siyifake njengokuxhomekeka. Kwimeko yethu, i-datasource iza nekhowudi yeplagin. Kukwayimfuneko ukuba ube netemplate ye-config.html kunye nomlawuli weConfigCtrl, eya kusetyenziselwa uqwalaselo lomzekelo wedatha yephepha kunye nomlawuli weDatha weDatha, ophumeza ingqiqo yomthombo wakho wedatha.

Kwi-plugin ye-KubeGraf, ukusuka kwindawo yokujonga ujongano lomsebenzisi, umthombo wedatha ngumzekelo weqela le-kubernetes eliphumeza oku kulandelayo (ikhowudi yomthombo iyafumaneka ikhonkco):

  • ukuqokelela idatha kwi-k8s api-server (ukufumana uluhlu lwezithuba zamagama, ukuthunyelwa...)
  • izicelo ezisebenza ngommeli kwi-prometheus-datasource (ekhethwe kwizicwangciso zeplugin kwiqela ngalinye elithile) kunye neempendulo zokufomatha ukuze kusetyenziswe idatha kumaphepha angatshintshiyo nakwiideshibhodi.
  • ukuhlaziya idatha kumaphepha eplagi emileyo (ngomlinganiselo omiselweyo wokuhlaziya).
  • ukuphendula imibuzo ukuvelisa itemplate sheet kwi grafana-dashboards (metriFindQuery() indlela)

Ukuphuhliswa kweplugin yeGrafana: imbali yeeshots ezinkulu

Ukuphuhliswa kweplugin yeGrafana: imbali yeeshots ezinkulu

Ukuphuhliswa kweplugin yeGrafana: imbali yeeshots ezinkulu

  • uvavanyo loqhagamshelwano ngeqela lokugqibela le-k8s.
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"};
       })
}

Inqaku elahlukileyo elinomdla, ngokombono wethu, kukuphunyezwa kokuqinisekiswa kunye nogunyaziso lwendlela yomthombo wedatha. Ngokuqhelekileyo, ngaphandle kwebhokisi, sinokusebenzisa i-Grafana component eyakhelwe-ngaphakathi datasourceHttpSettings ukuqwalasela ufikelelo kumthombo wedatha wokugqibela. Ukusebenzisa eli candelo, sinokuqwalasela ufikelelo kumthombo wedatha ye-http ngokukhankanya i-url kunye noqinisekiso olusisiseko/iisetingi zogunyaziso: igama-lokungena-password, okanye client-cert/client-key. Ukuze kuphunyezwe ukukwazi ukuqwalasela ukufikelela usebenzisa i-token ye-bearer (umgangatho we-de facto we-k8s), kwafuneka senze i-tweaking encinane.

Ukusombulula le ngxaki, ungasebenzisa i-Grafana "Iindlela zePlugin" eyakhelwe ngaphakathi (iinkcukacha ezithe vetshe apha iphepha elisemthethweni lamaxwebhu). Kwiisetingi zomthombo wethu wedatha, sinokubhengeza uluhlu lwemigaqo yomzila eya kuqhutyelwa phambili ngumncedisi we-grafana. Umzekelo, kwisiphelo somntu ngamnye kuyenzeka ukuseta iiheader okanye ii-url ezinokubakho itemplate, idata enokuthi ithatyathwe kwi-jsonData kunye ne-securityJsonData imihlaba (yokugcina amagama agqithisiweyo okanye imiqondiso kwifomu efihliweyo). Kumzekelo wethu, imibuzo efana /__proxy/api/v1/namespaces izakwenziwa kwi-url yefom
/api/v8/izithuba zamagama ngoGunyaziso: Umthwali wesihloko.

Ukuphuhliswa kweplugin yeGrafana: imbali yeeshots ezinkulu

Ukuphuhliswa kweplugin yeGrafana: imbali yeeshots ezinkulu

Ngokwemvelo, ukusebenza kunye nomncedisi we-k8s api sifuna umsebenzisi onokufikelela kuphela, ukubonakalisa ukuyila onokuthi ufumane kuyo. ikhowudi yomthombo weplagi.

Icandelo 5: ukukhululwa

Ukuphuhliswa kweplugin yeGrafana: imbali yeeshots ezinkulu

Nje ukuba ubhale eyakho iplagi yeGrafana, ngokwendalo uya kufuna ukuyenza ifumaneke esidlangalaleni. EGrafana eli lithala leencwadi leeplagi ezikhoyo apha grafana.com/grafana/plugins

Ukuze iplagin yakho ifumaneke kwivenkile esemthethweni, kufuneka wenze iPR lo vimbangokongeza umxholo onje kwifayile ye repo.json:

Ukuphuhliswa kweplugin yeGrafana: imbali yeeshots ezinkulu

apho uguqulelo luguqulelo lweplugin yakho, i-url likhonkco kwindawo yokugcina, kwaye ubophelele yi-hash yokuzinikela apho uguqulelo oluthile lweplagin luya kufumaneka.

Kwaye kwimveliso uya kubona umfanekiso omangalisayo onje:

Ukuphuhliswa kweplugin yeGrafana: imbali yeeshots ezinkulu

Idatha yayo iya kubanjwa ngokuzenzekelayo kwi-Readme.md yakho, i-Changelog.md kunye nefayile ye-plugin.json enenkcazo yeplagin.

Icandelo 6: endaweni yezigqibo

Asizange siyeke ukuphuhlisa iplagin yethu emva kokukhululwa. Kwaye ngoku sisebenza ekubekeni iliso ngokuchanekileyo ukusetyenziswa kwezixhobo zeendawo zeqela, sazisa amanqaku amatsha ukuphucula i-UX, kunye nokufaka inani elikhulu leempendulo ezifunyenweyo emva kokufaka iplagin zombini ngabathengi bethu nakubantu kwiGitHub (ukuba uyahamba. umba wakho okanye isicelo sokutsala, ndiya konwaba kakhulu :)

Siyathemba ukuba eli nqaku liya kukunceda uqonde isixhobo esimangalisayo njengeGrafana kwaye, mhlawumbi, ubhale iplagin yakho.

Enkosi!)

umthombo: www.habr.com

Yongeza izimvo