Halò a h-uile duine! Beagan mhĂŹosan air ais, chuir sinn ar pròiseact stòr fosgailte Ăšr, plugan Grafana airson sgrĂšdadh Kubernetes, air bhog ann an riochdachadh. Tha còd tĂšsail aâ plugain ri fhaighinn ann an San artaigil seo, bu mhath leinn sgeulachd a cho-roinn ribh mu mar a chruthaich sinn am plugan, na h-innealan a chleachd sinn, agus na cnapan-starra a thachair oirnn rè an leasachaidh. Tòisichidh sinn!
PĂ irt 0 - Ro-rĂ dh: Ciamar a rĂ inig sinn an seo?
ThĂ inig am beachd ar plugan fhèin a sgrĂŹobhadh airson Grafana thugainn gu math le cothrom. Tha aâ chompanaidh againn air a bhith aâ cumail sĂšil air pròiseactan lĂŹn de dhiofar iom-fhillteachd airson còrr is 10 bliadhna. Rè na h-Ăšine seo, tha sinn air pailteas eòlais, sgrĂšdaidhean cĂšise inntinneach, agus eòlas a chruinneachadh aâ cleachdadh diofar shiostaman sgrĂšdaidh. Aig Ă m air choreigin, bha sinn aâ faighneachd: âA bheil inneal draoidheil ann airson sĂšil a chumail air Kubernetes as urrainn dhut, mar a chanas iad, âa shuidheachadh agus a dhĂŹochuimhneachadh,ââ? Gu dearbh, tha an cothlamadh Prometheus + Grafana air a bhith mar an ĂŹre gnĂŹomhachais airson sgrĂšdadh K8S o chionn fhada. Tha raon farsaing de dhâ innealan deiseil airson aâ chruach seo ann, nam measg prometheus-operator, an sreath deas-bhòrd kubernetes-mixin, agus grafana-kubernetes-app.
Bha coltas gur e am plugan grafana-kubernetes-app an roghainn as inntinniche dhuinne, ach chan eil taic air a bhith aige airson còrr is bliadhna agus, a bharrachd air sin, chan eil e ag obair le dreachan Úra de node-exporter agus kube-state-metrics. Aig à m air choreigin, cho-dhÚin sinn, "Carson nach cruthaich sinn ar fuasgladh fhèin?"
Dè na beachdan a chuir sinn romhainn a chur an gnĂŹomh anns aâ plugan againn?
- Lèirsinn mapa tagraidh: riochdachadh goireasach de thagraidhean ann an cruinneachadh, air an cruinneachadh a rèir à iteachan-ainm, cleachdaidhean, msaa.;
- lèirsinn de cheanglaichean den t-seòrsa "cleachdadh - seirbheis (+puirt)".
- lèirsinn air sgaoileadh thagraidhean cruinneachaidh thar nódan cruinneachaidh.
- aâ tional meatairean agus fiosrachaidh bho iomadh stòr: Prometheus agus frithealaiche API k8s.
- SgrĂšdadh air an dĂ chuid aâ bhun-structair (cleachdadh Ăšine CPU, cuimhne, fo-shiostam diosc, lĂŹonra) agus loidsig an tagraidhâinbhe slĂ inte nam pods, an Ă ireamh de leth-bhreacan a tha rim faighinn, agus fiosrachadh mu adhartas dheuchainnean beòthalachd/deisealachd.
PĂ irt 1: Dè a thâ ann am plugan Grafana?
Bho shealladh teicnigeach, 's e rianadair ceà rnach a th' ann am plugan airson Grafana 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. Bu chòir faidhle plugin.json a bhith san eòlaire seo cuideachd, anns a bheil a h-uile meata-dhà ta mu do plugan: ainm, dreach, seòrsa plugan, ceanglaichean stòrais/là rach-lÏn/ceadachais, eisimeileachdan, agus mar sin air adhart.

modĂşl.ts

plugan.json
Mar a chÏ thu san dealbh-sgrÏn, shònraich sinn plugin.type = app. Tha seo air sgà th gu bheil trÏ seòrsaichean plugain ann airson Grafana:
pannal: an seòrsa plugan as cumanta - 's e pannal a th' ann airson meatrachdan sònraichte a shealltainn agus thathar ga chleachdadh gus diofar deas-bhòrd a thogail.
stòr dà taCeanglaiche plugan ri stòr dà ta sam bith (mar eisimpleir, Prometheus-datasource, ClickHouse-datasource, ElasticSearch-datasource).
appPlugan a leigeas leat an aplacaid aghaidh agad fhèin a thogail taobh a-staigh Grafana, na duilleagan HTML agad fhèin a chruthachadh, agus faighinn chun stòr-dà ta le là imh gus diofar dhà ta fhaicinn. Faodar seòrsachan plugan eile (stòr-dà ta, pannal) agus diofar deas-bhòrd a chleachdadh mar eisimeileachdan cuideachd.

Eisimpleir de eisimeileachdan plugan le seòrsa = app.
âS urrainn dhut JavaScript no TypeScript a chleachdadh mar chĂ nan prògramaidh (thagh sinn TypeScript). âS urrainn dhut teamplaidean a chruthachadh airson seòrsa sam bith de plugan hello-world. Tha Ă ireamh mhòr de phasganan tòiseachaidh san stòras-tasgaidh seo (tha eisimpleir deuchainneach ann de plugan React) le luchd-togail ro-stĂ laichte agus rèiteichte.
PĂ irt 2: Ullachadh na h-Ărainneachd Ionadail
Gus obrachadh air aâ plugan, bidh feum againn air cruinneachadh Kubernetes leis na h-innealan uile a tha air an stĂ ladh ro-lĂ imh: prometheus, node-exporter, kube-state-metrics, agus grafana. Bu chòir an Ă rainneachd a bhith luath, furasta, agus gun duilgheadas sam bith a stèidheachadh, agus gus dèanamh cinnteach Ă ath-luchdachadh teth, bu chòir am pasgan dĂ ta Grafana a bhith air a chuir suas gu dĂŹreach bho inneal an leasaiche.
Nar beachd-ne, âs e an dòigh as fhasa air obrachadh gu h-ionadail le Kubernetes Is e an ath cheum am pasgan Prometheus + Grafana a stĂ ladh aâ cleachdadh prometheus-operator. Tha am pròiseas airson prometheus-operator a stĂ ladh air minikube air a mhĂŹneachadh gu mionaideach. Gus buanseasmhachd a chomasachadh, feumaidh tu am paramadair a shuidheachadh. seasmhachd: fĂŹor Anns an fhaidhle charts/grafana/values.yaml, cuir do PV agus PVC fhèin ris agus sònraich iad anns aâ pharamadair persistence.existingClaim.
Tha an sgriobt cur air bhog minikube mu dheireadh againn coltach ri 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.LPĂ irt 3: Leasachadh dĂŹreach
Modail nĂŹ
Mar ullachadh airson cur an gnĂŹomh aâ plugain, cho-dhĂšin sinn na h-aonadan bunaiteach Kubernetes uile a bhios sinn ag obair leotha a mhĂŹneachadh mar chlasaichean TypeScript: pod, deployment, daemonset, statefulset, job, cronjob, service, node, agus namespace. Tha gach aon de na clasaichean seo aâ sealbhachadh bho chlas BaseModel cumanta, a tha aâ mĂŹneachadh togair, destructor, agus dòighean airson faicsinneachd Ăšrachadh agus atharrachadh. Bidh gach clas cuideachd aâ mĂŹneachadh dĂ imhean neadaichte le buidhnean eile, leithid liosta de pods airson buidheann cleachdaidh.
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 bhith aâ cleachdadh luchd-faighinn is luchd-suidheachaidh, is urrainn dhuinn na meatrach eintiteas a tha sinn ag iarraidh a thaisbeanadh no a shuidheachadh ann an cruth goireasach is so-leughaidh. Mar eisimpleir, toradh cruthaichte nan nĂłdan 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 nan duilleagan uile den plugan againn air a mhĂŹneachadh an toiseach anns an pluing.json againn anns an earrann eisimeileachdan:

Anns aâ bhloc airson gach duilleag, feumaidh sinn AINM NA DUILLEIGE a shònrachadh (thèid seo an uairsin a thionndadh gu bhith na shlug leis am bi an duilleag seo ruigsinneach); ainm aâ cho-phĂ irt a tha an urra ri obrachadh na duilleige seo (thèid an liosta de cho-phĂ irtean Ă s-mhalairt gu module.ts); comharradh air dreuchd an neach-cleachdaidh airson a bheil obair leis an duilleag seo ri fhaighinn agus roghainnean seòlaidh airson aâ bhĂ r-taoibh.
Anns aâ phĂ irt a tha an urra ri obrachadh na duilleige, feumaidh sinn an templateUrl a shuidheachadh, ga thoirt seachad leis an t-slighe chun fhaidhle HTML anns a bheil an comharradh. Taobh a-staigh an rianadair, tro stealladh eisimeileachd, is urrainn dhuinn faighinn gu dĂ sheirbheis Angular chudromach:
- âS e seirbheis a thâ ann am backendSrv a bheir seachad eadar-obrachadh leis an fhrithealaiche API Grafana;
- âS e seirbheis a thâ ann an datasourceSrv a bheir seachad eadar-obrachadh ionadail leis na stòran dĂ ta uile a tha air an stĂ ladh sa Grafana agad (mar eisimpleir, bidh an dòigh .getAll() aâ tilleadh liosta de na stòran dĂ ta uile a tha air an stĂ ladh; .get( ) â aâ tilleadh nĂŹ eisimpleir de stòr dĂ ta sònraichte.



Pà irt 4: Stòr-dà ta
Bho shealladh Grafana, âs e plugan a thâ ann an stòr-dĂ ta dĂŹreach mar plugan sam bith eile: tha a phuing inntrigidh fhèin aige, module.js, agus faidhle plugin.json le meata-dhĂ ta. Nuair a bhios sinn aâ leasachadh plugan leis an t-seòrsa = app, is urrainn dhuinn eadar-obrachadh le stòran dĂ ta a thâ ann mar-thĂ (mar eisimpleir, prometheus-datasource) no ar stòran fhèin, agus is urrainn dhuinn an stòradh gu dĂŹreach ann an eòlaire nam plugan (dist/datasource/*) no an stĂ ladh mar eisimeileachd. Nar cĂšis-ne, tha an stòr-dĂ ta air a phacaigeadh leis aâ chòd plugan. Tha feum cuideachd air teamplaid config.html agus rianadair ConfigCtrl, a thèid a chleachdadh airson duilleag rèiteachaidh eisimpleir an stòr-dĂ ta agus an rianadair Datasource, a chuireas an gnĂŹomh an loidsig airson an stòr-dĂ ta agad.
Anns aâ plugan KubeGraf, bho shealladh eadar-aghaidh cleachdaiche, âs e stòr-dĂ ta eisimpleir de chruinneachadh Kubernetes a bhios aâ cur an gnĂŹomh na comasan a leanas (còd tĂšsail ri fhaighinn ):
- aâ faighinn dĂ ta bhon fhrithealaiche api k8s (aâ faighinn liosta de dhâĂ iteachan-ainm, cleachdaidhean, msaa.)
- Iarrtasan progsaidh chun prometheus-datasource (a tha air a thaghadh anns na roghainnean plugan airson gach cruinneachadh sònraichte) agus freagairtean a chruth-atharrachadh airson dà ta a chleachdadh ann an duilleagan statach agus deas-bhòrd.
- ag Ăšrachadh dĂ ta air duilleagan statach aâ plugain (le ĂŹre Ăšrachaidh suidhichte).
- Aâ giullachd cheistean gus duilleag teamplaid a chruthachadh ann an deas-bhòrd grafana (method .metriFindQuery())



- deuchainn ceangail leis aâ chruinneachadh 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"};
})
}Tha taobh gu sònraichte inntinneach, nar beachd-ne, de bhith aâ cur an gnĂŹomh an dòigh dearbhaidh is Ăšghdarrais airson an stòr-dĂ ta. Mar as trice, a-mach Ă s aâ bhogsa, is urrainn dhuinn co-phĂ irt datasourceHttpSettings togte Grafana a chleachdadh gus ruigsinneachd chun stòr-dĂ ta mu dheireadh a rèiteachadh. Leis aâ cho-phĂ irt seo, is urrainn dhuinn ruigsinneachd chun stòr-dĂ ta HTTP a rèiteachadh le bhith aâ sònrachadh an URL agus roghainnean dearbhaidh/Ăšghdarrais bunaiteach: logadh a-steach/facal-faire, no client-cert/client-key. Bha feum air beagan atharrachaidh gus an comas ruigsinneachd a rèiteachadh aâ cleachdadh comharra giĂšlain (an inbhe de facto airson k8s) a chur an gnĂŹomh.
Gus an duilgheadas seo fhuasgladh, faodaidh tu inneal "Slighean Plugin" togte Grafana a chleachdadh (barrachd fiosrachaidh air Anns na roghainnean stòr-dà ta againn, is urrainn dhuinn seata de riaghailtean sligheachaidh ainmeachadh a thèid a phròiseasadh leis an fhrithealaiche proxy grafana. Mar eisimpleir, airson gach ceann-uidhe fa leth, tha an roghainn ann cinn-sgrÏobhaidh no URLan a shuidheachadh le taic teamplaid, agus faodar an dà ta airson sin a thoirt bho na raointean jsonData agus secureJsonData (airson faclan-faire no comharran a stòradh ann an cruth crioptaichte). Anns an eisimpleir againne, iarrtasan den chruth /__proxy/api/v1/ainmean-à ite thèid a chleachdadh mar phrocsaidh gu URLan den t-seòrsa a leanas
/api/v1/namespaces leis an t-seata ceann-sgrĂŹobhaidh Ăghdarras: GiĂšlain.


Gu nĂ darra, gus obrachadh leis an fhrithealaiche api k8s, feumaidh sinn neach-cleachdaidh le ruigsinneachd leughaidh a-mhĂ in, agus gheibh thu na manifestean airson an cruthachadh ann an cuideachd .
PĂ irt 5: Sgaoileadh

Cho luath âs a sgrĂŹobhas tu am plugan Grafana agad fhèin, bidh thu gu nĂ darrach airson a dhèanamh stòr fosgailte. Ann an Grafana, is e leabharlann plugan a tha seo, ri fhaighinn aig
Gus am bi am plugan agad ri fhaighinn anns aâ bhĂšth oifigeil, feumaidh tu PR a dhèanamh ann an , aâ cur susbaint mar seo ris an fhaidhle repo.json:

far a bheil version aâ ciallachadh an tionndadh den plugan agad, url aâ ciallachadh aâ cheangal ris an stòr-dĂ ta, agus commit aâ ciallachadh hash aâ chomit a chuireas an tionndadh sònraichte den plugan ri fhaighinn.
Agus aig an toradh chĂŹ thu dealbh mĂŹorbhaileach mar seo:

Thèid an dĂ ta air a shon a ghlacadh gu fèin-ghluasadach bhon fhaidhle Readme.md agad, Changelog.md, agus am faidhle plugin.json leis an tuairisgeul air aâ plugan.
PĂ irt 6: An Ă ite cho-dhĂšnaidhean
Chan eil sinn air stad a bhith aâ leasachadh ar plugan bho chaidh a leigeil ma sgaoil. Tha sinn an-drĂ sta ag obair air sĂšil cheart a chumail air cleachdadh ghoireasan nĂłd cruinneachaidh, feartan Ăšra a chuir an gnĂŹomh gus eòlas an neach-cleachdaidh a leasachadh, agus aâ rèiteachadh an ĂŹre mhòr de bheachdan a fhuair sinn bho ar luchd-ceannach agus bho luchd-cleachdaidh air GitHub Ă s deidh dhuinn am plugan a stĂ ladh (ma dhâ fhĂ gas tu cĂšis no iarrtas tarraing, bhithinn glè thoilichte :)).
Tha sinn an dòchas gun cuidich an t-artaigil seo thu gus inneal cho mÏorbhaileach ri Grafana a thuigsinn agus, is dòcha, do plugan fhèin a sgrÏobhadh.
Tapadh leat!)
Source: www.habr.com
