Mhoroi mose! Mwedzi mishoma yapfuura, takatangisa yedu nyowani-yakavhurika sosi chirongwa mukugadzira - iyo Grafana plugin yekutarisa kubernetes, yatakadaidza.
Chikamu 0 - nhanganyaya: takasvika sei pakadai?
Pfungwa yekunyora yedu plugin yeGrafan yakauya kwatiri netsaona. Kambani yedu yanga ichiongorora mapurojekiti ewebhu eakasiyana mazinga ekuomarara kweanopfuura makore gumi. Munguva ino, takaunganidza huwandu hukuru hwehunyanzvi, zviitiko zvinonakidza, uye ruzivo mukushandisa akasiyana masisitimu ekutarisa. Uye pane imwe nguva takazvibvunza kuti: "Pane mashiripiti ekuongorora Kubernetes, kuitira kuti, sezvavanotaura, "zviise uye uzvikanganwe"?" Prometheus + Grafana musanganiswa. Uye semhinduro dzakagadzirirwa-dzakagadzirwa iyi stack, kune yakakura seti yemhando dzakasiyana dzezvishandiso: prometheus-operator, seti ye kubernetes-mixin dashboards, grafana-kubernetes-app.
Iyo grafana-kubernetes-app plugin yakaita seyakanyanya kunakidza sarudzo kwatiri, asi haina kutsigirwa kweanopfuura gore uye, uyezve, haigone kushanda neshanduro nyowani dze node-exporter uye kube-state-metrics. Uye pane imwe nguva takasarudza: "Hatifanire kuita sarudzo yedu here?"
Ndeapi mazano atakasarudza kuita mune yedu plugin:
- kuona kwe "mepu yekushandisa": kuratidzwa kuri nyore kwezvishandiso musumbu, zvakaunganidzwa nemazita, deployments...;
- kuona kwekubatanidza se "deployment - service (+ ports)".
- kuonesa kwekugovera kwezvishandiso zvemasumbu pamapoka emasumbu.
- kuunganidzwa kwemametric uye ruzivo kubva akati wandei masosi: Prometheus uye k8s api server.
- Kutarisisa zvese zviri zviviri chikamu chezvivakwa (kushandiswa kweCPU nguva, ndangariro, disk subsystem, network) uye application logic - hutano-mamiriro pods, nhamba yeanowanikwa replicas, ruzivo rwekupfuura hupenyu / kugadzirira bvunzo.
Chikamu chekutanga: Chii chinonzi "Grafana plugin"?
Kubva pakuona kwehunyanzvi, iyo plugin yeGrafana ndeye angular controller, iyo inochengetwa muGrafana data dhairekitori (/var/grafana/plugins/ /dist/module.js) uye inogona kurodha seSystemJS module. Zvakare mune ino dhairekitori panofanira kunge paine plugin.json faira ine meta yese ruzivo nezve plugin yako: zita, vhezheni, plugin mhando, zvinongedzo kune repository / saiti / rezinesi, kutsamira, zvichingodaro.
module.ts
plugin.json
Sezvauri kuona muscreenshot, isu takatsanangura plugin.type = app. Nekuti plugins yeGrafana inogona kuva yemhando nhatu:
mapuranga: iyo yakajairika mhando yeplugin - ipaneru yekuona chero metrics, inoshandiswa kugadzira akasiyana dashboard.
datasource: plugin yekubatanidza kune imwe data sosi (semuenzaniso, Prometheus-datasource, ClickHouse-datasource, ElasticSearch-datasource).
App: Plugin inokubvumira kuti uvake yako yepamberi application mukati meGrafana, gadzira yako wega mapeji ehtml uye nemaoko uwane iyo datasource kuti uone kwakasiyana data. Zvakare, ma plugins emamwe marudzi (datasource, panel) uye akasiyana dashboard anogona kushandiswa sekutsamira.
Muenzaniso plugin zvinoenderana nerudzi = app.
Unogona kushandisa ese JavaScript uye TypeScript semutauro wechirongwa (takausarudza). Gadziriro dzehello-world plugins yemhando ipi zvayo yaunogona
Chikamu 2: kugadzirira nharaunda yenzvimbo
Kuti tishande pane plugin, isu tinowanzoda kubernetes cluster ine ese akafanomisikidzwa maturusi: prometheus, node-exporter, kube-state-metrics, grafana. Iyo nharaunda inofanirwa kumisikidzwa nekukurumidza, zviri nyore uye zvakasikwa, uye kuve nechokwadi chekupisa-kurodha, iyo Grafana data dhairekitori inofanirwa kukwidzwa zvakananga kubva kumuchina wemugadziri.
Iyo yakanyanya nyore nzira, semaonero edu, yekushanda munharaunda nekubernetes ndeye
Yedu yekupedzisira minikube kuvhura script inoita seizvi:
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
Chikamu 3: budiriro chaiyo
Object Model
Mukugadzirira kuita plugin, takasarudza kutsanangura ese ekutanga Kubernetes masangano atichashanda nawo muchimiro cheTypeScript makirasi: pod, deployment, daemoset, statefulset, basa, cronjob, sevhisi, node, namespace. Imwe neimwe yemakirasi aya inogara nhaka kubva kune yakajairwa BaseModel kirasi, iyo inotsanangura muvaki, muparadzi, nzira dzekuvandudza uye kushandura kuoneka. Imwe neimwe yemakirasi inotsanangura hukama hwakavakirwa nemamwe masangano, semuenzaniso, runyorwa rwemapodhi echikamu chemhando yekutumirwa.
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 = [];
}
}
Nerubatsiro rwemageta nemaseta, tinogona kuratidza kana kuseta mametrics atinoda nenzira iri nyore uye inoverengeka. Semuyenzaniso, yakamisikidzwa kubuda kweanogovewa cpu node:
get cpuAllocatableFormatted(){
let cpu = this.data.status.allocatable.cpu;
if(cpu.indexOf('m') > -1){
cpu = parseInt(cpu)/1000;
}
return cpu;
}
Pages
Rondedzero yemapeji edu ese eplugin yakatanga kutsanangurwa mune yedu pluing.json muchikamu chekutsamira:
Mubhuroko repeji rega rega tinofanirwa kuratidza PEJI ZITA (rinobva rashandurwa kuita slug iyo peji ino ichawanikwa nayo); zita rechikamu chine chekuita nekushanda kwepeji rino (rondedzero yezvikamu inotumirwa kune module.ts); zvichiratidza basa remushandisi iro basa nepeji rino riripo uye marongero ekufambisa epadivi.
Muchikamu chinotarisira kushanda kwepeji, tinofanira kuseta templateUrl, tichipfuura ipapo nzira inoenda kuhtml faira ine markup. Mukati memutongi, kuburikidza nejekiseni rekutsamira, tinogona kuwana anosvika maviri akakosha angular masevhisi:
- backendSrv - sevhisi inopa kudyidzana neGrafana API server;
- datasourceSrv - sevhisi inopa kudyidzana kwemuno nedatasources dzese dzakaiswa muGrafana yako (semuenzaniso, iyo .getAll() nzira - inodzosa runyoro rwezvese zvakaiswa datasource; .get( ) - inodzosera chimwe chinhu cheimwe datasource.
Chikamu 4: Data source
Kubva pamaonero aGrafana, datasource ndiyo chaiyo plugin sevamwe vese: ine yayo yekupinda poindi module.js, pane faira ine meta information plugin.json. Paunenge uchigadzira plugin ine mhando = app, tinogona kudyidzana nezvose zviripo datasource (semuenzaniso, prometheus-datasource) neyedu, iyo yatinogona kuchengeta zvakananga mu plugin dhairekitori (dist/datasource/*) kana kuisa seanotsamira. Mune yedu kesi, iyo datasource inouya neiyo plugin kodhi. Izvo zvinodiwawo kuve ne config.html template uye ConfigCtrl controller, iyo ichashandiswa kune datasource muenzaniso kumisikidza peji uye iyo Datasource controller, iyo inoshandisa iyo inoshanda logic yedatasource yako.
MuKubeGraf plugin, kubva pamushandisi wekutarisa, iyo datasource muenzaniso wekubernetes cluster inoshandisa zvinotevera zvinogoneka (source code inowanikwa.
- kuunganidza data kubva ku k8s api-server (kuwana rondedzero yemazita, deployments ...)
- proxying zvikumbiro kune prometheus-datasource (iyo inosarudzwa muzvirongwa zveplugin zveboka rega rega) uye kugadzirisa mhinduro dzekushandisa data mumapeji akamira uye mumadhibhodhi.
- kuvandudza data pane static plugin mapeji (ine yakatarwa yekumutsiridza mwero).
- kugadzirisa mibvunzo kugadzira template sheet mune grafana-dashboards (metriFindQuery() nzira)
- bvunzo yekubatanidza neyekupedzisira k8s cluster.
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"};
})
}
Imwe pfungwa yakasarudzika inonakidza, mumaonero edu, ndeyekuitwa kwechokwadi uye mvumo nzira yedatasource. Kazhinji, kunze kwebhokisi, tinogona kushandisa yakavakirwa-mukati Grafana chikamu datasourceHttpSettings kugadzirisa kuwana kune yekupedzisira data sosi. Tichishandisa chikamu ichi, tinogona kugadzirisa kuwana kune http data source nekutsanangura url uye basic authentication/mvumo marongero: login-password, kana client-cert/client-kiyi. Kuti tiite kugona kugadzirisa kuwana uchishandisa mutakuri tokeni (iyo de facto standard yek8s), taifanira kuita zvishoma tweaking.
Kuti ugadzirise dambudziko iri, unogona kushandisa yakavakirwa-mukati Grafana βPlugin Routesβ magadzirirwo (mamwe mashoko pa
/api/v8/namespaces ine Mvumo: Mutakuri musoro.
Sezvingatarisirwa, kushanda ne k8s api server isu tinoda mushandisi ane kuverenga chete, maratidziro ekugadzira ayo iwe unogona zvakare kuwana mukati.
Chikamu 5: kusunungurwa
Kana uchinge wanyora yako Grafana plugin, iwe unenge uchida kuita kuti iwanikwe pachena. MuGrafana iyi iraibhurari yemaplugins inowanikwa pano
Kuti plugin yako iwanikwe pachitoro chepamutemo, unofanirwa kugadzira PR mukati
uko vhezheni ndiyo vhezheni yeplugin yako, url chinongedzo kune repository, uye kuzvipira ndiyo hashi yekuzvipira iyo chaiyo vhezheni yeplugin ichave iripo.
Uye pakubuda iwe uchaona mufananidzo unoshamisa senge:
Iyo data yayo inozotorwa otomatiki kubva kuReadme.md yako, Changelog.md uye iyo plugin.json faira ine plugin tsananguro.
Chikamu 6: pane mhedziso
Hatina kumira kugadzira plugin yedu mushure mekuburitswa. Uye ikozvino tiri kushanda pakutarisa nemazvo mashandisirwo ezviwanikwa zve cluster node, kuunza hutsva hutsva hwekuvandudza UX, uye zvakare kutora muhuwandu hwemhinduro yakagamuchirwa mushure mekuisa iyo plugin zvese nevatengi vedu uye kubva kuvanhu paGitHub (kana iwe ukaenda. nyaya yako kana kudhonza chikumbiro, ini ndichafara kwazvo :)
Tinovimba kuti chinyorwa ichi chichakubatsira iwe kunzwisisa chishandiso chinoshamisa chakadai seGrafana uye, pamwe, nyora yako plugin.
Ndatenda!)
Source: www.habr.com