แฒกแแแแแ แงแแแแแก! แ แแแแแแแแ แแแแก แฌแแ, แฉแแแ แแแแแฌแงแแ แฉแแแแ แแฎแแแ แฆแแ แแแแแก แแ แแแฅแขแ แฌแแ แแแแแแจแ - Grafana แแแแฃแแ แแฃแแแ แแแขแแแแก แแแแแขแแ แแแแแกแแแแก, แ แแแแแกแแช แฉแแแ แแฃแฌแแแแแแแ
แแแฌแแแ 0 - แจแแกแแแแแ: แ แแแแ แแแแแแแ แแฅแแแแ?
Grafan-แแกแแแแก แฉแแแแ แกแแแฃแแแ แ แแแแฃแแแก แแแฌแแ แแก แแแแ แกแ แฃแแแแ แจแแแแฎแแแแแ แแแแแแฉแแแ. แฉแแแแ แแแแแแแแ 10 แฌแแแแ แแแขแแ แแแแแ แแแแ แกแฎแแแแแกแฎแแ แแแแแก แกแแ แแฃแแแก แแแ แแ แแแฅแขแแแก. แแ แแ แแแก แแแแแแแแแแแจแ แฉแแแ แแแแแแ แแแแ แแแแ แแฅแกแแแ แขแแแ, แกแแแแขแแ แแกแ แจแแแแฎแแแแแแ แแ แแแแแชแแแแแแ แกแฎแแแแแกแฎแแ แแแแแขแแ แแแแแก แกแแกแขแแแแแแก แแแแแงแแแแแแจแ. แแ แ แแฆแแช แแแแแแขแจแ แฉแแแ แกแแแฃแแแ แแแแก แแแแแฎแแ: "แแ แกแแแแแก แแฃ แแ แ แฏแแแแกแแฃแ แ แแแกแขแ แฃแแแแขแ Kubernetes-แแก แแแแแขแแ แแแแแกแแแแก, แ แแแ, แ แแแแ แช แแแแแแแ, "แแแแงแแแ แแ แแแแแแฌแงแ"?". K8-แแแแก แแแแแขแแ แแแแแก แแแแฃแกแขแ แแแก แกแขแแแแแ แขแ, แ แ แแฅแแ แฃแแแ, แแแแ แฎแแแแ แแงแ. แแ แแแแแ + แแ แแคแแแแก แแแแแแแแชแแ. แแ แ แแแแ แช แแ แกแขแแแแกแแแแก แแแ แแแแแฌแงแแแขแแแแแแแ, แแ แแก แกแฎแแแแแกแฎแแ แกแแฎแแก แฎแแแกแแฌแงแแแแแก แแแแ แแแแ แแแ: แแ แแแแแ-แแแแ แแขแแ แ, แแฃแแแ แแแขแแก-แแแฅแกแแแแก แแแคแแแแก แแแแ แแแ, แแ แแแแ-แแฃแแแ แแแขแแก-แแแ.
แ แแแแ แช แฉแแแก, grafana-kubernetes-app แแแแฃแแ แฉแแแแแแแก แงแแแแแแ แกแแแแขแแ แแกแ แแแ แแแแขแ แแงแ, แแแแ แแ แแก แฌแแแแฌแแแแ แแแขแแ แแ แแ แแก แแฎแแ แแแญแแ แแแ แแ, แฃแคแ แ แแแขแแช, แแแ แแฃแจแแแแก node-exporter แแ kube-state-metrics-แแก แแฎแแ แแแ แกแแแแแแ. แแ แ แแฆแแช แแแแแแขแจแ แฉแแแ แแแแแแฌแงแแแขแแ: "แฉแแแ แแแแแแ แแ แฃแแแ แแแแแฆแแ แแแแแฌแงแแแขแแแแแ?"
แ แ แแแแแแ แแแแแแฌแงแแแขแแ แแแแแ แแแ แฉแแแแก แแแแแแแขแจแ:
- โแแแแแแแชแแแก แ แฃแแแกโ แแแแฃแแแแแแชแแ: แแแแแแแชแแแแแก แแแกแแฎแแ แฎแแแแแ แแ แแแแแขแแชแแ แแแแกแขแแ แจแ, แแแฏแแฃแคแแแฃแแ แกแแฎแแแแแแก แกแแแ แชแแก แแแฎแแแแแ, แแแแแแแแแแก...;
- แแแแจแแ แแแแก แแแแฃแแแแแแชแแ, แ แแแแ แแชแแ "แแแแแแแแแ - แกแแ แแแกแ (+แแแ แขแแแ)".
- แแแแกแขแแ แฃแแ แแแแแแแชแแแแแก แแแแแฌแแแแแแก แแแแฃแแแแแแชแแ แแแแกแขแแ แฃแ แแแแแซแแแจแ.
- แแแขแ แแแแกแ แแ แแแคแแ แแแชแแแก แแแแแฅแชแแ แ แแแแแแแแ แฌแงแแ แแแแ: แแ แแแแแ แแ k8s api แกแแ แแแ แ.
- แ แแแแ แช แแแคแ แแกแขแ แฃแฅแขแฃแ แแก แแแฌแแแแก (แแ แแชแแกแแ แแก แแ แแแก, แแแฎแกแแแ แแแแก, แแแกแแแก แฅแแแกแแกแขแแแแก, แฅแกแแแแก แแแแแงแแแแแ) แแ แแแแแแแชแแแก แแแแแแแก แแแแแขแแ แแแแ - แฏแแแแ แแแแแแแก แกแขแแขแฃแกแแก แแแแแแ, แฎแแแแแกแแฌแแแแแ แแกแแแแแก แ แแแแแแแแ, แแแคแแ แแแชแแ แกแแชแแชแฎแแแกแฃแแแ แแแแแแแก/แแแแแงแแคแแแก แขแแกแขแแแแก แแแแแแก แจแแกแแฎแแ.
แแแฌแแแ 1: แ แ แแ แแก โแแ แแคแแแแก แแแแแแแขแโ?
แขแแฅแแแแฃแ แ แแแแแกแแแ แแกแแ, Grafana-แก แแแแฃแแ แแ แแก แแฃแแฎแแแแแ แแแแขแ แแแแ แ, แ แแแแแแช แแแแฎแแแ Grafana แแแแแชแแแแ แแแ แแฅแขแแ แแแจแ (/var/grafana/plugins/ /dist/module.js) แแ แจแแแซแแแแ แฉแแแขแแแ แแแก, แ แแแแ แช SystemJS แแแแฃแแ. แแกแแแ แแ แแแ แแฅแขแแ แแแจแ แฃแแแ แแงแแก plugin.json แคแแแแ, แ แแแแแแช แจแแแชแแแก แงแแแแ แแแขแ แแแคแแ แแแชแแแก แแฅแแแแ แแแแฃแแแก แจแแกแแฎแแ: แกแแฎแแแ, แแแ แกแแ, แแแแแแแขแแก แขแแแ, แกแแชแแแแแแก/แกแแแขแแก/แแแชแแแแแแก แแแฃแแแแ, แแแแแแแแแแฃแแแแแแ แแ แ.แจ.
แแแแฃแแ.แช
plugin.json
แ แแแแ แช แกแแ แแแจแแขแจแ แฎแแแแแ, แฉแแแ แแแแแแฃแกแขแแ plugin.type = app. แ แแแแแ Grafana-แก แแแแแแแขแแแ แจแแแซแแแแ แแงแแก แกแแแ แขแแแแก:
แแแแแแ: แแแแแแแขแแก แงแแแแแแ แแแแ แชแแแแแฃแแ แขแแแ - แแก แแ แแก แแแแแแ แแแแแกแแแแ แ แแแขแ แแแแก แแแแฃแแแแแแชแแแกแแแแก, แ แแแแแแช แแแแแแงแแแแแ แกแฎแแแแแกแฎแแ แแแคแแก แแกแแแแแแ.
แแแแแชแแแแ แฌแงแแ แ: แแแแแแแขแแก แแแแแแแแจแแ แแแแแ แแแแแแ แแ แแแแแชแแแแ แฌแงแแ แแกแแแแก (แแแแแแแแแ, Prometheus-datasource, ClickHouse-datasource, ElasticSearch-datasource).
app: แแแแฃแแ, แ แแแแแแช แกแแจแฃแแแแแแก แแแซแแแแ แจแแฅแแแแ แแฅแแแแ แกแแแฃแแแ แ แฌแแแแแแ แ แแแแแแแชแแ Grafana-แก แจแแแแแ, แจแแฅแแแแ แแฅแแแแ แกแแแฃแแแ แ html แแแแ แแแแ แแ แฎแแแแ แจแแฎแแแแแ แแแแแชแแแแ แฌแงแแ แแแ แกแฎแแแแแกแฎแแ แแแแแชแแแแแแก แแแแฃแแแแแแชแแแกแแแแก. แแกแแแ, แกแฎแแ แขแแแแก แแแแแแแขแแแ (แแแแแชแแแแ แฌแงแแ แ, แแแแแแ) แแ แกแฎแแแแแกแฎแแ แแแคแแแ แจแแแซแแแแ แแแแแงแแแแแฃแ แแฅแแแก แ แแแแ แช แแแแแแแแแแฃแแแแแแ.
แแแแฃแแแแแก แแแแแแแแแแฃแแแแแก แแแแแแแแ type=app.
แแฅแแแ แจแแแแซแแแแ แแแแแแงแแแแ แ แแแแ แช JavaScript, แแกแแแ TypeScript, แ แแแแ แช แแ แแแ แแแแ แแแแก แแแ (แฉแแแ แแแแ แฉแแแ). แแแแแแแ hello-world แแแแแแแขแแแแกแแแแก แแแแแกแแแแ แ แขแแแแก, แ แแช แจแแแแซแแแแ
แแแฌแแแ 2: แแแแแแแแ แแแ แแแ แแแแก แแแแแแแแแ
แแแแแแแขแแ แกแแแฃแจแแแ, แแฃแแแแ แแแแ, แแแญแแ แแแแ kubernetes แแแแกแขแแ แ แงแแแแ แฌแแแแกแฌแแ แแแแแกแขแแแแ แแแฃแแ แฎแแแกแแฌแงแแแแแ: แแ แแแแแ, แแแแแซแแก แแฅแกแแแ แขแแแ แ, kube-state-metrics, grafana. แแแ แแแ แฃแแแ แจแแแฅแแแแก แกแฌแ แแคแแ, แแแ แขแแแแ แแ แแฃแแแแ แแแแ แแ แชแฎแแแ แแแแแขแแแ แแแแก แฃแแ แฃแแแแแกแแงแแคแแ, Grafana แแแแแชแแแแ แแแ แแฅแขแแ แแ แฃแแแ แแแแแแขแแแแแก แแแ แแแแแ แแแแแแแแแ แแก แแแแ แแขแแแแ.
แงแแแแแแ แแแกแแฎแแ แฎแแแแแ แแแ, แฉแแแแ แแแ แแ, แแฃแแแ แแแขแแแแแ แแแแแแแแ แแแแ แแฃแจแแแแแกแแแแก แแ แแก
แฉแแแแ แกแแแแแแ minikube แแแจแแแแแก แกแแ แแแขแ แแกแ แแแแแแงแฃแ แแแ:
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-แแก แงแแแแ แซแแ แแแแแ แแ แแแฃแแ, แ แแแแแแแแแแช แแแแฃแจแแแแแ TypeScript แแแแกแแแแก แกแแฎแแ: pod, deployment, daemonset, statefulset, job, cronjob, แกแแ แแแกแ, แแแแแซแ, แกแแฎแแแแแแก แกแแแ แชแ. แแแแแแฃแแ แแก แแแแกแ แแแแแแแแ แแแแแ แแฆแแแก แกแแแ แแ BaseModel แแแแกแแก, แ แแแแแแช แแฆแฌแแ แก แแแแกแขแ แฃแฅแขแแ แก, แแแกแขแ แฃแฅแขแแ แก, แฎแแแแแแแแแก แแแแแฎแแแแแกแ แแ แแแแแ แแแแก แแแแแแแแก. แแแแแแฃแแ แแแแกแ แแฆแฌแแ แก แฉแแแแแฃแ แฃแ แแแแ แแแแแแก แกแฎแแ แแ แแแฃแแแแแแ, แแแแแแแแแ, แแแแงแแคแแแแแแแแก แกแแแก แขแแแแก แแแแแแแแแแก แแ แแแฃแแแกแแแแก.
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 - แกแแ แแแกแ, แ แแแแแแช แฃแแ แฃแแแแแงแแคแก แแแแแแฃแ แฃแ แแแแ แแฅแแแแแแแก แแฅแแแแก Grafana-แจแ แแแแแกแขแแแแ แแแฃแแ แงแแแแ แแแแแชแแแแ แฌแงแแ แแกแแแ (แแแแแแแแแ, .getAll() แแแแแแ - แแแ แฃแแแแก แงแแแแ แแแแแกแขแแแแ แแแฃแแ แแแแแชแแแแ แฌแงแแ แแก แกแแแก; .get( ) - แแแ แฃแแแแก แแแแแ แแขแฃแแ แแแแแชแแแแ แฌแงแแ แแก แแแกแขแแแชแแแก แแแแแฅแขแก.
แแแฌแแแ 4: แแแแแชแแแแ แฌแงแแ แ
Grafana-แก แแแแแกแแแ แแกแแ, แแแแแชแแแแ แฌแงแแ แ แแฃแกแขแแ แแแแแ แแแแแแแขแแ, แ แแแแ แช แงแแแแ แกแฎแแ: แแแก แแฅแแก แกแแแฃแแแ แ แจแแกแแแแก แฌแแ แขแแแ module.js, แแ แแก แคแแแแ แแแขแแแแคแแ แแแชแแแ plugin.json. แแแแแแแขแแก แจแแแฃแจแแแแแแกแแก type = แแแแแแแชแแแ, แฉแแแ แจแแแแแซแแแ แฃแ แแแแ แแฅแแแแแแ แ แแแแ แช แแ แกแแแฃแ แแแแแชแแแแ แฌแงแแ แแแแแแ (แแแแแแแแแ, prometheus-datasource), แแกแแแ แฉแแแแก แกแแแฃแแแ แแแ, แ แแแแแแช แจแแแแแซแแแ แจแแแแแแฎแแ แแแ แแแแแ แแแแแแแขแแก แแแ แแฅแขแแ แแแจแ (dist/datasource/*) แแ แแแแแแแกแขแแแแ แแ แ แแแแ แช แแแแแแแแแแฃแแแแแก แกแแฎแแ. แฉแแแแก แจแแแแฎแแแแแจแ, แแแแแชแแแแ แฌแงแแ แแก แแแงแแแแ แแแแฃแแแก แแแแ. แแกแแแ แแฃแชแแแแแแแแ แแฅแแแแแ config.html แจแแแแแแ แแ ConfigCtrl แแแแขแ แแแแ แ, แ แแแแแแช แแแแแงแแแแแฃแแ แแฅแแแแ แแแแแชแแแแ แฌแงแแ แแก แแแกแขแแแชแแแก แแแแคแแแฃแ แแชแแแก แแแแ แแแกแแแแก แแ แแแแแชแแแแ แฌแงแแ แแก แแแแขแ แแแแ แ, แ แแแแแแช แแฎแแ แชแแแแแแก แแฅแแแแ แแแแแชแแแแ แฌแงแแ แแก แแแแแแแก.
KubeGraf แแแแแแแขแจแ, แแแแฎแแแ แแแแแก แแแขแแ แคแแแกแแก แแแแแกแแแ แแกแแ, แแแแแชแแแแ แฌแงแแ แ แแ แแก kubernetes แแแแกแขแแ แแก แแแแแแแแ, แ แแแแแแช แแฎแแ แชแแแแแแก แจแแแแแ แจแแกแแซแแแแแแแแแก (แฌแงแแ แ แแแแ แฎแแแแแกแแฌแแแแแแ
- แแแแแชแแแแแแก แจแแแ แแแแแ k8s api-แกแแ แแแ แแแแ (แกแแฎแแแแ แกแแแ แชแแก แกแแแก แแแฆแแแ, แแแแแแแแแ...)
- Prometheus-datasource-แแก แแแแฎแแแแแแแก แแ แแฅแกแแ แแแ (แ แแแแแแช แแ แฉแแฃแแแ แแแแแแฃแแ แแแแแ แแขแฃแแ แแแแกแขแแ แแก แแแแแแแขแแก แแแ แแแแขแ แแแจแ) แแ แแแกแฃแฎแแแแก แคแแ แแแขแแ แแแ, แ แแแ แแแแแแงแแแแก แแแแแชแแแแแ แ แแแแ แช แกแขแแขแแแฃแ แแแแ แแแแแ, แแกแแแ แกแแแแคแแ แแแชแแ แแแคแแแจแ.
- แแแแแชแแแแแแก แแแแแฎแแแแ แกแขแแขแแแฃแ แ แแแแแแแขแแก แแแแ แแแแแ (แแแแแฎแแแแแก แแแงแแแแแฃแแ แกแแฉแฅแแ แแ).
- แแแแฎแแแแแแแก แแแแฃแจแแแแแ แจแแแแแแแก แคแฃแ แชแแแก แแแแแ แแ แแแแกแแแแก grafana-dashboards-แจแ (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"};
})
}
แชแแแแ แกแแแแขแแ แแกแ แแฃแแฅแขแ, แฉแแแแ แแแ แแ, แแ แแก แแแแแชแแแแ แฌแงแแ แแก แแแแแแขแแคแแแแชแแแกแ แแ แแแขแแ แแแแชแแแก แแแฅแแแแแแแก แแแแแ แแแ. แ แแแแ แช แฌแแกแ, แฉแแแ แจแแแแแซแแแ แแแแแแแงแแแแ แฉแแจแแแแแฃแแ Grafana แแแแแแแแแขแ datasourceHttpSettings แแแแแชแแแแ แกแแแแแแ แฌแงแแ แแแ แฌแแแแแแก แแแแคแแแฃแ แแชแแแกแแแแก. แแ แแแแแแแแแขแแก แแแแแงแแแแแแ, แฉแแแ แจแแแแแซแแแ แแแแแแแแคแแแฃแ แแ แแ http แแแแแชแแแแ แฌแงแแ แแแ แฌแแแแแ url-แแก แแ แซแแ แแแแแ แแแแแแขแแคแแแแชแแแก/แแแขแแ แแแแชแแแก แแแ แแแแขแ แแแแก แแแแแแแแแ: แจแแกแแแ-แแแ แแแ, แแ แแแแแแข-แกแแ แขแ/แแแแแแข-แแแกแแฆแแแ. แแแแกแแแแแก, แ แแ แแแแแฎแแ แชแแแแแแแแแ แฌแแแแแแก แแแแคแแแฃแ แแชแแแก แจแแกแแซแแแแแแแ แแแขแแ แแแแแก แแแจแแแก แแแแแงแแแแแแ (แแ แคแแฅแขแ แกแขแแแแแ แขแ k8s-แแกแแแแก), แฉแแแ แแแแแแฌแแ แแชแแ แ แจแแกแฌแแ แแแ.
แแ แแ แแแแแแแก แแแแแกแแญแ แแแแ แจแแแแซแแแแ แแแแแแงแแแแ แฉแแจแแแแแฃแแ Grafana โPlugin Routesโ แแแฅแแแแแแ (แแแฌแแ แแแแแแ
/api/v8/namespaces แแแขแแ แแแแชแแแ: Bearer header.
แแฃแแแแ แแแแ, k8s api แกแแ แแแ แแแ แแฃแจแแแแแกแแแแก แฉแแแ แแแญแแ แแแแ แแแแฎแแแ แแแแแ แแฎแแแแ แฌแแแแแฎแแแก แฌแแแแแแ, แแแแแคแแกแขแแแแก แจแแกแแฅแแแแแแ, แ แแแแแแแช แแกแแแ แจแแแแซแแแแ แแแแแแ
แแแฌแแแ 5: แแแแแแแกแฃแคแแแแ
แแแก แจแแแแแ แ แแช แแแฌแแ แ แกแแแฃแแแ Grafana แแแแแแแขแก, แแฃแแแแ แแแแ, แแแแแแแแแแ, แ แแ แแก แกแแฏแแ แแ แแแฎแแแแ. Grafana-แจแ แแก แแ แแก แแฅ แฎแแแแแกแแฌแแแแแ แแแแแแแขแแแแก แแแแแแแแแแ
แแแแกแแแแแก, แ แแ แแฅแแแแ แแแแฃแแ แฎแแแแแกแแฌแแแแแ แแงแแก แแคแแชแแแแฃแ แแแฆแแแแแจแ, แแฅแแแ แฃแแแ แแแแแแแแ PR
แกแแแแช แแแ แกแแ แแ แแก แแฅแแแแ แแแแฃแแแก แแแ แกแแ, url แแ แแก แแแฃแแ แกแแชแแแแแ แแ commit แแ แแก commit-แแก แฐแแจแ, แ แแแแแกแแแแกแแช แฎแแแแแกแแฌแแแแแ แแฅแแแแ แแแแฃแแแก แแแแแ แแขแฃแแ แแแ แกแแ.
แแ แแแแแกแแแแแแ แแแฎแแแ แแจแแแแแแ แกแฃแ แแแก, แ แแแแ แแชแแ:
แแแกแ แแแแแชแแแแแ แแแขแแแแขแฃแ แแ แแฅแแแแ แแฆแแแฃแแ แแฅแแแแ Readme.md, Changelog.md แแ plugin.json แคแแแแแแแ แแแแฃแแแก แแฆแฌแแ แแแแแแ.
แแแฌแแแ 6: แแแกแแแแแแแก แแแชแแแแ
แฉแแแ แแ แจแแแฌแงแแแขแแ แฉแแแแ แแแแฃแแแก แจแแแฃแจแแแแแ แแแแแจแแแแแก แจแแแแแ. แแฎแแ แฉแแแ แแแฃแจแแแแ แแแแกแขแแ แฃแแ แแแแแซแแแแก แ แแกแฃแ แกแแแแก แแแแแงแแแแแแก แกแฌแแ แแแแแขแแ แแแแแ, แแฎแแแ แคแฃแแฅแชแแแแแก แแแแแ แแแ UX-แแก แแแกแแฃแแฏแแแแกแแแแแ แแ แแกแแแ แแแแฃแแแก แแแกแขแแแแชแแแก แจแแแแแ แแแฆแแแฃแแ แฃแแแ แแ แแแแแฎแแแฃแ แแแแก, แ แแแแ แช แฉแแแแ แแแแแแขแแแแก, แแกแแแ GitHub-แแก แฎแแแฎแแกแแแ (แแฃ แแแขแแแแแ แแฅแแแแ แแ แแแแแแ แแ แแแแฎแแแแ, แแ แซแแแแแ แแแแแแแ แ แแแฅแแแแ :)
แแแแแแแแแแแ, แ แแ แแก แกแขแแขแแ แแแแแฎแแแ แแแแ แแแแแแ แแกแแแ แแจแแแแแแ แ แแแกแขแ แฃแแแแขแ, แ แแแแ แแชแแ Grafana แแ, แจแแกแแซแแแ, แแแฌแแ แแ แแฅแแแแ แกแแแฃแแแ แ แแแแฃแแ.
แฒแแแแแแแ!)
แฌแงแแ แ: www.habr.com