گرافانا لاءِ پلگ ان جي ترقي: وڏي شاٽ جي تاريخ

هيلو سڀ! ڪجھ مھينا اڳ، اسان پنھنجي نئين اوپن سورس پروجيڪٽ کي پيداوار ۾ شروع ڪيو - ڪبرنيٽس جي نگراني لاءِ گرافانا پلگ ان، جنھن کي اسان سڏيون ٿا DevOpsProdigy KubeGraf. پلگ ان جو سورس ڪوڊ موجود آهي GitHub تي عوامي مخزن. ۽ هن آرٽيڪل ۾ اسان توهان سان حصيداري ڪرڻ چاهيون ٿا ته اسان ڪئين پلگ ان ٺاهي، اسان ڪهڙا اوزار استعمال ڪيا ۽ ترقي جي عمل دوران اسان کي ڪهڙا نقصان ٿيا. اچو ته هلون!

حصو 0 - تعارفي: اسان هن نقطي تي ڪيئن حاصل ڪيو؟

گرافن لاءِ اسان جو پنهنجو پلگ ان لکڻ جو خيال اسان وٽ اتفاقي طور تي آيو. اسان جي ڪمپني 10 سالن کان وڌيڪ عرصي تائين پيچيدگي جي مختلف سطحن جي ويب منصوبن جي نگراني ڪري رهي آهي. هن عرصي دوران، اسان وڏي مقدار ۾ ماهر، دلچسپ ڪيس، ۽ مختلف مانيٽرنگ سسٽم استعمال ڪرڻ ۾ تجربو گڏ ڪيو آهي. ۽ ڪجهه نقطي تي اسان پاڻ کان پڇيو: ”ڇا ڪوبرنيٽس جي نگراني لاءِ ڪو جادوئي اوزار آهي، ته جيئن اهي چون ٿا، ”ان کي سيٽ ڪريو ۽ ان کي وساريو“؟“.. K8s جي نگراني لاءِ صنعت جو معيار، يقيناً، ڪافي عرصي کان رهيو آهي. Prometheus + Grafana جو ميلاپ. ۽ هن اسٽيڪ لاءِ تيار ڪيل حلن جي طور تي، اتي مختلف قسمن جي اوزارن جو هڪ وڏو مجموعو آهي: prometheus-operator، kubernetes-mixin deshboards جو هڪ سيٽ، grafana-kubernetes-app.

گرافانا-ڪبرنيٽس-ايپ پلگ ان اسان لاءِ سڀ کان وڌيڪ دلچسپ آپشن لڳي رهيو هو، پر اهو هڪ سال کان وڌيڪ عرصي تائين سپورٽ نه ڪيو ويو آهي ۽ ان کان علاوه، نوڊ-ايڪسپورٽر ۽ ڪوبي-رياست-ميٽرڪس جي نئين ورزن سان ڪم نٿو ڪري سگهي. ۽ ڪجهه نقطي تي اسان فيصلو ڪيو: "ڇا اسان کي پنهنجو فيصلو نه ڪرڻ گهرجي؟"

اسان پنهنجي پلگ ان ۾ ڪهڙا خيال لاڳو ڪرڻ جو فيصلو ڪيو:

  • "ايپليڪيشن ميپ" جو تصور: ڪلستر ۾ ايپليڪيشنن جي آسان پيشڪش، نالن جي جڳهن جي ترتيب سان، ترتيب ڏيڻ ...؛
  • ڪنيڪشن جو تصور جهڙوڪ "تعيناتي - خدمت (+ بندرگاهن)".
  • ڪلستر نوڊس ۾ ڪلستر ايپليڪيشنن جي ورڇ جو تصور.
  • ڪيترن ئي ذريعن مان ميٽرڪ ۽ معلومات جو مجموعو: Prometheus ۽ k8s api سرور.
  • انفراسٽرڪچر جي ٻنهي حصن جي نگراني (سي پي يو ٽائيم، ميموري، ڊسڪ سب سسٽم، نيٽ ورڪ جو استعمال) ۽ ايپليڪيشن لاجڪ - هيلٿ اسٽيٽس پوڊس، موجود ريپليڪس جو تعداد، جاندار/تياري ٽيسٽ پاس ڪرڻ بابت معلومات.

حصو 1: ”گرافانا پلگ ان“ ڇا آهي؟

ٽيڪنيڪل نقطي نظر کان، گرافانا لاءِ پلگ ان هڪ ڪنولر ڪنٽرولر آهي، جيڪو گرافانا ڊيٽا ڊاريڪٽري ۾ محفوظ ٿيل آهي (/var/grafana/plugins/ /dist/module.js) ۽ هڪ SystemJS ماڊل طور لوڊ ڪري سگهجي ٿو. هن ڊاريڪٽري ۾ پڻ هڪ plugin.json فائل هجڻ گهرجي جنهن ۾ توهان جي پلگ ان بابت سموري معلومات شامل هجي: نالو، نسخو، پلگ ان جو قسم، ريپوزٽري/سائيٽ/لائسنس، انحصار، وغيره.

گرافانا لاءِ پلگ ان جي ترقي: وڏي شاٽ جي تاريخ
module.ts

گرافانا لاءِ پلگ ان جي ترقي: وڏي شاٽ جي تاريخ
plugin.json

جئين توهان اسڪرين شاٽ ۾ ڏسي سگهو ٿا، اسان وضاحت ڪئي plugin.type = ايپ. ڇاڪاڻ ته گرافانا لاءِ پلگ ان ٽن قسمن جا ٿي سگهن ٿا:

پينل: سڀ کان وڌيڪ عام قسم جو پلگ ان - اهو هڪ پينل آهي ڪنهن به ميٽرڪس کي ڏسڻ لاءِ، مختلف ڊيش بورڊ ٺاهڻ لاءِ استعمال ڪيو ويندو آهي.
ڊيٽا جو ذريعو: پلگ ان ڪنيڪٽر ڪجھ ڊيٽا ماخذ سان (مثال طور، Prometheus-datasource، ClickHouse-datasource، ElasticSearch-datasource).
ائپ: هڪ پلگ ان جيڪو توهان کي اجازت ڏئي ٿو توهان جي پنهنجي فرنٽ اينڊ ايپليڪيشن کي Grafana اندر ٺاهي، پنهنجا پنهنجا html صفحا ٺاهي ۽ دستي طور تي ڊيٽا ماخذ تائين رسائي ڪري مختلف ڊيٽا کي ڏسڻ لاءِ. انهي سان گڏ، ٻين قسمن جا پلگ ان (ڊيٽا سورس، پينل) ۽ مختلف ڊيش بورڊ استعمال ڪري سگھجن ٿا انحصار طور.

گرافانا لاءِ پلگ ان جي ترقي: وڏي شاٽ جي تاريخ
مثال پلگ ان انحصار ٽائپ = ايپ سان.

توھان ٻئي استعمال ڪري سگھوٿا JavaScript ۽ TypeScript ھڪ پروگرامنگ ٻولي طور (اسان ان کي چونڊيو). هيلو ورلڊ پلگ ان لاءِ تياريون ڪنهن به قسم جي توهان ڪري سگهو ٿا لنڪ ڳوليو: هن مخزن ۾ وڏي تعداد ۾ اسٽارٽر پيڪ شامل آهن (ريڪٽ ۾ پلگ ان جو هڪ تجرباتي مثال پڻ آهي) اڳ ۾ نصب ٿيل ۽ ترتيب ڏنل بلڊرز سان.

حصو 2: مقامي ماحول تيار ڪرڻ

پلگ ان تي ڪم ڪرڻ لاءِ، اسان کي قدرتي طور تي سڀني اڳ ۾ نصب ٿيل اوزارن سان گڏ ڪبرنيٽس ڪلستر جي ضرورت آھي: پروميٿيوس، نوڊ-ايڪسپورٽر، ڪبي-اسٽيٽ-ميٽرڪس، گرافانا. ماحول کي جلدي، آساني سان ۽ قدرتي طور تي ترتيب ڏيڻ گهرجي، ۽ گرم ٻيهر لوڊ ڪرڻ کي يقيني بڻائڻ لاء، گرافانا ڊيٽا ڊاريڪٽري کي سڌو سنئون ڊولپر جي مشين مان نصب ڪيو وڃي.

سڀ کان وڌيڪ آسان طريقو، اسان جي راء ۾، مقامي طور تي ڪبرنيٽس سان ڪم ڪرڻ آهي منيڪيوب. ايندڙ قدم Prometheus + Grafana ميلاپ کي انسٽال ڪرڻ آهي prometheus-operator استعمال ڪندي. IN هي آرٽيڪل minikube تي prometheus-آپريٽر انسٽال ڪرڻ جو عمل تفصيل سان بيان ڪيو ويو آهي. استحڪام کي فعال ڪرڻ لاء، توهان کي پيٽرولر مقرر ڪرڻ گهرجي ثابت قدمي: سچ charts/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

حصو 3: حقيقي ترقي

آبجیکٹ ماڊل

پلگ ان کي لاڳو ڪرڻ جي تياري ۾، اسان سڀني بنيادي ڪبرنيٽس ادارن کي بيان ڪرڻ جو فيصلو ڪيو جن سان اسان ٽائپ اسڪرپٽ ڪلاسن جي صورت ۾ ڪم ڪنداسين: پوڊ، ڊيپلائيمينٽ، ڊيمونسيٽ، اسٽيٽفول سيٽ، نوڪري، ڪرونجوب، سروس، نوڊ، نيمس اسپيس. انهن طبقن مان هر هڪ عام بيس ماڊل ڪلاس مان ورثي ۾ ملي ٿو، جيڪو بيان ڪري ٿو تعمير ڪندڙ، تباهي ڪندڙ، تازه ڪاري ڪرڻ ۽ ڏسڻ جي سوئچنگ جا طريقا. هر هڪ طبقو بيان ڪري ٿو nested رشتا ٻين ادارن سان، مثال طور، قسم جي مقرري جي اداري لاءِ پوڊ جي هڪ فهرست.

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

گيٽرز ۽ سيٽرز جي مدد سان، اسان هڪ آسان ۽ پڙهڻ جي قابل فارم ۾ اسان کي گهربل ميٽرڪس ڏيکاري يا سيٽ ڪري سگهون ٿا. مثال طور، مختص ڪيل سي پي يو نوڊس جي فارميٽ ٿيل آئوٽ:

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

پنا

اسان جي سڀني پلگ ان صفحن جي هڪ فهرست شروعاتي طور تي اسان جي pluing.json ۾ بيان ڪيل آهي انحصار سيڪشن ۾:

گرافانا لاءِ پلگ ان جي ترقي: وڏي شاٽ جي تاريخ

هر صفحي جي بلاڪ ۾ اسان کي PAGE NAME جي نشاندهي ڪرڻ گهرجي (اهو پوءِ هڪ سلگ ۾ تبديل ڪيو ويندو جنهن ذريعي هي صفحو پهچندو)؛ هن صفحي جي آپريشن لاء ذميوار جزو جو نالو (جزا جي فهرست module.ts ڏانهن برآمد ڪئي وئي آهي)؛ صارف جي ڪردار کي اشارو ڪندي جنهن لاءِ هن صفحي سان ڪم موجود آهي ۽ سائڊبار لاءِ نيويگيشن سيٽنگون.

صفحي جي آپريشن جي ذميوار حصي ۾، اسان کي templateUrl مقرر ڪرڻ گهرجي، اتي html فائل ڏانهن رستو مارڪ اپ سان گذري ٿو. ڪنٽرولر جي اندر، انحصار انجيڪشن ذريعي، اسان 2 اهم ڪنولر خدمتن تائين رسائي ڪري سگھون ٿا:

  • backendSrv - هڪ خدمت جيڪا مهيا ڪري ٿي رابطي سان Grafana API سرور؛
  • datasourceSrv - هڪ خدمت جيڪا توهان جي گرافانا ۾ نصب ڪيل سڀني ڊيٽا ذريعن سان مقامي رابطي کي فراهم ڪري ٿي (مثال طور، .getAll() طريقو - سڀني نصب ڪيل ڊيٽا ذريعن جي فهرست واپس ڪري ٿو؛ .get( ) - ھڪڙي خاص ڊيٽا جي ذريعن جو ھڪڙو مثال اعتراض موٽائي ٿو.

گرافانا لاءِ پلگ ان جي ترقي: وڏي شاٽ جي تاريخ

گرافانا لاءِ پلگ ان جي ترقي: وڏي شاٽ جي تاريخ

گرافانا لاءِ پلگ ان جي ترقي: وڏي شاٽ جي تاريخ

حصو 4: ڊيٽا جو ذريعو

گرافانا جي نقطي نظر کان، ڊيٽا جو ذريعو بلڪل ساڳيو پلگ ان آهي جيئن سڀني ٻين: ان جي پنهنجي داخلا پوائنٽ module.js آهي، اتي ميٽا معلومات plugin.json سان گڏ هڪ فائل آهي. جڏهن ٽائپ = ايپ سان هڪ پلگ ان ٺاهي رهيا آهيون، اسان ٻنهي موجوده ڊيٽا ذريعن سان رابطو ڪري سگهون ٿا (مثال طور، پروميٿيوس-ڊيٽا سورس) ۽ اسان جو پنهنجو، جنهن کي اسان سڌو سنئون پلگ ان ڊاريڪٽري (dist/datasource/*) ۾ ذخيرو ڪري سگهون ٿا يا انحصار جي طور تي انسٽال ڪري سگهون ٿا. اسان جي صورت ۾، ڊيٽا جو ذريعو اچي ٿو پلگ ان ڪوڊ سان. اهو پڻ ضروري آهي ته هڪ config.html ٽيمپليٽ ۽ هڪ ConfigCtrl ڪنٽرولر، جيڪو ڊيٽا سورس مثال جي ترتيب واري صفحي ۽ ڊيٽا سورس ڪنٽرولر لاءِ استعمال ڪيو ويندو، جيڪو توهان جي ڊيٽا ذريعن جي منطق کي لاڳو ڪري ٿو.

KubeGraf پلگ ان ۾، صارف جي انٽرنيٽ جي نقطي نظر کان، ڊيٽا جو ذريعو ڪبرنيٽس ڪلستر جو ھڪڙو مثال آھي جيڪو ھيٺين صلاحيتن کي لاڳو ڪري ٿو (ذريعو ڪوڊ موجود آھي لنڪ):

  • k8s api-server کان ڊيٽا گڏ ڪرڻ (نالن جي جڳھن جي لسٽ حاصل ڪرڻ، مقرري...)
  • prometheus-datasource ڏانهن پراڪسنگ درخواستون (جيڪو هر مخصوص ڪلستر لاءِ پلگ ان سيٽنگن ۾ چونڊيو ويو آهي) ۽ ڊيٽا کي استعمال ڪرڻ لاءِ فارميٽنگ جوابن ٻنهي جامد صفحن ۽ ڊيش بورڊن ۾.
  • جامد پلگ ان صفحن تي ڊيٽا کي اپڊيٽ ڪرڻ (سيٽ ريفريش جي شرح سان).
  • گرافانا-ڊيش بورڊز (metriFindQuery() طريقو) ۾ ٽيمپليٽ شيٽ ٺاهڻ لاءِ سوالن جي پروسيسنگ

گرافانا لاءِ پلگ ان جي ترقي: وڏي شاٽ جي تاريخ

گرافانا لاءِ پلگ ان جي ترقي: وڏي شاٽ جي تاريخ

گرافانا لاءِ پلگ ان جي ترقي: وڏي شاٽ جي تاريخ

  • فائنل 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"};
       })
}

هڪ الڳ دلچسپ نقطو، اسان جي راء ۾، ڊيٽا جي ذريعن لاء هڪ تصديق ۽ اختيار جي ميڪانيزم تي عمل درآمد آهي. عام طور تي، دٻي کان ٻاهر، اسان استعمال ڪري سگھون ٿا تعمير ٿيل گرافانا جزو datasourceHttp سيٽنگون حتمي ڊيٽا ماخذ تائين رسائي کي ترتيب ڏيڻ لاءِ. هن جزو کي استعمال ڪندي، اسان url ۽ بنيادي تصديق / اختيار جي سيٽنگن کي بيان ڪندي http ڊيٽا ماخذ تائين رسائي کي ترتيب ڏئي سگھون ٿا: لاگ ان-پاسورڊ، يا client-cert/client-key. بيئرر ٽوڪن استعمال ڪندي پهچ کي ترتيب ڏيڻ جي صلاحيت کي لاڳو ڪرڻ لاءِ (k8s لاءِ ڊي فيڪٽو معيار)، اسان کي ٿورڙي ٽوڪ ڪرڻي پوندي.

هن مسئلي کي حل ڪرڻ لاء، توهان استعمال ڪري سگهو ٿا تعمير ٿيل گرافانا "پلگ ان روٽس" ميڪانيزم (وڌيڪ تفصيلات تي سرڪاري دستاويز صفحو). اسان جي ڊيٽا ماخذ جي سيٽنگن ۾، اسان روڊن جي ضابطن جو هڪ سيٽ اعلان ڪري سگھون ٿا جيڪو عمل ڪيو ويندو گرافانا پراکسي سرور. مثال طور، هر فرد جي آخري نقطي لاءِ اهو ممڪن آهي ته هيڊر يا يو آر ايل کي ترتيب ڏيڻ سان گڏ ٽيمپليٽنگ جي امڪان سان، ڊيٽا جنهن لاءِ jsonData ۽ safeJsonData شعبن مان ورتو وڃي (انڪريپٽ ٿيل فارم ۾ پاسورڊ يا ٽوڪن کي محفوظ ڪرڻ لاءِ). اسان جي مثال ۾، سوالن وانگر /__proxy/api/v1/namespaces فارم جي url ڏانهن proxed ڪيو ويندو
اختيار سان گڏ /api/v8/namespaces: Bearer header.

گرافانا لاءِ پلگ ان جي ترقي: وڏي شاٽ جي تاريخ

گرافانا لاءِ پلگ ان جي ترقي: وڏي شاٽ جي تاريخ

قدرتي طور تي، k8s api سرور سان ڪم ڪرڻ لاءِ اسان کي هڪ صارف جي ضرورت آهي جنهن ۾ صرف پڙهڻ جي رسائي آهي، ٺاهڻ لاءِ ظاهر آهي جنهن ۾ توهان پڻ ڳولي سگهو ٿا. پلگ ان جو ذريعو ڪوڊ.

حصو 5: ڇڏڻ

گرافانا لاءِ پلگ ان جي ترقي: وڏي شاٽ جي تاريخ

هڪ دفعو توهان پنهنجو گرافانا پلگ ان لکيو آهي، توهان قدرتي طور تي ان کي عوامي طور تي دستياب ڪرڻ چاهيندا. گرافانا ۾ هي پلگ ان جي هڪ لائبريري آهي هتي دستياب آهي grafana.com/grafana/plugins

توھان جي پلگ ان کي سرڪاري اسٽور تي دستياب ڪرڻ لاءِ، توھان کي پي آر ان ڪرڻ جي ضرورت آھي هن مخزنrepo.json فائل ۾ هن جهڙو مواد شامل ڪندي:

گرافانا لاءِ پلگ ان جي ترقي: وڏي شاٽ جي تاريخ

جتي نسخو توهان جي پلگ ان جو نسخو آهي، url مخزن جي هڪ لنڪ آهي، ۽ ڪمٽٽ جو هيش آهي جنهن لاءِ پلگ ان جو هڪ مخصوص نسخو دستياب هوندو.

۽ ٻاھر نڪرڻ تي توھان ھڪڙي شاندار تصوير ڏسندا جھڙوڪ:

گرافانا لاءِ پلگ ان جي ترقي: وڏي شاٽ جي تاريخ

ان لاءِ ڊيٽا خودڪار طريقي سان پڪڙي ويندي توھان جي Readme.md، Changelog.md ۽ plugin.json فائل مان پلگ ان جي تفصيل سان.

حصو 6: نتيجن جي بدران

اسان ڇڏڻ کان پوء اسان جي پلگ ان کي ترقي ڪرڻ بند نه ڪيو. ۽ ھاڻي اسان ڪلسٽر نوڊس جي وسيلن جي استعمال جي صحيح نگراني تي ڪم ڪري رھيا آھيون، UX کي بھتر ڪرڻ لاءِ نوان فيچر متعارف ڪرائڻ، ۽ پلگ ان کي انسٽال ڪرڻ کان پوءِ مليل موٽ جي وڏي مقدار ۾ ريڪنگ ڪري رھيا آھيون اسان جي ڪلائنٽ ۽ GitHub تي موجود ماڻھن کان (جيڪڏھن توھان ڇڏي ڏيو) توهان جو مسئلو يا ڇڪڻ جي درخواست، مان تمام خوش ٿيندس :)

اسان کي اميد آهي ته هي مضمون توهان کي سمجهڻ ۾ مدد ڏيندو اهڙي شاندار اوزار Grafana ۽، شايد، پنهنجو پلگ ان لکو.

تنهنجي مهرباني!)

جو ذريعو: www.habr.com

تبصرو شامل ڪريو