Breiseán a fhorbairt do Grafana: stair na seatanna móra

Dia duit gach duine! Cúpla mí ó shin, sheolamar ár dtionscadal foinse oscailte nua i dtáirgeadh - an breiseán Grafana chun monatóireacht a dhéanamh ar kubernetes, ar a dtugamar DevOpsProdigy KubeGraf. Tá cód foinse an bhreiseáin ar fáil ag stór poiblí ar GitHub. Agus san Airteagal seo ba mhaith linn an scéal a roinnt leat maidir le conas a chruthaigh muid an breiseán, cad iad na huirlisí a d'úsáideamar agus cad iad na deacrachtaí a bhí againn le linn an phróisis forbartha. A ligean ar dul!

Cuid 0 - réamhrá: conas a shroicheamar an pointe seo?

Trí thimpiste a tháinig an smaoineamh chun ár mbreiseán féin a scríobh do Grafan. Tá ár gcuideachta ag déanamh monatóireachta ar thionscadail ghréasáin ar leibhéil éagsúla castachta ar feadh níos mó ná 10 mbliana. Le linn an ama seo, tá lear mór saineolais, cásanna suimiúla, agus taithí ar úsáid a bhaint as córais mhonatóireachta éagsúla bailithe againn. Agus ag pointe éigin d'iarramar orainn féin: “An bhfuil uirlis draíochta ann chun monatóireacht a dhéanamh ar Kubernetes, ionas go mbeidh, mar a deir siad, "a shocrú agus dearmad a dhéanamh air"?".. Is fada an caighdeán tionscail chun monatóireacht a dhéanamh ar k8s, ar ndóigh Comhcheangail Prometheus + Grafana. Agus mar réitigh réidh don chruach seo, tá sraith mhór uirlisí de chineálacha éagsúla ann: oibreoir prometheus, sraith de chláir kubernetes-meascán, grafana-kubernetes-app.

Ba chosúil gurbh é an breiseán grafana-kubernetes-app an rogha is suimiúla dúinn, ach níor tugadh tacaíocht dó ar feadh níos mó ná bliain agus, ina theannta sin, ní féidir leis oibriú le leaganacha nua de nód-onnmhaireora agus kube-state-metrics. Agus ag pointe éigin shocraigh muid: “Nár cheart dúinn ár gcinneadh féin a dhéanamh?”

Cad iad na smaointe a shocraigh muid a chur i bhfeidhm inár mbreiseán:

  • léirshamhlú ar an “léarscáil iarratais”: cur i láthair áisiúil na bhfeidhmchlár sa bhraisle, grúpáilte de réir ainmneacha, imlonnaithe...;
  • léirshamhlú naisc cosúil le “imscaradh - seirbhís (+ poirt)”.
  • léirshamhlú ar dháileadh na bhfeidhmchlár braisle thar nóid bhraisle.
  • bailiú méadrachta agus faisnéise ó fhoinsí éagsúla: Prometheus agus k8s api server.
  • monatóireacht ar chuid an bhonneagair (úsáid am LAP, cuimhne, fochóras dioscaí, líonra) agus loighic feidhmithe - pods stádas sláinte, líon na macasamhla atá ar fáil, faisnéis faoi thástálacha beocht/ullmhachta a rith.

Cuid 1: Cad is “breiseán Grafana” ann?

Ó thaobh teicniúil de, is rialaitheoir uilleach é an breiseán do Grafana, atá stóráilte in eolaire sonraí Grafana (/var/grafana/breiseáin/ /dist/module.js) agus is féidir é a luchtú mar mhodúl SystemJS. Chomh maith leis sin ba chóir go mbeadh comhad plugin.json san eolaire seo ina bhfuil an fhaisnéis mheite ar fad faoi do bhreiseán: ainm, leagan, cineál breiseán, naisc chuig an stór/suíomh/ceadúnas, spleáchais, agus mar sin de.

Breiseán a fhorbairt do Grafana: stair na seatanna móra
modúl.ts

Breiseán a fhorbairt do Grafana: stair na seatanna móra
breiseán.json

Mar a fheiceann tú sa screenshot, shonraigh muid plugin.type = app. Toisc gur féidir trí chineál breiseán do Grafana a bheith ann:

painéal: an cineál breiseán is coitianta - is painéal é chun aon mhéadracht a léirshamhlú, a úsáidtear chun dashboards éagsúla a thógáil.
foinse sonraí: cónascaire breiseán chuig foinse sonraí éigin (mar shampla, Prometheus-datasource, ClickHouse-datasource, ElasticSearch-datasource).
app: Breiseán a ligeann duit d’fheidhmchlár tosaigh féin a thógáil taobh istigh de Grafana, do leathanaigh html féin a chruthú agus rochtain a fháil de láimh ar an bhfoinse sonraí chun sonraí éagsúla a léirshamhlú. Chomh maith leis sin, is féidir forlíontáin de chineálacha eile (foinse sonraí, painéal) agus deais éagsúla a úsáid mar spleáchais.

Breiseán a fhorbairt do Grafana: stair na seatanna móra
Sampla de spleáchais breiseán le type = app.

Is féidir leat JavaScript agus TypeScript a úsáid mar theanga ríomhchlárúcháin (roghnaíomar é). Ullmhóidí le haghaidh breiseán Dia duit-domhan de chineál ar bith is féidir leat aimsigh an nasc: tá líon mór pacáistí tosaithe sa stór seo (tá fiú sampla turgnamhach de bhreiseán in React) le tógálaithe réamhshuiteáilte agus cumraithe.

Cuid 2: an timpeallacht áitiúil a ullmhú

Chun oibriú ar an mbreiseán, ní mór dúinn go nádúrtha braisle kubernetes leis na huirlisí réamhshuiteáilte go léir: prometheus, nód-onnmhaireoir, kube-state-metrics, grafana. Ba cheart an timpeallacht a chur ar bun go tapa, go héasca agus go nádúrtha, agus chun athluchtú te a chinntiú, ba cheart eolaire sonraí Grafana a shuiteáil go díreach ó mheaisín an fhorbróra.

Is é an bealach is áisiúla, inár dtuairim, oibriú go háitiúil le kubernetes mionciúb. Is é an chéad chéim eile an teaglaim Prometheus + Grafana a shuiteáil ag baint úsáide as prometheus-operator. IN An t-alt seo Déantar cur síos mionsonraithe ar an bpróiseas a bhaineann le prometheus-oibreoir a shuiteáil ar minikube. Chun marthanacht a chumasú, ní mór duit an paraiméadar a shocrú dianseasmhacht: fíor sa chomhad charts/grafana/values.yaml, cuir do PV agus PVC féin leis agus sonraigh iad sa pharaiméadar persistence.existingClaim

Breathnaíonn ár script seolta minikube deiridh mar seo:

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

Cuid 3: forbairt iarbhír

Múnla Réada

Mar ullmhúchán chun an breiseán a chur i bhfeidhm, shocraigh muid cur síos a dhéanamh ar na heintitis bhunúsacha Kubernetes go léir a n-oibreoimid leo i bhfoirm ranganna TypeScript: pod, imscaradh, daemonset, statefulset, job, cronjob, service, nód, namespace. Tagann gach ceann de na haicmí seo le hoidhreacht ón rang coitianta BaseModel, a chuireann síos ar an cruthaitheoir, an scriostóir, na modhanna chun infheictheacht a nuashonrú agus a athrú. Déanann gach ceann de na ranganna cur síos ar chaidrimh neadaithe le haonáin eile, mar shampla, liosta de na pods le haghaidh aonán imlonnaithe cineáil.

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

Le cabhair ó ghetters agus socraitheoirí, is féidir linn méadracht an eintitis a theastaíonn uainn a thaispeáint nó a shocrú i bhfoirm áisiúil agus inléite. Mar shampla, aschur formáidithe nóid cpu in-leithdháilte:

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

Leathanaigh

Déantar cur síos ar liosta dár leathanaigh breiseán go léir ar dtús inár pluing.json sa rannán spleáchais:

Breiseán a fhorbairt do Grafana: stair na seatanna móra

Sa bhloc do gach leathanach ní mór dúinn AINM AN LEATHANACH a chur in iúl (tiontófar é ina seilide ansin trína mbeidh rochtain ar an leathanach seo); ainm an chomhpháirt atá freagrach as oibriú an leathanaigh seo (onnmhairítear liosta na gcomhpháirteanna go module.ts); ag léiriú an ról úsáideora a bhfuil obair leis an leathanach seo ar fáil dó agus socruithe nascleanúna don bharra taoibh.

Sa chomhpháirt atá freagrach as oibriú an leathanaigh, ní mór dúinn a shocrú templateUrl, ag dul ann an cosán go dtí an comhad html le marcáil. Laistigh den rialtóir, trí instealladh spleáchais, is féidir linn rochtain a fháil ar suas le 2 sheirbhís uilleach thábhachtacha:

  • backendSrv - seirbhís a sholáthraíonn idirghníomhú le freastalaí API Grafana;
  • datasourceSrv - seirbhís a sholáthraíonn idirghníomhaíocht áitiúil leis na foinsí sonraí go léir atá suiteáilte i do Grafana (mar shampla, an modh .getAll() - seolann sé liosta de na foinsí sonraí suiteáilte ar fad; .get( ) - cuireann sé ar ais réad shampla d'fhoinse sonraí ar leith.

Breiseán a fhorbairt do Grafana: stair na seatanna móra

Breiseán a fhorbairt do Grafana: stair na seatanna móra

Breiseán a fhorbairt do Grafana: stair na seatanna móra

Cuid 4: foinse sonraí

Ó thaobh Grafana de, tá an breiseán datasource díreach mar an gcéanna leis na cinn eile go léir: tá a phointe iontrála féin aige module.js, tá comhad ann a bhfuil faisnéis mheite ann plugin.json. Agus breiseán á fhorbairt le type = app, is féidir linn idirghníomhú leis na foinsí sonraí atá ann cheana féin (mar shampla, prometheus-datasource) agus lenár gceann féin, ar féidir linn a stóráil go díreach san eolaire breiseán (dist / datasource / *) nó a shuiteáil mar spleáchas. Is é ár gcás, tagann an fhoinse sonraí leis an gcód breiseán. Is gá freisin teimpléad config.html agus rialtóir ConfigCtrl a bheith ann, a úsáidfear don leathanach cumraíochta ásc na foinse sonraí agus rialtóir Datasource, a chuireann loighic do fhoinse sonraí i bhfeidhm.

Sa bhreiseán KubeGraf, ó thaobh an chomhéadain úsáideora de, is sampla é an fhoinse sonraí de bhraisle kubernetes a chuireann na cumais seo a leanas i bhfeidhm (tá cód foinseach ar fáil по ссылке):

  • sonraí a bhailiú ón api-fhreastalaí k8s (liosta spásanna, imlonnaithe a fháil...)
  • iarratais a sheachfhreastalaí chuig prometheus-datasource (a roghnaítear sna socruithe breiseán do gach braisle ar leith) agus ag formáidiú freagraí chun sonraí a úsáid ar leathanaigh statacha agus ar na deais araon.
  • sonraí ar leathanaigh statacha breiseán a nuashonrú (le ráta athnuachana socraithe).
  • ceisteanna a phróiseáil chun bileog theimpléid a ghiniúint i ndeischláir grafana (modh metriFindQuery())

Breiseán a fhorbairt do Grafana: stair na seatanna móra

Breiseán a fhorbairt do Grafana: stair na seatanna móra

Breiseán a fhorbairt do Grafana: stair na seatanna móra

  • tástáil nasc leis an gcnuasach k8s deiridh.
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"};
       })
}

Pointe spéisiúil ar leith, inár dtuairim, is ea meicníocht fíordheimhnithe agus údaraithe a chur i bhfeidhm don fhoinse sonraí. Go hiondúil, as an mbosca, is féidir linn na datasourceHttpSettings comhpháirt Grafana ionsuite a úsáid chun rochtain ar an bhfoinse sonraí deiridh a chumrú. Trí úsáid a bhaint as an gcomhpháirt seo, is féidir linn rochtain ar fhoinse sonraí http a chumrú tríd an url agus na bunsocruithe fíordheimhnithe/údaraithe a shonrú: login-password, nó client-cert/client-key. D'fhonn an cumas rochtain a chumrú a chur i bhfeidhm ag baint úsáide as comhartha iompróra (an caighdeán de facto do k8s), bhí orainn beagán tweaking a dhéanamh.

Chun an fhadhb seo a réiteach, is féidir leat meicníocht ionsuite “Bealaí Breiseán” Grafana a úsáid (tuilleadh sonraí ag leathanach doiciméad oifigiúil). I socruithe ár bhfoinse sonraí, is féidir linn sraith rialacha ródaithe a dhearbhú a phróiseálfaidh an seachfhreastalaí grafana. Mar shampla, le haghaidh gach críochphointe aonair is féidir ceanntásca nó URLanna a shocrú leis an bhféidearthacht templáil, ar féidir sonraí ina leith a thógáil ó na réimsí jsonData agus secureJsonData (chun pasfhocail nó comharthaí a stóráil i bhfoirm chriptithe). In ár sampla, fiosrúcháin cosúil le /__proxy/api/v1/namespaces a proxied go dtí an url na foirme
/api/v8/namespaces leis an Údarú: Ceanntásc Iompróra.

Breiseán a fhorbairt do Grafana: stair na seatanna móra

Breiseán a fhorbairt do Grafana: stair na seatanna móra

Ar ndóigh, le bheith ag obair leis an bhfreastalaí api k8s teastaíonn úsáideoir uainn a bhfuil rochtain inléite amháin aige, forléirithe le haghaidh cruthú ar féidir leat a fháil freisin i cód foinse breiseán.

Cuid 5: scaoileadh

Breiseán a fhorbairt do Grafana: stair na seatanna móra

Nuair a bheidh do bhreiseán Grafana féin scríofa agat, beidh tú ag iarraidh é a chur ar fáil go poiblí. I Grafana tá leabharlann breiseán ar fáil anseo grafana.com/grafana/plugins

Ionas go mbeidh do bhreiseán ar fáil ar an siopa oifigiúil, ní mór duit PR a dhéanamh isteach an stór seotrí ábhar mar seo a chur leis an gcomhad repo.json:

Breiseán a fhorbairt do Grafana: stair na seatanna móra

i gcás inarb é an leagan an leagan de do bhreiseán, is nasc é url leis an stór, agus is é gealltanas an hash den ghealltanas a mbeidh leagan sonrach den bhreiseán ar fáil dó.

Agus ag an aschur feicfidh tú pictiúr iontach mar:

Breiseán a fhorbairt do Grafana: stair na seatanna móra

Gabhfar na sonraí dó go huathoibríoch ó do Readme.md, Changelog.md agus an comhad plugin.json leis an gcur síos ar an mbreiseán.

Cuid 6: in ionad conclúidí

Níor stop muid ag forbairt ár mbreiseán tar éis é a scaoileadh. Agus anois táimid ag obair ar mhonatóireacht cheart a dhéanamh ar úsáid acmhainní na nóid bhraisle, ag tabhairt isteach gnéithe nua chun UX a fheabhsú, agus freisin ag ráthú go leor aiseolais a fuarthas tar éis an breiseán a shuiteáil ónár gcliaint agus ó dhaoine ar GitHub (má fhágann tú d'iarratas a eisiúint nó tarraingt, beidh mé an-sásta :)

Tá súil againn go gcabhróidh an t-alt seo leat uirlis iontach mar Grafana a thuiscint agus, b'fhéidir, do bhreiseán féin a scríobh.

Go raibh maith agat!)

Foinse: will.com

Add a comment