เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ plugin เบชเปเบฒเบฅเบฑเบš Grafana: เบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”เบ‚เบญเบ‡เบเบฒเบ™เบชเบฑเบเบขเบฒเปƒเบซเบเปˆ

เบชเบฐเบšเบฒเบเบ”เบตเบ—เบธเบเบ„เบปเบ™! เบชเบญเบ‡เบชเบฒเบกเป€เบ”เบทเบญเบ™เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป€เบ›เบตเบ”เบ•เบปเบงเป‚เบ„เบ‡เบเบฒเบ™ open-source เปƒเบซเบกเปˆเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบ‚เบปเป‰เบฒเปƒเบ™เบเบฒเบ™เบœเบฐเบฅเบดเบ” - plugin Grafana เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก kubernetes, เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบญเบตเป‰เบ™เบงเปˆเบฒ. DevOpsProdigy KubeGraf. เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡ plugin เปเบกเปˆเบ™เบกเบตเบขเบนเปˆ เบ„เบฑเบ‡เป€เบเบฑเบšเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐเปƒเบ™ GitHub. เปเบฅเบฐเปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เปเบšเปˆเบ‡เบ›เบฑเบ™เบเบฑเบšเบ—เปˆเบฒเบ™เบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเป‰เบฒเบ‡ plugin, เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบžเบปเบšเปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ. เป„เบ›โ€‹เบเบฑเบ™โ€‹เป€เบฅเบตเบ!

เบžเบฒเบเบ—เบต 0 - เปเบ™เบฐเบ™เปเบฒ: เบžเบงเบเป€เบฎเบปเบฒเบกเบฒเบฎเบญเบ”เบˆเบธเบ”เบ™เบตเป‰เป„เบ”เป‰เปเบ™เบงเปƒเบ”?

เบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเบˆเบฐเบ‚เบฝเบ™ plugin เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบ‡เบชเปเบฒเบฅเบฑเบš Grafan เป„เบ”เป‰เบกเบฒเบซเบฒเบžเบงเบเป€เบฎเบปเบฒเป‚เบ”เบเบšเบฑเบ‡เป€เบญเบตเบ™. เบšเปเบฅเบดเบชเบฑเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ•เบดเบ”เบ•เบฒเบกเป‚เบ„เบ‡เบเบฒเบ™เป€เบงเบฑเบšเป„เบŠเบ•เปŒเบ‚เบญเบ‡เบฅเบฐเบ”เบฑเบšเบ•เปˆเบฒเบ‡เป†เบ‚เบญเบ‡เบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เบซเบผเบฒเบเบเบงเปˆเบฒ 10 เบ›เบต. เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เป€เบงเบฅเบฒเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบชเบฐเบชเบปเบกเบ„เบงเบฒเบกเบŠเปเบฒเบ™เบฒเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบฅเบฒเบ, เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆ, เปเบฅเบฐเบ›เบฐเบชเบปเบšเบเบฒเบ™เปƒเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบฅเบฐเบšเบปเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ•เปˆเบฒเบ‡เป†. เปเบฅเบฐเปƒเบ™เบšเบฒเบ‡เบˆเบธเบ”เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ–เบฒเบกเบ•เบปเบงเป€เบญเบ‡เบงเปˆเบฒ: "เบกเบตเป€เบ„เบทเปˆเบญเบ‡เบกเบท magic เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก Kubernetes, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบเป‰เบญเบ™เบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเป€เบงเบปเป‰เบฒเบงเปˆเบฒ, "เบ•เบฑเป‰เบ‡เบกเบฑเบ™เปเบฅเบฐเบฅเบทเบกเบกเบฑเบ™"? .. เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบญเบธเบ”เบชเบฒเบซเบฐเบเปเบฒเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก k8s, เปเบ™เปˆเบ™เบญเบ™, เบกเบตเบกเบฒเบ”เบปเบ™เบ™เบฒเบ™เปเบฅเป‰เบง เบเบฒเบ™เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™เบ‚เบญเบ‡ Prometheus + Grafana. เปเบฅเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เปเบเป‰เป„เบ‚เบ—เบตเปˆเบžเป‰เบญเบกเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบชเปเบฒเบฅเบฑเบš stack เบ™เบตเป‰, เบกเบตเบŠเบธเบ”เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”เบ•เปˆเบฒเบ‡เป†เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบกเบท: prometheus-operator, เบŠเบธเบ”เบ‚เบญเบ‡ dashboards kubernetes-mixin, grafana-kubernetes-app.

plugin grafana-kubernetes-app เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเป€เบ›เบฑเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบ—เบตเปˆเบชเบธเบ”เบชเปเบฒเบฅเบฑเบšเบžเบงเบเป€เบฎเบปเบฒ, เปเบ•เปˆเบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบซเบผเบฒเบเบเบงเปˆเบฒเบซเบ™เบถเปˆเบ‡เบ›เบตเปเบฅเบฐ, เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบชเบฐเบšเบฑเบšเปƒเบซเบกเปˆเบ‚เบญเบ‡ node-exporter เปเบฅเบฐ kube-state-metrics. เปเบฅเบฐเปƒเบ™เบšเบฒเบ‡เบˆเบธเบ”เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆ: "เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบ„เบงเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡เบšเป?"

เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบญเบฑเบ™เปƒเบ”เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™ plugin เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ:

  • เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบžเบฒเบšเบ‚เบญเบ‡ "เปเบœเบ™เบ—เบตเปˆเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™": เบเบฒเบ™เบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเบ—เบตเปˆเบชเบฐเบ”เบงเบเบ‚เบญเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเปƒเบ™เบเบธเปˆเบก, เบˆเบฑเบ”เบเบธเปˆเบกเป‚เบ”เบ namespaces, deployments ... ;
  • เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบžเบฒเบšเบ‚เบญเบ‡เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเป€เบŠเบฑเปˆเบ™ "เบเบฒเบ™เบ›เบฑเบšเปƒเบŠเป‰ - เบšเปเบฅเบดเบเบฒเบ™ (+ เบžเบญเบ”)".
  • เบเบฒเบ™เป€เบšเบดเปˆเบ‡เป€เบซเบฑเบ™เบžเบฒเบšเบ‚เบญเบ‡เบเบฒเบ™เปเบˆเบเบขเบฒเบเบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบเบธเปˆเบกเปƒเบ™เบ—เบปเปˆเบงเบเบธเปˆเบกเบ‚เบญเบ‡เบเบธเปˆเบก.
  • เบเบฒเบ™เป€เบเบฑเบšเบเปเบฒเบ‚เปเป‰เบกเบนเบ™ metrics เปเบฅเบฐเบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเบซเบผเบฒเบเปเบซเบผเปˆเบ‡: Prometheus เปเบฅเบฐ k8s api server.
  • เบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบ—เบฑเบ‡เบชเบญเบ‡เบชเปˆเบงเบ™เบ‚เบญเบ‡เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™ (เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป€เบงเบฅเบฒ CPU, เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ, เบฅเบฐเบšเบปเบšเบเปˆเบญเบเบ‚เบญเบ‡เปเบœเปˆเบ™, เป€เบ„เบทเบญเบ‚เปˆเบฒเบ) เปเบฅเบฐเป€เบซเบ”เบœเบปเบ™เบ‚เบญเบ‡เปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™ - เป‚เบžเบŠเบฐเบ™เบฒเบเบฒเบ™เบชเบฐเบ–เบฒเบ™เบฐเบžเบฒเบšเบชเบธเบ‚เบฐเบžเบฒเบš, เบˆเปเบฒเบ™เบงเบ™เบเบฒเบ™เบˆเปเบฒเบฅเบญเบ‡เบ—เบตเปˆเบกเบตเบขเบนเปˆ, เบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ„เบงเบฒเบกเบžเป‰เบญเบก / เบŠเบตเบงเบดเบ”.

เบชเปˆเบงเบ™เบ—เบต 1: "Plugin Grafana" เปเบกเปˆเบ™เบซเบเบฑเบ‡?

เบˆเบฒเบเบกเบธเบกเป€เบšเบดเปˆเบ‡เบ”เป‰เบฒเบ™เบงเบดเบŠเบฒเบเบฒเบ™, plugin เบชเปเบฒเบฅเบฑเบš Grafana เปเบกเปˆเบ™เบ•เบปเบงเบ„เบงเบšเบ„เบธเบกเบกเบธเบก, เป€เบŠเบดเปˆเบ‡เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ‚เปเป‰เบกเบนเบ™ Grafana (/var/grafana/plugins/ /dist/module.js) เปเบฅเบฐเบชเบฒเบกเบฒเบ”เป‚เบซเบฅเบ”เป€เบ›เบฑเบ™เป‚เบกเบ”เบนเบ™ SystemJS. เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™เปƒเบ™เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ™เบตเป‰เบ„เบงเบ™เบˆเบฐเบกเบตเป„เบŸเบฅเปŒ plugin.json เบ—เบตเปˆเบกเบตเบ‚เปเป‰เบกเบนเบ™ meta เบ—เบฑเบ‡เบซเบกเบปเบ”เบเปˆเบฝเบงเบเบฑเบš plugin เบ‚เบญเบ‡เบ—เปˆเบฒเบ™: เบŠเบทเปˆ, เบฎเบธเปˆเบ™, เบ›เบฐเป€เบžเบ” plugin, เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš repository / site / เปƒเบšเบญเบฐเบ™เบธเบเบฒเบ”, เบเบฒเบ™เบ‚เบถเป‰เบ™เบเบฑเบš, เปเบฅเบฐเบญเบทเปˆเบ™เป†.

เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ plugin เบชเปเบฒเบฅเบฑเบš Grafana: เบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”เบ‚เบญเบ‡เบเบฒเบ™เบชเบฑเบเบขเบฒเปƒเบซเบเปˆ
module.ts

เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ plugin เบชเปเบฒเบฅเบฑเบš Grafana: เบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”เบ‚เบญเบ‡เบเบฒเบ™เบชเบฑเบเบขเบฒเปƒเบซเบเปˆ
plugin.json

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เปƒเบ™เบžเบฒเบšเบซเบ™เป‰เบฒเบˆเป, เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบ™เบปเบ” plugin.type = app. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ plugins เบชเปเบฒเบฅเบฑเบš Grafana เบชเบฒเบกเบฒเบ”เบกเบตเบชเบฒเบกเบ›เบฐเป€เบžเบ”:

เบ„เบฐเบ™เบฐเบเปเบฒเบกเบฐ: เบ›เบฐเป€เบžเบ”เบ›เบฑเปŠเบเบญเบดเบ™เบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเบชเบธเบ” - เบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฐเบ”เบฒเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบšเบดเปˆเบ‡เป€เบซเบฑเบ™ metrics เปƒเบ”, เปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡ dashboards เบ•เปˆเบฒเบ‡เป†.
เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: เบ•เบปเบงเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ plugin เบเบฑเบšเบšเบฒเบ‡เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™ (เบ•เบปเบงเบขเปˆเบฒเบ‡: Prometheus-datasource, ClickHouse-datasource, ElasticSearch-datasource).
app: เบ›เบฑเปŠเบเบญเบดเบ™เบ—เบตเปˆเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเป‰เบฒเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบ”เป‰เบฒเบ™เบซเบ™เป‰เบฒเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡เบžเบฒเบเปƒเบ™ Grafana, เบชเป‰เบฒเบ‡เบซเบ™เป‰เบฒ html เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡เปเบฅเบฐเป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡เบ‚เปเป‰เบกเบนเบ™เบ•เปˆเบฒเบ‡เป†. เบ™เบญเบเบˆเบฒเบเบ™เบตเป‰, plugins เบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”เบญเบทเปˆเบ™เป† (เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™, เบเบฐเบ”เบฒเบ™) เปเบฅเบฐ dashboards เบ•เปˆเบฒเบ‡เป†เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เป€เบ›เบฑเบ™ dependencies.

เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ plugin เบชเปเบฒเบฅเบฑเบš Grafana: เบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”เบ‚เบญเบ‡เบเบฒเบ™เบชเบฑเบเบขเบฒเปƒเบซเบเปˆ
เบ•เบปเบงเบขเปˆเบฒเบ‡เบเบฒเบ™เบ‚เบถเป‰เบ™เบเบฑเบš plugin เบเบฑเบš type=app.

เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบ—เบฑเบ‡ JavaScript เปเบฅเบฐ TypeScript เป€เบ›เบฑเบ™เบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบผเปเบเบผเบก (เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบทเบญเบเบกเบฑเบ™). เบเบฒเบ™เบเบฐเบเบฝเบกเบชเปเบฒเบฅเบฑเบš plugins hello-world เบ‚เบญเบ‡เบ—เบธเบเบ›เบฐเป€เบžเบ”เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰ เบŠเบญเบเบซเบฒเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ: repository เบ™เบตเป‰เบ›เบฐเบเบญเบšเบกเบต starter-packs เบˆเปเบฒเบ™เบงเบ™เบซเบฅเบฒเบ (เบกเบตเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบปเบ”เบฅเบญเบ‡เบ‚เบญเบ‡ plugin เปƒเบ™ React) เบเบฑเบš builders เบ—เบตเปˆเบ•เบดเบ”เบ•เบฑเป‰เบ‡เป„เบงเป‰เบเปˆเบญเบ™เปเบฅเบฐ configured.

เบžเบฒเบเบ—เบต 2: เบเบฒเบ™เบเบฐเบเบฝเบกเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™

เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบงเบฝเบเบเปˆเบฝเบงเบเบฑเบš plugin, เบ•เบฒเบกเบ—เปเบฒเบกเบฐเบŠเบฒเบ”เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบเบธเปˆเบก 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

script เบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบง 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: เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ•เบปเบงเบˆเบดเบ‡

เบฎเบนเบšเปเบšเบšเบงเบฑเบ”เบ–เบธ

เปƒเบ™เบเบฒเบ™เบเบฐเบเบฝเบกเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” plugin, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ—เบตเปˆเบˆเบฐเบญเบฐเบ—เบดเบšเบฒเบเบ—เบธเบเบซเบ™เปˆเบงเบเบ‡เบฒเบ™ Kubernetes เบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เบซเป‰เบญเบ‡เบฎเบฝเบ™ TypeScript: pod, deployment, daemonset, statefulset, job, cronjob, service, node, namespace. เปเบ•เปˆเบฅเบฐเบŠเบฑเป‰เบ™เบฎเบฝเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบชเบทเบšเบ—เบญเบ”เบกเบฒเบˆเบฒเบเบซเป‰เบญเบ‡เบฎเบฝเบ™ 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 = [];
   }
}

เบ”เป‰เบงเบเบ„เบงเบฒเบกเบŠเปˆเบญเบเป€เบซเบฅเบทเบญเบ‚เบญเบ‡ getters เปเบฅเบฐ setters, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบชเบฐเปเบ”เบ‡เบซเบผเบทเบเปเบฒเบ™เบปเบ” metrics entity เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบ™เบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบชเบฐเบ”เบงเบเปเบฅเบฐเบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เป„เบ”เป‰. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบฎเบนเบšเปเบšเบšเบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ‚เบญเบ‡ nodes cpu เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบˆเบฑเบ”เบชเบฑเบ™เป„เบ”เป‰:

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

เบซเบ™เป‰เบฒ

เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบซเบ™เป‰เบฒ plugin เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เปเบกเปˆเบ™เป„เบ”เป‰เบญเบฐเบ—เบดเบšเบฒเบเปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เปƒเบ™ pluing.json เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปƒเบ™เบžเบฒเบ dependencies:

เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ plugin เบชเปเบฒเบฅเบฑเบš Grafana: เบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”เบ‚เบญเบ‡เบเบฒเบ™เบชเบฑเบเบขเบฒเปƒเบซเบเปˆ

เปƒเบ™เบšเบฅเบฑเบญเบเบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบซเบ™เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบฅเบฐเบšเบธ PAGE NAME (เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบฑเบ™เบˆเบฐเบ–เบทเบเบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™ slug เป‚เบ”เบเบซเบ™เป‰เบฒเบ™เบตเป‰เบˆเบฐเบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป„เบ”เป‰); เบŠเบทเปˆเบ‚เบญเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‡เบฒเบ™เบ‚เบญเบ‡เบซเบ™เป‰เบฒเบ™เบตเป‰ (เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ–เบทเบเบชเบปเปˆเบ‡เบญเบญเบเป„เบ›เบเบฑเบ‡ module.ts); เบเบฒเบ™เบŠเบตเป‰เบšเบญเบเป€เบ–เบดเบ‡เบšเบปเบ”เบšเบฒเบ”เบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเปœเป‰เบฒเบ™เบตเป‰เบกเบตเบขเบนเปˆ เปเบฅเบฐเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบ™เบณเบ—เบฒเบ‡เบชเบณเบฅเบฑเบšเปเบ–เบšเบ”เป‰เบฒเบ™เบ‚เป‰เบฒเบ‡.

เปƒเบ™เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเบฎเบฑเบšเบœเบดเบ”เบŠเบญเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ‡เบฒเบ™เบ‚เบญเบ‡เบซเบ™เป‰เบฒ, เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเปเบฒเบ™เบปเบ” templateUrl, เบœเปˆเบฒเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป„เบ›เบซเบฒเป„เบŸเบฅเปŒ html เบ”เป‰เบงเบ markup. เบžเบฒเบเปƒเบ™เบ•เบปเบงเบ„เบงเบšเบ„เบธเบก, เป‚เบ”เบเบœเปˆเบฒเบ™เบเบฒเบ™เบชเบฑเบเบขเบฒเบ—เบตเปˆเบ‚เบถเป‰เบ™เบเบฑเบš, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป„เบ”เป‰เป€เบ–เบดเบ‡ 2 เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ”เป‰เบฒเบ™เบกเบธเบกเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™:

  • backendSrv - เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ—เบตเปˆเบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ Grafana API;
  • datasourceSrv - เบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ—เบตเปˆเบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบ—เป‰เบญเบ‡เบ–เบดเปˆเบ™เบเบฑเบšเปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™ Grafana เบ‚เบญเบ‡เบ—เปˆเบฒเบ™ (เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบงเบดเบ—เบตเบเบฒเบ™ .getAll() - เบชเบปเปˆเบ‡เบ„เบทเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”; .get( ) - เบชเบปเปˆเบ‡เบ„เบทเบ™เบงเบฑเบ”เบ–เบธเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบชเบฐเป€เบžเบฒเบฐ.

เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ plugin เบชเปเบฒเบฅเบฑเบš Grafana: เบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”เบ‚เบญเบ‡เบเบฒเบ™เบชเบฑเบเบขเบฒเปƒเบซเบเปˆ

เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ plugin เบชเปเบฒเบฅเบฑเบš Grafana: เบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”เบ‚เบญเบ‡เบเบฒเบ™เบชเบฑเบเบขเบฒเปƒเบซเบเปˆ

เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ plugin เบชเปเบฒเบฅเบฑเบš Grafana: เบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”เบ‚เบญเบ‡เบเบฒเบ™เบชเบฑเบเบขเบฒเปƒเบซเบเปˆ

เบชเปˆเบงเบ™เบ—เบต 4: เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™

เบˆเบฒเบเบ—เบฑเบ”เบชเบฐเบ™เบฐเบ‚เบญเบ‡ Grafana, เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เปเบกเปˆเบ™ plugin เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบชเบดเปˆเบ‡เบญเบทเปˆเบ™เป†: เบกเบฑเบ™เบกเบตเบˆเบธเบ”เป€เบ‚เบปเป‰เบฒเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡ module.js, เบกเบตเป„เบŸเบฅเปŒเบ—เบตเปˆเบกเบตเบ‚เปเป‰เบกเบนเบ™ meta plugin.json. เป€เบกเบทเปˆเบญเบžเบฑเบ”เบ—เบฐเบ™เบฒ plugin เบ”เป‰เบงเบ type = app, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบžเบปเบงเบžเบฑเบ™เบเบฑเบšเบ—เบฑเบ‡เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบกเบตเบขเบนเปˆ (เบ•เบปเบงเบขเปˆเบฒเบ‡, prometheus-datasource) เปเบฅเบฐเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบ‡, เป€เบŠเบดเปˆเบ‡เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเป‚เบ”เบเบเบปเบ‡เปƒเบ™ plugin directory (dist/datasource/*) เบซเบผเบทเบ•เบดเบ”เบ•เบฑเป‰เบ‡เป€เบ›เบฑเบ™ dependency. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบกเบฒเบžเป‰เบญเบกเบเบฑเบšเบฅเบฐเบซเบฑเบ” plugin. เบกเบฑเบ™เบเบฑเบ‡เบกเบตเบ„เบงเบฒเบกเบˆเปเบฒเป€เบ›เบฑเบ™เบ—เบตเปˆเบˆเบฐเบกเบตเปเบกเปˆเปเบšเบš config.html เปเบฅเบฐเบ•เบปเบงเบ„เบงเบšเบ„เบธเบก ConfigCtrl, เป€เบŠเบดเปˆเบ‡เบˆเบฐเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบชเปเบฒเบฅเบฑเบšเบซเบ™เป‰เบฒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ instance datasource เปเบฅเบฐเบ•เบปเบงเบ„เบงเบšเบ„เบธเบก Datasource, เป€เบŠเบดเปˆเบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบซเบ”เบœเบปเบ™เบ‚เบญเบ‡เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™.

เปƒเบ™ plugin KubeGraf, เบˆเบฒเบเบˆเบธเบ”เป‚เบ•เป‰เบ•เบญเบšเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰, เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบเบธเปˆเบก kubernetes เบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ•เปเปˆเป„เบ›เบ™เบตเป‰ (เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡เปเบกเปˆเบ™เบกเบตเบขเบนเปˆ. เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ):

  • เบเบฒเบ™โ€‹เป€เบเบฑเบšโ€‹เบเปเบฒโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบˆเบฒเบ k8s api-server (เบเบฒเบ™โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบฅเบฒเบโ€‹เบŠเบทเปˆโ€‹เบ‚เบญเบ‡ namespacesโ€‹, เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰ ... )
  • เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป proxying เบเบฑเบš prometheus-datasource (เป€เบŠเบดเปˆเบ‡เบ–เบทเบเป€เบฅเบทเบญเบเปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ plugin เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบเบธเปˆเบกเบชเบฐเป€เบžเบฒเบฐ) เปเบฅเบฐเบฎเบนเบšเปเบšเบšเบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เป€เบžเบทเปˆเบญเบ™เปเบฒเปƒเบŠเป‰เบ‚เปเป‰เบกเบนเบ™เบ—เบฑเบ‡เปƒเบ™เบซเบ™เป‰เบฒเบ„เบปเบ‡เบ—เบตเปˆเปเบฅเบฐเปƒเบ™ dashboards.
  • เบเบฒเบ™เบญเบฑเบšเป€เบ”เบ”เบ‚เปเป‰เบกเบนเบ™เปƒเบ™เปœเป‰เบฒเบ›เบฅเบฑเบเบญเบดเบ™เบ„เบปเบ‡เบ—เบตเปˆ (เบ”เป‰เบงเบเบญเบฑเบ”เบ•เบฒเป‚เบซเบผเบ”เบ‚เปเป‰เบกเบนเบ™เปƒเปเปˆเบ—เบตเปˆเบเบณเบ™เบปเบ”เป„เบงเป‰).
  • เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เปเบœเปˆเบ™เปเบกเปˆเปเบšเบšเปƒเบ™ grafana-dashboards (metriFindQuery() method)

เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ plugin เบชเปเบฒเบฅเบฑเบš Grafana: เบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”เบ‚เบญเบ‡เบเบฒเบ™เบชเบฑเบเบขเบฒเปƒเบซเบเปˆ

เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ plugin เบชเปเบฒเบฅเบฑเบš Grafana: เบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”เบ‚เบญเบ‡เบเบฒเบ™เบชเบฑเบเบขเบฒเปƒเบซเบเปˆ

เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ plugin เบชเปเบฒเบฅเบฑเบš 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"};
       })
}

เบˆเบธเบ”เบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ, เปƒเบ™เบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เปเบกเปˆเบ™เบเบฒเบ™เบˆเบฑเบ”เบ•เบฑเป‰เบ‡เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบปเบ™เป„เบเบเบฒเบ™เบเบงเบ”เบชเบญเบšเปเบฅเบฐเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เบชเปเบฒเบฅเบฑเบšเปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™. เป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบด, เบญเบญเบเบˆเบฒเบเบเปˆเบญเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ‚เปเป‰เบกเบนเบ™ Grafana เบ—เบตเปˆเบกเบตเป‚เบ„เบ‡เบชเป‰เบฒเบ‡HttpSettings เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบชเบธเบ”เบ—เป‰เบฒเบ. เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™ http เป‚เบ”เบเบเบฒเบ™เบฅเบฐเบšเบธ url เปเบฅเบฐเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡ / เบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”: login-password, เบซเบผเบท client-cert/client-key. เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบเปเบฒเบซเบ™เบปเบ”เบ„เปˆเบฒเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป‚เบ”เบเปƒเบŠเป‰ token bearer (เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ de facto เบชเปเบฒเบฅเบฑเบš k8s), เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เป€เบฎเบฑเบ”เบเบฒเบ™เบ›เบฑเบšเป€เบฅเบฑเบเบ™เป‰เบญเบ.

เป€เบžเบทเปˆเบญโ€‹เปเบเป‰โ€‹เป„เบ‚โ€‹เบšเบฑเบ™โ€‹เบซเบฒโ€‹เบ™เบตเป‰โ€‹, เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบเบปเบ™โ€‹เป„เบ Grafana "Plugin Routesโ€‹" เบ—เบตเปˆโ€‹เบกเบตโ€‹เบขเบนเปˆโ€‹เปƒเบ™ (เบฅเบฒเบโ€‹เบฅเบฐโ€‹เบญเบฝเบ”โ€‹เป€เบžเบตเปˆเบกโ€‹เป€เบ•เบตเบกโ€‹เป„เบ”เป‰โ€‹เบ—เบตเปˆโ€‹. เปœเป‰เบฒเป€เบญเบเบฐเบชเบฒเบ™เบ—เบฒเบ‡เบเบฒเบ™). เปƒเบ™เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ‚เบญเบ‡เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ›เบฐเบเบฒเบ”เบŠเบธเบ”เบ‚เบญเบ‡เบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ—เบตเปˆเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป‚เบ”เบเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบ•เบปเบงเปเบ—เบ™ grafana. เบ•เบปเบงเบขเปˆเบฒเบ‡, เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐ endpoint เปเบ•เปˆเบฅเบฐเบ„เบปเบ™เบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ” headers เบซเบผเบท urls เบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ‚เบญเบ‡ template, เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เป€เบญเบปเบฒเบกเบฒเบˆเบฒเบเบŠเปˆเบญเบ‡ jsonData เปเบฅเบฐ secureJsonData (เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™เบซเบผเบท tokens เปƒเบ™เบฎเบนเบšเปเบšเบšเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”). เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบ„เปเบฒเบ–เบฒเบกเป€เบŠเบฑเปˆเบ™: /__proxy/api/v1/namespaces เบˆเบฐเบ–เบทเบเบชเบปเปˆเบ‡เบ•เปเปˆเบเบฑเบš url เบ‚เบญเบ‡เปเบšเบšเบŸเบญเบก
/api/v8/namespaces เบ”เป‰เบงเบเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”: Bearer header.

เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ plugin เบชเปเบฒเบฅเบฑเบš Grafana: เบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”เบ‚เบญเบ‡เบเบฒเบ™เบชเบฑเบเบขเบฒเปƒเบซเบเปˆ

เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ plugin เบชเปเบฒเบฅเบฑเบš Grafana: เบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”เบ‚เบญเบ‡เบเบฒเบ™เบชเบฑเบเบขเบฒเปƒเบซเบเปˆ

เบ•เบฒเบกเบ—เปเบฒเบกเบฐเบŠเบฒเบ”, เป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ k8s api เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบœเบนเป‰เปƒเบŠเป‰เบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡ readonly, manifests เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบขเบนเปˆเปƒเบ™ เบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡ plugin.

เบชเปˆเบงเบ™เบ—เบต 5: เบ›เปˆเบญเบ

เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ plugin เบชเปเบฒเบฅเบฑเบš Grafana: เบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”เบ‚เบญเบ‡เบเบฒเบ™เบชเบฑเบเบขเบฒเปƒเบซเบเปˆ

เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เป„เบ”เป‰เบ‚เบฝเบ™ plugin Grafana เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡, เบ•เบฒเบกเบ—เปเบฒเบกเบฐเบŠเบฒเบ”เปเบฅเป‰เบง, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เป€เบ›เบตเบ”เป€เบœเบตเบเบ•เปเปˆเบชเบฒเบ—เบฒเบฅเบฐเบ™เบฐ. เปƒเบ™ Grafana เบ™เบตเป‰เปเบกเปˆเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ‚เบญเบ‡ plugins เบกเบตเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰ grafana.com/grafana/plugins

เป€เบžเบทเปˆเบญเปƒเบซเป‰เบ›เบฑเปŠเบเบญเบดเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบกเบตเบขเบนเปˆเปƒเบ™เบฎเป‰เบฒเบ™เบ—เบตเปˆเป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบฎเบฑเบ” PR เปƒเบ™ repository เบ™เบตเป‰เป‚เบ”เบเบเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ™เบทเป‰เบญเบซเบฒเปเบšเบšเบ™เบตเป‰เปƒเบชเปˆเป„เบŸเบฅเปŒ repo.json:

เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ plugin เบชเปเบฒเบฅเบฑเบš Grafana: เบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”เบ‚เบญเบ‡เบเบฒเบ™เบชเบฑเบเบขเบฒเปƒเบซเบเปˆ

เบšเปˆเบญเบ™เบ—เบตเปˆเบชเบฐเบšเบฑเบšเปเบกเปˆเบ™เบชเบฐเบšเบฑเบšเบ‚เบญเบ‡ plugin เบ‚เบญเบ‡เบ—เปˆเบฒเบ™, url เปเบกเปˆเบ™เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบš repository, เปเบฅเบฐ commit เปเบกเปˆเบ™ hash เบ‚เบญเบ‡เบ„เปเบฒเบซเบกเบฑเป‰เบ™เบชเบฑเบ™เบเบฒเบ—เบตเปˆเบชเบฐเบšเบฑเบšเบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡ plugin เบˆเบฐเบกเบตเปƒเบซเป‰.

เปเบฅเบฐเบขเบนเปˆเบ—เบตเปˆเบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ—เปˆเบฒเบ™เบˆเบฐเป€เบซเบฑเบ™เบฎเบนเบšเบžเบฒเบšเบ—เบตเปˆเบ›เบฐเป€เบชเบตเบ”เป€เบŠเบฑเปˆเบ™:

เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ plugin เบชเปเบฒเบฅเบฑเบš Grafana: เบ›เบฐเบซเบงเบฑเบ”เบชเบฒเบ”เบ‚เบญเบ‡เบเบฒเบ™เบชเบฑเบเบขเบฒเปƒเบซเบเปˆ

เบ‚เปเป‰เบกเบนเบ™เบชเปเบฒเบฅเบฑเบšเบกเบฑเบ™เบˆเบฐเบ–เบทเบเบˆเบฑเบšเป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบˆเบฒเบ Readme.md, Changelog.md เปเบฅเบฐเป„เบŸเบฅเปŒ plugin.json เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบ”เป‰เบงเบเบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบ plugin.

เบžเบฒเบเบ—เบต 6: เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบชเบฐเบซเบฅเบธเบš

เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เบขเบธเบ”เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒ plugin เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบซเบผเบฑเบ‡เบˆเบฒเบเบ›เปˆเบญเบ. เปเบฅเบฐเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบเบงเบ”เบชเบญเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ‚เบญเบ‡ cluster nodes เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡, เปเบ™เบฐเบ™เปเบฒเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เปƒเบซเบกเปˆเป€เบžเบทเปˆเบญเบ›เบฑเบšเบ›เบธเบ‡ UX, เปเบฅเบฐเบเบฑเบ‡เป„เบ”เป‰เบฎเบฑเบšเบ„เปเบฒเบ•เบดเบŠเบปเบกเบˆเปเบฒเบ™เบงเบ™เบซเบฅเบฒเบเบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡ plugin เบ—เบฑเบ‡เป‚เบ”เบเบฅเบนเบเบ„เป‰เบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบฅเบฐเบˆเบฒเบเบ„เบปเบ™เปƒเบ™ GitHub (เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบญเบญเบเป„เบ›. เบšเบฑเบ™เบซเบฒเบซเบผเบทเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เบ‚เป‰เบญเบเบˆเบฐเบ”เบตเปƒเบˆเบซเบผเบฒเบ :)

เบžเบงเบเป€เบฎเบปเบฒเบซเบงเบฑเบ‡เบงเปˆเบฒเบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบ‚เบปเป‰เบฒเปƒเบˆเป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเบ›เบฐเป€เบชเบตเบ”เป€เบŠเบฑเปˆเบ™ Grafana เปเบฅเบฐ, เบšเบฒเบ‡เบ—เบต, เบ‚เบฝเบ™ plugin เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบญเบ‡.

เบ‚เบญเบšโ€‹เปƒเบˆ!)

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เบŠเบทเป‰เป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบชเปเบฒเบฅเบฑเบšเป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ—เบตเปˆเบกเบตเบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡ DDoS, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ VPS VDS ๐Ÿ”ฅ เบŠเบทเป‰เป€เบงเบฑเบšเป„เบŠเบ—เปŒเป‚เบฎเบ”เบ•เบดเป‰เบ‡เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰เบ”เป‰เบงเบเบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™ DDoS, เป€เบŠเบตเบšเป€เบงเบต VPS VDS | ProHoster