Ukuthuthukiswa kwe-plugin ye-Grafana: umlando wamashothi amakhulu

Sanibonani nonke! Ezinyangeni ezimbalwa ezedlule, sethule iphrojekthi yethu entsha yomthombo ovulekile ekukhiqizeni - i-plugin ye-Grafana yokuqapha i-kubernetes, esiyibiza ngokuthi DevOpsProdigy KubeGraf. Ikhodi yomthombo we-plugin iyatholakala kokuthi inqolobane yomphakathi ku-GitHub. Futhi kulesi sihloko sifuna ukwabelana nawe ngendaba yokuthi sidale kanjani i-plugin, imaphi amathuluzi esiwasebenzisile nokuthi yiziphi izingibe esihlangabezane nazo phakathi nenqubo yokuthuthukisa. Asambe!

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.

Ukuthuthukiswa kwe-plugin ye-Grafana: umlando wamashothi amakhulu
module.ts

Ukuthuthukiswa kwe-plugin ye-Grafana: umlando wamashothi amakhulu
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.

Ukuthuthukiswa kwe-plugin ye-Grafana: umlando wamashothi amakhulu
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 thola isixhumanisi: le khosombe iqukethe inani elikhulu lamaphekhi okuqala (kukhona ngisho nesibonelo sokuhlola se-plugin ku-React) enabakhi abafakwe ngaphambilini nabamisiwe.

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 minikube. Isinyathelo esilandelayo ukufaka inhlanganisela ye-Prometheus + Grafana usebenzisa i-prometheus-opharetha. IN Lesi sihloko Inqubo yokufaka i-prometheus-opharetha ku-minikube ichazwe ngokuningiliziwe. Ukuze unike amandla ukuphikelela, kufanele usethe ipharamitha ukuphikelela: iqiniso kumashadi wefayela/grafana/values.yaml, engeza eyakho i-PV ne-PVC futhi ucacise kupharamitha ye-persistence.existingClaim

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:

Ukuthuthukiswa kwe-plugin ye-Grafana: umlando wamashothi amakhulu

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.

Ukuthuthukiswa kwe-plugin ye-Grafana: umlando wamashothi amakhulu

Ukuthuthukiswa kwe-plugin ye-Grafana: umlando wamashothi amakhulu

Ukuthuthukiswa kwe-plugin ye-Grafana: umlando wamashothi amakhulu

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 isixhumanisi):

  • 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())

Ukuthuthukiswa kwe-plugin ye-Grafana: umlando wamashothi amakhulu

Ukuthuthukiswa kwe-plugin ye-Grafana: umlando wamashothi amakhulu

Ukuthuthukiswa kwe-plugin ye-Grafana: umlando wamashothi amakhulu

  • 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 ikhasi elisemthethweni lemibhalo). Kuzilungiselelo zomthombo wethu wedatha, singamemezela isethi yemithetho yomzila ezocutshungulwa iseva elibamba ye-grafana. Isibonelo, endaweni yokuphela ngayinye kungenzeka ukusetha izihloko noma ama-url ngokungenzeka kwenziwe isifanekiso, idatha yayo engathathwa ezinkambini ze-jsonData nezivikelekile ze-JsonData (zokugcina amagama ayimfihlo noma amathokheni efomini elibethelwe). Esibonelweni sethu, imibuzo efana /__proxy/api/v1/namespaces izothunyelwa ku-url yefomu
/api/v8/namespaces nge-Authorization: Bearer unhlokweni.

Ukuthuthukiswa kwe-plugin ye-Grafana: umlando wamashothi amakhulu

Ukuthuthukiswa kwe-plugin ye-Grafana: umlando wamashothi amakhulu

Ngokwemvelo, ukusebenza neseva ye-k8s api sidinga umsebenzisi onokufinyelela kokufunda kuphela, izibonisi zokudala ongazithola futhi ikhodi yomthombo we-plugin.

Ingxenye 5: ukukhululwa

Ukuthuthukiswa kwe-plugin ye-Grafana: umlando wamashothi amakhulu

Uma usubhale i-plugin yakho ye-Grafana, ngokwemvelo uzofuna ukuyenza itholakale esidlangalaleni. E-Grafana lona umtapo wolwazi wama-plugin otholakala lapha grafana.com/grafana/plugins

Ukuze i-plugin yakho itholakale esitolo esisemthethweni, udinga ukwenza i-PR lenqolobanengokwengeza okuqukethwe okufana nalokhu kufayela le-repo.json:

Ukuthuthukiswa kwe-plugin ye-Grafana: umlando wamashothi amakhulu

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:

Ukuthuthukiswa kwe-plugin ye-Grafana: umlando wamashothi amakhulu

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

Engeza amazwana