Kuvandudza plugin yeGrafana: nhoroondo yemapfuti makuru

Mhoroi mose! Mwedzi mishoma yapfuura, takatangisa yedu nyowani-yakavhurika sosi chirongwa mukugadzira - iyo Grafana plugin yekutarisa kubernetes, yatakadaidza. DevOpsProdigy KubeGraf. Iyo plugin source code inowanikwa pa public repository paGitHub. Uye muchinyorwa chino tinoda kugoverana newe nyaya yekuti takagadzira sei plugin, ndeapi maturusi atakashandisa uye ndeapi misungo yatakasangana nayo panguva yekuvandudza. Handeyi!

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.

Kuvandudza plugin yeGrafana: nhoroondo yemapfuti makuru
module.ts

Kuvandudza plugin yeGrafana: nhoroondo yemapfuti makuru
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.

Kuvandudza plugin yeGrafana: nhoroondo yemapfuti makuru
Muenzaniso plugin zvinoenderana nerudzi = app.

Unogona kushandisa ese JavaScript uye TypeScript semutauro wechirongwa (takausarudza). Gadziriro dzehello-world plugins yemhando ipi zvayo yaunogona tsvaga chinongedzo: repository iyi ine nhamba huru yevatangi-mapakiti (kune kunyange muenzaniso wekuedza we plugin muReact) ine pre-yakaiswa uye yakagadziridzwa vavaki.

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 minikube. Nhanho inotevera ndeyekuisa iyo Prometheus + Grafana musanganiswa uchishandisa prometheus-operator. IN chinyorwa ichi Maitiro ekuisa prometheus-operator pane minikube anotsanangurwa zvakadzama. Kuti ugone kutsungirira, unofanirwa kuseta parameter kushingirira: chokwadi mumachati/grafana/values.yaml faira, wedzera PV nePVC yako wozvitsanangura mu persistence.existingClaim parameter.

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:

Kuvandudza plugin yeGrafana: nhoroondo yemapfuti makuru

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.

Kuvandudza plugin yeGrafana: nhoroondo yemapfuti makuru

Kuvandudza plugin yeGrafana: nhoroondo yemapfuti makuru

Kuvandudza plugin yeGrafana: nhoroondo yemapfuti makuru

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. batanidzo):

  • 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)

Kuvandudza plugin yeGrafana: nhoroondo yemapfuti makuru

Kuvandudza plugin yeGrafana: nhoroondo yemapfuti makuru

Kuvandudza plugin yeGrafana: nhoroondo yemapfuti makuru

  • 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 peji yezvinyorwa zvinyorwa) Mune zvigadziriso zvedatasource yedu, tinogona kuzivisa seti yemitemo yenzira inozogadziriswa neiyo grafana proxy server. Semuyenzaniso, kune yega yega magumo zvinokwanisika kuseta misoro kana urls ine mukana wekuita templating, data iyo inogona kutorwa kubva kujsonData uye yakachengetekaJsonData minda (yekuchengetedza mapassword kana tokens mune encrypted fomu). Mumuenzaniso wedu, mibvunzo yakadai /__proxy/api/v1/namespaces ichave proxied kune url yefomu
/api/v8/namespaces ine Mvumo: Mutakuri musoro.

Kuvandudza plugin yeGrafana: nhoroondo yemapfuti makuru

Kuvandudza plugin yeGrafana: nhoroondo yemapfuti makuru

Sezvingatarisirwa, kushanda ne k8s api server isu tinoda mushandisi ane kuverenga chete, maratidziro ekugadzira ayo iwe unogona zvakare kuwana mukati. plugin source code.

Chikamu 5: kusunungurwa

Kuvandudza plugin yeGrafana: nhoroondo yemapfuti makuru

Kana uchinge wanyora yako Grafana plugin, iwe unenge uchida kuita kuti iwanikwe pachena. MuGrafana iyi iraibhurari yemaplugins inowanikwa pano grafana.com/grafana/plugins

Kuti plugin yako iwanikwe pachitoro chepamutemo, unofanirwa kugadzira PR mukati iyi repositorynekuwedzera zvirimo seizvi kune repo.json faira:

Kuvandudza plugin yeGrafana: nhoroondo yemapfuti makuru

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:

Kuvandudza plugin yeGrafana: nhoroondo yemapfuti makuru

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

Voeg