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
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.
modal.ts
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.
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
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
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:
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.
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
- 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 ())
- 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
/api/v8/namespaces leis an Ùghdarrachadh: bann-cinn neach-giùlain.
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
Pàirt 5: sgaoileadh
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
Gus am bi am plugan agad ri fhaighinn air a’ bhùth oifigeil, feumaidh tu PR a chuir a-steach
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:
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