Atinaʻeina o se faʻapipiʻi mo Grafana: o se talaʻaga o ata tetele

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. DevOpsProdigy KubeGraf. O lo'o maua le code source plugin i faleteuoloa lautele ile GitHub. 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.

Atinaʻeina o se faʻapipiʻi mo Grafana: o se talaʻaga o ata tetele
module.ts

Atinaʻeina o se faʻapipiʻi mo Grafana: o se talaʻaga o ata tetele
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.

Atinaʻeina o se faʻapipiʻi mo Grafana: o se talaʻaga o ata tetele
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 su'e le so'oga: 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 minikube. O le isi laasaga o le faʻapipiʻiina lea o le Prometheus + Grafana faʻatasi e faʻaaoga ai le prometheus-operator. IN lenei tusiga 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.L

Vaega 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:

Atinaʻeina o se faʻapipiʻi mo Grafana: o se talaʻaga o ata tetele

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.

Atinaʻeina o se faʻapipiʻi mo Grafana: o se talaʻaga o ata tetele

Atinaʻeina o se faʻapipiʻi mo Grafana: o se talaʻaga o ata tetele

Atinaʻeina o se faʻapipiʻi mo Grafana: o se talaʻaga o ata tetele

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. fesoʻotaʻiga):

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

Atinaʻeina o se faʻapipiʻi mo Grafana: o se talaʻaga o ata tetele

Atinaʻeina o se faʻapipiʻi mo Grafana: o se talaʻaga o ata tetele

Atinaʻeina o se faʻapipiʻi mo Grafana: o se talaʻaga o ata tetele

  • 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 itulau pepa aloaia). 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.

Atinaʻeina o se faʻapipiʻi mo Grafana: o se talaʻaga o ata tetele

Atinaʻeina o se faʻapipiʻi mo Grafana: o se talaʻaga o ata tetele

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. faʻailoga puna faʻapipiʻi.

Vaega 5: tatala

Atinaʻeina o se faʻapipiʻi mo Grafana: o se talaʻaga o ata tetele

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 grafana.com/grafana/plugins

Ina ia mafai ona maua lau masini i luga o le faleoloa aloaia, e tatau ona e faia se PR i totonu lenei faleoloae ala i le faʻaopoopoina o mea e pei o lenei i le repo.json faila:

Atinaʻeina o se faʻapipiʻi mo Grafana: o se talaʻaga o ata tetele

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:

Atinaʻeina o se faʻapipiʻi mo Grafana: o se talaʻaga o ata tetele

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

Faʻatau talimalo faʻatuatuaina mo nofoaga ma DDoS puipuiga, VPS VDS servers 🔥 Fa'atau le 'upega tafa'ilagi talimalo fa'atuatuaina ma le puipuiga DDoS, 'au'aunaga VPS VDS | ProHoster