αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ GrafanaαŸ– αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸƒαž€αžΆαžšαž”αžΆαž‰αŸ‹αž”αŸ’αžšαž αžΆαžšαžŠαŸαž’αŸ†

αžŸαž½αžŸαŸ’αžαžΈβ€‹αž’αŸ’αž“αž€β€‹αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‚αŸ’αž“αžΆ! αž€αžΆαž›αž–αžΈαž”αŸ‰αž»αž“αŸ’αž˜αžΆαž“αžαŸ‚αž˜αž»αž“ αž™αžΎαž„αž”αžΆαž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‚αž˜αŸ’αžšαŸ„αž„αž”αŸ’αžšαž—αž–αž”αžΎαž€αž…αŸ†αž αžαŸ’αž˜αžΈαžšαž”αžŸαŸ‹αž™αžΎαž„αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž•αž›αž·αžαž€αž˜αŸ’αž˜ - αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™ Grafana αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™ kubernetes αžŠαŸ‚αž›αž™αžΎαž„αž αŸ…αžαžΆ DevOpsProdigy KubeGraf. αž€αžΌαžŠαž”αŸ’αžšαž—αž–αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž˜αžΆαž“αž“αŸ… αžƒαŸ’αž›αžΆαŸ†αž„αžŸαžΆαž’αžΆαžšαžŽαŸˆαž“αŸ…αž›αžΎ GitHub. αž αžΎαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡ αž™αžΎαž„αž…αž„αŸ‹αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αž‡αžΆαž˜αž½αž™αž’αŸ’αž“αž€αž“αžΌαžœαžšαžΏαž„αžšαŸ‰αžΆαžœαž’αŸ†αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αž™αžΎαž„αž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™ αžαžΎαž§αž”αž€αžšαžŽαŸαž’αŸ’αžœαžΈαžαŸ’αž›αŸ‡αžŠαŸ‚αž›αž™αžΎαž„αž”αžΆαž“αž”αŸ’αžšαžΎ αž“αž·αž„αž’αŸ’αžœαžΈαžŠαŸ‚αž›αž™αžΎαž„αž‡αž½αž”αž”αŸ’αžšαž‘αŸ‡αž€αŸ’αž“αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαŸ” αžαŸ„αŸ‡β€‹αž‘αŸ…!

αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 0 - αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αŸ– αžαžΎαž™αžΎαž„αžˆαžΆαž“αžŠαž›αŸ‹αž…αŸ†αžŽαž»αž…αž“αŸαŸ‡αžŠαŸ„αž™αžšαž”αŸ€αž”αžŽαžΆ?

αž‚αŸ†αž“αž·αžαž€αŸ’αž“αž»αž„αž€αžΆαžšαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž™αžΎαž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Grafan αž”αžΆαž“αž˜αž€αžšαž€αž™αžΎαž„αžŠαŸ„αž™αž…αŸƒαžŠαž“αŸ’αž™αŸ” αž€αŸ’αžšαž»αž˜αž αŸŠαž»αž“αžšαž”αžŸαŸ‹αž™αžΎαž„αž”αžΆαž“αž“αžΉαž„αž€αŸ†αž–αž»αž„αžαžΆαž˜αžŠαžΆαž“αž‚αž˜αŸ’αžšαŸ„αž„αž”αžŽαŸ’αžαžΆαž‰αž“αŸƒαž€αž˜αŸ’αžšαž·αžαž•αŸ’αžŸαŸαž„αŸ—αž“αŸƒαž—αžΆαž–αžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αž’αžŸαŸ‹αžšαž™αŸˆαž–αŸαž›αž‡αžΆαž„ 10 αž†αŸ’αž“αžΆαŸ†αž˜αž€αž αžΎαž™αŸ” αž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αž“αŸαŸ‡ αž™αžΎαž„αž”αžΆαž“αž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αž“αžΌαžœαž‡αŸ†αž“αžΆαž‰αž‡αžΆαž…αŸ’αžšαžΎαž“ αž€αžšαžŽαžΈαž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸ αž“αž·αž„αž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž•αŸ’αžŸαŸαž„αŸ—αŸ” αž αžΎαž™αž“αŸ…αž…αŸ†αžŽαž»αž…αžαŸ’αž›αŸ‡ αž™αžΎαž„αž”αžΆαž“αžŸαž½αžšαžαŸ’αž›αž½αž“αž™αžΎαž„αžαžΆ "αžαžΎαž˜αžΆαž“αž§αž”αž€αžšαžŽαŸαžœαŸαž‘αž˜αž“αŸ’αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™ Kubernetes αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžŠαžΌαž…αžŠαŸ‚αž›αž–αž½αž€αž‚αŸαž“αž·αž™αžΆαž™αžαžΆ "αž€αŸ†αžŽαžαŸ‹αžœαžΆαž αžΎαž™αž”αŸ†αž—αŸ’αž›αŸαž…αžœαžΆ"? αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž“αŸƒ Prometheus + Grafana αŸ” αž αžΎαž™αž‡αžΆαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžŠαŸ‚αž›αžαŸ’αžšαŸ€αž˜αžšαž½αž…αž‡αžΆαžŸαŸ’αžšαŸαž…αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‡αž„αŸ‹αž“αŸαŸ‡ αž˜αžΆαž“αž§αž”αž€αžšαžŽαŸαž‡αžΆαž…αŸ’αžšαžΎαž“αž”αŸ’αžšαž—αŸαž‘αžŠαžΌαž…αž‡αžΆαŸ– prometheus-operator, αžŸαŸ†αžŽαž»αŸ†αž“αŸƒαž•αŸ’αž‘αžΆαŸ†αž„αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„ kubernetes-mixin, grafana-kubernetes-app αŸ”

αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ grafana-kubernetes αž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαž‡αž˜αŸ’αžšαžΎαžŸαž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαž”αŸ†αž•αž»αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž™αžΎαž„ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžœαžΆαž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžΆαŸ†αž‘αŸ’αžšαž’αžŸαŸ‹αžšαž™αŸˆαž–αŸαž›αž‡αžΆαž„αž˜αž½αž™αž†αŸ’αž“αžΆαŸ† αž αžΎαž™αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡αž‘αŸ…αž‘αŸ€αž αž˜αž·αž“αž’αžΆαž…αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž€αŸ†αžŽαŸ‚αžαŸ’αž˜αžΈαž“αŸƒ node-exporter αž“αž·αž„ kube-state-metrics αž”αžΆαž“αž‘αŸαŸ” αž αžΎαž™αž“αŸ…αž…αŸ†αžŽαž»αž…αžαŸ’αž›αŸ‡αž™αžΎαž„αž”αžΆαž“αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαžαžΆ: "αžαžΎαž™αžΎαž„αž‚αž½αžšαž’αŸ’αžœαžΎαž€αžΆαžšαžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαžŠαŸ„αž™αžαŸ’αž›αž½αž“αž―αž„αž‘αŸ?"

αžαžΎαž‚αŸ†αž“αž·αžαž’αŸ’αžœαžΈαžαŸ’αž›αŸ‡αžŠαŸ‚αž›αž™αžΎαž„αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž’αž“αž»αžœαžαŸ’αžαž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžšαž”αžŸαŸ‹αž™αžΎαž„αŸ–

  • αž€αžΆαžšαž˜αžΎαž›αžƒαžΎαž‰αž“αŸƒ "αž•αŸ‚αž“αž‘αžΈαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ"αŸ– αž€αžΆαžšαž”αž„αŸ’αž αžΆαž‰αžŠαŸαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž“αŸ…αž€αŸ’αž“αž»αž„αž…αž„αŸ’αž€αŸ„αž˜ αž”αžΆαž“αžŠαžΆαž€αŸ‹αž‡αžΆαž€αŸ’αžšαž»αž˜αžŠαŸ„αž™ namespaces αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™ ... ;
  • αž€αžΆαžšαž˜αžΎαž›αžƒαžΎαž‰αž“αŸƒαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αžŠαžΌαž…αž‡αžΆ "αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™ - αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜ (+ αž…αŸ’αžšαž€)" αŸ”
  • αž€αžΆαžšαž˜αžΎαž›αžƒαžΎαž‰αž“αŸƒαž€αžΆαžšαž…αŸ‚αž€αž…αžΆαž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž…αž„αŸ’αž€αŸ„αž˜αž“αŸ…αž‘αžΌαž‘αžΆαŸ†αž„αžαŸ’αž“αžΆαŸ†αž„αž…αž„αŸ’αž€αŸ„αž˜αŸ”
  • αž€αžΆαžšαž”αŸ’αžšαž˜αžΌαž›αž˜αŸ‰αŸ‚αžαŸ’αžš αž“αž·αž„αž–αŸαžαŸŒαž˜αžΆαž“αž–αžΈαž”αŸ’αžšαž—αž–αž‡αžΆαž…αŸ’αžšαžΎαž“αŸ– Prometheus αž“αž·αž„ k8s api serverαŸ”
  • αž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž‘αžΆαŸ†αž„αž•αŸ’αž“αŸ‚αž€αž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ (αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž–αŸαž›αžœαŸαž›αžΆαžŸαŸŠαžΈαž—αžΈαž™αžΌ αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ† αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžšαž„αžαžΆαžŸ αž”αžŽαŸ’αžαžΆαž‰) αž“αž·αž„αžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ - αž•αžαž“αŸƒαžŸαŸ’αžαžΆαž“αž—αžΆαž–αžŸαž»αžαž—αžΆαž– αž…αŸ†αž“αž½αž“αž“αŸƒαž€αžΆαžšαž…αž˜αŸ’αž›αž„αžŠαŸ‚αž›αž’αžΆαž…αžšαž€αž”αžΆαž“ αž–αŸαžαŸŒαž˜αžΆαž“αž’αŸ†αž–αžΈαž€αžΆαžšαž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž—αžΆαž–αžšαžŸαŸ‹αžšαžœαžΎαž€/αž€αžΆαžšαžαŸ’αžšαŸ€αž˜αžαŸ’αž›αž½αž“αŸ”

αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 1: αžαžΎαž’αŸ’αžœαžΈαž‘αŸ…αž‡αžΆ "αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™ Grafana"?

αžαžΆαž˜αž‘αžŸαŸ’αžŸαž“αŸˆαž”αž…αŸ’αž…αŸαž€αž‘αŸαžŸ αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Grafana αž‚αžΊαž‡αžΆαž§αž”αž€αžšαžŽαŸαž”αž‰αŸ’αž‡αžΆαž˜αž»αŸ† αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž“αŸ…αž€αŸ’αž“αž»αž„αžαžαž‘αž·αž“αŸ’αž“αž“αŸαž™ Grafana (/var/grafana/plugins/ /dist/module.js) αž αžΎαž™αž’αžΆαž…αž•αŸ’αž‘αž»αž€αž‡αžΆαž˜αŸ‰αžΌαžŒαž»αž› SystemJS αŸ” αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸαŸ‡αž•αž„αžŠαŸ‚αžšαž“αŸ…αž€αŸ’αž“αž»αž„αžαžαž“αŸαŸ‡αž‚αž½αžšαžαŸ‚αž˜αžΆαž“αž―αž€αžŸαžΆαžš plugin.json αžŠαŸ‚αž›αž˜αžΆαž“αž–αŸαžαŸŒαž˜αžΆαž“αž˜αŸαžαžΆαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž’αŸ†αž–αžΈαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ– αžˆαŸ’αž˜αŸ„αŸ‡ αž€αŸ†αžŽαŸ‚ αž”αŸ’αžšαž—αŸαž‘αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™ αžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž€αžΆαž“αŸ‹αžƒαŸ’αž›αžΆαŸ†αž„/αž‚αŸαž αž‘αŸ†αž–αŸαžš/αž’αžΆαž‡αŸ’αž‰αžΆαž”αŸαžŽαŸ’αžŽ αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™ αž“αž·αž„αž’αŸ’αžœαžΈαŸ—αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ”

αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ GrafanaαŸ– αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸƒαž€αžΆαžšαž”αžΆαž‰αŸ‹αž”αŸ’αžšαž αžΆαžšαžŠαŸαž’αŸ†
module.ts

αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ GrafanaαŸ– αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸƒαž€αžΆαžšαž”αžΆαž‰αŸ‹αž”αŸ’αžšαž αžΆαžšαžŠαŸαž’αŸ†
plugin.json

αžŠαžΌαž…αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αžƒαžΎαž‰αž“αŸ…αž€αŸ’αž“αž»αž„αžšαžΌαž”αžαžαž’αŸαž€αŸ’αžšαž„αŸ‹ αž™αžΎαž„αž”αžΆαž“αž”αž‰αŸ’αž‡αžΆαž€αŸ‹ plugin.type = app αŸ” αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Grafana αž’αžΆαž…αž˜αžΆαž“αž”αžΈαž”αŸ’αžšαž—αŸαž‘αŸ–

αž”αž“αŸ’αž‘αŸ‡αŸ– αž”αŸ’αžšαž—αŸαž‘αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž‘αžΌαž‘αŸ…αž”αŸ†αž•αž»αž - αžœαžΆαž‡αžΆαž”αž“αŸ’αž‘αŸ‡αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž˜αžΎαž›αžƒαžΎαž‰αž˜αŸ‰αŸ‚αžαŸ’αžšαžŽαžΆαž˜αž½αž™ αžŠαŸ‚αž›αž”αŸ’αžšαžΎαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž„αŸ’αž€αžΎαžαž•αŸ’αž‘αžΆαŸ†αž„αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž•αŸ’αžŸαŸαž„αŸ—αŸ”
αž”αŸ’αžšαž—αž–αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ– αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž—αŸ’αž‡αžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž‘αŸ…αž€αžΆαž“αŸ‹αž”αŸ’αžšαž—αž–αž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αž½αž™αž…αŸ†αž“αž½αž“ (αž§αž‘αžΆαž αžšαžŽαŸ Prometheus-datasource, ClickHouse-datasource, ElasticSearch-datasource)αŸ”
αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαŸ– αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž•αŸ’αž“αŸ‚αž€αžαžΆαž„αž˜αž»αžαž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž“αŸ…αžαžΆαž„αž€αŸ’αž“αž»αž„ Grafana αž”αž„αŸ’αž€αžΎαžαž‘αŸ†αž–αŸαžš html αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž“αž·αž„αž…αžΌαž›αž”αŸ’αžšαžΎαž”αŸ’αžšαž—αž–αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ„αž™αžŠαŸƒαžŠαžΎαž˜αŸ’αž”αžΈαž˜αžΎαž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αž•αŸ’αžŸαŸαž„αŸ—αŸ” αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸαŸ‡αž•αž„αžŠαŸ‚αžš αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž“αŸƒαž”αŸ’αžšαž—αŸαž‘αž•αŸ’αžŸαŸαž„αž‘αŸ€αž (αž”αŸ’αžšαž—αž–αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž”αž“αŸ’αž‘αŸ‡) αž“αž·αž„αž•αŸ’αž‘αžΆαŸ†αž„αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž•αŸ’αžŸαŸαž„αŸ—αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž‡αžΆαž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αŸ”

αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ GrafanaαŸ– αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸƒαž€αžΆαžšαž”αžΆαž‰αŸ‹αž”αŸ’αžšαž αžΆαžšαžŠαŸαž’αŸ†
αž§αž‘αžΆαž αžšαžŽαŸαž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž‡αžΆαž˜αž½αž™ type=app.

αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎαž‘αžΆαŸ†αž„ JavaScript αž“αž·αž„ TypeScript αž‡αžΆαž—αžΆαžŸαžΆαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ (αž™αžΎαž„αž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαžœαžΆ)αŸ” αž€αžΆαžšαžšαŸ€αž”αž…αŸ†αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™ hello-world αž‚αŸ’αžšαž”αŸ‹αž”αŸ’αžšαž—αŸαž‘αžŠαŸ‚αž›αž’αŸ’αž“αž€αž’αžΆαž…αž’αŸ’αžœαžΎαž”αžΆαž“ αžŸαŸ’αžœαŸ‚αž„αžšαž€αžαŸ†αžŽαŸ– αžƒαŸ’αž›αžΆαŸ†αž„αž“αŸαŸ‡αž•αŸ’αž‘αž»αž€αž“αžΌαžœ starter-packs αž˜αž½αž™αž…αŸ†αž“αž½αž“αž’αŸ† (αž˜αžΆαž“αžŸαžΌαž˜αŸ’αž”αžΈαžαŸ‚αž§αž‘αžΆαž αžšαžŽαŸαžŸαžΆαž€αž›αŸ’αž”αž„αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„ React) αž‡αžΆαž˜αž½αž™αž’αŸ’αž“αž€αžŸαžΆαž„αžŸαž„αŸ‹αžŠαŸ‚αž›αž”αžΆαž“αžŠαŸ†αž‘αžΎαž„ αž“αž·αž„αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‡αžΆαž˜αž»αž“αŸ”

αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 2: αž€αžΆαžšαžšαŸ€αž”αž…αŸ†αž”αžšαž·αžŸαŸ’αžαžΆαž“αž€αŸ’αž“αž»αž„αžαŸ†αž”αž“αŸ‹

αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž€αžΆαžšαž›αžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™ αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαž…αž„αŸ’αž€αŸ„αž˜ kubernetes αžŠαŸ„αž™αž’αž˜αŸ’αž˜αž‡αžΆαžαž·αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž§αž”αž€αžšαžŽαŸαžŠαŸ‚αž›αž”αžΆαž“αžŠαŸ†αž‘αžΎαž„αž‡αžΆαž˜αž»αž“αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ– prometheus, node-exporter, kube-state-metrics, grafanaαŸ” αž”αžšαž·αžŸαŸ’αžαžΆαž“αž‚αž½αžšαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαŸ€αž”αž…αŸ†αž™αŸ‰αžΆαž„αžšαž αŸαžŸ αž„αžΆαž™αžŸαŸ’αžšαž½αž› αž“αž·αž„αž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαž’αž˜αŸ’αž˜αž‡αžΆαžαž· αž αžΎαž™αžŠαžΎαž˜αŸ’αž”αžΈαž’αžΆαž“αžΆαž”αžΆαž“αž“αžΌαžœαž€αžΆαžšαž•αŸ’αž‘αž»αž€αž‘αžΎαž„αžœαž·αž‰ αžαžαž‘αž·αž“αŸ’αž“αž“αŸαž™ Grafana αž‚αž½αžšαžαŸ‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αžαŸ†αž‘αžΎαž„αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž–αžΈαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαŸ”

αž˜αž’αŸ’αž™αŸ„αž”αžΆαž™αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž”αŸ†αž•αž»αž αžαžΆαž˜αž‚αŸ†αž“αž·αžαžšαž”αžŸαŸ‹αž™αžΎαž„ αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž€αžΆαžšαž€αŸ’αž“αž»αž„αžŸαŸ’αžšαž»αž€αž‡αžΆαž˜αž½αž™ kubernetes αž‚αžΊ αž˜αžΈαž“αžΈαž‚αž»αž”. αž‡αŸ†αž αžΆαž“αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž‚αžΊαžαŸ’αžšαžΌαžœαžŠαŸ†αž‘αžΎαž„αž”αž“αŸ’αžŸαŸ† Prometheus + Grafana αžŠαŸ„αž™αž”αŸ’αžšαžΎ prometheus-operator αŸ” IN αž’αžαŸ’αžαž”αž‘β€‹αž“αŸαŸ‡ αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸƒαž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ prometheus-operator αž“αŸ…αž›αžΎ minikube αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž–αžŽαŸŒαž“αžΆαž›αž˜αŸ’αž’αž·αžαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‡αžΆαž”αŸ‹αž›αžΆαž”αŸ‹ αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžαŸ‚αž€αŸ†αžŽαžαŸ‹αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš αž€αžΆαžšαžαžŸαŸŠαžΌαŸ– αž–αž·αž αž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžš charts/grafana/values.yaml αž”αž“αŸ’αžαŸ‚αž˜ PV αž“αž·αž„ PVC αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž αžΎαž™αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž–αž½αž€αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžš persistence.existingClaim

αžŸαŸ’αž‚αŸ’αžšαžΈαž”αž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš 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, service, node, namespaceαŸ” αžαŸ’αž“αžΆαž€αŸ‹αž“αžΈαž˜αž½αž™αŸ—αž‘αžΆαŸ†αž„αž“αŸαŸ‡αž‘αž‘αž½αž›αž˜αžšαžαž€αž–αžΈαžαŸ’αž“αžΆαž€αŸ‹ BaseModel αž‘αžΌαž‘αŸ… αžŠαŸ‚αž›αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈ constructor, destructor, method αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αžΆαž”αŸ‹αžŠαŸαž αž“αž·αž„αž”αŸ’αžαžΌαžšαž—αžΆαž–αž˜αžΎαž›αžƒαžΎαž‰αŸ” αžαŸ’αž“αžΆαž€αŸ‹αž“αžΈαž˜αž½αž™αŸ—αž–αž·αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αžŠαŸ‚αž›αž”αžΆαž“αžŠαžΆαž€αŸ‹αž‡αžΆαž˜αž½αž™αž’αž„αŸ’αž‚αž—αžΆαž–αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αž§αž‘αžΆαž αžšαžŽαŸ αž”αž‰αŸ’αž‡αžΈαž“αŸƒαž•αžαžƒαŸ‚αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αž„αŸ’αž‚αž—αžΆαž–αž“αŸƒαž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž”αŸ’αžšαž—αŸαž‘αŸ”

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 αžšαž”αžŸαŸ‹αž™αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž“αŸ‚αž€αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™αŸ–

αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ GrafanaαŸ– αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸƒαž€αžΆαžšαž”αžΆαž‰αŸ‹αž”αŸ’αžšαž αžΆαžšαžŠαŸαž’αŸ†

αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αž›αž»αž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‘αŸ†αž–αŸαžšαž“αžΈαž˜αž½αž™αŸ— αž™αžΎαž„αžαŸ’αžšαžΌαžœαž…αž„αŸ’αž’αž»αž›αž”αž„αŸ’αž αžΆαž‰ PAGE NAME (αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αžœαžΆαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ†αž”αŸ’αž›αŸ‚αž„αž‘αŸ…αž‡αžΆ slug αžŠαŸ‚αž›αž‘αŸ†αž–αŸαžšαž“αŸαŸ‡αž’αžΆαž…αž…αžΌαž›αž”αŸ’αžšαžΎαž”αžΆαž“); αžˆαŸ’αž˜αŸ„αŸ‡αž“αŸƒαžŸαž˜αžΆαžŸαž—αžΆαž‚αžŠαŸ‚αž›αž‘αž‘αž½αž›αžαž»αžŸαžαŸ’αžšαžΌαžœαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αŸƒαž‘αŸ†αž–αŸαžšαž“αŸαŸ‡ (αž”αž‰αŸ’αž‡αžΈαž“αŸƒαžŸαž˜αžΆαžŸαž—αžΆαž‚αžαŸ’αžšαžΌαžœαž”αžΆαž“αž“αžΆαŸ†αž…αŸαž‰αž‘αŸ… module.ts); αž€αžΆαžšαž”αž„αŸ’αž αžΆαž‰αž–αžΈαžαž½αž“αžΆαž‘αžΈαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαžŠαŸ‚αž›αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž‘αŸ†αž–αŸαžšαž“αŸαŸ‡αž’αžΆαž…αžšαž€αž”αžΆαž“ αž“αž·αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž»αž€αžšαž€αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαž”αžΆαžšαž…αŸ†αž αŸ€αž„αŸ”

αž“αŸ…αž€αŸ’αž“αž»αž„αžŸαž˜αžΆαžŸαž—αžΆαž‚αžŠαŸ‚αž›αž‘αž‘αž½αž›αžαž»αžŸαžαŸ’αžšαžΌαžœαž…αŸ†αž–αŸ„αŸ‡αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž“αŸƒαž‘αŸ†αž–αŸαžš αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αŸ†αžŽαžαŸ‹ templateUrl αžŠαŸ„αž™αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž‘αžΈαž“αŸ„αŸ‡αž•αŸ’αž›αžΌαžœαž‘αŸ…αž€αžΆαž“αŸ‹αž―αž€αžŸαžΆαžš html αž‡αžΆαž˜αž½αž™αž€αžΆαžšαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αŸ” αž“αŸ…αžαžΆαž„αž€αŸ’αž“αž»αž„αž§αž”αž€αžšαžŽαŸαž”αž‰αŸ’αž‡αžΆ αžαžΆαž˜αžšαž™αŸˆαž€αžΆαžšαž…αžΆαž€αŸ‹αžŠαŸ„αž™αž—αžΆαž–αž’αžΆαžŸαŸ’αžšαŸαž™ αž™αžΎαž„αž’αžΆαž…αž…αžΌαž›αž”αŸ’αžšαžΎαžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αž˜αž»αŸ†αžŸαŸ†αžαžΆαž“αŸ‹αŸ—αž…αŸ†αž“αž½αž“ 2αŸ–

  • backendSrv - αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžŠαŸ‚αž›αž•αŸ’αžαž›αŸ‹αž’αž“αŸ’αžαžšαž€αž˜αŸ’αž˜αž‡αžΆαž˜αž½αž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ Grafana API;
  • datasourceSrv - αžŸαŸαžœαžΆαž€αž˜αŸ’αž˜αžŠαŸ‚αž›αž•αŸ’αžαž›αŸ‹αž’αž“αŸ’αžαžšαž€αž˜αŸ’αž˜αž€αŸ’αž“αž»αž„αžαŸ†αž”αž“αŸ‹αž‡αžΆαž˜αž½αž™αž”αŸ’αžšαž—αž–αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž”αžΆαž“αžŠαŸ†αž‘αžΎαž„αž“αŸ…αž€αŸ’αž“αž»αž„ Grafana αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ (αž§αž‘αžΆαž αžšαžŽαŸ αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžš .getAll() - αžαŸ’αžšαž‘αž”αŸ‹αž”αž‰αŸ’αž‡αžΈαž“αŸƒαž”αŸ’αžšαž—αž–αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž”αžΆαž“αžŠαŸ†αž‘αžΎαž„αž‘αžΆαŸ†αž„αž’αžŸαŸ‹; .get( ) - αžαŸ’αžšαž‘αž”αŸ‹αžœαžαŸ’αžαž»αžœαžαŸ’αžαž»αž“αŸƒαž”αŸ’αžšαž—αž–αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž˜αž½αž™αŸ”

αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ GrafanaαŸ– αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸƒαž€αžΆαžšαž”αžΆαž‰αŸ‹αž”αŸ’αžšαž αžΆαžšαžŠαŸαž’αŸ†

αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ GrafanaαŸ– αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸƒαž€αžΆαžšαž”αžΆαž‰αŸ‹αž”αŸ’αžšαž αžΆαžšαžŠαŸαž’αŸ†

αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ GrafanaαŸ– αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸƒαž€αžΆαžšαž”αžΆαž‰αŸ‹αž”αŸ’αžšαž αžΆαžšαžŠαŸαž’αŸ†

αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 4αŸ– αž”αŸ’αžšαž—αž–αž‘αž·αž“αŸ’αž“αž“αŸαž™

αžαžΆαž˜αž‘αžŸαŸ’αžŸαž“αŸˆαžšαž”αžŸαŸ‹ Grafana αž”αŸ’αžšαž—αž–αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‚αžΊαžŠαžΌαž…αž‚αŸ’αž“αžΆαž”αŸαŸ‡αž”αž·αž‘αž“αžΉαž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ– αžœαžΆαž˜αžΆαž“αž…αŸ†αžŽαž»αž…αž…αžΌαž›αžšαž”αžŸαŸ‹αžœαžΆαž•αŸ’αž‘αžΆαž›αŸ‹ module.js αž˜αžΆαž“αž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž˜αžΆαž“αž–αŸαžαŸŒαž˜αžΆαž“αž˜αŸαžαžΆ ​​plugin.json αŸ” αž“αŸ…αž–αŸαž›αž”αž„αŸ’αž€αžΎαžαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž‡αžΆαž˜αž½αž™ type=app αž™αžΎαž„αž’αžΆαž…αž’αŸ’αžœαžΎαž’αž“αŸ’αžαžšαž€αž˜αŸ’αž˜αž‡αžΆαž˜αž½αž™αž”αŸ’αžšαž—αž–αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹ (αž§αž‘αžΆαž αžšαžŽαŸ prometheus-datasource) αž“αž·αž„αžšαž”αžŸαŸ‹αž™αžΎαž„αž•αŸ’αž‘αžΆαž›αŸ‹ αžŠαŸ‚αž›αž™αžΎαž„αž’αžΆαž…αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž‡αžΈαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™ (dist/datasource/*) αž¬αžŠαŸ†αž‘αžΎαž„αž‡αžΆαž€αžΆαžšαž–αžΉαž„αž•αŸ’αž’αŸ‚αž€αŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžšαž”αžŸαŸ‹αž™αžΎαž„ αž”αŸ’αžšαž—αž–αž‘αž·αž“αŸ’αž“αž“αŸαž™αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™αž€αžΌαžŠαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αŸ” αžœαžΆαž€αŸαž…αžΆαŸ†αž”αžΆαž…αŸ‹αž•αž„αžŠαŸ‚αžšαžŠαžΎαž˜αŸ’αž”αžΈαž±αŸ’αž™αž˜αžΆαž“αž‚αŸ†αžšαžΌ config.html αž“αž·αž„αž§αž”αž€αžšαžŽαŸαž”αž‰αŸ’αž‡αžΆ ConfigCtrl αžŠαŸ‚αž›αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‘αŸ†αž–αŸαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž§αž‘αžΆαž αžšαžŽαŸαž”αŸ’αžšαž—αž–αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž“αž·αž„αž§αž”αž€αžšαžŽαŸαž”αž‰αŸ’αž‡αžΆαž”αŸ’αžšαž—αž–αž‘αž·αž“αŸ’αž“αž“αŸαž™ αžŠαŸ‚αž›αž’αž“αž»αžœαžαŸ’αžαžαž€αŸ’αž€αžœαž·αž‡αŸ’αž‡αžΆαž“αŸƒαž”αŸ’αžšαž—αž–αž‘αž·αž“αŸ’αž“αž“αŸαž™αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ”

αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™ KubeGraf αž–αžΈαž…αŸ†αžŽαž»αž…αž”αŸ’αžšαž‘αžΆαž€αŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž“αŸƒαž‘αž·αžŠαŸ’αž‹αž—αžΆαž– αž”αŸ’αžšαž—αž–αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‚αžΊαž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸαž“αŸƒαž€αŸ’αžšαž»αž˜ kubernetes αžŠαŸ‚αž›αž’αž“αž»αžœαžαŸ’αžαžŸαž˜αžαŸ’αžαž—αžΆαž–αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜ (αž€αžΌαžŠαž”αŸ’αžšαž—αž–αž˜αžΆαž“ αžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹):

  • αž€αžΆαžšαž”αŸ’αžšαž˜αžΌαž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αž–αžΈ k8s api-server (αž‘αž‘αž½αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΈαžˆαŸ’αž˜αŸ„αŸ‡ αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™...)
  • αžŸαŸ†αžŽαžΎαž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈαž‘αŸ… prometheus-datasource (αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž…αž„αŸ’αž€αŸ„αž˜αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž“αžΈαž˜αž½αž™αŸ—) αž“αž·αž„αž€αžΆαžšαž’αŸ’αžœαžΎαž‘αŸ’αžšαž„αŸ‹αž‘αŸ’αžšαžΆαž™αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αžŠαžΎαž˜αŸ’αž”αžΈαž”αŸ’αžšαžΎαž‘αž·αž“αŸ’αž“αž“αŸαž™αž‘αžΆαŸ†αž„αž“αŸ…αž€αŸ’αž“αž»αž„αž‘αŸ†αž–αŸαžšαž‹αž·αžαž·αžœαž“αŸ’αž αž“αž·αž„αž“αŸ…αž€αŸ’αž“αž»αž„αž•αŸ’αž‘αžΆαŸ†αž„αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αŸ”
  • αž€αžΆαžšαž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸ…αž›αžΎαž‘αŸ†αž–αŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž‹αž·αžαž·αžœαž“αŸ’αž (αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž’αžαŸ’αžšαžΆαž’αŸ’αžœαžΎαž±αŸ’αž™αžŸαŸ’αžšαžŸαŸ‹)αŸ”
  • αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŸαŸ†αžŽαž½αžšαžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαžŸαž“αŸ’αž›αžΉαž€αž‚αŸ†αžšαžΌαž“αŸ…αž€αŸ’αž“αž»αž„ grafana-dashboards (metriFindQuery() method)

αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ GrafanaαŸ– αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸƒαž€αžΆαžšαž”αžΆαž‰αŸ‹αž”αŸ’αžšαž αžΆαžšαžŠαŸαž’αŸ†

αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ GrafanaαŸ– αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸƒαž€αžΆαžšαž”αžΆαž‰αŸ‹αž”αŸ’αžšαž αžΆαžšαžŠαŸαž’αŸ†

αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ GrafanaαŸ– αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸƒαž€αžΆαžšαž”αžΆαž‰αŸ‹αž”αŸ’αžšαž αžΆαžšαžŠαŸαž’αŸ†

  • αž€αžΆαžšαž’αŸ’αžœαžΎαžαŸαžŸαŸ’αžαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž‡αžΆαž˜αž½αž™αž…αž„αŸ’αž€αŸ„αž˜ 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"};
       })
}

αž…αŸ†αžŽαž»αž…αž‚αž½αžšαž±αŸ’αž™αž…αžΆαž”αŸ‹αž’αžΆαžšαž˜αŸ’αž˜αžŽαŸαžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž˜αž½αž™ αžαžΆαž˜αž‚αŸ†αž“αž·αžαžšαž”αžŸαŸ‹αž™αžΎαž„αž‚αžΊαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž™αž“αŸ’αžαž€αžΆαžšαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹ αž“αž·αž„αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαž—αž–αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆ αž…αŸαž‰αž–αžΈαž”αŸ’αžšαž’αž”αŸ‹ αž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαžΎ datasourceHttpSettings αžŠαŸ‚αž›αž˜αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™ Grafana αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαž”αŸ’αžšαž—αž–αž‘αž·αž“αŸ’αž“αž“αŸαž™αž…αž»αž„αž€αŸ’αžšαŸ„αž™αŸ” αžŠαŸ„αž™αž”αŸ’αžšαžΎαžŸαž˜αžΆαžŸαž—αžΆαž‚αž“αŸαŸ‡ αž™αžΎαž„αž’αžΆαž…αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαž”αŸ’αžšαž—αž–αž‘αž·αž“αŸ’αž“αž“αŸαž™ http αžŠαŸ„αž™αž”αž‰αŸ’αž‡αžΆαž€αŸ‹ url αž“αž·αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž€αžΆαžšαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹/αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αŸ– login-password ឬ client-cert/client-keyαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž’αž“αž»αžœαžαŸ’αžαžŸαž˜αžαŸ’αžαž—αžΆαž–αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαžŠαŸ„αž™αž”αŸ’αžšαžΎαžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž’αŸ’αž“αž€αž€αžΆαž“αŸ‹ (αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ k8s) αž™αžΎαž„αžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž€αžΆαžšαž€αŸ‚αž”αŸ’αžšαŸ‚αž”αž“αŸ’αžαž·αž…αŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡ αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎαž™αž“αŸ’αžαž€αžΆαžš Grafana β€œPlugin Routes” αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹ (αž–αŸαžαŸŒαž˜αžΆαž“αž›αž˜αŸ’αž’αž·αžαž”αž“αŸ’αžαŸ‚αž˜αž“αŸ… αž‘αŸ†αž–αŸαžšαž―αž€αžŸαžΆαžšαž•αŸ’αž›αžΌαžœαž€αžΆαžš) αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž“αŸƒαž”αŸ’αžšαž—αž–αž‘αž·αž“αŸ’αž“αž“αŸαž™αžšαž”αžŸαŸ‹αž™αžΎαž„ αž™αžΎαž„αž’αžΆαž…αž”αŸ’αžšαž€αžΆαžŸαž’αŸ†αž–αžΈαžŸαŸ†αžŽαž»αŸ†αž“αŸƒαž…αŸ’αž”αžΆαž”αŸ‹αž“αžΆαŸ†αž•αŸ’αž›αžΌαžœαžŠαŸ‚αž›αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈ grafana αŸ” αž§αž‘αžΆαž αžšαžŽαŸ αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž…αŸ†αžŽαž»αž…αž”αž‰αŸ’αž…αž”αŸ‹αž“αžΈαž˜αž½αž™αŸ— αž‚αŸαž’αžΆαž…αž€αŸ†αžŽαžαŸ‹αž”αž‹αž˜αž€αžαžΆ ឬ urls αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž›αž‘αŸ’αž’αž—αžΆαž–αž“αŸƒαž‘αž˜αŸ’αžšαž„αŸ‹αž‚αŸ†αžšαžΌ αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž’αžΆαž…αž™αž€αž…αŸαž‰αž–αžΈαžœαžΆαž› jsonData αž“αž·αž„ secureJsonData (αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž–αžΆαž€αŸ’αž™αžŸαž˜αŸ’αž„αžΆαžαŸ‹ αž¬αžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž„αžΆαžαŸ‹αž€αŸ’αž“αž»αž„αž‘αž˜αŸ’αžšαž„αŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž’αŸŠαž·αž“αž‚αŸ’αžšαžΈαž”)αŸ” αž€αŸ’αž“αž»αž„αž§αž‘αžΆαž αžšαžŽαŸαžšαž”αžŸαŸ‹αž™αžΎαž„αžŸαŸ†αžŽαž½αžšαžŠαžΌαž…αž‡αžΆ /__proxy/api/v1/namespaces αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈαž‘αŸ… url αž“αŸƒαž‘αž˜αŸ’αžšαž„αŸ‹
/api/v8/namespaces αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαŸ– αž”αž‹αž˜αž€αžαžΆ Bearer αŸ”

αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ GrafanaαŸ– αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸƒαž€αžΆαžšαž”αžΆαž‰αŸ‹αž”αŸ’αžšαž αžΆαžšαžŠαŸαž’αŸ†

αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ GrafanaαŸ– αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸƒαž€αžΆαžšαž”αžΆαž‰αŸ‹αž”αŸ’αžšαž αžΆαžšαžŠαŸαž’αŸ†

αž‡αžΆαž’αž˜αŸ’αž˜αž‡αžΆαžαž· αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ k8s api αž™αžΎαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αžŸαž·αž‘αŸ’αž’αž·αž…αžΌαž›αž”αŸ’αžšαžΎαž”αžΆαž“αžαŸ‚αž’αžΆαž“ αž”αž„αŸ’αž αžΆαž‰αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžŠαŸ‚αž›αž’αŸ’αž“αž€αž€αŸαž’αžΆαž…αžŸαŸ’αžœαŸ‚αž„αžšαž€αž”αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„ αž€αžΌαžŠαž”αŸ’αžšαž—αž–αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™.

αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 5: αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™

αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ GrafanaαŸ– αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸƒαž€αžΆαžšαž”αžΆαž‰αŸ‹αž”αŸ’αžšαž αžΆαžšαžŠαŸαž’αŸ†

αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αžΆαž“αžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™ Grafana αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž’αŸ’αž“αž€αž“αžΉαž„αž…αž„αŸ‹αž’αŸ’αžœαžΎαž±αŸ’αž™αžœαžΆαž’αžΆαž…αž”αŸ’αžšαžΎαž”αžΆαž“αž‡αžΆαžŸαžΆαž’αžΆαžšαžŽαŸˆαŸ” αž“αŸ…αž€αŸ’αž“αž»αž„ Grafana αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž”αžŽαŸ’αžŽαžΆαž›αŸαž™αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸ…αž‘αžΈαž“αŸαŸ‡ grafana.com/grafana/plugins

αžŠαžΎαž˜αŸ’αž”αžΈαž±αŸ’αž™αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž˜αžΆαž“αž“αŸ…αž›αžΎαž αžΆαž„αž•αŸ’αž›αžΌαžœαž€αžΆαžš αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž”αž„αŸ’αž€αžΎαž PR αž…αžΌαž› αžƒαŸ’αž›αžΆαŸ†αž„αž“αŸαŸ‡αŸ”αžŠαŸ„αž™αž”αž“αŸ’αžαŸ‚αž˜αž˜αžΆαžαž·αž€αžΆαžŠαžΌαž…αž“αŸαŸ‡αž‘αŸ…αž―αž€αžŸαžΆαžš repo.jsonαŸ–

αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ GrafanaαŸ– αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸƒαž€αžΆαžšαž”αžΆαž‰αŸ‹αž”αŸ’αžšαž αžΆαžšαžŠαŸαž’αŸ†

αžŠαŸ‚αž›αž€αŸ†αžŽαŸ‚αž‚αžΊαž‡αžΆαž€αŸ†αžŽαŸ‚αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ url αž‚αžΊαž‡αžΆαžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž€αžΆαž“αŸ‹αžƒαŸ’αž›αžΆαŸ†αž„ αž αžΎαž™ commit αž‚αžΊαž‡αžΆ hash αž“αŸƒ commit αžŠαŸ‚αž›αž€αŸ†αžŽαŸ‚αž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž“αžΉαž„αž˜αžΆαž“αŸ”

αž αžΎαž™αž“αŸ…αž›αž‘αŸ’αž’αž•αž›αž’αŸ’αž“αž€αž“αžΉαž„αžƒαžΎαž‰αžšαžΌαž”αž—αžΆαž–αžŠαŸαž’αžŸαŸ’αž…αžΆαžšαŸ’αž™αžŠαžΌαž…αž‡αžΆαŸ–

αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ GrafanaαŸ– αž”αŸ’αžšαžœαžαŸ’αžαž·αž“αŸƒαž€αžΆαžšαž”αžΆαž‰αŸ‹αž”αŸ’αžšαž αžΆαžšαžŠαŸαž’αŸ†

αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαžΆαž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αžΆαž”αŸ‹αž™αž€αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž–αžΈ Readme.md, Changelog.md αž“αž·αž„αž―αž€αžŸαžΆαžš plugin.json αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž–αž·αž–αžŽαŸŒαž“αžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αŸ”

αž•αŸ’αž“αŸ‚αž€αž‘αžΈ 6: αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž€αžΆαžšαžŸαž“αŸ’αž“αž·αžŠαŸ’αž‹αžΆαž“

αž™αžΎαž„β€‹αž˜αž·αž“β€‹αž”αžΆαž“β€‹αž”αž‰αŸ’αžˆαž”αŸ‹β€‹αž€αžΆαžšβ€‹αž’αž—αž·αžœαžŒαŸ’αžβ€‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈβ€‹αž‡αŸ†αž“αž½αž™β€‹αžšαž”αžŸαŸ‹β€‹αž™αžΎαž„β€‹αž”αž“αŸ’αž‘αžΆαž”αŸ‹β€‹αž–αžΈβ€‹αž€αžΆαžšβ€‹αž…αŸαž‰β€‹αž•αŸ’αžŸαžΆαž™αŸ” αž αžΎαž™αž₯αž‘αžΌαžœαž“αŸαŸ‡ αž™αžΎαž„αž€αŸ†αž–αž»αž„αž’αŸ’αžœαžΎαž€αžΆαžšαž›αžΎαž€αžΆαžšαžαŸ’αžšαž½αžαž–αž·αž“αž·αžαŸ’αž™αž™αŸ‰αžΆαž„αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαž“αžΌαžœαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž’αž“αž’αžΆαž“αžšαž”αžŸαŸ‹αžαŸ’αž“αžΆαŸ†αž„αž…αž„αŸ’αž€αŸ„αž˜ αžŠαŸ„αž™αžŽαŸ‚αž“αžΆαŸ†αž˜αž»αžαž„αžΆαžšαžαŸ’αž˜αžΈαŸ—αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ‚αž›αž˜αŸ’αž’ UX αž αžΎαž™αžαŸ‚αž˜αž‘αžΆαŸ†αž„αž‘αž‘αž½αž›αž”αžΆαž“αž˜αžαž·αž€αŸ‚αž›αž˜αŸ’αž’αž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαŸ‚αž›αž‘αž‘αž½αž›αž”αžΆαž“αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαžŠαŸ†αž‘αžΎαž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž‘αžΆαŸ†αž„αžŠαŸ„αž™αž’αžαž·αžαž·αž‡αž“αžšαž”αžŸαŸ‹αž™αžΎαž„ αž“αž·αž„αž–αžΈαž˜αž“αž»αžŸαŸ’αžŸαž“αŸ…αž›αžΎ GitHub (αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž…αžΆαž€αž…αŸαž‰ αž”αž‰αŸ’αž αžΆαž¬αžŸαŸ†αžŽαžΎαžšαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αžŸαž”αŸ’αž”αžΆαž™αž…αž·αžαŸ’αžαžαŸ’αž›αžΆαŸ†αž„αžŽαžΆαžŸαŸ‹ :)

αž™αžΎαž„αžŸαž„αŸ’αžƒαžΉαž˜αžαžΆαž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αž“αžΉαž„αž‡αž½αž™αž’αŸ’αž“αž€αž±αŸ’αž™αž™αž›αŸ‹αž–αžΈαž§αž”αž€αžšαžŽαŸαžŠαŸαž’αžŸαŸ’αž…αžΆαžšαŸ’αž™αžŠαžΌαž…αž‡αžΆ Grafana αž αžΎαž™αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ”

αžŸαžΌαž˜αž’αžšαž‚αž»αžŽ!)

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹