Molweni nonke! Kwiinyanga ezimbalwa ezidlulileyo, saphehlelela iprojekthi yethu entsha yomthombo ovulekileyo kwimveliso- iplagi yeGrafana yokubeka iliso kubernetes, esiyibize ngokuba yimveliso.
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.
imodyuli.ts
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.
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
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
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:
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.
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
- 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)
- 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
/api/v8/izithuba zamagama ngoGunyaziso: Umthwali wesihloko.
Ngokwemvelo, ukusebenza kunye nomncedisi we-k8s api sifuna umsebenzisi onokufikelela kuphela, ukubonakalisa ukuyila onokuthi ufumane kuyo.
Icandelo 5: ukukhululwa
Nje ukuba ubhale eyakho iplagi yeGrafana, ngokwendalo uya kufuna ukuyenza ifumaneke esidlangalaleni. EGrafana eli lithala leencwadi leeplagi ezikhoyo apha
Ukuze iplagin yakho ifumaneke kwivenkile esemthethweni, kufuneka wenze iPR
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:
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