Te whanaketanga o te mono mo Grafana: he hitori o nga pupuhi nui

Kia ora katoa! I etahi marama kua pahure ake nei, i whakarewahia e matou ta matou kaupapa tuwhera-puna hou ki te hanga - te mono Grafana mo te aro turuki i nga kubernetes, i kiia e matou. DevOpsProdigy KubeGraf. Kei te waatea te waehere puna mono i putunga tūmatanui i GitHub. Na i roto i tenei tuhinga e hiahia ana matou ki te whakapuaki ki a koe te korero mo te hanga i te mono, he aha nga taputapu i whakamahia e matou me nga raru i pa ki a matou i te wa o te whanaketanga. Haere tatou!

Wāhanga 0 - kupu whakataki: i pehea i tae ai tatou ki tenei?

Ko te whakaaro ki te tuhi i a maatau ake mono mo Grafan i tae mai ki a matou he mea ohorere. Neke atu i te 10 tau to maatau kamupene e aro turuki ana i nga kaupapa paetukutuku o nga momo reanga uaua. I roto i tenei wa, kua kohia e matou te nui o nga tohungatanga, nga keehi whakamere, me nga wheako ki te whakamahi i nga momo punaha aroturuki. A i etahi wa ka ui matou ki a matou ano: "He taputapu makutu ranei mo te aroturuki i nga Kubernetes, kia rite ki ta ratou e kii ana, "whakaturia ka wareware"?". Prometheus + Grafana huinga. Na hei otinga kua rite mo tenei puranga, he huinga maha nga momo taputapu: prometheus-operator, he huinga kubernetes-mixin dashboards, grafana-kubernetes-app.

Ko te monomai grafana-kubernetes-app te ahua te mea tino pai ki a matou, engari kaore i tautokona mo te neke atu i te kotahi tau, a, i tua atu, kaore e taea te mahi me nga waahanga hou o te node-kaihokohoko me te kube-state-metrics. E i te tahi taime ua faaoti matou: “Eita anei e tia ia matou ia rave i ta matou iho faaotiraa?”

He aha nga whakaaro i whakatauhia e matou ki te whakatinana i to maatau mono:

  • whakakitenga o te “mapi tono”: he pai te whakaatu i nga tono i roto i te roopu, kua whakarōpūhia e nga mokowāingoa, nga whakatakotoranga...;
  • whakakitenga o nga hononga penei i te "tuku - ratonga (+tauranga)".
  • whakakitenga o te tohatoha o nga tono kapoi puta noa i nga kohinga kohinga.
  • kohikohinga inenga me nga korero mai i nga puna maha: Prometheus me te k8s api server.
  • te aro turuki i nga waahanga hangahanga e rua (te whakamahi i te wa PTM, te mahara, te puunaha iti o te kōpae, te whatunga) me te arorau tono - nga putea hauora, te maha o nga tauira e waatea ana, nga korero mo te tuku i nga whakamatautau oranga/reri.

Wāhanga 1: He aha te mea "Grafana mono"?

Mai i te tirohanga hangarau, ko te mono mo Grafana he kaiwhakahaere koki, kei te rongoa i roto i te raarangi raraunga Grafana (/var/grafana/plugins/ /dist/module.js) ka taea te utaina hei kōwae SystemJS. I roto ano i tenei raarangi me whakauru he konae plugin.json kei roto nga korero meta katoa mo to mono: ingoa, putanga, momo mono, hononga ki te rehitatanga/pae/raihana, whakawhirinakitanga, aha atu.

Te whanaketanga o te mono mo Grafana: he hitori o nga pupuhi nui
kōwae.ts

Te whanaketanga o te mono mo Grafana: he hitori o nga pupuhi nui
mono.json

Ka taea e koe te kite i te Whakaahuamata, i tohua e matou te plugin.type = taupānga. Na te mea e toru nga momo monomai mo Grafana:

rōpū: te momo mono tino noa - he panui mo te tiro i nga inenga, whakamahia hei hanga i nga momo papatohu.
puna raraunga: mono hono ki etahi puna raraunga (hei tauira, Prometheus-datasource, ClickHouse-datasource, ElasticSearch-datasource).
taupānga: He monomai e taea ai e koe te hanga i to ake tono o mua ki roto o Grafana, hanga i a koe ake wharangi html me te uru atu ki te puna raraunga ki te tiro i nga momo raraunga. Ano, ka taea te whakamahi i etahi atu momo mono (puna raraunga, panui) me nga momo papatohu hei whakawhirinakitanga.

Te whanaketanga o te mono mo Grafana: he hitori o nga pupuhi nui
Tauira mono whakawhirinaki ki te momo=taupānga.

Ka taea e koe te whakamahi i te JavaScript me te TypeScript hei reo papatono (i whiriwhiria e matou). Ko nga whakaritenga mo nga mono-ao-o-ao ahakoa he momo ka taea e koe kimihia te hono: kei roto i tenei putunga he maha o nga putea-whakamatau (he tauira whakamatautau mo te mono i React) me nga kaihanga kua oti te whakauru me te whirihora.

Wāhanga 2: te whakarite i te taiao o te rohe

Hei mahi i runga i te mono, me tino hiahia matou ki te kahui kubernetes me nga taputapu katoa kua oti te whakauru: prometheus, node-kaihokohoko, kube-state-metrics, grafana. Me tere te whakarite i te taiao, ngawari me te taiao, me te whakarite i te wera ano, me whakanoho tika te raarangi raraunga Grafana mai i te miihini a te kaiwhakawhanake.

Ko te huarahi tino watea, ki ta matou whakaaro, ki te mahi a rohe me nga kubernetes minikube. Ko te mahi e whai ake nei ko te whakauru i te huinga Prometheus + Grafana ma te whakamahi i te prometheus-operator. IN tenei tuhinga Ko te tukanga o te whakauru i te prometheus-operator ki runga i te minikube e whakaahuahia ana. Hei whakahohe i te tohenga, me whakarite e koe te tawhā tohenga: pono i roto i te konae charts/grafana/values.yaml, taapirihia to ake ake PV me te PVC ka tohua ki te tawhā persistence.existingClaim

He penei te ahua o ta maatau tuhinga whakarewatanga minikube:

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

Wāhanga 3: tino whanaketanga

Tauira Ahanoa

Hei whakarite mo te whakatinana i te mono, i whakatau matou ki te whakaahua i nga hinonga Kubernetes taketake katoa ka mahi tahi matou ki te ahua o nga karaehe TypeScript: pod, deployment, daemonset, statefulset, job, cronjob, service, node, namespace. Ka riro ia o enei akomanga mai i te akomanga BaseModel noa, e whakaahua ana i te kaihanga, te kaiwhakangaro, nga tikanga mo te whakahou me te huri i te tirohanga. Ko ia akomanga e whakaatu ana i nga hononga kohanga me etahi atu hinonga, hei tauira, he rarangi o nga putunga mo tetahi hinonga momo whakatakotoranga.

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

Ma te awhina o nga kaiwhakatakoto me nga kaiwhakatakoto, ka taea e tatou te whakaatu, te whakarite ranei i nga inenga hinonga e hiahiatia ana i roto i te ahua ngawari me te panui. Hei tauira, te whakaputanga whakahōputu o ngā kōpuku CPU tohatoha:

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

whārangi

He rarangi o a maatau wharangi mono i te tuatahi i whakaahuatia i roto i ta maatau pluing.json i te waahanga whakawhirinaki:

Te whanaketanga o te mono mo Grafana: he hitori o nga pupuhi nui

I roto i te paraka mo ia wharangi me tohu te INGOA PAGE (katahi ka huri hei maataa e uru ai tenei wharangi); te ingoa o te waahanga e whakahaere ana i tenei wharangi (kua kaweake te rarangi o nga waahanga ki module.ts); e tohu ana i te mahi a te kaiwhakamahi mo te mahi me tenei wharangi e waatea ana me nga tautuhinga whakaterenga mo te paetaha.

I roto i te waahanga kawenga mo te mahi o te wharangi, me whakarite e tatou te tauiraUrl, ka haere ki reira te ara ki te konae html me te tohu. I roto i te kaiwhakahaere, na roto i te werohanga whakawhirinaki, ka taea e tatou te uru atu ki nga ratonga koki nui e 2:

  • backendSrv - he ratonga e whakarato ana i te taunekeneke me te tūmau API Grafana;
  • datasourceSrv - he ratonga e whakarato ana i te taunekeneke a rohe me nga puna raraunga katoa i whakauruhia ki to Grafana (hei tauira, te tikanga .getAll() - ka whakahoki i te rarangi o nga puna raraunga katoa kua whakauruhia; .get( ) - ka whakahoki i tetahi mea tauira o tetahi puna raraunga motuhake.

Te whanaketanga o te mono mo Grafana: he hitori o nga pupuhi nui

Te whanaketanga o te mono mo Grafana: he hitori o nga pupuhi nui

Te whanaketanga o te mono mo Grafana: he hitori o nga pupuhi nui

Wāhanga 4: puna raraunga

Mai i te tirohanga a Grafana, he rite tonu te puna raraunga ki era atu katoa: kei a ia ano tana ake waahanga whakauru module.js, he konae me nga korero meta plugin.json. I te wa e whakawhanake ana i te mono me te momo = taupānga, ka taea e tatou te taunekeneke me nga puna raraunga e rua (hei tauira, prometheus-datasource) me o tatou ake, ka taea e tatou te rokiroki tika ki te whaiaronga mono (dist/datasource/*) ka whakauru ranei hei whakawhirinakitanga. I roto i to maatau, ka tae mai te puna raraunga me te waehere mono. Me whai tauira config.html me tetahi kaiwhakahaere ConfigCtrl, ka whakamahia mo te wharangi whirihoranga tauira puna raraunga me te kaiwhakahaere Raraunga, e whakatinana ana i te arorau o to puna raraunga.

I roto i te mono KubeGraf, mai i te tirohanga atanga kaiwhakamahi, ko te puna raraunga he tauira o te huinga kubernetes e whakamahi ana i nga kaha e whai ake nei (kei te waatea te waehere puna hono):

  • kohi raraunga mai i te k8s api-server (te tiki rarangi ingoa mokowā, tukunga...)
  • tono takawaenga ki te prometheus-datasource (kua tohua i roto i nga tautuhinga mono mo ia kahui motuhake) me te whakahōputu i nga whakautu hei whakamahi raraunga i roto i nga wharangi pateko me nga papatohu.
  • te whakahou i nga raraunga i runga i nga wharangi monohiko pateko (me te reeti whakamau i whakaritea).
  • te tukatuka i nga patai hei whakaputa pepa tauira i roto i nga papatohu-grafana (metriFindQuery() tikanga)

Te whanaketanga o te mono mo Grafana: he hitori o nga pupuhi nui

Te whanaketanga o te mono mo Grafana: he hitori o nga pupuhi nui

Te whanaketanga o te mono mo Grafana: he hitori o nga pupuhi nui

  • whakamātautau hononga ki te kāhui k8s whakamutunga.
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"};
       })
}

Ko tetahi take whakamere, ki ta matou whakaaro, ko te whakatinanatanga o te motuhēhēnga me te tikanga whakamana mo te puna raraunga. I te nuinga o te waa, mai i te pouaka, ka taea e taatau te whakamahi i te Waehanga Grafana DatasourceHttpSettings i hangaia hei whirihora i te uru ki te puna raraunga whakamutunga. Ma te whakamahi i tenei waahanga, ka taea e tatou te whirihora i te uru ki te puna raraunga http ma te tohu i te url me nga tautuhinga whakamotuhēhēnga taketake: takiuru-kupuhipa, kiritaki-cert/client-key ranei. Hei whakatinana i te kaha ki te whirihora i te uru ma te whakamahi i te tohu kaikawe (te paerewa mo te k8s), me mahi he iti nei te whakatikatika.

Hei whakaoti i tenei raru, ka taea e koe te whakamahi i te tikanga hanga-i roto i te Grafana "Nga Ara Mono" (he korero atu kei wharangi tuhinga whaimana). I roto i nga tautuhinga o to tatou puna raraunga, ka taea e tatou te whakaatu i te huinga o nga ture ararere ka mahia e te tūmau takawaenga grafana. Hei tauira, mo ia waahi mutunga ka taea te whakarite i nga pane, i nga url ranei ka taea te tauira, nga raraunga ka taea te tango mai i nga mara jsonData me secureJsonData (mo te penapena kupuhipa, tohu tohu ranei ki te ahua whakamunatia). I roto i to maatau tauira, nga patai penei /__proxy/api/v1/namespaces ka tukuna ki te url o te puka
/api/v8/namespaces me te Whakaaetanga: Kaihoko pane.

Te whanaketanga o te mono mo Grafana: he hitori o nga pupuhi nui

Te whanaketanga o te mono mo Grafana: he hitori o nga pupuhi nui

Ko te tikanga, ki te mahi tahi me te k8s api server ka hiahia matou he kaiwhakamahi me te uru panui anake, nga whakaaturanga mo te hanga ka kitea ano e koe waehere puna mono.

Wāhanga 5: tuku

Te whanaketanga o te mono mo Grafana: he hitori o nga pupuhi nui

Ina tuhia e koe taau ake mono Grafana, ka tino hiahia koe ki te tuku atu ki te iwi whanui. I Grafana he whare pukapuka tenei mo nga monomai kei konei grafana.com/grafana/plugins

Kia waatea ai to mono ki runga i te toa mana, me hanga e koe he PR ki roto tenei putungama te taapiri i nga ihirangi penei ki te konae repo.json:

Te whanaketanga o te mono mo Grafana: he hitori o nga pupuhi nui

ko te putanga ko te putanga o to mono, ko te url he hononga ki te putunga, a ko te commit ko te hash o te commit e waatea ai he putanga motuhake o te mono.

A i te putanga ka kite koe i tetahi pikitia whakamiharo penei:

Te whanaketanga o te mono mo Grafana: he hitori o nga pupuhi nui

Ko nga raraunga mo tena ka kapohia mai i to Readme.md, Changelog.md me te konae plugin.json me te whakaahuatanga mono.

Wāhanga 6: hei utu mo nga whakatau

Kaore matou i mutu te whakawhanake i to maatau mono i muri i te tukunga. Inaianei kei te mahi maatau ki te aro turuki tika i te whakamahinga o nga rauemi o nga kohinga kohinga, te whakauru i nga ahuatanga hou hei whakapai ake i te UX, me te kohi i te nui o nga urupare i tae mai i muri i te whakaurunga o te mono mai i o taatau kiritaki me nga tangata i runga i te GitHub (mehemea ka wehe koe. to take, to tono ranei, ka tino koa ahau :)

Ko te tumanako ka awhina tenei tuhinga ki a koe ki te mohio ki tetahi taputapu whakamiharo penei i a Grafana me te tuhi i to ake mono.

Tēnā koe!)

Source: will.com

Tāpiri i te kōrero