Talofa uma! I ni nai masina talu ai, na matou faʻalauiloaina ai la matou poloketi fou tatala i le gaosiga - le Grafana plugin mo le mataʻituina o kubernetes, lea na matou taʻua. . O lo'o maua le code source plugin i . Ma i lenei tusiga matou te fia faʻasoa atu ia te oe le tala i le auala na matou fatuina ai le plugin, o a mea faigaluega na matou faʻaaogaina ma o a faʻalavelave na matou feagai i le faagasologa o le atinaʻe. Tatou o!
Vaega 0 - fa'atomuaga: na fa'apefea ona tatou o'o i lea tulaga?
O le manatu e tusi a matou lava plugin mo Grafan na oʻo mai ia i matou i se faʻafuaseʻi. O la matou kamupani o loʻo mataʻituina galuega i luga o le upega tafaʻilagi o tulaga eseese o lavelave mo le silia ma le 10 tausaga. I le taimi lea, ua matou faʻaputuina le tele o tomai, mataupu manaia, ma le poto masani i le faʻaogaina o faiga mataʻituina eseese. Ma i se taimi na matou fesili ifo ai ia i matou lava: "E i ai se meafaigaluega faʻapitoa mo le mataʻituina o Kubernetes, ina ia, e pei ona latou fai mai, "faʻatulaga ma faʻagalo"? Prometheus + Grafana tuufaatasiga. Ma o ni fofo ua saunia mo lenei faaputuga, o loʻo i ai se seti tele o ituaiga meafaigaluega eseese: prometheus-operator, se seti o kubernetes-mixin dashboards, grafana-kubernetes-app.
O le grafana-kubernetes-app plugin e foliga mai o se filifiliga sili ona manaia mo i matou, ae e leʻi lagolagoina mo le sili atu ma le tausaga ma, e le gata i lea, e le mafai ona galue i ni faʻamatalaga fou o le node-exporter ma kube-state-metrics. Ma i se taimi na matou filifili ai: "Pe le tatau ea ona fai a matou lava filifiliga?"
O a manatu na matou filifili e faʻatino i la matou plugin:
- faʻaaliga o le "faʻafanua talosaga": faʻaalia faigofie o talosaga i totonu o le fuifui, faʻapipiʻiina i igoa, faʻapipiʻiina ...;
- va'aiga o feso'ota'iga pei o le "deployment - service (+ports)".
- va'aiga va'aiga o le fa'asoaina o fa'aputuga o fa'aoga i nodes fuifui.
- aoina o metric ma faʻamatalaga mai le tele o punaoa: Prometheus ma k8s api server.
- mata'ituina o vaega uma e lua (fa'aoga ole taimi ole PPU, manatua, subsystem tisiki, feso'ota'iga) ma le fa'aogaina o le fa'aogaina - tulaga o le soifua maloloina, numera o fa'atusa avanoa, fa'amatalaga e uiga i le pasia o su'ega liveness/sauni.
Vaega 1: O le a le "Grafana plugin"?
Mai se manatu faʻapitoa, o le faʻapipiʻi mo Grafana o se faʻatonuga faʻaoga, lea e teuina i le faʻamaumauga o faʻamaumauga a Grafana (/var/grafana/plugins/ /dist/module.js) ma e mafai ona utaina o se SystemJS module. I totonu foi o lenei lisi e tatau ona i ai se faila plugin.json o loʻo i ai faʻamatalaga meta uma e uiga i lau plugin: igoa, faʻasologa, ituaiga faʻapipiʻi, fesoʻotaʻiga i le faleoloa / nofoaga / laisene, faʻalagolago, ma isi.

module.ts

plugin.json
E pei ona e vaʻai i le faʻamalama, matou faʻamaonia plugin.type = app. Aua o plugini mo Grafana e mafai ona tolu ituaiga:
vaega: o le ituaiga sili ona taatele o le faʻapipiʻi - o se laulau mo le vaʻaia o soʻo se metrics, faʻaaogaina e fausia ai lisi eseese.
puna'oa: faʻapipiʻi faʻapipiʻi i nisi faʻamatalaga faʻamatalaga (mo se faʻataʻitaʻiga, Prometheus-datasource, ClickHouse-datasource, ElasticSearch-datasource).
polokalama: O se faʻapipiʻi e mafai ai e oe ona fausia lau lava faʻamatalaga pito i luma i totonu o Grafana, fatuina au lava itulau html ma faʻaoga lima le punaoa faʻamatalaga e vaʻaia ai faʻamatalaga eseese. E le gata i lea, e mafai ona faʻaaogaina faʻapipiʻi o isi ituaiga (faʻamatalaga, panel) ma lisi laupapa eseese e fai ma faʻalagolago.

Fa'ata'ita'iga fa'apipi'i fa'alagolago ile ituaiga=app.
E mafai ona e fa'aogaina uma le JavaScript ma le TypeScript e fai ma polokalame polokalame (na matou filifilia). Sauniuniga mo talofa-lalolagi plugins o soo se ituaiga e te mafaia : o lenei fale teu oloa o loʻo i ai se numera tele o pusa amata (o loʻo i ai se faʻataʻitaʻiga faʻataʻitaʻiga o se faʻapipiʻi i React) faʻatasi ai ma tagata faʻapipiʻi muamua ma faʻatulagaina.
Vaega 2: saunia o le siosiomaga i le lotoifale
Ina ia galue i luga o le faʻapipiʻi, matou te manaʻomia se fuifui kubernetes faʻatasi ai ma meafaigaluega uma na faʻapipiʻiina: prometheus, node-exporter, kube-state-metrics, grafana. O le siosiomaga e tatau ona faʻatulagaina vave, faigofie ma faʻanatura, ma ia faʻamautinoa le vevela-reload, o le faʻamaumauga o faʻamaumauga a le Grafana e tatau ona faʻapipiʻi saʻo mai le masini a le tagata atiaʻe.
O le auala sili ona faigofie, i lo matou manatu, e galue i le lotoifale ma kubernetes o . O le isi laasaga o le faʻapipiʻiina lea o le Prometheus + Grafana faʻatasi e faʻaaoga ai le prometheus-operator. IN O le faagasologa o le faʻapipiʻiina o le prometheus-operator i luga o le minikube o loʻo faʻamatalaina auiliili. Ina ia mafai ona faʻaauau, e tatau ona e seti le parakalafa tutumau: moni i le siata/grafana/values.yaml faila, fa'aopoopo lau lava PV ma le PVC ma fa'ama'oti i le fa'amautu o le persistence.existingClaim
O la matou faʻamatalaga faʻataʻitaʻiga mulimuli o minikube e pei o lenei:
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.LVaega 3: atinae moni
Fa'ata'ita'iga o Mea
I le sauniuni mo le faʻatinoina o le plugin, na matou filifili e faʻamatala uma vaega Kubernetes autu o le a matou galulue faʻatasi i le tulaga o vasega TypeScript: pod, faʻapipiʻiina, daemonset, statefulset, galuega, cronjob, auaunaga, node, namespace. O nei vasega taʻitasi e maua mai le vasega masani BaseModel, lea e faʻamatalaina ai le fausiaina, faʻaleagaina, auala mo le faʻafouina ma le fesuiaʻiina o le vaʻaia. O vasega ta'itasi o lo'o fa'amatalaina sootaga fa'amoega ma isi fa'alapotopotoga, mo se fa'ata'ita'iga, se lisi o pods mo se fa'alapotopotoga o le fa'atinoina o ituaiga.
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 = [];
}
}Faatasi ai ma le fesoasoani a getters ma setters, e mafai ona tatou faʻaalia pe seti fua faʻatatau tatou te manaʻomia i se faiga faigofie ma mafai ona faitau. Mo se faʻataʻitaʻiga, faʻasologa faʻatulagaina o nodes cpu faʻavasegaina:
get cpuAllocatableFormatted(){
let cpu = this.data.status.allocatable.cpu;
if(cpu.indexOf('m') > -1){
cpu = parseInt(cpu)/1000;
}
return cpu;
}itulau
O se lisi o matou itulau faʻapipiʻi uma o loʻo faʻamatalaina muamua i la matou pluing.json i le vaega faʻalagolago:

I totonu o le poloka mo itulau taʻitasi e tatau ona tatou faʻaalia le IGOA ITULAU (o le a liua i se slug e mafai ai ona maua lenei itulau); le igoa o le vaega e nafa ma le faagaoioiga o lenei itulau (o le lisi o vaega e auina atu i fafo i module.ts); e fa'ailoa mai ai le matafaioi a le tagata fa'aoga lea o lo'o maua ai galuega ma lenei itulau ma fa'atonuga o fa'atauga mo le itu.
I le vaega e nafa ma le faʻaogaina o le itulau, e tatau ona tatou seti templateUrl, pasi iina le ala i le faila html ma faʻailoga. I totonu o le pule, e ala i tui faʻalagolago, e mafai ona tatou faʻaogaina i le 2 auaunaga taua:
- backendSrv - o se 'au'aunaga e maua ai fegalegaleaiga ma le Grafana API server;
- datasourceSrv - o se 'au'aunaga e tu'uina atu feso'ota'iga fa'apitonu'u ma fa'amaumauga uma o lo'o fa'apipi'iina i lau Grafana (fa'ata'ita'iga, le .getAll() method - toe fa'afo'i se lisi o fa'amaumauga uma fa'apipi'i; .get( ) - toe faʻafoʻi mai se mea faʻataʻitaʻiga o se faʻamatalaga faʻamatalaga patino.



Vaega 4: puna'oa fa'amaumauga
Mai le manatu o Grafana, o le datasource e tutusa lelei lava ma isi mea uma: e iai lona lava ulufale module.js, o loʻo i ai se faila ma meta information plugin.json. Pe a atiaʻe se faʻapipiʻi ma le ituaiga = app, e mafai ona tatou fegalegaleai ma faʻamatalaga uma o loʻo i ai nei (mo se faʻataʻitaʻiga, prometheus-datasource) ma a tatou lava, lea e mafai ona tatou teuina saʻo i le lisi faʻapipiʻi (dist/datasource/*) pe faʻapipiʻi e avea o se faʻalagolago. I la matou tulaga, o le datasource e sau ma le plugin code. E mana'omia fo'i le iai o se fa'ata'ita'iga config.html ma se fa'atonu ConfigCtrl, lea o le a fa'aogaina mo le itulau fa'atulagaina o fa'amatalaga fa'ata'ita'iga ma le fa'atonuga o le Datasource, lea e fa'atino ai le fa'atonuga o au fa'amaumauga.
I le KubeGraf plugin, mai le faʻaogaina o le faʻaogaina o le vaʻaiga, o le datasource o se faʻataʻitaʻiga o le kubernetes cluster o loʻo faʻaaogaina le gafatia (o loʻo maua le code source. ):
- aoina mai faʻamatalaga mai le k8s api-server (maua se lisi o igoa avanoa, faʻapipiʻi ...)
- talosaga sui i prometheus-datasource (lea e filifilia i le plugin faatulagaga mo fuifui patino taitasi) ma le formatting tali e faaaoga faamatalaga uma i itulau static ma dashboards.
- fa'afou fa'amaumauga i luga o itulau fa'apipi'i fa'amau (fa'atasi ai ma se fa'afou fa'atulagaina).
- fa'agaioiina fesili e fa'atupuina ai se pepa fa'ata'ita'i ile grafana-dashboards (metriFindQuery() method)



- su'ega feso'ota'iga ma le fuifui k8s mulimuli.
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"};
})
}O se isi itu manaia, i lo matou manatu, o le faʻatinoina o se faʻamaoniga ma faʻatagaina auala mo le faʻamaumauga. E masani lava, i fafo atu o le pusa, e mafai ona tatou faʻaogaina le faʻapipiʻiina o le Grafana component datasourceHttpSettings e faʻapipiʻi ai le avanoa i le faʻamaumauga mulimuli. I le faʻaaogaina o lenei vaega, e mafai ona matou faʻapipiʻiina le avanoa i le faʻamatalaga o le http e ala i le faʻamaonia o le url ma faʻamautu faʻamaonia / faʻatagaina: login-password, poʻo le client-cert/client-key. Ina ia mafai ona faʻatinoina le gafatia e faʻapipiʻi avanoa e faʻaaoga ai se faʻailoga (o le tulaga moni mo k8s), e tatau ona matou faia sina tweaking.
Ina ia foia lenei faʻafitauli, e mafai ona e faʻaogaina le faʻaogaina o le Grafana "Plugin Routes" masini (sili atu faʻamatalaga ile ). I totonu o faʻatulagaga o la matou faʻamaumauga, e mafai ona matou faʻaalia se seti o tulafono faʻatautaia o le a faʻatautaia e le grafana proxy server. Mo se faʻataʻitaʻiga, mo taʻiala taʻitasi e mafai ona seti ulutala poʻo urls ma le avanoa e faʻataʻitaʻi ai, faʻamatalaga e mafai ona ave mai le jsonData ma secureJsonData fanua (mo le teuina o upu faʻaulu poʻo faʻailoga i le faʻailoga faʻailoga). I la matou faʻataʻitaʻiga, fesili pei /__proxy/api/v1/namespaces o le a sui i le url o le fomu
/api/v8/namespaces fa'atasi ai ma le Fa'atagaga: Ulutala o lo'o tauaveina.


E masani lava, e galulue ma le k8s api server matou te manaʻomia se tagata faʻaoga e naʻo le faitau, faʻaalia mo le fatuina lea e mafai foi ona e mauaina i totonu. .
Vaega 5: tatala

O le taimi lava e te tusia ai lau oe Grafana plugin, e masani lava ona e manaʻo e faʻasalalau lautele. I Grafana o se faletusi lea o plugini o loʻo maua iinei
Ina ia mafai ona maua lau masini i luga o le faleoloa aloaia, e tatau ona e faia se PR i totonu e ala i le faʻaopoopoina o mea e pei o lenei i le repo.json faila:

lea o le lomiga o le lomiga o lau plugin, url o se sootaga i le faleteuoloa, ma commit o le hash o le tautinoga lea o le a maua ai se lomiga patino o le plugin.
Ma i le gaioiga o le ae vaʻai i se ata matagofie e pei o:

O faʻamaumauga mo ia o le a otometi lava ona puʻeina mai lau Readme.md, Changelog.md ma le faila plugin.json faʻatasi ai ma le faʻamatalaga plugin.
Vaega 6: nai lo faaiuga
Matou te leʻi taofia le atinaʻeina o la matou plugin pe a maeʻa faʻamalolo. Ma o lenei o loʻo matou galulue i le mataʻituina saʻo o le faʻaogaina o punaoa o fuifui nodes, faʻalauiloaina ni foliga fou e faʻaleleia ai le UX, ma faʻapipiʻi foi i le tele o faʻamatalaga na maua ina ua uma ona faʻapipiʻi le plugin e a matou tagata faʻatau ma tagata i luga o GitHub (pe a e alu ese. lau mataupu poʻo le toso talosaga, o le a ou matua fiafia lava :)
Matou te faʻamoemoe o lenei tusiga o le a fesoasoani ia te oe e te malamalama ai i se meafaigaluega matagofie e pei o Grafana ma, masalo, tusi lau lava plugin.
Fa'afetai!)
puna: www.habr.com
