Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra

Hi uile! O chionn beagan mhìosan, chuir sinn air bhog ar pròiseact stòr fosgailte ùr gu cinneasachadh - am plugan Grafana airson sùil a chumail air kubernetes, ris an can sinn DevOpsProdigy KubeGraf. Tha còd stòr nam plugan ri fhaighinn aig ionad poblach air GitHub. Agus san artaigil seo tha sinn airson an sgeulachd a cho-roinn riut mu mar a chruthaich sinn am plugan, dè na h-innealan a chleachd sinn agus dè na duilgheadasan a choinnich sinn tron ​​​​phròiseas leasachaidh. Tiugainn!

Pàirt 0 - ro-ràdh: ciamar a ràinig sinn an ìre seo?

Thàinig am beachd am plugan againn fhèin a sgrìobhadh airson Grafan gu tur gun fhiosta dhuinn. Tha a’ chompanaidh againn air a bhith a’ cumail sùil air pròiseactan lìn de dhiofar ìrean iom-fhillteachd airson còrr air 10 bliadhna. Rè na h-ùine seo, tha sinn air tòrr eòlais a chruinneachadh, cùisean inntinneach, agus eòlas ann a bhith a’ cleachdadh diofar shiostaman sgrùdaidh. Agus aig àm air choreigin dh’ fhaighnich sinn dhuinn fhìn: “A bheil inneal draoidheil ann airson sùil a chumail air Kubernetes, gus, mar a chanas iad,“ suidhich e agus dìochuimhnich e ”?” .. Tha inbhe a’ ghnìomhachais airson sùil a chumail air k8n, gu dearbh, air a bhith na inbhe o chionn fhada Prometheus + Grafana measgachadh. Agus mar fhuasglaidhean deiseil airson a 'chruach seo, tha seata mòr de dhiofar sheòrsaichean innealan ann: prometheus-operator, seata de chlàran-deasachaidh kubernetes-mixin, grafana-kubernetes-app.

Bha e coltach gur e am plugan grafana-kubernetes-app an roghainn as inntinniche dhuinn, ach cha deach taic a thoirt dha airson còrr air bliadhna agus, a bharrachd air sin, chan urrainn dha obrachadh le dreachan ùra de node-exporter agus kube-state-metrics. Agus aig àm air choreigin cho-dhùin sinn: “Nach bu chòir dhuinn ar co-dhùnadh fhèin a dhèanamh?”

Dè na beachdan a chuir sinn romhainn a chuir an gnìomh anns a’ plugan againn:

  • fradharc air a’ “mhapa tagraidh”: taisbeanadh goireasach de thagraidhean anns a’ bhuidheann, air an cruinneachadh le ainmean, cleachdadh...;
  • sealladh de cheanglaichean mar “cleachdadh - seirbheis (+ puirt)”.
  • fradharc air sgaoileadh thagraidhean cnuasachaidh thar nodan cnuasachaidh.
  • cruinneachadh de mheatairean agus fiosrachadh bho ghrunn stòran: Prometheus agus k8s api server.
  • cumail sùil air gach cuid am pàirt bun-structair (cleachdadh ùine CPU, cuimhne, fo-shiostam diosc, lìonra) agus loidsig tagraidh - pods inbhe slàinte, an àireamh de mhac-samhail a tha rim faighinn, fiosrachadh mu bhith a’ dol seachad air deuchainnean beòthalachd / ullachaidh.

Pàirt 1: Dè th 'ann an "Grafana plugan"?

Bho shealladh teignigeach, tha am plugan airson Grafana na rianadair ceàrnach, a tha air a stòradh ann an eòlaire dàta Grafana (/var/grafana/plugins/ /dist/module.js) agus faodar a luchdachadh mar mhodal SystemJS. Cuideachd anns an eòlaire seo bu chòir gum biodh faidhle plugin.json anns a bheil a h-uile fiosrachadh meta mun plugan agad: ainm, dreach, seòrsa plugan, ceanglaichean ris an ionad-tasgaidh/làrach/ cead, eisimeileachd, is mar sin air adhart.

Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra
modal.ts

Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra
plugan.json

Mar a chì thu san ath-sgrìn, shònraich sinn plugin.type = app. Leis gum faod plugins airson Grafana a bhith de thrì seòrsaichean:

pannal: an seòrsa plugan as cumanta - is e pannal a th’ ann airson meatrach sam bith fhaicinn, air a chleachdadh gus diofar chlàran-deasachaidh a thogail.
stòr-dàta: ceanglaiche plugan gu cuid de thùs dàta (mar eisimpleir, Prometheus-datasource, ClickHouse-datasource, ElasticSearch-datasource).
app: Plugin a leigeas leat an aplacaid aghaidh agad fhèin a thogail taobh a-staigh Grafana, na duilleagan html agad fhèin a chruthachadh agus cothrom fhaighinn air an stòr-dàta le làimh gus diofar dhàta fhaicinn. Cuideachd, faodar plugins de sheòrsan eile (stòr-dàta, pannal) agus diofar chlàran-deasachaidh a chleachdadh mar eisimeileachd.

Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra
Eisimpleir eisimeileachd plugan le type = app.

Faodaidh tu an dà chuid JavaScript agus TypeScript a chleachdadh mar chànan prògramaidh (thagh sinn e). Ullachaidhean airson plugain hello-world de sheòrsa sam bith as urrainn dhut lorg an ceangal: tha àireamh mhòr de phasgan tòiseachaidh anns an stòr seo (tha eadhon eisimpleir deuchainneach de plugan ann an React) le luchd-togail ro-stàlaichte agus rèiteachaidh.

Pàirt 2: ag ullachadh na h-àrainneachd ionadail

Gus obrachadh air a ’phlug, feumaidh sinn gu nàdarra cruinneachadh kubernetes leis na h-innealan ro-stàlaichte gu lèir: prometheus, node-exporter, kube-state-metrics, grafana. Bu chòir an àrainneachd a bhith air a stèidheachadh gu sgiobalta, gu furasta agus gu nàdarrach, agus gus dèanamh cinnteach à ath-luchdachadh teth, bu chòir an eòlaire dàta Grafana a chuir suas gu dìreach bho inneal an leasaiche.

Is e an dòigh as freagarraiche, nar beachd, a bhith ag obair gu h-ionadail le kubernetes minikube. Is e an ath cheum am measgachadh Prometheus + Grafana a chuir a-steach a’ cleachdadh prometheus-operator. ANNS artaigil seo Tha am pròiseas stàlaidh prometheus-operator air minikube air a mhìneachadh gu mionaideach. Gus seasmhachd a chomasachadh, feumaidh tu am paramadair a shuidheachadh seasmhachd: fìor anns an fhaidhle charts/grafana/values.yaml, cuir a-steach do PV agus PVC fhèin agus sònraich iad ann am paramadair persistence.existingClaim

Tha an sgriobt cur air bhog minikube mu dheireadh againn a’ coimhead 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

Pàirt 3: fìor leasachadh

Modail Rud

Mar ullachadh airson am plugan a chuir an gnìomh, chuir sinn romhainn cunntas a thoirt air na buidhnean bunaiteach Kubernetes leis am bi sinn ag obair ann an cruth chlasaichean TypeScript: pod, cleachdadh, daemonset, statefulset, obair, cronjob, seirbheis, nód, namespace. Bidh gach aon de na clasaichean sin a’ sealbhachadh bhon chlas BaseModel cumanta, a tha a’ toirt cunntas air an neach-togail, an sgriosadair, dòighean airson faicsinneachd ùrachadh agus atharrachadh. Bidh gach aon de na clasaichean a’ toirt cunntas air dàimhean neadachaidh le buidhnean eile, mar eisimpleir, liosta de pods airson eintiteas de sheòrsa cleachdadh.

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 cuideachadh bho luchd-faighinn agus setters, is urrainn dhuinn na meatrach eintiteas a tha a dhìth oirnn a thaisbeanadh no a shuidheachadh ann an cruth a tha furasta a leughadh. Mar eisimpleir, toradh cruth de nodan cpu a ghabhas riarachadh:

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

duilleagan

Tha liosta de na duilleagan plugan againn air fad air a mhìneachadh an toiseach anns an pluing.json againn anns an roinn eisimeileachd:

Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra

Anns a' bhloc airson gach duilleag feumaidh sinn AINM NA DUILLEAGAIN a chomharrachadh (thèid an uair sin atharrachadh gu bhith na seilcheag far am bi an duilleag seo ruigsinneach); ainm a 'phàirt a tha an urra ri obrachadh na duilleige seo (tha liosta nan co-phàirtean air a thoirt a-mach gu modal.ts); a’ comharrachadh an àite cleachdaiche airson a bheil obair leis an duilleag seo ri fhaighinn agus na roghainnean seòlaidh airson a’ bhàr-taoibh.

Anns a 'phàirt le uallach airson obrachadh na duilleige, feumaidh sinn templateUrl a shuidheachadh, a' dol seachad air an t-slighe chun an fhaidhle html le comharradh. Taobh a-staigh an rianadair, tro in-stealladh eisimeileachd, gheibh sinn cothrom air suas ri 2 seirbheis ceàrnach cudromach:

  • backendSrv - seirbheis a bheir seachad eadar-obrachadh le frithealaiche Grafana API;
  • datasourceSrv - seirbheis a bheir seachad eadar-obrachadh ionadail leis a h-uile stòr dàta a chaidh a chuir a-steach sa Grafana agad (mar eisimpleir, am modh .getAll() - a’ tilleadh liosta de na stòran dàta air fad a chaidh a chuir a-steach; .get( ) - a’ tilleadh nì eisimpleir de stòr-dàta sònraichte.

Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra

Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra

Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra

Pàirt 4: stòr dàta

Bho thaobh Grafana, tha datasource dìreach mar an aon plugan ris a h-uile gin eile: tha modal puing inntrigidh aige fhèin.js, tha faidhle ann le meta information plugin.json. Nuair a bhios sinn a’ leasachadh plugan le type = app, is urrainn dhuinn eadar-obrachadh leis an dà chuid stòran dàta a th’ ann mar-thà (mar eisimpleir, prometheus-datasource) agus an fheadhainn againn fhèin, as urrainn dhuinn a stòradh gu dìreach anns an eòlaire plugan (dist / datasource / *) no a chuir a-steach mar eisimeileachd. Anns a ’chùis againn, thig an stòr-dàta leis a’ chòd plugan. Feumar cuideachd teamplaid config.html agus rianadair ConfigCtrl a bhith agad, a thèid a chleachdadh airson duilleag rèiteachaidh eisimpleir stòr-dàta agus rianadair Datasource, a chuireas an gnìomh loidsig obrachaidh an stòr-dàta agad.

Anns a ’plugan KubeGraf, bho shealladh eadar-aghaidh an neach-cleachdaidh, tha an stòr-dàta na eisimpleir de bhuidheann kubernetes a chuireas an gnìomh na comasan a leanas (tha còd stòr ri fhaighinn Ceangal):

  • a’ cruinneachadh dàta bhon k8s api-server (a’ faighinn liosta de dh’àiteachan ainmean, cleachdadh...)
  • ag ullachadh iarrtasan gu prometheus-datasource (a tha air a thaghadh anns na roghainnean plugan airson gach brabhsair sònraichte) agus a’ cruth fhreagairtean gus dàta a chleachdadh an dà chuid ann an duilleagan statach agus ann an deas-bhòrdan.
  • ag ùrachadh dàta air duilleagan plugan statach (le ìre ùrachaidh stèidhichte).
  • giullachd cheistean gus duilleag teamplaid a ghineadh ann an grafana-dashboards (modh metriFindQuery ())

Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra

Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra

Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra

  • deuchainn ceangail leis a’ bhuidheann k8s mu dheireadh.
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"};
       })
}

Is e puing inntinneach fa-leth, nar beachd, a bhith a’ buileachadh uidheamachd dearbhaidh is ceadachaidh airson an stòr-dàta. Mar as trice, a-mach às a’ bhogsa, is urrainn dhuinn na datasourceHttpSettings a tha stèidhichte ann an Grafana a chleachdadh gus ruigsinneachd chun stòr dàta deireannach a rèiteachadh. A’ cleachdadh a’ cho-phàirt seo, is urrainn dhuinn ruigsinneachd gu stòr dàta http a rèiteachadh le bhith a’ sònrachadh an url agus na roghainnean dearbhaidh/ùghdarrais bunaiteach: login-password, no client-cert/client-key. Gus an comas ruigsinneachd a rèiteachadh a’ cleachdadh tòcan giùlain (an inbhe de facto airson k8s), bha againn ri beagan tweaking a dhèanamh.

Gus an duilgheadas seo fhuasgladh, faodaidh tu an uidheamachd togte Grafana “Plugin Routes” a chleachdadh (tuilleadh fiosrachaidh aig duilleag sgrìobhainnean oifigeil). Ann an roghainnean an stòr-dàta againn, is urrainn dhuinn seata de riaghailtean slighe ainmeachadh a thèid a phròiseasadh leis an t-seirbheisiche proxy grafana. Mar eisimpleir, airson gach puing crìochnachaidh fa leth tha e comasach cinn-cinn no urls a shuidheachadh le comas teamplaidean, agus faodar dàta airson a thoirt bho na raointean jsonData agus secureJsonData (airson faclan-faire no comharran a stòradh ann an cruth crioptaichte). Anns an eisimpleir againn, ceistean mar /__proxy/api/v1/namespaces thèid a chuir gu url an fhoirm
/api/v8/namespaces leis an Ùghdarrachadh: bann-cinn neach-giùlain.

Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra

Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra

Gu nàdarra, gus obrachadh leis an t-seirbheisiche api k8s feumaidh sinn neach-cleachdaidh le ruigsinneachd leughaidh a-mhàin, taisbeanaidhean airson cruthachadh a lorgas tu ann an cuideachd Còd stòr plugan.

Pàirt 5: sgaoileadh

Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra

Aon uair ‘s gu bheil thu air am plugan Grafana agad fhèin a sgrìobhadh, bidh thu gu nàdarrach airson gum bi e ri fhaighinn gu poblach. Ann an Grafana tha seo na leabharlann de plugins a tha ri fhaighinn an seo grafana.com/grafana/plugins

Gus am bi am plugan agad ri fhaighinn air a’ bhùth oifigeil, feumaidh tu PR a chuir a-steach an tasgaidh seole bhith a’ cur susbaint mar seo ris an fhaidhle repo.json:

Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra

far a bheil dreach mar an dreach den plugan agad, tha url na cheangal ris an stòr-dàta, agus is e gealltanas hash a’ gheallaidh airson am bi dreach sònraichte den plugan ri fhaighinn.

Agus aig an toradh chì thu dealbh iongantach mar:

Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra

Thèid an dàta air a shon a ghlacadh gu fèin-ghluasadach bhon fhaidhle Readme.md, Changelog.md agad agus am plugan.json leis an tuairisgeul air a’ plugan.

Pàirt 6: an àite co-dhùnaidhean

Cha do sguir sinn a bhith a’ leasachadh ar plugan às deidh dhuinn a leigeil ma sgaoil. Agus a-nis tha sinn ag obair air sùil cheart a chumail air cleachdadh ghoireasan de nodan brabhsair, a’ toirt a-steach feartan ùra gus UX a leasachadh, agus cuideachd a’ ràcadh a-steach mòran fios air ais a gheibhear às deidh dhuinn am plugan a chuir a-steach an dà chuid le ar teachdaichean agus bho dhaoine air GitHub (ma dh’ fhàgas tu do chùis no iarrtas tarraing, bidh mi glè thoilichte :)

Tha sinn an dòchas gun cuidich an artaigil seo thu le bhith a’ tuigsinn inneal cho iongantach ri Grafana agus, is dòcha, am plugan agad fhèin a sgrìobhadh.

Tapadh leat!)

Source: www.habr.com

Cuir beachd ann