د ګرافانا لپاره د پلگ ان پراختیا: د لوی شاټونو تاریخ

سلام و ټولو ته! څو میاشتې دمخه، موږ زموږ د خلاصې سرچینې نوې پروژه په تولید کې پیل کړه - د کبرنیټس څارنې لپاره د ګرافانا پلگ ان، کوم چې موږ ورته وایو DevOpsProdigy KubeGraf. د پلگ ان سرچینې کوډ په کې شتون لري په GitHub کې عامه ذخیره. او پدې مقاله کې موږ غواړو له تاسو سره دا کیسه شریکه کړو چې موږ څنګه پلگ ان رامینځته کړی ، کوم وسیلې مو کارولي او د پراختیا پروسې په جریان کې موږ له کومو ننګونو سره مخ شوي یو. مخکې شه!

0 برخه - سریزه: موږ څنګه دې ټکي ته ورسیدو؟

د ګرافان لپاره زموږ د خپل پلگ ان لیکلو نظر موږ ته په ناڅاپي ډول راغی. زموږ شرکت د 10 کلونو څخه ډیر وخت لپاره د پیچلتیا مختلف کچو ویب پروژې نظارت کوي. د دې وخت په جریان کې، موږ د څارنې د مختلفو سیسټمونو په کارولو کې د پام وړ مهارتونه، په زړه پورې قضیې، او تجربې راټولې کړې. او په یو وخت کې موږ له ځانه وپوښتل: "ایا د کوبرنیټس څارلو لپاره کومه جادو وسیله شتون لري ، نو لکه څنګه چې دوی وايي ، "دا یې تنظیم کړئ او هیر یې کړئ"؟. د پرومیتیوس + ګرافانا ترکیب. او د دې سټیک لپاره د چمتو شوي حلونو په توګه ، د مختلف ډوله وسیلو لوی سیټ شتون لري: پرومیتیس-آپریټر ، د کبرنیټس مکسین ډشبورډونو سیټ ، ګرافانا-کوبرنیټس-ایپ.

د grafana-kubernetes-app پلگ ان زموږ لپاره خورا په زړه پوري انتخاب بریښي ، مګر دا د یو کال څخه ډیر وخت لپاره نه دی ملاتړ شوی او سربیره پردې ، نشي کولی د نوډ صادرونکي او کیوب ریاست میټریک نوي نسخو سره کار وکړي. او په یو وخت کې موږ پریکړه وکړه: "ایا موږ باید خپله پریکړه ونه کړو؟"

کوم نظرونه چې موږ پریکړه وکړه چې زموږ په پلگ ان کې پلي کړو:

  • د "غوښتنلیک نقشه" لیدل: په کلستر کې د غوښتنلیکونو مناسب پریزنټشن، د نوم ځایونو، ځای پرځای کولو په واسطه ګروپ شوی ...؛
  • د ارتباطاتو لید لکه "ګمارنه - خدمت (+ بندرونه)".
  • د کلستر نوډونو په اوږدو کې د کلستر غوښتنلیکونو ویشلو لید.
  • د ډیری سرچینو څخه د میټریکونو او معلوماتو راټولول: Prometheus او k8s api سرور.
  • د دواړو زیربناوو د برخې څارنه (د CPU وخت، حافظې، ډیسک سبسیسټم، شبکه) او د غوښتنلیک منطق - د روغتیا حالت پوډونه، د شته نقلونو شمیر، د ژوندانه / چمتووالي ازموینې تیرولو په اړه معلومات.

برخه 1: د "Grafana پلگ ان" څه شی دی؟

د تخنیکي نظر څخه، د ګرافانا لپاره پلگ ان یو زاویه کنټرولر دی، کوم چې د ګرافانا ډیټا ډایرکټر کې زیرمه شوی (/var/grafana/plugins/ /dist/module.js) او د SystemJS ماډل په توګه پورته کیدی شي. همدارنګه په دې لارښود کې باید د plugin.json فایل وي چې ستاسو د پلگ ان په اړه ټول میټا معلومات لري: نوم، نسخه، د پلگ ان ډول، د ذخیره/سایټ/لایسنس لینکونه، انحصار، او داسې نور.

د ګرافانا لپاره د پلگ ان پراختیا: د لوی شاټونو تاریخ
module.ts

د ګرافانا لپاره د پلگ ان پراختیا: د لوی شاټونو تاریخ
plugin.json

لکه څنګه چې تاسو په سکرین شاټ کې لیدلی شئ، موږ plugin.type = app مشخص کړی. ځکه چې د ګرافانا لپاره پلگ ان په درې ډوله کیدی شي:

ويناوالو: د پلگ ان ترټولو عام ډول - دا د هر ډول میټریکونو لیدو لپاره پینل دی چې د مختلف ډشبورډونو جوړولو لپاره کارول کیږي.
ډاټا سرچینه: د ځینو معلوماتو سرچینې سره د پلگ ان نښلونکی (د مثال په توګه، پرومیټیوس ډیټا سرچینه، کلیک هاوس ډیټا سرچینه، لچک لټون - ډیټا سرچینه).
اپلیکیشن: یو پلگ ان چې تاسو ته اجازه درکوي په ګرافانا کې دننه خپل فرنټ اینډ اپلیکیشن جوړ کړئ ، خپل html پا pagesې رامینځته کړئ او په لاسي ډول ډیټا سرچینې ته لاسرسی ومومئ ترڅو مختلف ډیټا لیدو لپاره. همچنان ، د نورو ډولونو پلگ انونه (د ډیټا سرچینه ، پینل) او مختلف ډشبورډونه د انحصار په توګه کارول کیدی شي.

د ګرافانا لپاره د پلگ ان پراختیا: د لوی شاټونو تاریخ
د ډول = ایپ سره د پلگ ان انحصار مثال.

تاسو کولی شئ دواړه JavaScript او TypeScript د پروګرام کولو ژبې په توګه وکاروئ (موږ دا غوره کړه). د هر ډول هیلو نړۍ پلگ انونو لپاره چمتووالی چې تاسو یې کولی شئ لینک پیدا کړئ: دا ذخیره د دمخه نصب شوي او تنظیم شوي جوړونکو سره د سټارټر پیکونو لوی شمیر لري (حتی په عکس العمل کې د پلگ ان تجربې مثال هم شتون لري).

2 برخه: د محلي چاپیریال چمتو کول

په پلگ ان کې د کار کولو لپاره، موږ په طبیعي توګه د ټولو مخکې نصب شوي وسیلو سره د کبرنیټس کلستر ته اړتیا لرو: پرومیتیس، نوډ صادرونکی، کیوب-اسټیټ میټریک، ګرافانا. چاپیریال باید ګړندي ، په اسانۍ او طبیعي ډول تنظیم شي ، او د ګرمې بیا بارولو ډاډ ترلاسه کولو لپاره ، د ګرافانا ډیټا لارښود باید مستقیم د پراختیا کونکي ماشین څخه نصب شي.

ترټولو اسانه لار، زموږ په نظر، په محلي توګه د کبرنیټ سره کار کول دي مینیکیوب. بل ګام د prometheus-operator په کارولو سره د Prometheus + Grafana ترکیب نصب کول دي. IN دا مقاله په مینیکیوب کې د پرومیتیس آپریټر نصبولو پروسه په تفصیل سره بیان شوې. د دوام وړ کولو لپاره، تاسو باید پیرامیټر تنظیم کړئ دوام: ریښتیا په چارټونو/grafana/values.yaml فایل کې، خپل PV او PVC اضافه کړئ او په persistence.existingClaim پیرامیټر کې یې مشخص کړئ

زموږ وروستی مینیکیوب لانچ سکریپټ داسې ښکاري:

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

دریمه برخه: حقیقي پرمختګ

د څيز موډل

د پلگ ان پلي کولو لپاره چمتووالي کې، موږ پریکړه وکړه چې ټول لومړني Kubernetes نهادونه تشریح کړو چې موږ به د ټایپ سکریپټ ټولګیو په بڼه کار وکړو: پوډ، ځای پرځای کول، ډیمونسیټ، سټیټفلسټ، دنده، کرونجوب، خدمت، نوډ، نوم ځای. د دې ټولګیو څخه هر یو د عام بیس ماډل ټولګي څخه په میراث کې دی، کوم چې جوړونکی، ویجاړونکی، د لید تازه کولو او بدلولو میتودونه بیانوي. هر ټولګی د نورو ادارو سره د ځړول شوي اړیکې تشریح کوي، د بیلګې په توګه، د ډول ځای پرځای کولو د ادارې لپاره د پوډونو لیست.

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

د ګیټرز او سیټرونو په مرسته، موږ کولی شو د ادارې میټریکونه وښیو یا تنظیم کړو چې موږ ورته اړتیا لرو په اسانه او لوستلو وړ بڼه کې. د مثال په توګه، د تخصیص وړ cpu نوډونو فارمیټ شوی محصول:

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

هغه مخونه

زموږ د ټولو پلگ ان پاڼو لیست په پیل کې زموږ په pluing.json کې د انحصار برخه کې تشریح شوی:

د ګرافانا لپاره د پلگ ان پراختیا: د لوی شاټونو تاریخ

د هرې پاڼې لپاره په بلاک کې موږ باید د پاڼې نوم په ګوته کړو (دا به بیا په سلګ بدل شي چې دا پاڼه به د لاسرسي وړ وي)؛ د هغه برخې نوم چې د دې پاڼې د عملیاتو لپاره مسؤل دی (د اجزاو لیست module.ts ته صادر شوی)؛ د کارونکي رول په ګوته کول د کوم لپاره چې د دې پاڼې سره کار شتون لري او د سائډبار لپاره د نیویګیشن ترتیبات.

په هغه برخه کې چې د پاڼې د عملیاتو مسولیت په غاړه لري، موږ باید د templateUrl تنظیم کړو، هلته د مارک اپ سره د html فایل ته لاره تېر کړو. د کنټرولر دننه، د انحصار انجیکشن له لارې، موږ کولی شو تر 2 مهم زاویه خدماتو ته لاسرسی ومومئ:

  • backendSrv - یو خدمت چې د Grafana API سرور سره تعامل چمتو کوي؛
  • datasourceSrv - یو خدمت چې ستاسو په ګرافانا کې نصب شوي ټولو ډیټا سرچینو سره محلي تعامل چمتو کوي (د مثال په توګه ، د .getAll() میتود - د ټولو نصب شوي ډیټا سرچینو لیست بیرته راګرځوي؛ .get( ) - د یوې ځانګړې ډیټا سرچینې د مثال څیز بیرته راګرځي.

د ګرافانا لپاره د پلگ ان پراختیا: د لوی شاټونو تاریخ

د ګرافانا لپاره د پلگ ان پراختیا: د لوی شاټونو تاریخ

د ګرافانا لپاره د پلگ ان پراختیا: د لوی شاټونو تاریخ

څلورمه برخه: د معلوماتو سرچینه

د Grafana له نظره، د ډیټا سرچینه د نورو ټولو په څیر ورته پلگ ان دی: دا خپل د ننوتلو نقطه module.js لري، د میټا معلوماتو plugin.json سره یو فایل شتون لري. کله چې د ډول = ایپ سره پلگ ان رامینځته کړئ ، موږ کولی شو د موجوده ډیټا سرچینو (د مثال په توګه ، پرومیتیس ډیټا سرچینه) او زموږ خپل سره اړیکه ونیسو ، کوم چې موږ کولی شو مستقیم د پلگ ان لارښود (dist/datasource/*) کې ذخیره کړو یا د انحصار په توګه نصب کړو. زموږ په قضیه کې، ډاټا سرچینه د پلگ ان کوډ سره راځي. دا هم اړینه ده چې د config.html ټیمپلیټ او د ConfigCtrl کنټرولر ولرئ، کوم چې به د ډیټا سرچینې مثال ترتیب کولو پاڼې او د ډاټا سرچینې کنټرولر لپاره وکارول شي، کوم چې ستاسو د ډاټا سرچینې منطق پلي کوي.

د KubeGraf پلگ ان کې، د کاروونکي انٹرفیس نقطه نظر څخه، د ډیټا سرچینه د کبرنیټس کلستر یوه بیلګه ده چې لاندې وړتیاوې پلي کوي (د سرچینې کوډ شتون لري مخونه):

  • د k8s api-server څخه د معلوماتو راټولول (د نوم ځایونو لیست ترلاسه کول، ځای پرځای کول ...)
  • prometheus-datasource ته د پراکسي کولو غوښتنې (کوم چې د هر ځانګړي کلستر لپاره د پلگ ان ترتیباتو کې غوره شوي) او په جامد پاڼو او ډشبورډونو کې د معلوماتو کارولو لپاره د ځوابونو فارمیټ کول.
  • په جامد پلگ ان پاڼو کې د معلوماتو تازه کول (د ریفریش نرخ سره).
  • په ګرافانا ډشبورډونو کې د ټیمپلیټ شیټ رامینځته کولو لپاره د پوښتنو پروسس کول

د ګرافانا لپاره د پلگ ان پراختیا: د لوی شاټونو تاریخ

د ګرافانا لپاره د پلگ ان پراختیا: د لوی شاټونو تاریخ

د ګرافانا لپاره د پلگ ان پراختیا: د لوی شاټونو تاریخ

  • د وروستي k8s کلستر سره د پیوستون ازموینه.
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"};
       })
}

یو جلا په زړه پوری ټکی، زموږ په نظر، د ډیټا سرچینې لپاره د تصدیق او واک ورکولو میکانیزم پلي کول دي. په عموم کې، د بکس څخه بهر، موږ کولی شو د ګرافانا برخې ډیټا سورسHttpSettings څخه کار واخلو ترڅو وروستي ډاټا سرچینې ته لاسرسی تنظیم کړو. د دې برخې په کارولو سره، موږ کولی شو د HTTP ډیټا سرچینې ته د url او بنسټیز تصدیق / اجازه ورکولو ترتیباتو په ټاکلو سره لاسرسی تنظیم کړو: login-password، یا client-cert/client-key. د بییرر ټوکن په کارولو سره د لاسرسي تنظیم کولو وړتیا پلي کولو لپاره (د k8s لپاره د حقیقت معیار) ، موږ باید یو څه ټیک کول وکړو.

د دې ستونزې د حل لپاره، تاسو کولی شئ د جوړ شوي ګرافانا "پلگ ان روټس" میکانیزم وکاروئ (نور جزئیات د رسمي اسنادو پاڼه). زموږ د ډیټا سرچینې په ترتیباتو کې، موږ کولی شو د روټینګ مقرراتو سیټ اعلان کړو چې د ګرافانا پراکسي سرور لخوا به پروسس شي. د مثال په توګه، د هر انفرادي پای ټکي لپاره دا ممکنه ده چې سرلیکونه یا یو آر ایل د ټیمپلیټ کولو امکان سره تنظیم کړئ، د هغې لپاره ډاټا د jsonData او safeJsonData ساحو څخه اخیستل کیدی شي (په کوډ شوي بڼه کې د پاسورډونو یا ټوکنونو ذخیره کولو لپاره). زموږ په مثال کې، پوښتنې لکه /__proxy/api/v1/namespace د فورمې url ته به پراکسي شي
/api/v8/نوم ځایونه د اختیار سره: بییرر سرلیک.

د ګرافانا لپاره د پلگ ان پراختیا: د لوی شاټونو تاریخ

د ګرافانا لپاره د پلگ ان پراختیا: د لوی شاټونو تاریخ

په طبیعي توګه، د k8s api سرور سره کار کولو لپاره موږ یو کاروونکي ته اړتیا لرو چې یوازې لوستلو ته لاسرسی ولري، د جوړولو لپاره ښکاره کوي چې تاسو یې هم موندلی شئ. د سرچینې کوډ پلگ ان.

پنځمه برخه: خوشې کول

د ګرافانا لپاره د پلگ ان پراختیا: د لوی شاټونو تاریخ

یوځل چې تاسو خپل د ګرافانا پلگ ان ولیکئ ، نو تاسو به په طبیعي ډول وغواړئ چې دا په عامه توګه چمتو کړئ. په ګرافانا کې دا د پلگ انونو کتابتون دی چې دلته شتون لري grafana.com/grafana/plugins

د دې لپاره چې ستاسو پلگ ان په رسمي پلورنځي کې شتون ولري ، تاسو اړتیا لرئ PR دننه کړئ دا ذخیرهد repo.json فایل ته د دې په څیر مینځپانګې اضافه کولو سره:

د ګرافانا لپاره د پلگ ان پراختیا: د لوی شاټونو تاریخ

چیرې چې نسخه ستاسو د پلگ ان نسخه ده ، یو آر ایل د ذخیره کولو لینک دی ، او ژمن د ژمنې هش دی چې د دې لپاره به د پلگ ان ځانګړی نسخه شتون ولري.

او په محصول کې به تاسو یو په زړه پوری عکس وګورئ لکه:

د ګرافانا لپاره د پلگ ان پراختیا: د لوی شاټونو تاریخ

د دې لپاره ډاټا به په اوتومات ډول ستاسو له Readme.md، Changelog.md او plugin.json فایل څخه د پلگ ان توضیحاتو سره ونیول شي.

شپږمه برخه: د پایلو پر ځای

موږ د خوشې کیدو وروسته زموږ د پلگ ان پراختیا مخه نه ده نیولې. او اوس موږ د کلسټر نوډونو سرچینو کارولو په سمه توګه څارلو باندې کار کوو ، د UX ښه کولو لپاره نوي ب featuresې معرفي کوو ، او همدارنګه زموږ د پیرودونکو لخوا او د GitHub کې د خلکو لخوا د پلگ ان نصبولو وروسته ترلاسه شوي لوی فیډبیک ترلاسه کول (که تاسو پریږدئ) ستاسو مسله یا د پلولو غوښتنه، زه به ډیر خوشحاله شم :)

موږ امید لرو چې دا مقاله به تاسو سره د ګرافانا په څیر د داسې عالي وسیلې په پوهیدو کې مرسته وکړي او شاید خپل خپل پلگ ان ولیکئ.

له تاسو مننه!)

سرچینه: www.habr.com

Add a comment