á¡á¬ážáá¯á¶ážáááºá¹ááá¬áá«! ááœááºáá²á·áá±á¬áá¡áááºážáááºá áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·áá¯áá±á«áºáá±á¬ 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 á¡ááœáẠááŒááºáááºááŸá¯áá»á¬áž
á¡ááá¯ááºáž 2- áá±áááœááºážáááºáááºážáá»ááºááᯠááŒááºáááºááŒááºážá
ááááºá¡ááºááᯠáá¯ááºáá±á¬ááºáááºá ááŒáá¯áááºááá·áºááœááºážáá¬ážáá±á¬ áááááá¬á¡á¬ážáá¯á¶ážáá«ááŸááá±á¬ kubernetes á¡á á¯á¡áá±ážáá áºáᯠááá¯á¡ááºáá«áááº- prometheusá node-exporterá kube-state-metricsá grafanaá áááºáááºážáá»ááºááᯠáá»ááºááŒááºá áœá¬á ááœááºáá°á áœá¬ááŸáá·áº ááá¬áá¡ááá¯ááºáž áááºáá±á¬ááºáá¬ážááá·áºááŒá®áž ááŒááºáááºá áááºááẠáá±áá»á¬á á±áááºá Grafana áá±áá¬áááºážááœáŸááºááᯠdeveloper áá ááºá០ááá¯ááºááá¯ááºáááºáááºááá·áºáááºá
áá»áœááºáá±á¬áºááá¯á·áá²á·á¡ááŒááºá¡ááá±á¬á· Kubernetes áá²á· ááŒááºááœááºážááŸá¬ á¡áá¯ááºáá¯ááºááá¯á· á¡áááºááŒá±áá¯á¶ážáááºážáááºážá
áá»áœááºá¯ááºááá¯á·á áá±á¬ááºáá¯á¶áž 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â ááá¹ááá¬ážá¡á¬áž á¡áá¯á¶ážááŒá¯ááá¯ááºáááºá
ááœáá·áºááŒá¯áá»ááº- Bearer áá±á«ááºážá
á®ážááŒáá·áº /api/v8/namespacesá
ááá¬áá¡á¬ážááŒáá·áºá k8s api server ááŸáá·áºá¡áá¯ááºáá¯ááºááẠáá»áœááºá¯ááºááá¯á·ááẠreadonly access ááŸááá±á¬á¡áá¯á¶ážááŒá¯áá°ááá¯á¡ááºáááºá áááºááŸá¬ááœá±ááá¯ááºááá·áºáááºáá®ážááŸá¯á¡ááœááºáá±á¬áºááŒáááºá
á¡ááá¯ááºáž 5- áá¯ááºáá±ááŸá¯
ááá·áºááá¯ááºááá¯áẠGrafana ááááºá¡ááºááᯠáááºáá±ážáá¬ážááŒá®ážáááºááŸáá·áº áááºážááᯠáá°ááááŸááºááŒá¬ážááŒá
áºá
á±ááẠáááºááá¬ááá»áá» ááŒá¯áá¯ááºááá¯áááºááŒá
áºáááºá Grafana ááœááºáááºážáááºá€áá±áá¬ááœááºáááŸáááá¯ááºáá±á¬ plugins áá»á¬ážáá
á¬ááŒáá·áºááá¯ááºááŒá
áºáááºá
áááºáááááºá¡ááºááá¯ááá¬ážáááºá
ááá¯ážááœááºáááŸáááá¯ááºá
á±áááºá¡ááœááºá áááºááẠPR áá
áºáá¯ááŒá¯áá¯ááºáááºááá¯á¡ááºáááºá
áá¬ážááŸááºážááẠááá·áºááááºá¡ááºá áá¬ážááŸááºážááŒá
áºááŒá®ážá url ááẠááá¯ááŸá±á¬ááºáááºážááá¯á· ááá·áºááºáá
áºáá¯ááŒá
áºááŒá®áž commit ááẠááááºá¡ááºá áá®ážááŒá¬ážáá¬ážááŸááºážáá
áºáá¯áááŸáááá¯ááºááá·áº commit á hash ááŒá
áºáááºá
Output ááŸá¬ á¡á¶á·ááŒá áá¬áá±á¬ááºážáá²á· áá¯ááºáá¯á¶áá áºáá¯á¶ááᯠááœá±á·ááá«áááá·áºáááº-
plugin áá±á¬áºááŒáá»ááºáá«ááŸááá±á¬ áááºá Readme.mdá Changelog.md ááŸáá·áº plugin.json ááá¯ááºááá¯á·á០áááºážá¡ááœáẠáá±áá¬ááᯠá¡ááá¯á¡áá»á±á¬áẠáááºážáá°ááœá¬ážáá«áááºá
á¡ááá¯ááºáž 6: áá±á¬ááºáá»ááºá¡á á¬áž
áá¯ááºáá±ááŒá®ážááá·áºáá±á¬áẠáá»áœááºá¯ááºááá¯á·á ááááºá¡ááºááᯠáá®ááœááºáááºáá®ážááŸá¯ ááááºááá·áºáá²á·áá«á ááᯠáá»áœááºá¯ááºááá¯á·ááẠá¡á á¯ááá¯ááºá¡á ááºážáá»á¬ážá áááºážááŒá áºáá»á¬ážá¡áá¯á¶ážááŒá¯ááŸá¯ááᯠááŸááºáááºá áœá¬ á á±á¬áá·áºááŒáá·áºá á áºáá±ážáá±ááŒá®áž UX ááᯠááá¯ááá¯áá±á¬ááºážááœááºáá¬á á±ááẠá¡ááºá¹áá«áááºá¡áá áºáá»á¬ážááᯠááááºáááºáᬠáá»áœááºá¯ááºááá¯á·ááá±á¬ááºáááºáá»á¬ážááŸáá·áº GitHub áá±á«áºááŸááá°áá»á¬ážáá¶á០ááááºá¡ááºááᯠááá·áºááœááºážááŒá®ážáá±á¬áẠáááŸááá¬áá±á¬ áá¯á¶á·ááŒááºáá»ááºá¡áá»á¬ážá¡ááŒá¬ážááá¯áááºáž ááá°áá±áá«ááẠ(áááºááœááºááœá¬ážáá«áá áááºážáá²á·ááŒá¿áᬠáá«ááŸááá¯áẠááœá²áá¯ááºááá¯á· áá±á¬ááºážááá¯áᬠáá«á¡áááºážáá»á±á¬áºáá±ááŸá¬áá« :)
á€áá±á¬ááºážáá«ážááẠGrafana áá²á·ááá¯á· á¡á¶á·ááŒááœááºáá±á¬ááºážáá±á¬ tool ááᯠáá¬ážáááºá á±ááŒá®áž ááá·áºááá¯ááºááá¯áẠplugin áá±ážááá¯ááºáááá·áºáááºáᯠáá»áœááºá¯ááºááá¯á· áá»áŸá±á¬áºááá·áºáá«áááºá
áá»á±ážáá°ážáááºáá«áááº!)
source: www.habr.com