Sanibonani nonke! Ezinyangeni ezimbalwa ezedlule, sethule iphrojekthi yethu entsha yomthombo ovulekile ekukhiqizeni - i-plugin ye-Grafana yokuqapha i-kubernetes, esiyibiza ngokuthi
Ingxenye 0 - isingeniso: sifike kanjani kuleli phuzu?
Umqondo wokubhala i-plugin yethu ye-Grafan weza kithi ngengozi. Inkampani yethu ibilokhu iqapha amaphrojekthi wewebhu wamazinga ahlukahlukene obunzima iminyaka engaphezu kwe-10. Ngalesi sikhathi, siqongelele inani elikhulu lobuchwepheshe, izimo ezithokozisayo, nolwazi lokusebenzisa amasistimu okuqapha ahlukahlukene. Futhi ngesinye isikhathi sazibuza: "Ingabe likhona ithuluzi lomlingo lokuqapha i-Kubernetes, ukuze, njengoba bethi, "ibeke futhi uyikhohlwe"?" .. Izinga lemboni yokuqapha ama-k8, yiqiniso, sekuyisikhathi eside i Inhlanganisela ye-Prometheus + Grafana. Futhi njengezixazululo esezenziwe ngomumo zalesi sitaki, kukhona isethi enkulu yezinhlobo ezahlukene zamathuluzi: i-prometheus-opharetha, isethi yamadeshibhodi e-kubernetes-mixin, uhlelo lokusebenza lwe-grafana-kubernetes.
I-plugin ye-grafana-kubernetes-app ibonakala iyinketho ethakazelisa kakhulu kithi, kodwa ayizange isekelwe isikhathi esingaphezu konyaka futhi, ngaphezu kwalokho, ayikwazi ukusebenza nezinguqulo ezintsha ze-node-exporter kanye ne-kube-state-metrics. Futhi ngesinye isikhathi sanquma: “Akufanele yini sizenzele esathu isinqumo?”
Imiphi imibono esinqume ukuyisebenzisa ku-plugin yethu:
- ukuboniswa “kwemephu yohlelo lokusebenza”: isethulo esikahle sezinhlelo zokusebenza kuqoqo, eliqoqwe ngezikhala zamagama, ukusetshenziswa...;
- ukuboniswa kokuxhumana okufana “nokuthunyelwa - isevisi (+izimbobo)”.
- ukubonwa kokusatshalaliswa kwezinhlelo zokusebenza zeqoqo kuwo wonke ama-cluster node.
- ukuqoqwa kwamamethrikhi nolwazi oluvela emithonjeni embalwa: Iseva ye-Prometheus ne-k8s api.
- ukuqapha kokubili ingxenye yengqalasizinda (ukusetshenziswa kwesikhathi se-CPU, inkumbulo, isistimu engaphansi kwediski, inethiwekhi) kanye nengqondo yohlelo lokusebenza - ama-pods esimo sezempilo, inani lezifaniso ezitholakalayo, ulwazi mayelana nokuphumelela ukuhlolwa kokuphila/ukulungela.
Ingxenye 1: Yini "i-plugin ye-Grafana"?
Ngokombono wezobuchwepheshe, i-plugin ye-Grafana iyisilawuli se-angular, esigcinwa kuhla lwemibhalo yedatha ye-Grafana (/var/grafana/plugins/ /dist/module.js) futhi ingalayishwa njengemojula yeSystemJS. Futhi kulolu hlu lwemibhalo kufanele kube nefayela le-plugin.json eliqukethe lonke ulwazi lwe-meta mayelana ne-plugin yakho: igama, inguqulo, uhlobo lwe-plugin, izixhumanisi zendawo yokugcina impahla/isayithi/ilayisensi, okuncikile, nokunye.
module.ts
i-plugin.json
Njengoba ubona kusithombe-skrini, sicacise i-plugin.type = uhlelo lokusebenza. Ngoba ama-plugin e-Grafana angaba izinhlobo ezintathu:
iphaneli: uhlobo oluvame kakhulu lwe-plugin - iphaneli yokubuka noma imaphi amamethrikhi, asetshenziselwa ukwakha amadeshibhodi ahlukahlukene.
umthombo wedatha: isixhumi se-plugin komunye umthombo wedatha (isibonelo, i-Prometheus-datasource, i-ClickHouse-datasource, i-ElasticSearch-datasource).
uhlelo lokusebenza: I-plugin ekuvumela ukuthi wakhe uhlelo lwakho lokusebenza olungaphambili ngaphakathi kwe-Grafana, dala amakhasi akho e-html futhi ufinyelele mathupha umthombo wedatha ukuze ubone ngeso lengqondo idatha ehlukahlukene. Futhi, ama-plugin ezinye izinhlobo (umthombo wedatha, iphaneli) namadeshibhodi ahlukahlukene angasetshenziswa njengokuncika.
Isibonelo sokuncika kwe-plugin enohlobo=uhlelo lokusebenza.
Ungasebenzisa kokubili i-JavaScript ne-TypeScript njengolimi lokuhlela (silukhethile). Amalungiselelo wama-plugin we-hello-world anoma yiluphi uhlobo ongalusebenzisa
Ingxenye 2: ukulungisa indawo yendawo
Ukuze sisebenze ku-plugin, ngokwemvelo sidinga iqoqo le-kubernetes elinawo wonke amathuluzi afakwe ngaphambili: i-prometheus, i-node-exporter, i-kube-state-metrics, i-grafana. Indawo kufanele isethwe ngokushesha, kalula futhi ngokwemvelo, futhi ukuze kuqinisekiswe ukulayisha kabusha okushisayo, uhla lwemibhalo lwedatha ye-Grafana kufanele lufakwe ngokuqondile emshinini wonjiniyela.
Indlela elula kakhulu, ngokubona kwethu, ukusebenza endaweni nge-kubernetes
Iskripthi sethu sokugcina se-minikube sibukeka kanje:
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
Ingxenye 3: ukuthuthukiswa kwangempela
Imodeli Yento
Ekulungiseleleni ukusebenzisa i-plugin, sinqume ukuchaza zonke izinhlangano eziyisisekelo ze-Kubernetes esizosebenza nazo ngendlela yamakilasi e-TypeScript: i-pod, ukuthunyelwa, i-daemoset, i-statefulset, umsebenzi, i-cronjob, isevisi, indawo, indawo yamagama. Ngalinye lalawa makilasi lizuza kusigaba esivamile se-BaseModel, esichaza umakhi, umbhubhisi, izindlela zokubuyekeza nokushintsha ukubonakala. Ikilasi ngalinye lichaza ubudlelwano obubekwe esidlekeni namanye amabhizinisi, isibonelo, uhlu lwama-pods lwebhizinisi lohlobo lokuphakelwa.
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 = [];
}
}
Ngosizo lwama-getters nama-setters, singabonisa noma sisethe ama-metric ebhizinisi esiwadingayo ngendlela elula nefundekayo. Isibonelo, okukhiphayo okufomethiweyo kwama-cpu node abiwe:
get cpuAllocatableFormatted(){
let cpu = this.data.status.allocatable.cpu;
if(cpu.indexOf('m') > -1){
cpu = parseInt(cpu)/1000;
}
return cpu;
}
amakhasi
Uhlu lwawo wonke amakhasi ethu e-plugin luchazwe ekuqaleni ku-pluing.json yethu esigabeni sokuncika:
Ebhulokini yekhasi ngalinye kufanele sikhombise I-PAGE NAME (lizoguqulwa libe i-slug leli khasi elizofinyeleleka ngalo); igama lengxenye ebhekele ukusebenza kwaleli khasi (uhlu lwezingxenye luthunyelwa ku-module.ts); okubonisa indima yomsebenzisi lapho umsebenzi naleli khasi otholakala khona kanye nezilungiselelo zokuzula zebha eseceleni.
Engxenyeni ebhekele ukusebenza kwekhasi, kufanele sisethe i-templateUrl, sidlulise lapho indlela eya kufayela le-html ngomakha. Ngaphakathi kwesilawuli, ngomjovo wokuncika, singakwazi ukufinyelela kumasevisi angu-2 abalulekile:
- backendSrv - isevisi ehlinzeka ngokusebenzisana neseva ye-Grafana API;
- idathasourceSrv - isevisi ehlinzeka ngokusebenzisana kwasendaweni nayo yonke imithombo yedatha efakwe ku-Grafana yakho (isibonelo, indlela ye-.getAll() - ibuyisela uhlu lwayo yonke imithombo yedatha efakiwe; .get( ) - ibuyisela into eyisibonelo yomthombo othile wedatha.
Ingxenye 4: umthombo wedatha
Ngokombono kaGrafana, umthombo wedatha iyi-plugin efanayo ncamashi nezinye: inephoyinti layo lokungena elithi module.js, kukhona ifayela eline-meta information plugin.json. Lapho sithuthukisa i-plugin enohlobo = uhlelo lokusebenza, singasebenzisana nayo yomibili imithombo yedatha ekhona (isibonelo, i-prometheus-datasource) kanye neyethu, esingayigcina ngokuqondile kumkhombandlela we-plugin (dist/datasource/*) noma siyifake njengencikile. Esimweni sethu, umthombo wedatha uza nekhodi ye-plugin. Kuyadingeka futhi ukuthi ube nesifanekiso se-config.html kanye nesilawuli se-ConfigCtrl, esizosetshenziselwa ikhasi lokumisa isibonelo somthombo wedatha kanye nesilawuli somthombo wedatha, esisebenzisa ukuqonda komthombo wakho wedatha.
Ku-plugin ye-KubeGraf, kusukela endaweni yokubuka yomsebenzisi, umthombo wedatha uyisibonelo seqoqo le-kubernetes esebenzisa amakhono alandelayo (ikhodi yomthombo iyatholakala
- ukuqoqa idatha kuseva ye-k8s api (ukuthola uhlu lwezikhala zamagama, ukuthunyelwa...)
- izicelo zommeleli ku-prometheus-datasource (ekhethwa kuzilungiselelo ze-plugin zeqoqo ngalinye elithile) kanye nezimpendulo zokufometha ukuze kusetshenziswe idatha kokubili emakhasini amile kanye nakumadeshibhodi.
- ibuyekeza idatha emakhasini e-plugin amile (ngenani lokuvuselela elimisiwe).
- ukucubungula imibuzo ukuze ukhiqize ishidi lesifanekiso kuma-grafana-dashboards (indlela ye-metriFindQuery())
- ukuhlolwa kokuxhumeka ngeqoqo lokugcina 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"};
})
}
Iphuzu elihlukile elithokozisayo, ngokubona kwethu, ukuqaliswa kokuqinisekisa nokugunyazwa kwendlela yomthombo wedatha. Ngokuvamile, ngaphandle kwebhokisi, singasebenzisa ingxenye ye-Grafana eyakhelwe ngaphakathi yedathasourceHttpSettings ukuze silungiselele ukufinyelela kumthombo wokugcina wedatha. Sisebenzisa le ngxenye, singalungiselela ukufinyelela kumthombo wedatha ye-http ngokucacisa i-url kanye nezilungiselelo eziyisisekelo zokuqinisekisa/ukugunyazwa: ukungena-iphasiwedi, noma i-client-cert/client-key. Ukuze sisebenzise ikhono lokumisa ukufinyelela usebenzisa ithokheni ye-bearer (indinganiso ye-de facto yama-k8s), bekufanele senze ukulungisa kancane.
Ukuxazulula le nkinga, ungasebenzisa indlela eyakhelwe ngaphakathi ye-Grafana “Plugin Routes” (imininingwane eyengeziwe kokuthi
/api/v8/namespaces nge-Authorization: Bearer unhlokweni.
Ngokwemvelo, ukusebenza neseva ye-k8s api sidinga umsebenzisi onokufinyelela kokufunda kuphela, izibonisi zokudala ongazithola futhi
Ingxenye 5: ukukhululwa
Uma usubhale i-plugin yakho ye-Grafana, ngokwemvelo uzofuna ukuyenza itholakale esidlangalaleni. E-Grafana lona umtapo wolwazi wama-plugin otholakala lapha
Ukuze i-plugin yakho itholakale esitolo esisemthethweni, udinga ukwenza i-PR
lapho inguqulo iyinguqulo ye-plugin yakho, i-url iyisixhumanisi senqolobane, futhi ukuzibophezela kuwuphawu lwesibopho lapho inguqulo ethile ye-plugin izotholakala khona.
Futhi ekuphumeni uzobona isithombe esihle njenge:
Idatha yayo izothathwa ngokuzenzakalelayo ku-Readme.md, Changelog.md yakho kanye nefayela le-plugin.json elinencazelo ye-plugin.
Ingxenye 6: esikhundleni seziphetho
Asizange siyeke ukuthuthukisa i-plugin yethu ngemva kokukhishwa. Futhi manje sisebenzela ukuqapha ngendlela efanele ukusetshenziswa kwezinsiza zama-cluster node, sethula izici ezintsha zokuthuthukisa i-UX, futhi siphinde sithole inani elikhulu lempendulo etholiwe ngemva kokufaka i-plugin kokubili ngamakhasimende ethu nakubantu abaku-GitHub (uma ushiya udaba lwakho noma isicelo sokudonsa, ngizojabula kakhulu :)
Sithemba ukuthi lesi sihloko sizokusiza uqonde ithuluzi elihle njengeGrafana futhi, mhlawumbe, ubhale i-plugin yakho.
Ngiyabonga!)
Source: www.habr.com