áĄáŹá¸ááŻáśá¸áááşášáááŹááŤ! áá˝ááşáá˛áˇááąáŹááĄáááşá¸áááşá ááťá˝ááşáŻááşáááŻáˇáááş ááťá˝ááşáŻááşáááŻáˇááŻááąáŤáşááąáŹ kubernetes ááᯠá
áąáŹááˇáşááźááˇáşáááşáĄáá˝ááş Grafana ááááşáĄááşááᯠááŻááşááŻááşáááşáĄáá˝ááş ááťá˝ááşáŻááşáááŻáˇá open-source áááąáŹááťááşáĄáá
áşááᯠá
áááşáá˛áˇáááşá . ááááşáĄááşáĄáááşá¸áĄááźá
áşááŻááşááᯠáá˝ááşááááŻááşáááşá . á¤ááąáŹááşá¸ááŤá¸áá˝ááş ááťá˝ááşáŻááşáááŻáˇáááş ááááşáĄááşááᯠáááşááŽá¸ááŻáśá ááťá˝ááşáŻááşáááŻáˇáĄááŻáśá¸ááźáŻáá˛áˇáááˇáş ááááááŹááťáŹá¸áážááˇáş áá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻááŻááşáááşá¸á
ááşáĄáá˝ááşá¸ ááźáŻáśáá˝áąáˇáá˛áˇááááˇáş ááťááŻáˇáá˝ááşá¸ááťááşááťáŹá¸áĄááźáąáŹááşá¸ áááˇáşáĄáŹá¸ ááťážááąáááŻááŤáááşá áá˝áŹá¸ááźááĄáąáŹááş!
áĄáááŻááşá¸ 0 - ááááŤááşá¸- á¤áĄááťááşááᯠááťá˝ááşáŻááşáááŻáˇ áááşáááŻáˇááąáŹááşáážááá˛áˇááááşá¸á
Grafan áĄáá˝ááşááťá˝ááşáŻááşáááŻáˇááááŻááşáááŻááş plugin ááąá¸áááşá áááşáá°á¸áááşááťá˝ááşáŻááşáááŻáˇááśáááąáŹáşááááąáŹááşáážááá˛áˇáááşá ááťá˝ááşáŻááşáááŻáˇáááŻáášáááŽáááş áážáŻááşáá˝áąá¸áážáŻáĄáááˇáşáĄááťááŻá¸ááťááŻá¸áážááááˇáş áááşáááąáŹááťááşááťáŹá¸ááᯠá áąáŹááˇáşááźááˇáşááąáááşáážáŹ 10 áážá áşááťáąáŹáşááźáŽááźá áşáááşá á¤ááŹááĄáá˝ááşá¸á ááťá˝ááşáŻááşáááŻáˇáááş ááťáŹá¸ááźáŹá¸áážááąáŹ ááťá˝ááşá¸ááťááşáážáŻá á áááşáááşá áŹá¸á ááŹááąáŹááşá¸áááˇáş áĄááźáąáĄááąááťáŹá¸áážááˇáş á áąáŹááˇáşááźááˇáşááąá¸á áá áşááťáŹá¸ááᯠáĄááŻáśá¸ááźáŻááŹáá˝ááş áĄáá˝áąáˇáĄááźáŻáśááťáŹá¸á á˝áŹááᯠá áŻááąáŹááşá¸ááŹá¸áááşá áá áşááťáááşááťáááşá ááťá˝ááşáŻááşáááŻáˇáááş áááááááŻááşááᯠááąá¸áá˛áˇáááş- "áá°áááŻáˇá "áááşáážááşááźáŽá¸ ááąáˇáá áşáááŻááşááŤ" ááŻááźáąáŹáááˇáşáĄáááŻááşá¸ Kubernetes ááᯠá áąáŹááˇáşááźááˇáşáááş áážáąáŹáşááááááŹáá áşáᯠáážááááŹá¸á" á Prometheus + Grafana ááąáŤááşá¸á ááşá ᤠstack áĄáá˝ááş áĄáááşáááˇáşááŻááşááŹá¸ááąáŹ ááźáąáážááşá¸áááşá¸ááťáŹá¸áĄááąáážááˇáşá ááááááŹáĄááťááŻá¸áĄá áŹá¸ááťáŹá¸á á˝áŹ áĄá áŻáśáááŻááşáážááááş- prometheus-operatorá kubernetes-mixin dashboards áĄá áŻáśá grafana-kubernetes-appá
grafana-kubernetes-app plugin áááş ááťá˝ááşáŻááşáááŻáˇáĄáá˝ááş á áááşáááşá áŹá¸á ááŹáĄááąáŹááşá¸ááŻáśá¸áá˝áąá¸ááťááşáážáŻááźá áşááŻáśááááşá áááŻáˇááąáŹáş áááşá¸ááᯠáá áşáážá áşááťáąáŹáşááźáŹáĄáąáŹááş ááśáˇáááŻá¸áááąá¸áá˛áˇáááˇáşáĄááźááş node-exporter áážááˇáş kube-state-metrics ááŹá¸áážááşá¸áĄáá áşááťáŹá¸áážááˇáşáááşá¸ áĄááŻááşáááźá áşáááŻááşááŤá áá áşááťáááşááťáááşáá˝ááş ááťá˝ááşáŻááşáááŻáˇááŻáśá¸ááźááşáá˛áˇáááş- "ááťá˝ááşáŻááşáááŻáˇááááŻááşáááŻááşááŻáśá¸ááźááşááťááşááᯠáááťáááˇáşáá°á¸ááŹá¸"
ááťá˝ááşáŻááşáááŻáˇá plugin áá˝ááş áááşáááˇáşá áááşáá°á¸ááťáŹá¸ááᯠáĄááąáŹááşáĄáááşááąáŹáşáááş ááŻáśá¸ááźááşáá˛áˇáááş-
- âáĄááşááşááŽááąá¸áážááşá¸ááźáąááŻáśâ ááᯠááŻáśááąáŹáşááźááşá¸- áĄáááşááąááŹááťáŹá¸á ááźááˇáşááťááşáážáŻááťáŹá¸ááźááˇáş áĄáŻááşá áŻáá˝á˛áˇááŹá¸ááąáŹ áĄá áŻáĄááąá¸áážá áĄááşááşááŽááąá¸áážááşá¸ááťáŹá¸á áĄáááşááźáąááąáŹáááşááźáážáŻá
- "ááźááˇáşááťááşááźááşá¸ - áááşááąáŹááşáážáŻ (+ ááááşáááşá¸ááťáŹá¸)" áá˛áˇáááŻáˇááąáŹ ááťáááşáááşáážáŻááťáŹá¸ááᯠááŻáśááąáŹáşááźááşá¸á
- cluster node ááťáŹá¸áá áşááťážáąáŹááş áĄá áŻáááŻááşáĄáááŽááąá¸áážááşá¸ááťáŹá¸ ááźááˇáşááťááşááźááşá¸ááᯠááźááşááąáŹááşááźááşá¸á
- áĄáááşá¸áĄááźá áşááťáŹá¸á á˝áŹááž áááşááá áşááťáŹá¸áážááˇáş áĄááťááşáĄáááşááťáŹá¸ááᯠá áŻááąáŹááşá¸ááźááşá¸- Prometheus áážááˇáş k8s api ááŹááŹá
- áĄááźáąááśáĄááąáŹááşáĄáŚáĄáááŻááşá¸ (CPU áĄááťáááşá áááşáááŻááŽá áá áşááşá áá áşáá˝á˛á áá˝ááşáááş) áážááˇáş áĄáááŽááąá¸áážááşá¸ ááŻáášááááąá- ááťááşá¸ááŹááąá¸ áĄááźáąáĄááą ááąáŤáˇááşááťáŹá¸á ááážááááŻááşááąáŹ ááŻáśá áśáá° áĄááąáĄáá˝ááşá áĄáááşáážááşááźááşá¸/áĄáááşáááˇáş á á áşááąá¸áážáŻááťáŹá¸ ááźááşáááşá¸ááźááşá¸áááŻááşáᏠáĄááťááşáĄáááşááťáŹá¸á
áĄáááŻááşá¸ 1- "Grafana ááááşáĄááş" áááŻáᏠááŹáá˛á
áááşá¸áááŹáááŻááşá¸áááŻááşááŹáĄááźááşáĄá Grafana áĄáá˝ááş plugin áááş Grafana data directory áá˝ááşááááşá¸áááşá¸ááŹá¸áááˇáş angular controller áá áşááŻááźá áşáááşá/var/grafana/plugins/ /dist/module.js) áážááˇáş SystemJS module áá áşááŻáĄááźá áş áááşáááŻááşáááşá áááŻáˇáĄááźááş á¤áááşá¸áá˝ážááşáá˝ááş áááˇáşááááşáĄááşáážááˇáşáááşáááşáááˇáş áááşááŹáĄááťááşáĄáááşáĄáŹá¸ááŻáśá¸ááŤáááşááąáŹ plugin.json áááŻááşáá áşááŻáážááááˇáşáááş- áĄáááşá ááŹá¸áážááşá¸á ááááşáĄááşáĄááťááŻá¸áĄá áŹá¸á áááŻáážáąáŹááşáážáŻ/áááŻááş/áááŻááşá ááşá áážáŽáááŻáážáŻá áááşááźááˇáş ááťáááşáááşáážáŻááťáŹá¸ áážááááˇáşáááşá

module.ts

plugin.json
áááşááŹá¸ááźááşáá˝ááş áááşáá˝áąáˇááźááşááááˇáşáĄáááŻááşá¸á ááťá˝ááşáŻááşáááŻáˇáááş plugin.type = áĄááşááşááᯠáááşáážááşááŹá¸áááşá Grafana áĄáá˝ááş ááááşáĄááşááťáŹá¸áááş áĄááťááŻá¸áĄá áŹá¸ááŻáśá¸ááťááŻá¸áážááááŻááşááąáŹááźáąáŹááˇáşááźá áşáááşá
panel á- áĄááŻáśá¸áĄááťáŹá¸ááŻáśá¸ ááááşáĄááş áĄááťááŻá¸áĄá
áŹá¸ - áááşá¸áááş áĄááťááŻá¸ááťááŻá¸ááąáŹ áááşáážáşááŻááşááťáŹá¸ áááşááąáŹááşááŹáá˝ááş áĄááŻáśá¸ááźáŻáááˇáş áááşáááˇáş áááşááá
áşááťáŹá¸áááŻáááᯠááźááşááŹá
áąáááş áĄáááˇáşáá
áşááŻááźá
áşáááşá
ááąááŹáĄáááşá¸áĄááźá
áş: áĄááťááŻáˇááąáŹááąááŹáĄáááşá¸áĄááźá
áşáááŻáˇ ááááşáĄááşááťáááşáááşáááááᏠ(áĽáááŹá Prometheus-datasourceá ClickHouse-datasourceá ElasticSearch-datasource)á
app áááŻ- Grafana áá˝ááş áááˇáşáááŻááşáááŻááş áážáąáˇáááşá¸áĄáááŽááąá¸áážááşá¸ááᯠáááşááąáŹááşáááşá áááˇáşáááŻááşáááŻááş html á
áŹááťááşáážáŹááťáŹá¸ááᯠáááşááŽá¸áááşáážááˇáş ááąááŹáĄááťááŻá¸ááťááŻá¸ááᯠááźááşááŹá
áąáááş ááąááŹáĄáááşá¸áĄááźá
áşááᯠáááŻááşáááŻááşáááşááąáŹááşááźááˇáşáážáŻáá˝ááˇáşááąá¸áááˇáş ááááşáĄááşáá
áşááŻá áááŻáˇáĄááźááşá áĄááźáŹá¸áĄááťááŻá¸áĄá
áŹá¸ááťáŹá¸ (ááąááŹáĄáááşá¸áĄááźá
áşá áĄáááˇáş) áážááˇáş áĄááťááŻá¸ááťááŻá¸ááąáŹ áááşáážáşááŻááşááťáŹá¸ááᯠáážáŽáááŻáážáŻáĄááźá
áş áĄááŻáśá¸ááźáŻáááŻááşáááşá

type=app ááźááˇáş áĽááᏠááááşáĄááş áážáŽáááŻáážáŻ.
JavaScript áážááˇáş TypeScript áážá áşááťááŻá¸ááŻáśá¸ááᯠááááŻááááşá¸áááşá¸ááŹááŹá ááŹá¸áĄááźá áş áááşáĄááŻáśá¸ááźáŻáááŻááşáááş (ááťá˝ááşáŻááşáááŻáˇáá˝áąá¸ááťááşááŹá¸áááş)á áááşáááşáááŻááşááąáŹ áááşáááˇáşáĄááťááŻá¸áĄá áŹá¸áááᯠhello-world plugins áĄáá˝ááş ááźááşáááşáážáŻááťáŹá¸ : á¤ááááşá¸áááşá¸áážáŻáá˝ááş ááźááŻáááşáááˇáşáá˝ááşá¸ááźáŽá¸ ááźááşáááşááŹá¸ááąáŹ áááşááąáŹááşáá°ááťáŹá¸áážááˇáşáĄáá° (React áá˝ááş ááááşáĄááşáá áşááŻá á ááşá¸áááşáĽáááŹáá áşááŻáááş áážááááş) áĄááťáŹá¸áĄááźáŹá¸ááŤáááşááŤáááşá
áĄáááŻááşá¸ 2- ááąááá˝ááşá¸áááşáááşá¸ááťááşááᯠááźááşáááşááźááşá¸á
ááááşáĄááşááᯠááŻááşááąáŹááşáááşá ááźááŻáááşáááˇáşáá˝ááşá¸ááŹá¸ááąáŹ ááááááŹáĄáŹá¸ááŻáśá¸ááŤáážáááąáŹ kubernetes áĄá áŻáĄááąá¸áá áşáᯠáááŻáĄááşááŤáááş- prometheusá node-exporterá kube-state-metricsá grafanaá áááşáááşá¸ááťááşááᯠááťááşááźááşá á˝áŹá áá˝ááşáá°á á˝áŹáážááˇáş áááŹááĄáááŻááşá¸ áááşááąáŹááşááŹá¸áááˇáşááźáŽá¸ ááźááşáááşá áááşáááş ááąááťáŹá áąáááşá Grafana ááąááŹáááşá¸áá˝ážááşááᯠdeveloper áá ááşááž áááŻááşáááŻááşáááşáááşáááˇáşáááşá
ááťá˝ááşááąáŹáşáááŻáˇáá˛áˇáĄááźááşáĄáááąáŹáˇ Kubernetes áá˛áˇ ááźááşáá˝ááşá¸áážáŹ áĄááŻááşááŻááşáááŻáˇ áĄáááşááźáąááŻáśá¸áááşá¸áááşá¸á . ááąáŹááşáá áşáááˇáşáážáŹ Prometheus-operator ááᯠáĄááŻáśá¸ááźáŻá Prometheus + Grafana ááąáŤááşá¸á ááşáážáŻááᯠáááˇáşáá˝ááşá¸áááşááźá áşáááşá IN minikube áá˝ááş prometheus-operator áááşáááşááźááşá¸ááŻááşáááşá¸á ááşááᯠáĄááąá¸á áááşááąáŹáşááźááŹá¸áááşá á á˝á˛ááźá˛áážáŻáááŻáá˝ááˇáşáááşá áááşáááş áááşáážááşááťááşááᯠáááşáážááşáááŤáááşá persistence: áĄáážááş áááŹá¸ááťáŹá¸/grafana/values.yaml áááŻááşáá˝ááşá áááˇáşáááŻááşáááŻááş PV áážááˇáş PVC áááŻáˇááᯠááąáŤááşá¸áááˇáşáᏠpersistence.existingClaim áááˇáşáááşááąáŹááşáá˝ááş áááşá¸áááŻáˇááᯠáááşáážááşááŤá
ááťá˝ááşáŻááşáááŻáˇá ááąáŹááşááŻáśá¸ minikube áá˝ážááˇáşáááşááźááşá¸ script áááş á¤áá˛áˇáááŻáˇááźá áşáááş-
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- áĄáážááşááááşáá˝áśáˇááźááŻá¸áááŻá¸áááşáážáŻ
áĄááŹááášááŻááŻáśá áś
ááááşáĄááşááᯠáĄááąáŹááşáĄáááşááąáŹáşáááşáĄáá˝ááş ááźááşáááşáážáŻáá˝ááşá ááťá˝ááşáŻááşáááŻáˇáážááˇáşáĄáá° ááŻááşááąáŹááşáááˇáş áĄááźáąááś Kubernetes entities áĄáŹá¸ááŻáśá¸ááᯠTypeScript áĄáááşá¸ááťáŹá¸- podá deploymentá daemonsetá statefulsetá jobá cronjobá serviceá nodeá namespace áááŻáˇááᯠááąáŹáşááźáááş ááŻáśá¸ááźááşáá˛áˇáááşá á¤áĄáááşá¸áá áşááŻá áŽáááş constructorá destructorá ááźááşáááŻááşá á˝ááşá¸ááᯠáá˝ááşá¸ááśááźááşá¸áážááˇáş áá°á¸ááźáąáŹááşá¸ááźááşá¸áĄáá˝ááş áááşá¸áááşá¸ááťáŹá¸ááᯠááąáŹáşááźáááˇáş ááŻáś BaseModel áĄáááşá¸ááž áĄáá˝áąáááşááśááŤáááşá áĄáááşá¸áá áşááŻá áŽáááş áĄááźáŹá¸áĄááŹááťáŹá¸áážááˇáş áĄáááŻááşáĄááźáŻáśáážáááąáŹ áááşááśááąá¸ááťáŹá¸ááᯠááąáŹáşááźáááşá áĽáááŹá áĄááťááŻá¸áĄá áŹá¸ááźááˇáşááťááşáážáŻáá áşááŻáĄáá˝ááş pods á áŹáááşá¸áá áşááŻá
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 = [];
}
}getters áážááˇáş setters ááťáŹá¸ááĄáá°áĄááŽááźááˇáşá ááťá˝ááşáŻááşáááŻáˇáááş áĄáááşááźáąááźáąáááşáááŻááşááąáŹááŻáśá áśááźááˇáş ááťá˝ááşáŻááşáááŻáˇáááŻáĄááşááąáŹ entity metrics áááŻááźááááŻááşáááş áááŻáˇáááŻááş áááşáážááşáááŻááşááŤáááşá áĽáááŹáĄáŹá¸ááźááˇáşá áá˝á˛ááąáááşáážááşáááŻááşááąáŹ cpu node ááťáŹá¸á ááąáŹáşáááşááŻááşááŹá¸áááˇáş áĄáá˝ááş-
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 áááŻáˇ áááşáááŻáˇáááş); á¤á
áŹááťááşáážáŹáážááˇáş ááŻááşááąáŹááşáááŻááşáááˇáş áĄááŻáśá¸ááźáŻáá°áĄáááşá¸ááášáááᯠáá˝ážááşááźááźáŽá¸ ááąá¸ááŹá¸áĄáá˝ááş áááşá¸áá˝ážááşááťááşáááşáááşááťáŹá¸á
á áŹááťááşáážáŹáááŻááşááąáŹááşááťááşáĄáá˝ááş ááŹáááşáážááááˇáş áĄá áááşáĄáááŻááşá¸áá˝ááşá ááťá˝ááşáŻááşáááŻáˇáááş markup ááźááˇáş html áááŻááşááŽáááŻáˇ áááşá¸ááźáąáŹááşá¸ááᯠááźááşáááşá¸ááźáŽá¸ templateUrl ááᯠáááşáážááşáááŤáááşá ááááşá¸ááťáŻááşááááááŹáĄáá˝ááşá¸áá˝ááş áážáŽáááŻáážáŻáááŻá¸áá˝ááşá¸ááźááşá¸ááźááˇáşá ááťá˝ááşáŻááşáááŻáˇáááş áĄááąá¸ááźáŽá¸ááąáŹ angular áááşááąáŹááşáážáŻ 2 ááŻáĄáá ááá°áĄááŻáśá¸ááźáŻáááŻááşáááş-
- backendSrv - Grafana API ááŹááŹáážááˇáş áĄááźááşáĄáážááş áááşáá˝ááşááąá¸áááˇáş áááşááąáŹááşáážáŻáá áşááŻá
- datasourceSrv - áááˇáş Grafana áá˝ááş áááˇáşáá˝ááşá¸ááŹá¸áááˇáş ááąááŹáĄáááşá¸áĄááźá áşááťáŹá¸áĄáŹá¸ááŻáśá¸áážááˇáş ááąááááŻááşáᏠáĄááźááşáĄáážááşáááşáá˝ááşáážáŻááᯠááśáˇáááŻá¸ááąá¸áááˇáş áááşááąáŹááşáážáŻáá áşáᯠ(áĽáááŹá .getAll() áááşá¸áááşá¸ - áááˇáşáá˝ááşá¸ááŹá¸áááˇáş ááąááŹáĄáááşá¸áĄááźá áşááťáŹá¸á áŹáááşá¸ááᯠááźááşááąá¸áááş; .get( ) - ááááťááąáŹááąááŹáááşá¸ááźá áşáá áşááŻá instance object áá áşááŻááᯠááźááşááąá¸áááşá



áĄáááŻááşá¸ 4- ááąááŹáĄáááşá¸áĄááźá áş
Grafana ááĄááźááşáĄáá datasource áááş áĄááźáŹá¸ááąáŹ plugin áĄáŹá¸ááŻáśá¸áážááˇáş áĄáááĄááťáá°ááŽááŤáááş- áááşá¸ááááŻááşáááŻááş entry point module.js á meta information plugin.json ááŤááąáŹáááŻááşáá áşááŻáážááááşá áĄááťááŻá¸áĄá áŹá¸ = áĄááşááşááźááˇáş ááááşáĄááşáá áşááŻááᯠááŽáá˝ááşááąáŹáĄááŤáá˝ááşá ááťá˝ááşáŻááşáááŻáˇáááş ááááşáĄááşáááşá¸áá˝ážááş (dist/datasource/*) áá˝ááş áááŻááşáááŻááşááááşá¸áááşá¸áááŻááşááąáŹ áááŻáˇáááŻááş áážáŽáááŻáážáŻáĄááźá áş áááˇáşáá˝ááşá¸áááŻááşáááˇáş áážáááźáŽá¸ááŹá¸ááąááŹáĄáááşá¸áĄááźá áşááťáŹá¸ (áĽáááŹá prometheus-datasource) áážááˇáş ááťá˝ááşáŻááşáááŻáˇááááŻááşáááŻááşáážá áşááŻááŻáśá¸áážááˇáş áĄááźááşáĄáážááşáĄááťááŻá¸áááşááąáŹááşáááŻááşáááşá ááťá˝ááşáŻááşáááŻáˇáááá ášá áá˝ááşá ááąááŹáĄáááşá¸áĄááźá áşáááş plugin ááŻááşáážááˇáşáĄáá°ááŹáááşá datasource instance configuration page áážááˇáş datasource controller áááŻáˇáĄáá˝ááşáĄááŻáśá¸ááźáŻáááˇáş config.html template áážááˇáş ConfigCtrl controller áá áşááŻáážááááşáááŻáĄááşááŤáááşá
KubeGraf ááááşáĄááşáá˝ááşá áĄááŻáśá¸ááźáŻáá°ááźáŹá¸ááśááźááşáá˝ááşá¸áážá ááąááŹáĄáááşá¸áĄááźá áşáááş áĄáąáŹááşááŤá á˝ááşá¸áááşááťáŹá¸ááᯠáĄááąáŹááşáĄáááşááąáŹáşáááˇáş kubernetes áĄá áŻáĄááąá¸áá áşááŻá áĽáááŹáá áşááŻááźá áşáááş (áĄáááşá¸áĄááźá áşááŻááşááᯠááááŻááşáááş ):
- k8s api-server ááž ááąááŹá áŻááąáŹááşá¸ááźááşá¸ (namespaces á áŹáááşá¸á ááźááˇáşááťááşáážáŻááťáŹá¸...)
- prometheus-datasource áááŻáˇ proxying ááąáŹááşá¸áááŻáážáŻááťáŹá¸ (ááááťááąáŹáĄá áŻáá áşááŻá áŽáĄáá˝ááş plugin áááşáááşááťáŹá¸áá˝ááş áá˝áąá¸ááťááşááŹá¸ááąáŹ) áážááˇáş static pages áážááˇáş dashboards ááťáŹá¸áá˝ááş data áááŻáĄááŻáśá¸ááźáŻáááşáĄáá˝ááş formatting ááŻáśáˇááźááşáážáŻááťáŹá¸á
- static plugin á áŹááťááşáážáŹááťáŹá¸áá˝ááş ááąááŹááᯠáĄááşááááşááŻááşááźááşá¸ (áááşáážááşááŹá¸ááąáŹ ááźááşáááşáááşá¸áá áşáážáŻáážáŻááşá¸ááźááˇáş)á
- grafana-dashboards (metriFindQuery() method) áá˝ááş ááá°ááŹá áŹáá˝ááşáá áşááŻááᯠááŻááşááŻááşáááş á áŻáśá ááşá¸ááąá¸ááźááşá¸áážáŻááťáŹá¸ ááŻááşááąáŹááşááąáááş



- ááąáŹááşááŻáśá¸ 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"};
})
}ááťá˝ááşáŻááşáááŻáˇááĄááźááşáĄá ááŽá¸ááźáŹá¸á áááşáááşá áŹá¸á ááŹááąáŹááşá¸áááˇáşáĄááťááşáážáŹ ááąááŹáĄáááşá¸áĄááźá áşáĄáá˝ááş á á áşáážááşááźáąáŹááşá¸áĄááąáŹááşáĄááŹá¸áážááˇáş áá˝ááˇáşááźáŻááťááşááąá¸áááˇáş ááášáááŹá¸áá áşááŻááᯠáĄááąáŹááşáĄáááşááąáŹáşááźááşá¸ááźá áşáááşá ááŻáśáážááşáĄáŹá¸ááźááˇáşá ááąáŹááşá áşááźááşááá˝ááşá ááąáŹááşááŻáśá¸ááąááŹáááşá¸ááźá áşáááŻáˇáááşááąáŹááşáá˝ááˇáşááᯠconfigure ááŻááşáááş built-in Grafana áĄá áááşáĄáááŻááşá¸ datasourceHttpSettings ááᯠááŻáśá¸áááŻááşáááşá á¤áĄá áááşáĄáááŻááşá¸áááŻáĄááŻáśá¸ááźáŻááźááşá¸ááźááˇáşá ááťá˝ááşáŻááşáááŻáˇáááş url áážááˇáş áĄááźáąááśá á áşáážááşááźáąáŹááşá¸áĄááąáŹááşáĄááŹá¸/áá˝ááˇáşááźáŻááťááşáááşáááşááťáŹá¸- login-password áááŻáˇáááŻááş client-cert/client-key áááŻáááşáážááşááźááşá¸ááźááˇáş http ááąááŹáááşá¸ááźá áşáááŻáˇáááşááąáŹááşáá˝ááˇáşááᯠconfigure ááŻááşáááŻááşááŤáááşá bearer token (k8s áĄáá˝ááş de facto standard) ááᯠáĄááŻáśá¸ááźáŻá access ááᯠconfigure ááŻááşáááş á á˝ááşá¸áááşááᯠáĄááąáŹááşáĄáááşááąáŹáşáááşáĄáá˝ááş áĄáááşá¸áááş tweaking ááŻááşááááşááźá áşááŤáááşá
á¤ááźáżááŹáááŻááźáąáážááşá¸áááş áááşáááş built-in Grafana âPlugin Routesâ ááášáááŹá¸áĄáŹá¸ áĄááŻáśá¸ááźáŻáááŻááşáááşá ) ááťá˝ááşáŻááşáááŻáˇáááąááŹáááşá¸ááźá
áşááááşáááşááťáŹá¸áá˝ááşá ááťá˝ááşáŻááşáááŻáˇáááş grafana áááąáŹááşá
áŽááŹááŹáážááŻááşááąáŹááşáááˇáşáááşá¸ááźáąáŹááşá¸áááşáážááşá
ááşá¸ááťááşá¸ááťáŹá¸áááŻááźáąááźáŹáááŻááşááŤáááşá áĽáááŹáĄáŹá¸ááźááˇáşá áá
áşáŚá¸ááťááşá¸á
áŽá áĄááŻáśá¸áážááşáá
áşááŻá
áŽáĄáá˝ááş jsonData áážááˇáş secureJsonData áĄáá˝ááşááťáŹá¸ááž ááąááŹááťáŹá¸ (á
ááŹá¸áážááşááťáŹá¸ áááŻáˇáááŻááş áááŻáááşááťáŹá¸ááᯠááŻááşáážááşááŹá¸ááąáŹááŻáśá
áśááźááˇáş ááááşá¸áááşá¸áááşáĄáá˝ááş) ááá°ááŹááŻáśá
áśááźáŻááŻááşáááŻááşááźáąááźááˇáş ááąáŤááşá¸á
áŽá¸ááťáŹá¸ áááŻáˇáááŻááş url ááťáŹá¸ááᯠáááşáážááşáááŻááşáááşá ááťá˝ááşáŻááşáááŻáˇááĽáááŹáá˝ááşá ááąá¸ááźááşá¸ááťááşááťáŹá¸áá˛áˇáááŻáˇááąáŹ /__proxy/api/v1/namespaces ááŻáśá
áśá url áááŻáˇ proxy ááąá¸ááŤáááşá
áá˝ááˇáşááźáŻááťááş- Bearer ááąáŤááşá¸á
áŽá¸ááźááˇáş /api/v8/namespacesá


áááŹááĄáŹá¸ááźááˇáşá k8s api server áážááˇáşáĄááŻááşááŻááşáááş ááťá˝ááşáŻááşáááŻáˇáááş readonly access áážáááąáŹáĄááŻáśá¸ááźáŻáá°áááŻáĄááşáááşá áááşáážáŹáá˝áąáááŻááşáááˇáşáááşááŽá¸áážáŻáĄáá˝ááşááąáŹáşááźáááşá .
áĄáááŻááşá¸ 5- ááŻááşááąáážáŻ

áááˇáşáááŻááşáááŻááş Grafana ááááşáĄááşááᯠáááşááąá¸ááŹá¸ááźáŽá¸áááşáážááˇáş áááşá¸ááᯠáá°áááážááşááźáŹá¸ááźá
áşá
áąáááş áááşáááŹáááťááť ááźáŻááŻááşáááŻáááşááźá
áşáááşá Grafana áá˝ááşáááşá¸áááşá¤ááąááŹáá˝ááşááážááááŻááşááąáŹ plugins ááťáŹá¸áá
áŹááźááˇáşáááŻááşááźá
áşáááşá
áááşáááááşáĄááşáááŻáááŹá¸áááşá áááŻá¸áá˝ááşááážááááŻááşá áąáááşáĄáá˝ááşá áááşáááş PR áá áşááŻááźáŻááŻááşáááşáááŻáĄááşáááşá á¤áá˛áˇáááŻáˇááąáŹáĄááźáąáŹááşá¸áĄááŹááᯠrepo.json áááŻááşáááŻáˇáááˇáşááźááşá¸ááźááˇáş-

ááŹá¸áážááşá¸áááş áááˇáşááááşáĄááşá ááŹá¸áážááşá¸ááźá
áşááźáŽá¸á url áááş áááŻáážáąáŹááşáááşá¸áááŻáˇ áááˇáşááşáá
áşááŻááźá
áşááźáŽá¸ commit áááş ááááşáĄááşá ááŽá¸ááźáŹá¸ááŹá¸áážááşá¸áá
áşááŻááážááááŻááşáááˇáş commit á hash ááźá
áşáááşá
Output áážáŹ áĄáśáˇááźá ááŹááąáŹááşá¸áá˛áˇ ááŻááşááŻáśáá áşááŻáśááᯠáá˝áąáˇáááŤááááˇáşáááş-

plugin ááąáŹáşááźááťááşááŤáážáááąáŹ áááşá Readme.mdá Changelog.md áážááˇáş plugin.json áááŻááşáááŻáˇááž áááşá¸áĄáá˝ááş ááąááŹááᯠáĄáááŻáĄááťáąáŹááş áááşá¸áá°áá˝áŹá¸ááŤáááşá
áĄáááŻááşá¸ 6: ááąáŹááşááťááşáĄá áŹá¸
ááŻááşááąááźáŽá¸áááˇáşááąáŹááş ááťá˝ááşáŻááşáááŻáˇá ááááşáĄááşááᯠááŽáá˝ááşáááşááŽá¸áážáŻ ááááşáááˇáşáá˛áˇááŤá ááᯠááťá˝ááşáŻááşáááŻáˇáááş áĄá áŻáááŻááşáĄá ááşá¸ááťáŹá¸á áááşá¸ááźá áşááťáŹá¸áĄááŻáśá¸ááźáŻáážáŻááᯠáážááşáááşá á˝áŹ á áąáŹááˇáşááźááˇáşá á áşááąá¸ááąááźáŽá¸ UX ááᯠáááŻáááŻááąáŹááşá¸áá˝ááşááŹá áąáááş áĄááşášááŤáááşáĄáá áşááťáŹá¸ááᯠááááşáááşáᏠááťá˝ááşáŻááşáááŻáˇáááąáŹááşáááşááťáŹá¸áážááˇáş GitHub ááąáŤáşáážááá°ááťáŹá¸ááśááž ááááşáĄááşááᯠáááˇáşáá˝ááşá¸ááźáŽá¸ááąáŹááş ááážáááŹááąáŹ ááŻáśáˇááźááşááťááşáĄááťáŹá¸áĄááźáŹá¸áááŻáááşá¸ ááá°ááąááŤáááş (áááşáá˝ááşáá˝áŹá¸ááŤáá áááşá¸áá˛áˇááźáżáᏠááŤáážáááŻááş áá˝á˛ááŻááşáááŻáˇ ááąáŹááşá¸áááŻáᏠááŤáĄáááşá¸ááťáąáŹáşááąáážáŹá፠:)
á¤ááąáŹááşá¸ááŤá¸áááş Grafana áá˛áˇáááŻáˇ áĄáśáˇááźáá˝ááşááąáŹááşá¸ááąáŹ tool ááᯠááŹá¸áááşá áąááźáŽá¸ áááˇáşáááŻááşáááŻááş plugin ááąá¸áááŻááşááááˇáşáááşáᯠááťá˝ááşáŻááşáááŻáˇ ááťážáąáŹáşáááˇáşááŤáááşá
ááťáąá¸áá°á¸áááşááŤáááş!)
source: www.habr.com
