Famolavolana plugin ho an'ny Grafana: tantaran'ny tifitra lehibe

Salama daholo! Volana vitsy lasa izay, nanangana ny tetikasa open-source vaovao ho famokarana izahay - ny plugin Grafana ho an'ny fanaraha-maso ny kubernetes, izay nantsoinay. DevOpsProdigy KubeGraf. Ny code source plugin dia hita ao amin'ny tahiry ho an'ny daholobe ao amin'ny GitHub. Ary amin'ity lahatsoratra ity dia tianay ny hizara aminareo ny tantaran'ny fomba namoronanay ny plugin, inona ny fitaovana nampiasainay ary inona ny fandrika sendra anay nandritra ny dingan'ny fampandrosoana. Andao!

Fizarana 0 - fampidirana: ahoana no nahatongavanay tamin'io?

Tonga taminay tsy nahy ny hevitra hanoratra plugin ho an'ny Grafan. Ny orinasanay dia nanara-maso ireo tetikasan-tranonkala amin'ny haavo sarotra isan-karazany nandritra ny 10 taona mahery. Nandritra izany fotoana izany dia nanangona fahaizana be dia be, tranga mahaliana ary traikefa amin'ny fampiasana rafitra fanaraha-maso isan-karazany. Ary tamin'ny fotoana iray dia nanontany tena izahay hoe: "Misy fitaovana majika hanaraha-maso an'i Kubernetes ve, ka, araka ny filazan'izy ireo, "mametraka azy ary manadino azy"?". Prometheus + Grafana fitambarana. Ary ho vahaolana efa vita ho an'ity stack ity dia misy karazana fitaovana isan-karazany: prometheus-operator, dashboard kubernetes-mixin, grafana-kubernetes-app.

Ny plugin grafana-kubernetes-app dia toa ny safidy mahaliana indrindra ho anay, saingy tsy notohanana nandritra ny herintaona mahery ary, ankoatra izany, dia tsy afaka miasa amin'ny dikan-teny vaovao momba ny node-exporter sy kube-state-metrics. Ary tamin'ny fotoana iray dia nanapa-kevitra izahay hoe: "Tsy tokony handray fanapahan-kevitra manokana ve isika?"

Inona no hevitra nanapa-kevitra ny hampihatra ao amin'ny plugin:

  • sary an-tsaina ny "sari-tany fampiharana": fampisehoana mety amin'ny fampiharana ao amin'ny cluster, navondrona araka ny toerana misy anarana, fametrahana...;
  • fijerena ny fifandraisana toy ny "deployment - service (+ports)".
  • sary ny fizarana ny fampiharana cluster manerana ny cluster nodes.
  • fanangonana metrika sy fampahalalana avy amin'ny loharano maro: Prometheus sy k8s api server.
  • fanaraha-maso ny ampahany amin'ny fotodrafitrasa (fampiasana ny fotoana CPU, ny fitadidiana, ny subsystem kapila, ny tamba-jotra) sy ny lojika fampiharana - ny sata ara-pahasalamana, ny isan'ny kopia misy, ny fampahalalana momba ny fitsirihana ny fahavelomana/ny fahavononana.

Fizarana 1: Inona no atao hoe "Grafana plugin"?

Avy amin'ny fomba fijery ara-teknika, ny plugin ho an'ny Grafana dia angular controller, izay voatahiry ao amin'ny lahatahiry data Grafana (/var/grafana/plugins/ /dist/module.js) ary azo alaina ho module SystemJS. Ao amin'ity lahatahiry ity ihany koa dia tokony hisy rakitra plugin.json ahitana ny fampahalalana meta rehetra momba ny plugin-nao: anarana, dikan-teny, karazana plugin, rohy mankany amin'ny tahiry/site/licence, fiankinan-doha, sy ny sisa.

Famolavolana plugin ho an'ny Grafana: tantaran'ny tifitra lehibe
module.ts

Famolavolana plugin ho an'ny Grafana: tantaran'ny tifitra lehibe
plugin.json

Araka ny hitanao eo amin'ny pikantsary dia nofaritanay ny plugin.type = app. Satria ny plugins ho an'ny Grafana dia mety misy karazany telo:

tontonana: karazana plugin mahazatra indrindra - tontonana izy io mba hijerena ny metrika rehetra, ampiasaina hanamboarana dashboard isan-karazany.
loharanom-baovao: mpampitohy plugin amin'ny loharanom-baovao sasany (ohatra, Prometheus-datasource, ClickHouse-datasource, ElasticSearch-datasource).
App: Plugin iray ahafahanao manangana rindranasa eo anoloana ao amin'ny Grafana, mamorona pejinao html ary miditra amin'ny tananao ny loharano angona mba hijery angon-drakitra isan-karazany. Ary koa, ny plugins amin'ny karazana hafa (datasource, tontonana) ary dashboard isan-karazany dia azo ampiasaina ho miankina.

Famolavolana plugin ho an'ny Grafana: tantaran'ny tifitra lehibe
Ohatra miankina amin'ny plugin miaraka amin'ny type=app.

Azonao atao ny mampiasa JavaScript sy TypeScript ho fiteny fandaharana (nofidianay). Fiomanana amin'ny plugins hello-world amin'ny karazana rehetra azonao atao tadiavo ny rohy: ity tahiry ity dia misy fonosana fanombohana marobe (misy ohatra andrana amin'ny plugin iray ao amin'ny React) miaraka amin'ireo mpanamboatra efa napetraka sy namboarina.

Fizarana 2: fanomanana ny tontolo iainana eo an-toerana

Mba hiasa amin'ny plugin dia mila cluster kubernetes isika miaraka amin'ireo fitaovana efa napetraka: prometheus, mpanondrana node, kube-state-metrics, grafana. Ny tontolo iainana dia tokony hatsangana haingana, mora ary voajanahary, ary mba hiantohana ny famerenana mafana, ny lahatahiry data Grafana dia tokony hapetraka mivantana avy amin'ny masinin'ny mpamorona.

Ny fomba mety indrindra, araka ny hevitray, miasa eo an-toerana miaraka amin'ny kubernetes dia minikube. Ny dingana manaraka dia ny fametrahana ny fitambaran'ny Prometheus + Grafana mampiasa prometheus-operator. IN Ity lahatsoratra ity Ny fizotran'ny fametrahana prometheus-operator amin'ny minikube dia voafaritra amin'ny antsipiriany. Mba hahatonga ny fikirizana dia tsy maintsy mametraka ny parameter ianao fikirizana: marina ao amin'ny rakitra charts/grafana/values.yaml, ampio ny PV sy PVC anao manokana ary soraty ao amin'ny parameter persistence.existingClaim

Toy izao ny script fandefasanay minikube farany:

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

Fizarana 3: tena fampandrosoana

Modely zavatra

Ho fiomanana amin'ny fampiharana ny plugin dia nanapa-kevitra izahay ny hamaritra ireo singa fototra Kubernetes rehetra izay hiarahanay amin'ny endrika TypeScript classes: pod, deployment, daemonset, statefulset, job, cronjob, service, node, namespace. Ny tsirairay amin'ireo kilasy ireo dia mandova avy amin'ny kilasy BaseModel mahazatra, izay mamaritra ny mpanorina, ny mpandrava, ny fomba fanavaozana sy fanovana ny fahitana. Ny kilasy tsirairay dia manoritsoritra fifandraisana misy akany amin'ny sampana hafa, ohatra, lisitry ny pods ho an'ny sampan-draharaha misy karazana fametrahana.

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 = [];
   }
}

Miaraka amin'ny fanampian'ny getter sy setter, dia afaka mampiseho na mametraka ny mari-pamantarana enti-manana ilaintsika amin'ny endrika mora sy mora vakiana. Ohatra, ny famoahana format amin'ny node cpu azo atokana:

get cpuAllocatableFormatted(){
   let cpu = this.data.status.allocatable.cpu;
   if(cpu.indexOf('m') > -1){
       cpu = parseInt(cpu)/1000;
   }
   return cpu;
}

Pages

Ny lisitry ny pejin'ny plugin rehetra dia voalaza voalohany ao amin'ny pluing.json ao amin'ny fizarana miankina:

Famolavolana plugin ho an'ny Grafana: tantaran'ny tifitra lehibe

Ao amin'ny sakana ho an'ny pejy tsirairay dia tsy maintsy manondro ny ANARAN'NY PEJY (dia hovana ho slug izay ahafahan'ity pejy ity hidirana); ny anaran'ny singa tompon'andraikitra amin'ny fampandehanana ity pejy ity (ny lisitry ny singa dia aondrana any amin'ny module.ts); manondro ny anjara asan'ny mpampiasa izay miasa miaraka amin'ity pejy ity sy ny firafitry ny fitetezana ho an'ny sidebar.

Ao amin'ny singa tompon'andraikitra amin'ny fampandehanana ny pejy dia tsy maintsy mametraka templateUrl isika, mandalo any ny lalana mankany amin'ny rakitra html misy marika. Ao anatin'ny controller, amin'ny alàlan'ny tsindrona fiankinan-doha, dia afaka miditra amin'ny serivisy angular 2 manan-danja isika:

  • backendSrv - serivisy manome fifandraisana amin'ny mpizara Grafana API;
  • datasourceSrv - serivisy manome fifandraisana eo an-toerana miaraka amin'ny loharano angona rehetra napetraka ao amin'ny Grafanao (ohatra ny fomba .getAll() - mamerina ny lisitry ny loharanon-kevitra rehetra napetraka; .get( ) - mamerina zavatra ohatra amin'ny loharano angona manokana.

Famolavolana plugin ho an'ny Grafana: tantaran'ny tifitra lehibe

Famolavolana plugin ho an'ny Grafana: tantaran'ny tifitra lehibe

Famolavolana plugin ho an'ny Grafana: tantaran'ny tifitra lehibe

Fizarana 4: loharano angona

Raha ny fijerin'i Grafana dia mitovy tanteraka amin'ny plugin hafa rehetra ny datasource: manana module.js idirany manokana izy, misy rakitra misy meta information plugin.json. Rehefa mamorona plugin miaraka amin'ny karazana = app, dia afaka mifandray amin'ny loharanon-kevitra efa misy (ohatra, prometheus-datasource) sy ny antsika manokana, izay azontsika tahirizina mivantana ao amin'ny lahatahiry plugin (dist/datasource/*) na apetraka ho fiankinan-doha. Amin'ity tranga ity, ny datasource dia miaraka amin'ny code plugin. Ilaina ihany koa ny manana môdely config.html sy ConfigCtrl controller, izay hampiasaina amin'ny pejin'ny fandrindrana ohatra momba ny datasource sy ny mpanara-maso Datasource, izay mampihatra ny lojikan'ny loharano angonao.

Ao amin'ny plugin KubeGraf, amin'ny fomba fijerin'ny mpampiasa interface tsara, ny datasource dia ohatra amin'ny cluster kubernetes izay mampihatra ireto fahaiza-manao manaraka ireto (misy loharanon-kevitra rohy):

  • fanangonana angona avy amin'ny k8s api-server (mahazo lisitr'ireo toerana misy anarana, fametrahana...)
  • fangatahana proxy amin'ny prometheus-datasource (izay nofantenana ao amin'ny firafitry ny plugin ho an'ny cluster manokana) ary mamaly ny valin-kafatra mba hampiasana data amin'ny pejy static na amin'ny dashboard.
  • fanavaozana angon-drakitra amin'ny pejin'ny plugin static (miaraka amin'ny tahan'ny fanavaozana napetraka).
  • fanodinana fanontaniana mba hamoronana takelaka môdely amin'ny grafana-dashboards (metriFindQuery() method)

Famolavolana plugin ho an'ny Grafana: tantaran'ny tifitra lehibe

Famolavolana plugin ho an'ny Grafana: tantaran'ny tifitra lehibe

Famolavolana plugin ho an'ny Grafana: tantaran'ny tifitra lehibe

  • fitsapana fifandraisana amin'ny k8s cluster farany.
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"};
       })
}

Ny teboka mahaliana iray hafa, araka ny hevitray, dia ny fampiharana ny rafitra fanamarinana sy fanomezan-dàlana ho an'ny loharano angona. Amin'ny ankapobeny, ivelan'ny boaty, dia azontsika ampiasaina ny datasourceHttpSettings singa Grafana naorina mba handrindrana ny fidirana amin'ny loharano farany. Amin'ny fampiasana an'io singa io dia afaka manitsy ny fidirana amin'ny loharano angon-drakitra http isika amin'ny alàlan'ny famaritana ny url sy ny firafitry ny fanamarinana / fanomezan-dàlana fototra: login-password, na client-cert/client-key. Mba hampiharana ny fahafahana manitsy ny fidirana amin'ny alàlan'ny famantarana mitondra (ny fenitra ho an'ny k8s), dia tsy maintsy nanao fanitsiana kely izahay.

Mba hamahana an'io olana io dia azonao atao ny mampiasa ny rafitra "Plugin Routes" naorina ao amin'ny Grafana (andininy bebe kokoa ao amin'ny pejy antontan-taratasy ofisialy). Ao amin'ny firafitry ny loharano angonay, dia afaka manambara andiana fitsipika zotra izay hokarakarain'ny mpizara proxy grafana izahay. Ohatra, ho an'ny faran'ny tsirairay dia azo atao ny mametraka lohapejy na url miaraka amin'ny fahafahana manao templating, ny angona azo alaina ao amin'ny saha jsonData sy secureJsonData (ho fitahirizana tenimiafina na marika amin'ny endrika miafina). Ao amin'ny ohatra ataontsika, fanontaniana toy ny /__proxy/api/v1/namespaces dia hafindra amin'ny url ny endrika
/api/v8/namespaces miaraka amin'ny Fanomezan-dàlana: lohatenin'ny mitondra.

Famolavolana plugin ho an'ny Grafana: tantaran'ny tifitra lehibe

Famolavolana plugin ho an'ny Grafana: tantaran'ny tifitra lehibe

Mazava ho azy, mba hiara-hiasa amin'ny mpizara k8s api dia mila mpampiasa manana fidirana amin'ny vakiana fotsiny isika, miseho amin'ny famoronana izay azonao jerena ihany koa. kaody loharano plugin.

Fizarana 5: famoahana

Famolavolana plugin ho an'ny Grafana: tantaran'ny tifitra lehibe

Rehefa avy nanoratra ny plugin Grafana anao manokana ianao, dia ho tianao ny hampahafantatra izany ho an'ny besinimaro. Ao amin'ny Grafana dia tranomboky misy plugins misy eto grafana.com/grafana/plugins

Mba ho hita ao amin'ny fivarotana ofisialy ny plugin anao dia mila manao PR ianao ity repository ityamin'ny fampidirana votoaty tahaka izao amin'ny rakitra repo.json:

Famolavolana plugin ho an'ny Grafana: tantaran'ny tifitra lehibe

izay ny dikan-teny dia ny dikan'ny plugin-nao, ny url dia rohy mankany amin'ny tahiry, ary ny commit dia ny hash an'ny commit izay misy dikan-teny manokana amin'ny plugin.

Ary amin'ny famoahana dia hahita sary mahafinaritra toy ny:

Famolavolana plugin ho an'ny Grafana: tantaran'ny tifitra lehibe

Ny angon-drakitra momba izany dia alaina ho azy avy amin'ny Readme.md, Changelog.md ary ny rakitra plugin.json miaraka amin'ny famaritana plugin.

Fizarana 6: fa tsy fehin-kevitra

Tsy nitsahatra namolavola ny plugin izahay taorian'ny famoahana. Ary ankehitriny izahay dia miasa amin'ny fanaraha-maso tsara ny fampiasana ny loharanon'ny kluster nodes, ny fampidirana ireo endri-javatra vaovao hanatsarana ny UX, ary koa ny famoriam-bola be dia be voaray taorian'ny fametrahana ny plugin na ny mpanjifanay sy ny olona ao amin'ny GitHub (raha miala ianao Ny olanao na ny fangatahanao dia ho faly aho :)

Manantena izahay fa ity lahatsoratra ity dia hanampy anao hahatakatra ny fitaovana mahafinaritra toy ny Grafana ary, angamba, manoratra ny plugin anao manokana.

Misaotra anao!)

Source: www.habr.com

Mividiana fampiantranoana azo antoka ho an'ny tranokala misy fiarovana DDoS, mpizara VPS VDS 🔥 Mividiana fampiantranoana tranonkala azo antoka miaraka amin'ny fiarovana DDoS, mpizara VPS VDS | ProHoster