Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra

Halò a h-uile duine! Beagan mhìosan air ais, chuir sinn ar pròiseact stòr fosgailte ùr, plugan Grafana airson sgrùdadh Kubernetes, air bhog ann an riochdachadh. DevOpsProdigy KubeGrafTha còd tùsail a’ plugain ri fhaighinn ann an stòr-tasgaidh poblach air GitHubSan artaigil seo, bu mhath leinn sgeulachd a cho-roinn ribh mu mar a chruthaich sinn am plugan, na h-innealan a chleachd sinn, agus na cnapan-starra a thachair oirnn rè an leasachaidh. Tòisichidh sinn!

PĂ irt 0 - Ro-rĂ dh: Ciamar a rĂ inig sinn an seo?

Thàinig am beachd ar plugan fhèin a sgrìobhadh airson Grafana thugainn gu math le cothrom. Tha a’ chompanaidh againn air a bhith a’ cumail sùil air pròiseactan lìn de dhiofar iom-fhillteachd airson còrr is 10 bliadhna. Rè na h-ùine seo, tha sinn air pailteas eòlais, sgrùdaidhean cùise inntinneach, agus eòlas a chruinneachadh a’ cleachdadh diofar shiostaman sgrùdaidh. Aig àm air choreigin, bha sinn a’ faighneachd: “A bheil inneal draoidheil ann airson sùil a chumail air Kubernetes as urrainn dhut, mar a chanas iad, ‘a shuidheachadh agus a dhìochuimhneachadh,’”? Gu dearbh, tha an cothlamadh Prometheus + Grafana air a bhith mar an ìre gnìomhachais airson sgrùdadh K8S o chionn fhada. Tha raon farsaing de dh’ innealan deiseil airson a’ chruach seo ann, nam measg prometheus-operator, an sreath deas-bhòrd kubernetes-mixin, agus grafana-kubernetes-app.

Bha coltas gur e am plugan grafana-kubernetes-app an roghainn as inntinniche dhuinne, ach chan eil taic air a bhith aige airson còrr is bliadhna agus, a bharrachd air sin, chan eil e ag obair le dreachan Úra de node-exporter agus kube-state-metrics. Aig àm air choreigin, cho-dhÚin sinn, "Carson nach cruthaich sinn ar fuasgladh fhèin?"

Dè na beachdan a chuir sinn romhainn a chur an gnìomh anns a’ plugan againn?

  • Lèirsinn mapa tagraidh: riochdachadh goireasach de thagraidhean ann an cruinneachadh, air an cruinneachadh a rèir Ă iteachan-ainm, cleachdaidhean, msaa.;
  • lèirsinn de cheanglaichean den t-seòrsa "cleachdadh - seirbheis (+puirt)".
  • lèirsinn air sgaoileadh thagraidhean cruinneachaidh thar nĂłdan cruinneachaidh.
  • a’ tional meatairean agus fiosrachaidh bho iomadh stòr: Prometheus agus frithealaiche API k8s.
  • SgrĂšdadh air an dĂ  chuid a’ bhun-structair (cleachdadh Ăšine CPU, cuimhne, fo-shiostam diosc, lĂŹonra) agus loidsig an tagraidh—inbhe slĂ inte nam pods, an Ă ireamh de leth-bhreacan a tha rim faighinn, agus fiosrachadh mu adhartas dheuchainnean beòthalachd/deisealachd.

Pàirt 1: Dè a th’ ann am plugan Grafana?

Bho shealladh teicnigeach, 's e rianadair ceàrnach a th' ann am plugan airson Grafana a tha air a stòradh ann an eòlaire dàta Grafana (/var/grafana/plugins/ /dist/module.js) agus faodar a luchdachadh mar mhodal SystemJS. Bu chòir faidhle plugin.json a bhith san eòlaire seo cuideachd, anns a bheil a h-uile meata-dhàta mu do plugan: ainm, dreach, seòrsa plugan, ceanglaichean stòrais/làrach-lÏn/ceadachais, eisimeileachdan, agus mar sin air adhart.

Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra
modĂşl.ts

Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra
plugan.json

Mar a chÏ thu san dealbh-sgrÏn, shònraich sinn plugin.type = app. Tha seo air sgàth gu bheil trÏ seòrsaichean plugain ann airson Grafana:

pannal: an seòrsa plugan as cumanta - 's e pannal a th' ann airson meatrachdan sònraichte a shealltainn agus thathar ga chleachdadh gus diofar deas-bhòrd a thogail.
stòr dàtaCeanglaiche plugan ri stòr dàta sam bith (mar eisimpleir, Prometheus-datasource, ClickHouse-datasource, ElasticSearch-datasource).
appPlugan a leigeas leat an aplacaid aghaidh agad fhèin a thogail taobh a-staigh Grafana, na duilleagan HTML agad fhèin a chruthachadh, agus faighinn chun stòr-dàta le làimh gus diofar dhàta fhaicinn. Faodar seòrsachan plugan eile (stòr-dàta, pannal) agus diofar deas-bhòrd a chleachdadh mar eisimeileachdan cuideachd.

Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra
Eisimpleir de eisimeileachdan plugan le seòrsa = app.

’S urrainn dhut JavaScript no TypeScript a chleachdadh mar chànan prògramaidh (thagh sinn TypeScript). ’S urrainn dhut teamplaidean a chruthachadh airson seòrsa sam bith de plugan hello-world. lorg le ceangalTha àireamh mhòr de phasganan tòiseachaidh san stòras-tasgaidh seo (tha eisimpleir deuchainneach ann de plugan React) le luchd-togail ro-stàlaichte agus rèiteichte.

Pàirt 2: Ullachadh na h-Àrainneachd Ionadail

Gus obrachadh air a’ plugan, bidh feum againn air cruinneachadh Kubernetes leis na h-innealan uile a tha air an stàladh ro-làimh: prometheus, node-exporter, kube-state-metrics, agus grafana. Bu chòir an àrainneachd a bhith luath, furasta, agus gun duilgheadas sam bith a stèidheachadh, agus gus dèanamh cinnteach à ath-luchdachadh teth, bu chòir am pasgan dàta Grafana a bhith air a chuir suas gu dìreach bho inneal an leasaiche.

Nar beachd-ne, ’s e an dòigh as fhasa air obrachadh gu h-ionadail le Kubernetes minikubeIs e an ath cheum am pasgan Prometheus + Grafana a stàladh a’ cleachdadh prometheus-operator. artaigil seo Tha am pròiseas airson prometheus-operator a stàladh air minikube air a mhìneachadh gu mionaideach. Gus buanseasmhachd a chomasachadh, feumaidh tu am paramadair a shuidheachadh. seasmhachd: fìor Anns an fhaidhle charts/grafana/values.yaml, cuir do PV agus PVC fhèin ris agus sònraich iad anns a’ pharamadair persistence.existingClaim.

Tha an sgriobt cur air bhog minikube mu dheireadh againn coltach ri seo:

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

PĂ irt 3: Leasachadh dĂŹreach

Modail nĂŹ

Mar ullachadh airson cur an gnìomh a’ plugain, cho-dhùin sinn na h-aonadan bunaiteach Kubernetes uile a bhios sinn ag obair leotha a mhìneachadh mar chlasaichean TypeScript: pod, deployment, daemonset, statefulset, job, cronjob, service, node, agus namespace. Tha gach aon de na clasaichean seo a’ sealbhachadh bho chlas BaseModel cumanta, a tha a’ mìneachadh togair, destructor, agus dòighean airson faicsinneachd ùrachadh agus atharrachadh. Bidh gach clas cuideachd a’ mìneachadh dàimhean neadaichte le buidhnean eile, leithid liosta de pods airson buidheann cleachdaidh.

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

Le bhith a’ cleachdadh luchd-faighinn is luchd-suidheachaidh, is urrainn dhuinn na meatrach eintiteas a tha sinn ag iarraidh a thaisbeanadh no a shuidheachadh ann an cruth goireasach is so-leughaidh. Mar eisimpleir, toradh cruthaichte nan nódan CPU a ghabhas riarachadh:

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

duilleagan

Tha liosta nan duilleagan uile den plugan againn air a mhĂŹneachadh an toiseach anns an pluing.json againn anns an earrann eisimeileachdan:

Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra

Anns a’ bhloc airson gach duilleag, feumaidh sinn AINM NA DUILLEIGE a shònrachadh (thèid seo an uairsin a thionndadh gu bhith na shlug leis am bi an duilleag seo ruigsinneach); ainm a’ cho-phàirt a tha an urra ri obrachadh na duilleige seo (thèid an liosta de cho-phàirtean às-mhalairt gu module.ts); comharradh air dreuchd an neach-cleachdaidh airson a bheil obair leis an duilleag seo ri fhaighinn agus roghainnean seòlaidh airson a’ bhàr-taoibh.

Anns a’ phàirt a tha an urra ri obrachadh na duilleige, feumaidh sinn an templateUrl a shuidheachadh, ga thoirt seachad leis an t-slighe chun fhaidhle HTML anns a bheil an comharradh. Taobh a-staigh an rianadair, tro stealladh eisimeileachd, is urrainn dhuinn faighinn gu dà sheirbheis Angular chudromach:

  • ’S e seirbheis a th’ ann am backendSrv a bheir seachad eadar-obrachadh leis an fhrithealaiche API Grafana;
  • ’S e seirbheis a th’ ann an datasourceSrv a bheir seachad eadar-obrachadh ionadail leis na stòran dĂ ta uile a tha air an stĂ ladh sa Grafana agad (mar eisimpleir, bidh an dòigh .getAll() a’ tilleadh liosta de na stòran dĂ ta uile a tha air an stĂ ladh; .get( ) — a’ tilleadh nĂŹ eisimpleir de stòr dĂ ta sònraichte.

Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra

Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra

Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra

Pàirt 4: Stòr-dàta

Bho shealladh Grafana, ’s e plugan a th’ ann an stòr-dàta dìreach mar plugan sam bith eile: tha a phuing inntrigidh fhèin aige, module.js, agus faidhle plugin.json le meata-dhàta. Nuair a bhios sinn a’ leasachadh plugan leis an t-seòrsa = app, is urrainn dhuinn eadar-obrachadh le stòran dàta a th’ ann mar-thà (mar eisimpleir, prometheus-datasource) no ar stòran fhèin, agus is urrainn dhuinn an stòradh gu dìreach ann an eòlaire nam plugan (dist/datasource/*) no an stàladh mar eisimeileachd. Nar cùis-ne, tha an stòr-dàta air a phacaigeadh leis a’ chòd plugan. Tha feum cuideachd air teamplaid config.html agus rianadair ConfigCtrl, a thèid a chleachdadh airson duilleag rèiteachaidh eisimpleir an stòr-dàta agus an rianadair Datasource, a chuireas an gnìomh an loidsig airson an stòr-dàta agad.

Anns a’ plugan KubeGraf, bho shealladh eadar-aghaidh cleachdaiche, ’s e stòr-dàta eisimpleir de chruinneachadh Kubernetes a bhios a’ cur an gnìomh na comasan a leanas (còd tùsail ri fhaighinn Ceangal):

  • a’ faighinn dĂ ta bhon fhrithealaiche api k8s (a’ faighinn liosta de dh’àiteachan-ainm, cleachdaidhean, msaa.)
  • Iarrtasan progsaidh chun prometheus-datasource (a tha air a thaghadh anns na roghainnean plugan airson gach cruinneachadh sònraichte) agus freagairtean a chruth-atharrachadh airson dĂ ta a chleachdadh ann an duilleagan statach agus deas-bhòrd.
  • ag Ăšrachadh dĂ ta air duilleagan statach a’ plugain (le ĂŹre Ăšrachaidh suidhichte).
  • A’ giullachd cheistean gus duilleag teamplaid a chruthachadh ann an deas-bhòrd grafana (method .metriFindQuery())

Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra

Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra

Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra

  • deuchainn ceangail leis a’ chruinneachadh k8s mu dheireadh.
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"};
       })
}

Tha taobh gu sònraichte inntinneach, nar beachd-ne, de bhith a’ cur an gnìomh an dòigh dearbhaidh is ùghdarrais airson an stòr-dàta. Mar as trice, a-mach às a’ bhogsa, is urrainn dhuinn co-phàirt datasourceHttpSettings togte Grafana a chleachdadh gus ruigsinneachd chun stòr-dàta mu dheireadh a rèiteachadh. Leis a’ cho-phàirt seo, is urrainn dhuinn ruigsinneachd chun stòr-dàta HTTP a rèiteachadh le bhith a’ sònrachadh an URL agus roghainnean dearbhaidh/ùghdarrais bunaiteach: logadh a-steach/facal-faire, no client-cert/client-key. Bha feum air beagan atharrachaidh gus an comas ruigsinneachd a rèiteachadh a’ cleachdadh comharra giùlain (an inbhe de facto airson k8s) a chur an gnìomh.

Gus an duilgheadas seo fhuasgladh, faodaidh tu inneal "Slighean Plugin" togte Grafana a chleachdadh (barrachd fiosrachaidh air duilleag sgrÏobhainnean oifigeilAnns na roghainnean stòr-dàta againn, is urrainn dhuinn seata de riaghailtean sligheachaidh ainmeachadh a thèid a phròiseasadh leis an fhrithealaiche proxy grafana. Mar eisimpleir, airson gach ceann-uidhe fa leth, tha an roghainn ann cinn-sgrÏobhaidh no URLan a shuidheachadh le taic teamplaid, agus faodar an dàta airson sin a thoirt bho na raointean jsonData agus secureJsonData (airson faclan-faire no comharran a stòradh ann an cruth crioptaichte). Anns an eisimpleir againne, iarrtasan den chruth /__proxy/api/v1/ainmean-àite thèid a chleachdadh mar phrocsaidh gu URLan den t-seòrsa a leanas
/api/v1/namespaces leis an t-seata ceann-sgrìobhaidh Ùghdarras: Giùlain.

Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra

Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra

Gu nàdarra, gus obrachadh leis an fhrithealaiche api k8s, feumaidh sinn neach-cleachdaidh le ruigsinneachd leughaidh a-mhàin, agus gheibh thu na manifestean airson an cruthachadh ann an cuideachd còd tÚsail plugan.

PĂ irt 5: Sgaoileadh

Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra

Cho luath ‘s a sgrìobhas tu am plugan Grafana agad fhèin, bidh thu gu nàdarrach airson a dhèanamh stòr fosgailte. Ann an Grafana, is e leabharlann plugan a tha seo, ri fhaighinn aig grafana.com/grafana/plugins

Gus am bi am plugan agad ri fhaighinn anns a’ bhùth oifigeil, feumaidh tu PR a dhèanamh ann an an tasgaidh seo, a’ cur susbaint mar seo ris an fhaidhle repo.json:

Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra

far a bheil version a’ ciallachadh an tionndadh den plugan agad, url a’ ciallachadh a’ cheangal ris an stòr-dàta, agus commit a’ ciallachadh hash a’ chomit a chuireas an tionndadh sònraichte den plugan ri fhaighinn.

Agus aig an toradh chĂŹ thu dealbh mĂŹorbhaileach mar seo:

Leasachadh plugan airson Grafana: eachdraidh de dhealbhan mòra

Thèid an dàta air a shon a ghlacadh gu fèin-ghluasadach bhon fhaidhle Readme.md agad, Changelog.md, agus am faidhle plugin.json leis an tuairisgeul air a’ plugan.

PĂ irt 6: An Ă ite cho-dhĂšnaidhean

Chan eil sinn air stad a bhith a’ leasachadh ar plugan bho chaidh a leigeil ma sgaoil. Tha sinn an-dràsta ag obair air sùil cheart a chumail air cleachdadh ghoireasan nód cruinneachaidh, feartan ùra a chuir an gnìomh gus eòlas an neach-cleachdaidh a leasachadh, agus a’ rèiteachadh an ìre mhòr de bheachdan a fhuair sinn bho ar luchd-ceannach agus bho luchd-cleachdaidh air GitHub às deidh dhuinn am plugan a stàladh (ma dh’ fhàgas tu cùis no iarrtas tarraing, bhithinn glè thoilichte :)).

Tha sinn an dòchas gun cuidich an t-artaigil seo thu gus inneal cho mÏorbhaileach ri Grafana a thuigsinn agus, is dòcha, do plugan fhèin a sgrÏobhadh.

Tapadh leat!)

Source: www.habr.com

Ceannaich aoigheachd earbsach airson làraich le dìon DDoS, frithealaichean VPS VDS 🔥 Ceannaich aoigheachd làrach-lìn earbsach le dìon DDoS, frithealaichean VPS VDS | ProHoster