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
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.
modúl.ts
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.
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
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
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:
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.
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())
- 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
/api/v8/namespaces leis an Údarú: Ceanntásc Iompró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
Cuid 5: scaoileadh
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
Ionas go mbeidh do bhreiseán ar fáil ar an siopa oifigiúil, ní mór duit PR a dhéanamh isteach
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:
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