Moni nonse! Miyezi ingapo yapitayo, tidayambitsa pulojekiti yathu yatsopano yotsegulira - pulogalamu yowonjezera ya Grafana yowunikira kubernetes, yomwe tidayitcha.
Gawo 0 - mawu oyamba: tinafika bwanji pamenepa?
Lingaliro lolemba pulogalamu yowonjezera yathu ya Grafan linabwera kwa ife mwangozi. Kampani yathu yakhala ikuyang'anira ntchito zapaintaneti zamitundu yosiyanasiyana zovuta kwazaka zopitilira 10. Panthawiyi, tapeza ukadaulo wambiri, milandu yosangalatsa, komanso luso logwiritsa ntchito njira zosiyanasiyana zowunikira. Ndipo panthawi ina tinadzifunsa kuti: "Kodi pali chida chamatsenga chowunikira Kubernetes, kotero kuti, monga akunena, "chikhazikitseni ndikuyiwala"?" Kuphatikiza kwa Prometheus + Grafana. Ndipo monga mayankho okonzeka a stack iyi, pali zida zambiri zamitundu yosiyanasiyana: prometheus-operator, seti ya kubernetes-mixin dashboards, grafana-kubernetes-app.
Pulagi ya grafana-kubernetes-app inkawoneka ngati njira yosangalatsa kwambiri kwa ife, koma sinathandizidwe kwa nthawi yopitilira chaka ndipo, kuwonjezera apo, siyingagwire ntchito ndi mitundu yatsopano ya node-exporter ndi kube-state-metrics. Ndipo nthawi ina tinaganiza kuti: "Kodi sitiyenera kusankha tokha?"
Ndi malingaliro ati omwe tidaganiza kuti tigwiritse ntchito mu plugin yathu:
- kuwonekera kwa "mapu ogwiritsira ntchito": mawonekedwe osavuta ogwiritsira ntchito pamagulu, ophatikizidwa ndi malo a mayina, kutumiza...;
- kuwonetsa zolumikizira monga "deployment - service (+ port)".
- kuwonetseratu kugawidwa kwa mapulogalamu amagulu pamagulu onse.
- kusonkhanitsa ma metric ndi zidziwitso kuchokera kumagwero angapo: Prometheus ndi seva ya k8s api.
- kuyang'anira mbali zonse za zomangamanga (kugwiritsa ntchito nthawi ya CPU, kukumbukira, disk subsystem, netiweki) ndi malingaliro ogwiritsira ntchito - mawonekedwe aumoyo, kuchuluka kwa zofananira zomwe zilipo, zambiri zakupambana mayeso amoyo / kukonzekera.
Gawo 1: Kodi "pulogalamu yowonjezera ya Grafana" ndi chiyani?
Kuchokera pamalingaliro aukadaulo, pulogalamu yowonjezera ya Grafana ndi yowongolera, yomwe imasungidwa mu bukhu la Grafana data (/var/grafana/plugins/ /dist/module.js) ndipo ikhoza kuyikidwa ngati gawo la SystemJS. Komanso mu bukhuli payenera kukhala fayilo ya plugin.json yomwe ili ndi zonse za meta za plugin yanu: dzina, mtundu, mtundu wa plugin, maulalo ku malo / malo / chilolezo, zodalira, ndi zina zotero.
module.ts
plugin.json
Monga mukuwonera pachithunzichi, tidatchula plugin.type = app. Chifukwa mapulagini a Grafana akhoza kukhala amitundu itatu:
gulu: mtundu wodziwika bwino wa pulogalamu yowonjezera - ndi gulu lowonera ma metrics aliwonse, omwe amagwiritsidwa ntchito popanga ma dashboard osiyanasiyana.
detasource: cholumikizira cholumikizira kumagwero ena a data (mwachitsanzo, Prometheus-datasource, ClickHouse-datasource, ElasticSearch-datasource).
app: Pulagi yomwe imakulolani kuti mupange pulogalamu yanu yakutsogolo mkati mwa Grafana, pangani masamba anu a html ndikupeza pamanja gwero la data kuti muwone zambiri. Komanso, mapulagini amitundu ina (datasource, panel) ndi ma dashboard osiyanasiyana angagwiritsidwe ntchito ngati zodalira.
Zitsanzo zodalira pulogalamu yowonjezera ndi type=app.
Mutha kugwiritsa ntchito JavaScript ndi TypeScript ngati chilankhulo chokonzekera (tidachisankha). Kukonzekera kwa mapulagini a hello-world amtundu uliwonse womwe mungathe
Gawo 2: Kukonzekera chilengedwe
Kuti tigwiritse ntchito pulogalamu yowonjezera, mwachibadwa timafunikira gulu la kubernetes ndi zida zonse zoyikidwiratu: prometheus, node-exporter, kube-state-metrics, grafana. Chilengedwe chiyenera kukhazikitsidwa mwamsanga, mosavuta komanso mwachibadwa, ndipo kuti zitsimikizire kutentha, zolemba za Grafana ziyenera kukhazikitsidwa mwachindunji kuchokera ku makina opanga makina.
Njira yabwino kwambiri, m'malingaliro athu, yogwirira ntchito kwanuko ndi kubernetes ndi
Zolemba zathu zomaliza za minikube zimawoneka motere:
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
Gawo 3: chitukuko chenicheni
Chinthu Model
Pokonzekera kukhazikitsa pulogalamu yowonjezera, tidaganiza zofotokozera mabungwe onse a Kubernetes omwe tidzagwire nawo ntchito ngati makalasi a TypeScript: pod, deployment, daemoset, statefulset, job, cronjob, service, node, namespace. Iliyonse mwa makalasi awa imachokera ku kalasi wamba ya BaseModel, yomwe imafotokoza womanga, wowononga, njira zosinthira ndikusintha mawonekedwe. Iliyonse mwa makalasiwo imafotokoza za ubale womwe wasungidwa ndi mabungwe ena, mwachitsanzo, mndandanda wamagulu amtundu wotumizira.
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 = [];
}
}
Mothandizidwa ndi ma getters ndi setter, titha kuwonetsa kapena kukhazikitsa ma metric omwe timawafuna m'njira yosavuta komanso yowerengeka. Mwachitsanzo, zotulutsa zosinthidwa za cpu node zogawika:
get cpuAllocatableFormatted(){
let cpu = this.data.status.allocatable.cpu;
if(cpu.indexOf('m') > -1){
cpu = parseInt(cpu)/1000;
}
return cpu;
}
Pages
Mndandanda wamasamba athu onse owonjezera amafotokozedwa poyambira pluing.json yathu mugawo lodalira:
Patsamba latsamba lililonse tiyenera kuwonetsa PAGE NAME (idzasinthidwa kukhala slug yomwe tsamba ili lizitha kupezeka); dzina la gawo lomwe limagwira ntchito patsamba lino (mndandanda wazinthuzi umatumizidwa ku module.ts); kuwonetsa gawo la ogwiritsa ntchito lomwe tsamba ili lilipo komanso zosintha zapambali.
Mugawo lomwe limayang'anira tsambalo, tiyenera kukhazikitsa templateUrl, kudutsa njira yopita ku fayilo ya html yokhala ndi zolembera. Mkati mwa owongolera, kudzera mu jakisoni wodalira, titha kupeza mautumiki ofunikira a 2:
- backendSrv - ntchito yomwe imapereka kulumikizana ndi seva ya Grafana API;
- datasourceSrv - ntchito yomwe imapereka kulumikizana kwanuko ndi zinthu zonse za data zomwe zayikidwa mu Grafana yanu (mwachitsanzo, njira ya .getAll() - imabweretsanso mndandanda wazinthu zonse zomwe zayikidwa; .get( ) - imabweretsanso chinthu chamtundu wina.
Gawo 4: gwero la data
Kuchokera ku maganizo a Grafana, detasource ndi chimodzimodzi pulogalamu yowonjezera monga ena onse: ili ndi malo ake olowera module.js, pali fayilo yokhala ndi chidziwitso cha meta plugin.json. Popanga pulogalamu yowonjezera ndi mtundu = pulogalamu, tikhoza kuyanjana ndi zonse zomwe zilipo (mwachitsanzo, prometheus-datasource) ndi zathu, zomwe tingathe kuzisunga mwachindunji muzolemba za plugin (dist/datasource/*) kapena kukhazikitsa ngati kudalira. Kwa ife, datasource imabwera ndi plugin code. M'pofunikanso kukhala ndi template ya config.html ndi ConfigCtrl controller, yomwe idzagwiritsidwe ntchito pa tsamba lachidziwitso lachitsanzo cha datasource ndi Datasource controller, yomwe imagwiritsa ntchito malingaliro a datasource yanu.
Mu KubeGraf plugin, kuchokera ku mawonekedwe ogwiritsira ntchito, detasource ndi chitsanzo cha gulu la kubernetes lomwe limagwiritsa ntchito zotsatirazi (code code ilipo
- kusonkhanitsa deta kuchokera ku k8s api-server (kupeza mndandanda wa malo a mayina, kutumiza ...)
- proxying pempho ku prometheus-datasource (yomwe imasankhidwa m'mapulagini a gulu lililonse) ndikusintha mayankho kuti agwiritse ntchito deta pamasamba osasunthika komanso m'madashboard.
- kukonzanso deta pamasamba a static plugin (ndi mlingo wotsitsimula).
- kukonza mafunso kuti mupange template mu grafana-dashboards (metriFindQuery() njira)
- kuyesa kulumikizana ndi gulu lomaliza la 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"};
})
}
Mfundo yosangalatsa yosiyana, m'malingaliro athu, ndikukhazikitsa njira yotsimikizira ndi kuvomereza kwa datasource. Nthawi zambiri, kuchokera m'bokosilo, titha kugwiritsa ntchito gawo la Grafana datasourceHttpSettings kuti tikonze zofikira kugwero lomaliza la data. Pogwiritsa ntchito gawoli, titha kukonza zofikira ku gwero la data la http pofotokoza ulalo ndi zoikamo zotsimikizika/chilolezo: login-password, kapena client-cert/client-key. Kuti tigwiritse ntchito luso lokonzekera kugwiritsa ntchito chizindikiro chonyamula (de facto standard ya k8s), tinayenera kuchita pang'ono.
Kuti muthane ndi vutoli, mutha kugwiritsa ntchito makina a Grafana "Plugin Routes" (zambiri pa
/api/v8/namespaces ndi Authorization: Bearer mutu.
Mwachilengedwe, kuti tigwire ntchito ndi seva ya k8s api timafunikira wogwiritsa ntchito yemwe ali ndi mwayi wowerengera okha, amawonetsa kupanga zomwe mungapeze
Gawo 5: kumasulidwa
Mukalemba pulogalamu yanu ya Grafana, mwachibadwa mudzafuna kuti ipezeke poyera. Ku Grafana iyi ndi laibulale yamapulagini yomwe ilipo pano
Kuti pulogalamu yowonjezera yanu ipezeke pa sitolo yovomerezeka, muyenera kupanga PR
kumene mtundu ndi mtundu wa pulogalamu yowonjezera yanu, url ndi ulalo wosungirako, ndipo kudzipereka ndiye hashi yodzipereka yomwe mtundu wake wa pulogalamu yowonjezera udzapezeka.
Ndipo pazotulutsa mudzawona chithunzi chodabwitsa ngati:
Deta yake idzatengedwa kuchokera ku Readme.md, Changelog.md ndi fayilo ya plugin.json yokhala ndi malongosoledwe a pulogalamu yowonjezera.
Gawo 6: m'malo momaliza
Sitinasiye kupanga pulogalamu yowonjezera yathu titamasulidwa. Ndipo tsopano tikugwira ntchito yoyang'anira bwino kugwiritsa ntchito zida zamagulu amagulu, ndikuyambitsa zatsopano kuti zithandizire kukonza UX, ndikuwonjezeranso mayankho ambiri omwe alandilidwa mutatha kukhazikitsa pulogalamu yowonjezera ndi makasitomala athu komanso kwa anthu pa GitHub (ngati mutasiya nkhani yanu kapena pempho lanu, ndidzakhala wokondwa kwambiri :)
Tikukhulupirira kuti nkhaniyi ikuthandizani kumvetsetsa chida chodabwitsa monga Grafana ndipo, mwina, lembani pulogalamu yowonjezera yanu.
Zikomo!)
Source: www.habr.com