سلام و ټولو ته! څو میاشتې دمخه، موږ زموږ د خلاصې سرچینې نوې پروژه په تولید کې پیل کړه - د کبرنیټس څارنې لپاره د ګرافانا پلگ ان، کوم چې موږ ورته وایو
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 برخه: د محلي چاپیریال چمتو کول
په پلگ ان کې د کار کولو لپاره، موږ په طبیعي توګه د ټولو مخکې نصب شوي وسیلو سره د کبرنیټس کلستر ته اړتیا لرو: پرومیتیس، نوډ صادرونکی، کیوب-اسټیټ میټریک، ګرافانا. چاپیریال باید ګړندي ، په اسانۍ او طبیعي ډول تنظیم شي ، او د ګرمې بیا بارولو ډاډ ترلاسه کولو لپاره ، د ګرافانا ډیټا لارښود باید مستقیم د پراختیا کونکي ماشین څخه نصب شي.
ترټولو اسانه لار، زموږ په نظر، په محلي توګه د کبرنیټ سره کار کول دي
زموږ وروستی مینیکیوب لانچ سکریپټ داسې ښکاري:
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 لپاره د حقیقت معیار) ، موږ باید یو څه ټیک کول وکړو.
د دې ستونزې د حل لپاره، تاسو کولی شئ د جوړ شوي ګرافانا "پلگ ان روټس" میکانیزم وکاروئ (نور جزئیات
/api/v8/نوم ځایونه د اختیار سره: بییرر سرلیک.
په طبیعي توګه، د k8s api سرور سره کار کولو لپاره موږ یو کاروونکي ته اړتیا لرو چې یوازې لوستلو ته لاسرسی ولري، د جوړولو لپاره ښکاره کوي چې تاسو یې هم موندلی شئ.
پنځمه برخه: خوشې کول
یوځل چې تاسو خپل د ګرافانا پلگ ان ولیکئ ، نو تاسو به په طبیعي ډول وغواړئ چې دا په عامه توګه چمتو کړئ. په ګرافانا کې دا د پلگ انونو کتابتون دی چې دلته شتون لري
د دې لپاره چې ستاسو پلگ ان په رسمي پلورنځي کې شتون ولري ، تاسو اړتیا لرئ PR دننه کړئ
چیرې چې نسخه ستاسو د پلگ ان نسخه ده ، یو آر ایل د ذخیره کولو لینک دی ، او ژمن د ژمنې هش دی چې د دې لپاره به د پلگ ان ځانګړی نسخه شتون ولري.
او په محصول کې به تاسو یو په زړه پوری عکس وګورئ لکه:
د دې لپاره ډاټا به په اوتومات ډول ستاسو له Readme.md، Changelog.md او plugin.json فایل څخه د پلگ ان توضیحاتو سره ونیول شي.
شپږمه برخه: د پایلو پر ځای
موږ د خوشې کیدو وروسته زموږ د پلگ ان پراختیا مخه نه ده نیولې. او اوس موږ د کلسټر نوډونو سرچینو کارولو په سمه توګه څارلو باندې کار کوو ، د UX ښه کولو لپاره نوي ب featuresې معرفي کوو ، او همدارنګه زموږ د پیرودونکو لخوا او د GitHub کې د خلکو لخوا د پلگ ان نصبولو وروسته ترلاسه شوي لوی فیډبیک ترلاسه کول (که تاسو پریږدئ) ستاسو مسله یا د پلولو غوښتنه، زه به ډیر خوشحاله شم :)
موږ امید لرو چې دا مقاله به تاسو سره د ګرافانا په څیر د داسې عالي وسیلې په پوهیدو کې مرسته وکړي او شاید خپل خپل پلگ ان ولیکئ.
له تاسو مننه!)
سرچینه: www.habr.com