Lumelang bohle! Likhoeling tse 'maloa tse fetileng, re ile ra tsebisa projeke ea rona e ncha ea mohloli o bulehileng - plugin ea Grafana bakeng sa ho beha leihlo kubernetes, eo re e bitsitseng.
Karolo 0 - selelekela: re fihlile joang ntlheng ee?
Khopolo ea ho ngola plugin ea rona bakeng sa Grafan e ile ea tla ho rona ka phoso. Khamphani ea rona esale e lekola merero ea webo ea maemo a fapaneng a rarahaneng ka lilemo tse fetang 10. Nakong ena, re bokelletse boitsebelo bo bongata, linyeoe tse khahlisang, le boiphihlelo ba ho sebelisa litsamaiso tse fapaneng tsa ho beha leihlo. 'Me ka nako e' ngoe re ile ra ipotsa: "Na ho na le sesebelisoa sa boselamose bakeng sa ho beha leihlo Kubernetes, e le hore, joalokaha ba re, "e behe 'me u e lebale"?" Prometheus + Grafana motsoako. 'Me joalo ka litharollo tse seng li entsoe bakeng sa stack ena, ho na le sete e kholo ea mefuta e fapaneng ea lisebelisoa: prometheus-operator, sete sa li-dashboards tsa kubernetes-mixin, grafana-kubernetes-app.
Grafana-kubernetes-app plugin e ne e bonahala e le khetho e thahasellisang ka ho fetisisa ho rona, empa ha e e-s'o tšehetsoe nako e fetang selemo, 'me, ho feta moo, e ke ke ea sebetsa le mefuta e mecha ea node-exporter le kube-state-metrics. ’Me ka nako e ’ngoe re ile ra etsa qeto: “Na ha rea lokela ho iketsetsa qeto?”
Ke mehopolo efe eo re nkileng qeto ea ho e sebelisa ho plugin ea rona:
- pono ea "'mapa oa kopo": tlhahiso e bonolo ea lits'ebetso sehlopheng, tse hlophisitsoeng ka libaka tsa mabitso, li-deployments...;
- pono ea likhokahano joalo ka "deployment - service (+ports)".
- pono ea kabo ea lits'ebetso tsa lihlopha ho pholletsa le li-cluster node.
- pokello ea metrics le tlhahisoleseling ho tsoa mehloling e mengata: Prometheus le k8s api seva.
- ho lekola karolo ea bobeli ea litšebeletso tsa motheo (ts'ebeliso ea nako ea CPU, memori, disk subsystem, marang-rang) le mohopolo oa ts'ebeliso - li-pods tsa boemo ba bophelo bo botle, palo ea likopi tse fumanehang, tlhahisoleseling mabapi le ho feta litekong tsa ho phela / ho itokisa.
Karolo ea 1: "Grafana plugin" ke eng?
Ho latela pono ea tekheniki, plugin ea Grafana ke molaoli oa angular, e bolokiloeng bukeng ea data ea Grafana (/var/grafana/plugins/ /dist/module.js) mme e ka jarisoa joalo ka module ea SystemJS. Hape bukeng ena ho lokela ho ba le faele ea plugin.json e nang le tlhahisoleseding eohle ea meta mabapi le plugin ea hau: lebitso, phetolelo, mofuta oa plugin, li-link tsa sebaka sa polokelo / sebaka / laesense, litšepiso, joalo-joalo.
module.ts
plugin.json
Joalokaha u bona skrineng, re boletse plugin.type = app. Hobane li-plugins tsa Grafana e ka ba tsa mefuta e meraro:
phanele: mofuta o tloaelehileng oa plugin - ke phanele ea ho bona metrics efe kapa efe, e sebelisetsoang ho aha li-dashboard tse fapaneng.
mohloli oa boitsebiso: sehokelo sa plugin mohloling o mong oa data (mohlala, Prometheus-datasource, ClickHouse-datasource, ElasticSearch-datasource).
app e: Plugin e u lumellang hore u iketsetse sesebelisoa se ka pele ka hare ho Grafana, u iketsetse maqephe a html 'me u fihlele mohloli oa data ka bowena ho bona lintlha tse fapaneng. Hape, li-plugins tsa mefuta e meng (datasource, panel) le li-dashboards tse fapaneng li ka sebelisoa e le litšepe.
Mohlala o itšetlehileng ka plugin ka mofuta = app.
U ka sebelisa JavaScript le TypeScript ka bobeli joalo ka puo ea lenaneo (re e khethile). Litokisetso tsa li-plugins tsa hello-world tsa mofuta ofe kapa ofe oo u ka o khonang
Karolo ea 2: ho lokisa tikoloho ea lehae
Ho sebetsa ho plugin, ka tlhaho re hloka sehlopha sa kubernetes se nang le lisebelisoa tsohle tse kentsoeng esale pele: prometheus, node-exporter, kube-state-metrics, grafana. Tikoloho e lokela ho hlophisoa ka potlako, ha bonolo le ka tlhaho, 'me ho etsa bonnete ba ho kenya bocha ho chesa, bukana ea data ea Grafana e lokela ho hlongoa ka kotloloho ho tsoa mochining oa mohlahlami.
Tsela e bonolo ka ho fetisisa, ka maikutlo a rona, ea ho sebetsa sebakeng sa heno le kubernetes ke
Sengoloa sa rona sa ho qetela sa minikube se shebahala tjena:
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
Karolo ea 3: nts'etsopele ea 'nete
Mohlala oa Ntho
Ha re itokisetsa ho kenya ts'ebetsong plugin, re nkile qeto ea ho hlalosa mekhatlo eohle ea mantlha ea Kubernetes eo re tla sebetsa le eona ka mokhoa oa litlelase tsa TypeScript: pod, deployment, daemoset, statefulset, job, cronjob, service, node, namespace. E 'ngoe le e' ngoe ea lihlopha tsena e rua ho tsoa sehlopheng se tloaelehileng sa BaseModel, se hlalosang sehahi, sehahi, mekhoa ea ho ntlafatsa le ho fetola ponahalo. E 'ngoe le e 'ngoe ea lihlopha e hlalosa likamano tse teng le mekhatlo e meng, mohlala, lethathamo la li-pods bakeng sa mokhatlo oa mofuta oa phepelo.
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 = [];
}
}
Ka thuso ea li-getters le li-setter, re ka bonts'a kapa ra seta metrics ea setheo eo re e hlokang ka mokhoa o bonolo le o balehang. Mohlala, tlhahiso e hlophisitsoeng ea li-cpu node tse ka abeloang:
get cpuAllocatableFormatted(){
let cpu = this.data.status.allocatable.cpu;
if(cpu.indexOf('m') > -1){
cpu = parseInt(cpu)/1000;
}
return cpu;
}
Pages
Lethathamo la maqephe ohle a li-plugin le hlalositsoe qalong ho pluing.json ea rona karolong ea ho itšetleha:
Leqepheng la leqephe le leng le le leng re tlameha ho bonts'a LEQEPHE NAME (e tla fetoloa hore e be slug eo leqephe lena le tla fumaneha ka eona); lebitso la karolo e ikarabellang bakeng sa ts'ebetso ea leqephe lena (lenane la likarolo le romelloa ho module.ts); e bonts'a karolo ea mosebelisi eo mosebetsi oa leqephe lena o leng teng le litlhophiso tsa ho tsamaea bakeng sa sebaka se ka thoko.
Karolong e ikarabellang bakeng sa ts'ebetso ea leqephe, re tlameha ho seta templateUrl, re fetise moo tsela ea faele ea html ka markup. Ka har'a molaoli, ka ente ea ho itšetleha, re ka fihlella lits'ebeletso tse 2 tsa bohlokoa tsa angular:
- backendSrv - tšebeletso e fanang ka tšebelisano le seva sa Grafana API;
- datasourceSrv - tshebeletso e fanang ka tshebedisano ya lehae le mehlodi yohle ya data e kentsweng ho Grafana ya hao (mohlala, mokgwa wa .getAll() - e kgutlisa lenane la mehlodi yohle e kentsweng ya data; .get( ) - e khutlisa ntho ea mohlala ea mohloli o itseng oa data.
Karolo ea 4: mohloli oa data
Ho ea ka pono ea Grafana, datasource ke plugin e ts'oanang hantle le tse ling kaofela: e na le lintlha tsa eona tsa ho kena module.js, ho na le faele e nang le meta information plugin.json. Ha re hlahisa plugin e nang le mofuta = app, re ka sebelisana le mehloli ea data ka bobeli e teng (mohlala, prometheus-datasource) le ea rona, eo re ka e bolokang ka ho toba bukeng ea plugin (dist/datasource/*) kapa re e kenye e le ho itšetleha. Tabeng ea rona, mohloli oa data o tla le khoutu ea plugin. Hape hoa hlokahala ho ba le template ea config.html le molaoli oa ConfigCtrl, e tla sebelisoa bakeng sa leqephe la tlhophiso ea mohlala oa datasource le molaoli oa Datasource, ea sebelisang mohopolo oa datasource ea hau.
Ho KubeGraf plugin, ho tloha sebakeng sa pono sa basebelisi, mohloli oa data ke mohlala oa sehlopha sa kubernetes se sebelisang bokhoni bo latelang (khoutu ea mohloli e teng.
- ho bokella lintlha ho tswa ho k8s api-server (ho fumana lethathamo la libaka tsa mabitso, li-deployments ...)
- proxying likopo ho prometheus-datasource (e khethiloeng ho litlhophiso tsa plugin bakeng sa sehlopha ka seng se ikhethileng) le ho fometa likarabo ho sebelisa data maqepheng a sa fetoheng le ho li-dashboard.
- ho ntlafatsa lintlha maqepheng a static plugin (ka sekhahla sa ho khatholla se behiloeng).
- sebetsana le lipotso ho hlahisa leqephe la template ho grafana-dashboards (metriFindQuery() mokhoa)
- teko ea khokahano le sehlopha sa ho qetela sa k8s.
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"};
})
}
Ntho e fapaneng e thahasellisang, ho ea ka maikutlo a rona, ke ts'ebetsong ea mokhoa oa ho netefatsa le ho fana ka tumello bakeng sa mohloli oa boitsebiso. Ka tloaelo, ka ntle ho lebokose, re ka sebelisa karolo ea Grafana e hahelletsoeng ka har'a datasourceHttpSettings ho hlophisa phihlello ea mohloli oa data oa ho qetela. Ka ho sebelisa karolo ena, re ka lokisa phihlello ho mohloli oa data oa http ka ho hlakisa url le litlhophiso tsa mantlha tsa netefatso / tumello: login-password, kapa client-cert/client-key. E le ho kenya ts'ebetsong bokhoni ba ho lokisa phihlello ho sebelisa token ea bear (the de facto standard for k8s), re ile ra tlameha ho etsa tweaking e nyane.
Ho rarolla bothata bona, o ka sebelisa mochini o hahelletsoeng oa Grafana "Plugin Routes" (lintlha tse ling ho
/api/v8/namespaces ka Authorization: Hlooho ea Bearer.
Ka tlhaho, ho sebetsa le seva sa k8s api re hloka mosebelisi ea nang le phihlello ea ho bala feela, lipontšo tsa ho theha tseo o ka li fumanang ho tsona.
Karolo ea 5: ho lokolloa
Hang ha u se u ngotse plugin ea hau ea Grafana, ka tlhaho u tla batla ho e etsa hore e fumanehe phatlalatsa. Grafana ke laebrari ea li-plugins tse fumanehang mona
E le hore plugin ea hau e fumanehe lebenkeleng la molao, o hloka ho etsa PR ho
moo phetolelo e leng mofuta oa plugin ea hau, url ke sehokelo sa polokelo, 'me boitlamo ke hash ea boitlamo eo mofuta o itseng oa plugin o tla fumaneha bakeng sa eona.
'Me ka sephetho u tla bona setšoantšo se setle joalo ka:
Lintlha tsa eona li tla nkuoa ka bo eona ho Readme.md, Changelog.md le faeleng ea plugin.json e nang le tlhaloso ea plugin.
Karolo ea 6: sebakeng sa liqeto
Ha rea ka ra emisa ho nts'etsapele plugin ea rona kamora ho lokolloa. 'Me joale re ntse re sebetsa ho lekola ts'ebeliso ea lisebelisoa tsa li-cluster node, ho hlahisa likarolo tse ncha ho ntlafatsa UX, le ho fana ka maikutlo a mangata a fumanoeng ka mor'a ho kenya plugin ke bareki ba rona le ho batho ba GitHub (haeba u tloha. taba ea hau kapa kopo ea hau, ke tla thaba haholo :)
Re tšepa hore sehlooho sena se tla u thusa ho utloisisa sesebelisoa se babatsehang joaloka Grafana 'me, mohlomong, u ngole plugin ea hau.
Kea leboha!)
Source: www.habr.com