ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคื•ืŸ ืึท ืคึผืœื•ื’ื™ืŸ ืคึฟืึทืจ ื’ืจืึทืคืึทื ืึท: ืึท ื’ืขืฉื™ื›ื˜ืข ืคื•ืŸ โ€‹โ€‹ื’ืจื•ื™ืก ืฉืึทืฅ

ื ื’ื•ื˜ืŸ ื™ืขื“ืขืจ! ืžื™ื˜ ืขื˜ืœืขื›ืข ื—ื“ืฉื™ื ืฆื•ืจื™ืง, ืžื™ืจ ืœืึธื ื˜ืฉื˜ ืื•ื ื“ื–ืขืจ ื ื™ื™ึทืข ืึธืคึฟืŸ-ืžืงื•ืจ ืคึผืจื•ื™ืขืงื˜ ืื™ืŸ ืคึผืจืึธื“ื•ืงืฆื™ืข - ื“ื™ Grafana ืคึผืœื•ื’ื™ืŸ ืคึฟืึทืจ ืžืึธื ื™ื˜ืึธืจื™ื ื’ ืงื•ื‘ืขืจื ืขื˜ืขืก, ื•ื•ืึธืก ืžื™ืจ ื’ืขืจื•ืคืŸ DevOpsProdigy KubeGraf. ื“ืขืจ ืคึผืœื•ื’ื™ืŸ ืžืงื•ืจ ืงืึธื“ ืื™ื– ื‘ื ื™ืžืฆื ืื™ืŸ ืฆื™ื‘ื•ืจ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ืื•ื™ืฃ GitHub. ืื•ืŸ ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ ืžื™ืจ ื•ื•ืขืœืŸ ืฆื• ื˜ื™ื™ืœืŸ ืžื™ื˜ ืื™ืจ ื“ื™ ื’ืขืฉื™ื›ื˜ืข ืคื•ืŸ โ€‹โ€‹ื•ื•ื™ ืžื™ืจ ื‘ืืฉืืคืŸ ื“ืขื ืคึผืœื•ื’ื™ืŸ, ื•ื•ืึธืก ืžื›ืฉื™ืจื™ื ืžื™ืจ ื’ืขื•ื•ื™ื™ื ื˜ ืื•ืŸ ื•ื•ืึธืก ืคึผื™ื˜ืคืึธืœื– ืžื™ืจ ื’ืขืคึผืœืึธื ื˜ืขืจื˜ ื‘ืขืฉืึทืก ื“ื™ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคึผืจืึธืฆืขืก. ืœืืžื™ืจ ื’ื™ื™ืŸ!

ื˜ื™ื™ืœ 0 - ื™ื ื˜ืจืึทื“ืึทืงื˜ืขืจื™: ื•ื•ื™ ื”ืึธื‘ืŸ ืžื™ืจ ื‘ืึทืงื•ืžืขืŸ ืฆื• ื“ืขื ืคื•ื ื˜?

ื“ืขืจ ื’ืขื“ืึทื ืง ืฆื• ืฉืจื™ื™ึทื‘ืŸ ืื•ื ื“ื–ืขืจ ืื™ื™ื’ืŸ ืคึผืœื•ื’ื™ืŸ ืคึฟืึทืจ Grafan ื’ืขืงื•ืžืขืŸ ืฆื• ืื•ื ื“ื– ื’ืึทื ืฅ ื“ื•ืจืš ืฆื•ืคืึทืœ. ืื•ื ื“ื–ืขืจ ืคื™ืจืžืข ื”ืื˜ ืžืึธื ื™ื˜ืึธืจืขื“ ื•ื•ืขื‘ ืคึผืจืึทื“ื–ืฉืขืงืก ืคื•ืŸ ืคืึทืจืฉื™ื“ืŸ ืงืึทืžืคึผืœืขืงืกื™ื˜ื™ ืœืขื•ื•ืขืœืก ืคึฟืึทืจ ืžืขืจ ื•ื•ื™ 10 ื™ืึธืจ. ืื™ืŸ ื“ืขื ืฆื™ื™ื˜, ืžื™ืจ ื”ืึธื‘ืŸ ืึทืงื™ื•ืžื™ืึทืœื™ื™ื˜ื™ื“ ืึท ื’ืจื•ื™ืก ืกื•ืžืข ืคื•ืŸ โ€‹โ€‹ืขืงืกืคึผืขืจื˜ื™ื–, ื˜ืฉื™ืงืึทื•ื•ืข ืงืึทืกืขืก ืื•ืŸ ื“ืขืจืคืึทืจื•ื ื’ ืื™ืŸ ื ื™ืฆืŸ ืคืึทืจืฉื™ื“ืŸ ืžืึธื ื™ื˜ืึธืจื™ื ื’ ืกื™ืกื˜ืขืžืขืŸ. ืื•ืŸ ืื™ืŸ ืขื˜ืœืขื›ืข ืคื•ื ื˜ ืžื™ืจ ื’ืขืคืจืขื’ื˜ ื–ื™ืš: "ืื™ื– ืขืก ืึท ืžืึทื’ื™ืฉ ื’ืขืฆื™ื™ึทื’ ืคึฟืึทืจ ืžืึธื ื™ื˜ืึธืจื™ื ื’ ืงื•ื‘ืขืจื ืขื˜ืขืก, ืึทื–ื•ื™ ืึทื–, ื•ื•ื™ ื–ื™ื™ ื–ืึธื’ืŸ, "ืฉื˜ืขืœืŸ ืขืก ืื•ืŸ ืคืึทืจื’ืขืกืŸ ืขืก"? ืคึผืจืึธืžืขื˜ื”ืขื•ืก + ื’ืจืึทืคืึทื ืึท ืงืึธืžื‘ื™ื ืึทืฆื™ืข. ืื•ืŸ ื•ื•ื™ ืคืึทืจื˜ื™ืง ืกืึทืœื•ืฉืึทื ื– ืคึฟืึทืจ ื“ืขื ืึธื ืœื™ื™ื’ืŸ, ืขืก ืื™ื– ืึท ื’ืจื•ื™ืก ื’ืึทื ื’ ืคื•ืŸ ืคืึทืจืฉื™ื“ืŸ ืžื™ื ื™ื ืคื•ืŸ ืžื›ืฉื™ืจื™ื: ืคึผืจืึธืžืขื˜ื”ืขื•ืก-ืึธืคึผืขืจืึทื˜ืึธืจ, ืึท ืกื›ื•ื ืคื•ืŸ kubernetes-mixin ื“ืึทืฉื‘ืึธืจื“ื–, ื’ืจืึทืคืึทื ืึท-kubernetes-ืึทืคึผ.

ื“ื™ ื’ืจืึทืคืึทื ืึท-kubernetes-ืึทืคึผ ืคึผืœื•ื’ื™ืŸ ืกื™ืžื“ ืฆื• ื–ื™ื™ืŸ ื“ื™ ืžืขืจืกื˜ ื˜ืฉื™ืงืึทื•ื•ืข ืึธืคึผืฆื™ืข ืคึฟืึทืจ ืื•ื ื“ื–, ืึธื‘ืขืจ ืขืก ืื™ื– ื ื™ืฉื˜ ื’ืขืฉื˜ื™ืฆื˜ ืคึฟืึทืจ ืžืขืจ ื•ื•ื™ ืึท ื™ืึธืจ ืื•ืŸ, ื“ืขืจืฆื•, ืงืขืŸ ื ื™ืฉื˜ ืึทืจื‘ืขื˜ืŸ ืžื™ื˜ ื ื™ื™ึทืข ื•ื•ืขืจืกื™ืขืก ืคื•ืŸ ื ืึธื“ืข-ืขืงืกืคึผืึธืจื˜ืขืจ ืื•ืŸ ืงื•ื‘ืข-ืฉื˜ืึทื˜-ืžืขื˜ืจื™ืงืก. ืื•ืŸ ืื™ืŸ ืขื˜ืœืขื›ืข ืคื•ื ื˜ ืžื™ืจ ื‘ืึทืฉืœืึธืกืŸ: "ื–ืึธืœ ืžื™ืจ ื ื™ืฉื˜ ืžืึทื›ืŸ ืื•ื ื“ื–ืขืจ ืื™ื™ื’ืŸ ื‘ืึทืฉืœื•ืก?"

ื•ื•ืึธืก ื™ื™ื“ื™ืึทื– ืžื™ืจ ื‘ืึทืฉืœืึธืกืŸ ืฆื• ื™ื ืกื˜ืจื•ืžืขื ื˜ ืื™ืŸ ืื•ื ื“ื–ืขืจ ืคึผืœื•ื’ื™ืŸ:

  • ื•ื•ื™ื–ืฉื•ื•ืึทืœืึทื–ื™ื™ืฉืึทืŸ ืคื•ืŸ ื“ื™ "ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืžืึทืคึผืข": ื‘ืึทืงื•ื•ืขื ืคึผืจืขื–ืขื ื˜ื™ืจื•ื ื’ ืคื•ืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืื™ืŸ ื“ืขื ืงื ื•ื™ืœ, ื’ืจื•ืคึผื˜ ื“ื•ืจืš ื ืึธืžืขืŸ ืกืคึผื™ื™ืกืึทื–, ื“ื™ืคึผืœื•ื™ืžืึทื ืฅ ...;
  • ื•ื•ื™ื–ืฉื•ื•ืึทืœืึทื–ื™ื™ืฉืึทืŸ ืคื•ืŸ ืงืึทื ืขืงืฉืึทื ื– ื•ื•ื™ "ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ - ื“ื™ื ืกื˜ (+ ืคึผืึธืจืฅ)".
  • ื•ื•ื™ื–ืฉื•ื•ืึทืœืึทื–ื™ื™ืฉืึทืŸ ืคื•ืŸ ื“ื™ ืคืึทืจืฉืคึผืจื™ื™ื˜ื•ื ื’ ืคื•ืŸ ืงื ื•ื™ืœ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืึทืจื™ื‘ืขืจ ืงื ื•ื™ืœ ื ืึธื•ื“ื–.
  • ื–ืึทืžืœื•ื ื’ ืคื•ืŸ ืžืขื˜ืจื™ืงืก ืื•ืŸ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืคึฟื•ืŸ ืขื˜ืœืขื›ืข ืงื•ื•ืืœืŸ: ืคึผืจืึธืžืขื˜ื”ืขื•ืก ืื•ืŸ ืง8ืก ืึทืคึผื™ ืกืขืจื•ื•ืขืจ.
  • ืžืึธื ื™ื˜ืึธืจื™ื ื’ ืคื•ืŸ ื‘ื™ื™ื“ืข ื“ื™ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ื˜ื™ื™ืœ (ื ื•ืฆืŸ ืคื•ืŸ ืงืคึผื• ืฆื™ื™ื˜, ื–ื™ืงืึธืจืŸ, ื“ื™ืกืง ืกื•ื‘ืกื™ืกื˜ืขื, ื ืขืฅ) ืื•ืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืœืึธื’ื™ืง - ื’ืขื–ื•ื ื˜-ืกื˜ืึทื˜ื•ืก ืคึผืึธื“ืก, ื ื•ืžืขืจ ืคื•ืŸ ื‘ื ื™ืžืฆื ืจืขืคึผืœืึทืงืึทื–, ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืขื’ืŸ ื“ื•ืจื›ืคืึธืจ ืœื™ื™ื•ื•ื ืึทืก / ื’ืจื™ื™ื˜ืงื™ื™ึทื˜ ื˜ืขืกืฅ.

ื˜ื™ื™ืœ 1: ื•ื•ืึธืก ืื™ื– ืึท "ื’ืจืึทืคืึทื ืึท ืคึผืœื•ื’ื™ืŸ"?

ืคึฟื•ืŸ ืึท ื˜ืขื›ื ื™ืฉ ืคื•ื ื˜ ืคื•ืŸ ืžื™ื™ื ื•ื ื’, ื“ื™ ืคึผืœื•ื’ื™ืŸ ืคึฟืึทืจ Grafana ืื™ื– ืึท ื•ื•ื™ื ืงืœื“ื™ืง ืงืึธื ื˜ืจืึธืœืœืขืจ, ื•ื•ืึธืก ืื™ื– ืกื˜ืึธืจื“ ืื™ืŸ ื“ื™ Grafana ื“ืึทื˜ืŸ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ (/var/grafana/plugins/ /ื“ื™ืกื˜/module.js) ืื•ืŸ ืงืขื ืขืŸ ื–ื™ื™ืŸ ืœืึธื•ื“ื™ื“ ื•ื•ื™ ืึท SystemJS ืžืึธื“ื•ืœืข. ืื•ื™ืš ืื™ืŸ ื“ืขื ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืขืก ื–ืึธืœ ื–ื™ื™ืŸ ืึท plugin.json ื˜ืขืงืข ืžื™ื˜ ืึทืœืข ื“ื™ ืžืขื˜ืึท ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ื•ื•ืขื’ืŸ ื“ื™ื™ืŸ ืคึผืœื•ื’ื™ืŸ: ื ืึธืžืขืŸ, ื•ื•ืขืจืกื™ืข, ืคึผืœื•ื’ื™ืŸ ื˜ื™ืคึผ, ืœื™ื ืงืก ืฆื• ื“ื™ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ / ืคึผืœืึทืฅ / ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ, ื“ื™ืคึผืขื ื“ืึทื ืกื™ื–, ืื•ืŸ ืึทื–ื•ื™ ืื•ื™ืฃ.

ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคื•ืŸ ืึท ืคึผืœื•ื’ื™ืŸ ืคึฟืึทืจ ื’ืจืึทืคืึทื ืึท: ืึท ื’ืขืฉื™ื›ื˜ืข ืคื•ืŸ โ€‹โ€‹ื’ืจื•ื™ืก ืฉืึทืฅ
module.ts

ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคื•ืŸ ืึท ืคึผืœื•ื’ื™ืŸ ืคึฟืึทืจ ื’ืจืึทืคืึทื ืึท: ืึท ื’ืขืฉื™ื›ื˜ืข ืคื•ืŸ โ€‹โ€‹ื’ืจื•ื™ืก ืฉืึทืฅ
plugin.json

ื•ื•ื™ ืื™ืจ ืงืขื ืขืŸ ื–ืขืŸ ืื™ืŸ ื“ื™ ืกืงืจืขืขื ืฉืึธื˜, ืžื™ืจ ืกืคึผืขืกื™ืคื™ืขื“ plugin.type = app. ื•ื•ื™ื™ึทืœ ืคึผืœื•ื’ื™ื ืก ืคึฟืึทืจ ื’ืจืึทืคืึทื ืึท ืงืขื ืขืŸ ื–ื™ื™ืŸ ืคื•ืŸ ื“ืจื™ื™ ื˜ื™ื™ืคึผืก:

ื˜ืึทืคืœื™ืข: ื“ื™ ืžืขืจืกื˜ ืคึผืจืึธืกื˜ ื˜ื™ืคึผ ืคื•ืŸ ืคึผืœื•ื’ื™ืŸ - ืขืก ืื™ื– ืึท ื˜ืึทืคืœื™ืข ืคึฟืึทืจ ื•ื•ื™ื–ืฉื•ื•ืึทืœื™ื™ื–ื™ื ื’ ืงื™ื™ืŸ ืžืขื˜ืจื™ืงืก, ื’ืขื ื™ืฆื˜ ืฆื• ื‘ื•ื™ืขืŸ ืคืึทืจืฉื™ื“ืŸ ื“ืึทืฉื‘ืึธืจื“ื–.
ื“ืึทื˜ืึทืกืึธื•ืจืกืข: ืคึผืœื•ื’ื™ืŸ ืงืึทื ืขืงื˜ืขืจ ืฆื• ืขื˜ืœืขื›ืข ื“ืึทื˜ืŸ ืžืงื•ืจ (ืœืžืฉืœ, Prometheus-datasource, ClickHouse-datasource, ElasticSearch-datasource).
ืึทืคึผ: ื ืคึผืœื•ื’ื™ืŸ ื•ื•ืึธืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ื‘ื•ื™ืขืŸ ื“ื™ื™ืŸ ืื™ื™ื’ืขื ืข ืคืจืึธื ื˜-ืกื•ืฃ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ืŸ Grafana, ืฉืึทืคึฟืŸ ื“ื™ื™ืŸ ืื™ื™ื’ืขื ืข HTML ื‘ืœืขื˜ืขืจ ืื•ืŸ ืžืึทื ื™ื•ืึทืœื™ ืึทืงืกืขืก ื“ื™ ื“ืึทื˜ืŸ ืžืงื•ืจ ืฆื• ื•ื•ื™ื–ืฉื•ื•ืึทืœื™ื™ื– ืคืึทืจืฉื™ื“ืŸ ื“ืึทื˜ืŸ. ืื•ื™ืš, ืคึผืœื•ื’ื™ื ืก ืคื•ืŸ ืื ื“ืขืจืข ื˜ื™ื™ืคึผืก (ื“ืึทื˜ืึทืกืึธื•ืจืก, ื˜ืึทืคืœื™ืข) ืื•ืŸ ืคืึทืจืฉื™ื“ืŸ ื“ืึทืฉื‘ืึธืจื“ื– ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ื•ื•ื™ ื“ื™ืคึผืขื ื“ืึทื ืกื™ื–.

ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคื•ืŸ ืึท ืคึผืœื•ื’ื™ืŸ ืคึฟืึทืจ ื’ืจืึทืคืึทื ืึท: ืึท ื’ืขืฉื™ื›ื˜ืข ืคื•ืŸ โ€‹โ€‹ื’ืจื•ื™ืก ืฉืึทืฅ
ื‘ื™ื™ึทืฉืคึผื™ืœ ืคึผืœื•ื’ื™ืŸ ื“ื™ืคึผืขื ื“ืึทื ืกื™ื– ืžื™ื˜ ื˜ื™ืคึผ = ืึทืคึผ.

ืื™ืจ ืงืขื ืขืŸ ื ื•ืฆืŸ ื‘ื™ื™ื“ืข ื“ื–ืฉืึทื•ื•ืึทืกืงืจื™ืคึผื˜ ืื•ืŸ TypeScript ื•ื•ื™ ืึท ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ืฉืคึผืจืึทืš (ืžื™ืจ ืื•ื™ืกื“ืขืจื•ื•ื™ื™ืœื˜ ืขืก). ืคึผืจืขืคึผืขืจื™ื™ืฉืึทื ื– ืคึฟืึทืจ ื”ืขืœื-ื•ื•ืขืœื˜ ืคึผืœื•ื’ื™ื ืก ืคื•ืŸ ืงื™ื™ืŸ ื˜ื™ืคึผ ืื™ืจ ืงืขื ืขืŸ ื’ืขืคึฟื™ื ืขืŸ ื“ื™ ืœื™ื ืง: ื“ืขื ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ ื›ึผื•ืœืœ ืึท ื’ืจื•ื™ืก ื ื•ืžืขืจ ืคื•ืŸ ืกื˜ืึทืจื˜ืขืจ ืคึผืึทืงืก (ืขืก ืื™ื– ืืคื™ืœื• ืึทืŸ ื™ืงืกืคึผืขืจืžืขื ืึทืœ ื‘ื™ื™ึทืฉืคึผื™ืœ ืคื•ืŸ ืึท ืคึผืœื•ื’ื™ืŸ ืื™ืŸ ืจืขืึทืงื˜) ืžื™ื˜ ืคืึทืจ-ืื™ื ืกื˜ืึทืœื™ืจืŸ ืื•ืŸ ืงืึทื ืคื™ื’ื™ืขืจื“ ื‘ื™ืœื“ืขืจื–.

ื˜ื™ื™ืœ 2: ืคึผืจื™ืคึผืขืจื™ื ื’ ื“ื™ ื”ื™ื’ืข ืกื•ื•ื™ื•ื•ืข

ืฆื• ืึทืจื‘ืขื˜ืŸ ืื•ื™ืฃ ื“ืขื ืคึผืœื•ื’ื™ืŸ, ืžื™ืจ ื’ืขื•ื•ื™ื™ื ื˜ืœืขืš ื“ืึทืจืคึฟืŸ ืึท ืงื•ื‘ืขืจื ืขื˜ืขืก ืงื ื•ื™ืœ ืžื™ื˜ ืึทืœืข ื“ื™ ืคึผืจืขื™ื ืกื˜ืึทืœืœืขื“ ืžื›ืฉื™ืจื™ื: ืคึผืจืึธืžืขื˜ื”ืขื•ืก, ื ืึธื“ืข-ืขืงืกืคึผืึธืจื˜ืขืจ, ืงื•ื‘-ืฉื˜ืึทื˜-ืžืขื˜ืจื™ืงืก, ื’ืจืึทืคืึทื ืึท. ื“ื™ ืกื•ื•ื™ื•ื•ืข ื–ืึธืœ ื–ื™ื™ืŸ ืฉื˜ืขืœืŸ ื–ื™ืš ื’ืขืฉื•ื•ื™ื ื“, ืœื™ื™ื›ื˜ ืื•ืŸ ื’ืขื•ื•ื™ื™ื ื˜ืœืขืš, ืื•ืŸ ืฆื• ืขื ืฉื•ืจ ื”ื™ื™ืก ืจื™ืœืึธื•ื“, ื“ื™ Grafana ื“ืึทื˜ืŸ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ื–ืึธืœ ื–ื™ื™ืŸ ืžืึธื•ื ื˜ืขื“ ื’ืœื™ื™ึทืš ืคึฟื•ืŸ ื“ื™ ื“ืขื•ื•ืขืœืึธืคึผืขืจ ืก ืžืึทืฉื™ืŸ.

ื“ื™ ืžืขืจืกื˜ ื‘ืึทืงื•ื•ืขื ื•ื•ืขื’, ืื™ืŸ ืื•ื ื“ื–ืขืจ ืžื™ื™ื ื•ื ื’, ืฆื• ืึทืจื‘ืขื˜ืŸ ืœืึธื•ืงืึทืœื™ ืžื™ื˜ ืงื•ื‘ืขืจื ืขื˜ืขืก ืื™ื– minikube. ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ืฉืจื™ื˜ ืื™ื– ืฆื• ื™ื ืกื˜ืึทืœื™ืจืŸ ื“ื™ Prometheus + Grafana ืงืึธืžื‘ื™ื ืึทืฆื™ืข ืžื™ื˜ ืคึผืจืึธืžืขื˜ื”ืขื•ืก-ืึธืคึผืขืจืึทื˜ืึธืจ. ืื™ืŸ ื“ื™ ืืจื˜ื™ืงืœ ื“ืขืจ ืคึผืจืึธืฆืขืก ืคื•ืŸ ื™ื ืกื˜ืึธืœื™ื ื’ ืคึผืจืึธืžืขื˜ื”ืขื•ืก-ืึธืคึผืขืจืึทื˜ืึธืจ ืื•ื™ืฃ ืžื™ื ื™ืงื•ื‘ืข ืื™ื– ื“ื™ืกืงืจื™ื™ื‘ื“ ืื™ืŸ ื“ืขื˜ืึทืœ. ืฆื• ื’ืขื‘ืŸ ืคึผืขืจืกื™ืกื˜ืึทื ืก, ืื™ืจ ืžื•ื–ืŸ ืฉื˜ืขืœืŸ ื“ืขื ืคึผืึทืจืึทืžืขื˜ืขืจ ืคึผืขืจืกื™ืกื˜ืึทื ืก: ืืžืช ืื™ืŸ ื“ื™ ื˜ืฉืึทืจืฅ/ื’ืจืึทืคืึทื ืึท/ื•ื•ืึทืœื™ื•ืขืก.ื™ืึทืžืœ ื˜ืขืงืข, ืœื™ื™ื’ืŸ ื“ื™ื™ืŸ ืื™ื™ื’ืขื ืข ืคึผื•ื• ืื•ืŸ ืคึผื•ื•ืง ืื•ืŸ ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื–ื™ื™ ืื™ืŸ ื“ื™ ืคึผืขืจืกื™ืกื˜ืขื ืกืข.ืขืงืกื™ืกื˜ื™ื ื’ืงืœืึทื™ืž ืคึผืึทืจืึทืžืขื˜ืขืจ

ืื•ื ื“ื–ืขืจ ืœืขืฆื˜ ืžื™ื ื™ืงื•ื‘ืข ืงืึทื˜ืขืจ ืฉืจื™ืคื˜ ืงื•ืงื˜ ื•ื•ื™ ื“ืึธืก:

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 ืงืœืืกืŸ: ืคึผืึธื“, ื“ื™ืคึผืœื•ื™ืžืึทื ื˜, ื“ืึทืขืžืึธื ืกืขื˜, ืกื˜ืขื™ื˜ืคื•ืœืกืขื˜, ืึทืจื‘ืขื˜, ืงืจืึธื ื“ื–ืฉืึธื‘, ื“ื™ื ืกื˜, ื ืึธื“ืข, ื ืึทืžืขืกืคึผืึทืกืข. ื™ืขื“ืขืจ ืคื•ืŸ ื“ื™ ืงืœืืกืŸ ื™ื ื›ืขืจืึทืฅ ืคื•ืŸ ื“ื™ ืคึผืจืึธืกื˜ ื‘ืึทืกืขืžืึธื“ืขืœ ืงืœืึทืก, ื•ื•ืึธืก ื‘ืืฉืจื™ื™ื‘ื˜ ื“ื™ ืงืึทื ืกื˜ืจืึทืงื˜ืขืจ, ื“ืขืกื˜ืจื•ืงื˜ื•ืจ, ืžืขื˜ื”ืึธื“ืก ืคึฟืึทืจ ืึทืคึผื“ื™ื™ื˜ื™ื ื’ ืื•ืŸ ืกื•ื•ื™ื˜ืฉื™ื ื’ ื•ื•ื™ื–ืึทื‘ื™ืœื™ื˜ื™. ื™ืขื“ืขืจ ืคื•ืŸ ื“ื™ ืงืœืืกืŸ ื‘ืืฉืจื™ื™ื‘ื˜ ื ืขืกื˜ืขื“ ื‘ืืฆื™ื•ื ื’ืขืŸ ืžื™ื˜ ืื ื“ืขืจืข ืขื ื˜ื™ื˜ื™ื–, ืœืžืฉืœ, ืึท ืจืฉื™ืžื” ืคื•ืŸ ืคึผืึธื“ืก ืคึฟืึทืจ ืึทืŸ ืขื ื˜ื™ื˜ื™ ืคื•ืŸ ื˜ื™ืคึผ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜.

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 - ืึท ื“ื™ื ืกื˜ ื•ื•ืึธืก ื’ื™ื˜ ื”ื™ื’ืข ื™ื ื˜ืขืจืึทืงืฉืึทืŸ ืžื™ื˜ ืึทืœืข ื“ืึทื˜ืึทืกืึธื•ืจืกืขืก ืื™ื ืกื˜ืึทืœื™ืจืŸ ืื™ืŸ ื“ื™ื™ืŸ ื’ืจืึทืคืึทื ืึท (ืœืžืฉืœ, ื“ื™ .getAll () ืื•ืคึฟืŸ - ืงืขืจื˜ ืึท ืจืฉื™ืžื” ืคื•ืŸ ืึทืœืข ืื™ื ืกื˜ืึทืœื™ืจืŸ ื“ืึทื˜ืŸ ืžืงื•ืจื™ื; .get( ) - ืงืขืจื˜ ืึท ื‘ื™ื™ึทืฉืคึผื™ืœ ื›ื™ื™ืคืขืฅ ืคื•ืŸ ืึท ืกืคึผืขืฆื™ืคื™ืฉ ื“ืึทื˜ืŸ ืžืงื•ืจ.

ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคื•ืŸ ืึท ืคึผืœื•ื’ื™ืŸ ืคึฟืึทืจ ื’ืจืึทืคืึทื ืึท: ืึท ื’ืขืฉื™ื›ื˜ืข ืคื•ืŸ โ€‹โ€‹ื’ืจื•ื™ืก ืฉืึทืฅ

ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคื•ืŸ ืึท ืคึผืœื•ื’ื™ืŸ ืคึฟืึทืจ ื’ืจืึทืคืึทื ืึท: ืึท ื’ืขืฉื™ื›ื˜ืข ืคื•ืŸ โ€‹โ€‹ื’ืจื•ื™ืก ืฉืึทืฅ

ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคื•ืŸ ืึท ืคึผืœื•ื’ื™ืŸ ืคึฟืึทืจ ื’ืจืึทืคืึทื ืึท: ืึท ื’ืขืฉื™ื›ื˜ืข ืคื•ืŸ โ€‹โ€‹ื’ืจื•ื™ืก ืฉืึทืฅ

ื˜ื™ื™ืœ 4: ื“ืึทื˜ืŸ ืžืงื•ืจ

ืคึฟื•ืŸ ื’ืจืึทืคืึทื ืึท ืก ืคื•ื ื˜ ืคื•ืŸ ืžื™ื™ื ื•ื ื’, ื“ืึทื˜ืึทืกืึธื•ืจืกืข ืื™ื– ืคึผื•ื ืงื˜ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืคึผืœื•ื’ื™ืŸ ื•ื•ื™ ืึทืœืข ื“ื™ ืื ื“ืขืจืข: ืขืก ื”ืื˜ ื–ื™ื™ึทืŸ ืื™ื™ื’ืŸ ืคึผืึธื–ื™ืฆื™ืข ืคื•ื ื˜ module.js, ืขืก ืื™ื– ืึท ื˜ืขืงืข ืžื™ื˜ ืžืขื˜ืึท ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข plugin.json. ื•ื•ืขืŸ ื“ืขื•ื•ืขืœืึธืคึผื™ื ื’ ืึท ืคึผืœื•ื’ื™ืŸ ืžื™ื˜ ื˜ื™ืคึผ = ืึทืคึผ, ืžื™ืจ ืงืขื ืขืŸ ื™ื ื˜ืขืจืึทืงื˜ ืžื™ื˜ ื‘ื™ื™ื“ืข ื™ื’ื–ื™ืกื˜ื™ื ื’ ื“ืึทื˜ืึทืกืึธื•ืจืกืขืก (ืœืžืฉืœ, prometheus-datasource) ืื•ืŸ ืื•ื ื“ื–ืขืจ ืื™ื™ื’ืขื ืข, ื•ื•ืึธืก ืžื™ืจ ืงืขื ืขืŸ ืงืจืึธื ื’ืœื™ื™ืš ืื™ืŸ ื“ื™ ืคึผืœื•ื’ื™ืŸ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ (ื“ื™ืกื˜/ื“ืึทื˜ืึทืกืึธื•ืจืกืข/*) ืึธื“ืขืจ ื™ื ืกื˜ืึทืœื™ืจืŸ ื•ื•ื™ ืึท ื“ืขืคึผืขื ื“ืขื ืกื™. ืื™ืŸ ืื•ื ื“ื–ืขืจ ืคืึทืœ, ื“ื™ ื“ืึทื˜ืŸ ืžืงื•ืจ ืงื•ืžื˜ ืžื™ื˜ ื“ื™ ืคึผืœื•ื’ื™ืŸ ืงืึธื“. ืขืก ืื™ื– ืื•ื™ืš ื ื™ื™ื˜ื™ืง ืฆื• ื”ืึธื‘ืŸ ืึท config.html ื˜ืขืžืคึผืœืึทื˜ืข ืื•ืŸ ืึท ConfigCtrl ืงืึทื ื˜ืจืึธื•ืœืขืจ, ื•ื•ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ืคึฟืึทืจ ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื‘ืœืึทื˜ ืคื•ืŸ ื“ื™ ื“ืึทื˜ืึทืกืึธื•ืจืก ื‘ื™ื™ึทืฉืคึผื™ืœ ืื•ืŸ ื“ื™ ื“ืึทื˜ืึทืกืึธื•ืจืก ืงืึธื ื˜ืจืึธืœืœืขืจ, ื•ื•ืึธืก ื™ืžืคึผืœืึทืžืึทื ืฅ ื“ื™ ืœืึธื’ื™ืง ืคื•ืŸ ื“ื™ื™ืŸ ื“ืึทื˜ืึทืกืึธื•ืจืก.

ืื™ืŸ ื“ื™ KubeGraf ืคึผืœื•ื’ื™ืŸ, ืคึฟื•ืŸ ื“ื™ ื‘ืึทื ื™ืฆืขืจ ืฆื•ื‘ื™ื ื“ ืคื•ื ื˜ ืคื•ืŸ ืžื™ื™ื ื•ื ื’, ื“ื™ ื“ืึทื˜ืŸ ืžืงื•ืจ ืื™ื– ืึท ื‘ื™ื™ึทืฉืคึผื™ืœ ืคื•ืŸ ืึท kubernetes ืงื ื•ื™ืœ ื•ื•ืึธืก ื™ืžืคึผืœืึทืžืึทื ืฅ ื“ื™ ืคืืœื’ืขื ื“ืข ืงื™ื™ืคึผืึทื‘ื™ืœืึทื˜ื™ื– (ืžืงื•ืจ ืงืึธื“ ืื™ื– ื‘ื ื™ืžืฆื ะฟะพ ััั‹ะปะบะต):

  • ืงืึทืœืขืงื˜ื™ื ื’ ื“ืึทื˜ืŸ ืคื•ืŸ ื“ื™ k8s ืึทืคึผื™ ืกืขืจื•ื•ืขืจ (ื‘ืึทืงื•ืžืขืŸ ืึท ืจืฉื™ืžื” ืคื•ืŸ ื ืึธืžืขืŸ ืกืคึผื™ื™ืกืึทื–, ื“ื™ืคึผืœื•ื™ืžืึทื ืฅ ...)
  • ืคึผืจืึทืงืกื™ื™ื ื’ ืจื™ืงื•ื•ืขืก ืฆื• prometheus-datasource (ื•ื•ืึธืก ืื™ื– ืื•ื™ืกื’ืขืงืœื™ื‘ืŸ ืื™ืŸ ื“ื™ ืคึผืœื•ื’ื™ืŸ ืกืขื˜ื˜ื™ื ื’ืก ืคึฟืึทืจ ื™ืขื“ืขืจ ืกืคึผืขืฆื™ืคื™ืฉ ืงื ื•ื™ืœ) ืื•ืŸ ืคืึธืจืžืึทื˜ื˜ื™ื ื’ ืจืขืกืคึผืึธื ืกืขืก ืฆื• ื ื•ืฆืŸ ื“ืึทื˜ืŸ ื‘ื™ื™ื“ืข ืื™ืŸ ืกื˜ืึทื˜ื™ืง ื‘ืœืขื˜ืขืจ ืื•ืŸ ืื™ืŸ ื“ืึทืฉื‘ืึธืจื“ื–.
  • ืึทืคึผื“ื™ื™ื˜ื™ื ื’ ื“ืึทื˜ืŸ ืื•ื™ืฃ ืกื˜ืึทื˜ื™ืง ืคึผืœื•ื’ื™ืŸ ื‘ืœืขื˜ืขืจ (ืžื™ื˜ ืึท ื‘ืึทืฉื˜ื™ืžื˜ ื“ืขืจืคืจื™ืฉืŸ ืงื•ืจืก).
  • ืคึผืจืึทืกืขืกื™ื ื’ ืคึฟืจืื’ืŸ ืฆื• ื“ื–ืฉืขื ืขืจื™ื™ื˜ ืึท ืžื•ืกื˜ืขืจ ื‘ืœืึทื˜ ืื™ืŸ ื’ืจืึทืคืึทื ืึท-ื“ืึทืฉื‘ืึธืจื“ื– (metriFindQuery () ืื•ืคึฟืŸ)

ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคื•ืŸ ืึท ืคึผืœื•ื’ื™ืŸ ืคึฟืึทืจ ื’ืจืึทืคืึทื ืึท: ืึท ื’ืขืฉื™ื›ื˜ืข ืคื•ืŸ โ€‹โ€‹ื’ืจื•ื™ืก ืฉืึทืฅ

ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคื•ืŸ ืึท ืคึผืœื•ื’ื™ืŸ ืคึฟืึทืจ ื’ืจืึทืคืึทื ืึท: ืึท ื’ืขืฉื™ื›ื˜ืข ืคื•ืŸ โ€‹โ€‹ื’ืจื•ื™ืก ืฉืึทืฅ

ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคื•ืŸ ืึท ืคึผืœื•ื’ื™ืŸ ืคึฟืึทืจ ื’ืจืึทืคืึทื ืึท: ืึท ื’ืขืฉื™ื›ื˜ืข ืคื•ืŸ โ€‹โ€‹ื’ืจื•ื™ืก ืฉืึทืฅ

  • ืงืฉืจ ืคึผืจืึธื‘ืข ืžื™ื˜ ื“ื™ ืœืขืฆื˜ ืง8ืก ืงื ื•ื™ืœ.
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 ืฆื• ืงืึทื ืคื™ื’ื™ืขืจ ืึทืงืกืขืก ืฆื• ื“ื™ ืœืขืฆื˜ ื“ืึทื˜ืŸ ืžืงื•ืจ. ื ื™ืฆืŸ ื“ืขื ืงืึธืžืคึผืึธื ืขื ื˜, ืžื™ืจ ืงืขื ืขืŸ ืงืึทื ืคื™ื’ื™ืขืจ ืึทืงืกืขืก ืฆื• ื“ื™ ื”ื˜ื˜ืคึผ ื“ืึทื˜ืŸ ืžืงื•ืจ ื“ื•ืจืš ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ ื“ื™ URL ืื•ืŸ ื™ืงืขืจื“ื™ืง ืึธื˜ืขื ื˜ืึทืงื™ื™ืฉืึทืŸ / ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ ืกืขื˜ื˜ื™ื ื’ืก: ืœืึธื’ื™ืŸ-ืคึผืึทืจืึธืœ ืึธื“ืขืจ ืงืœื™ืขื ื˜-ืกืขืจื˜/ืงืœื™ืขื ื˜-ืฉืœื™ืกืœ. ืื™ืŸ ืกื“ืจ ืฆื• ื™ื ืกื˜ืจื•ืžืขื ื˜ ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ืงืึทื ืคื™ื’ื™ืขืจ ืึทืงืกืขืก ื ื™ืฆืŸ ืึท ื˜ืจืขื’ืขืจ ื˜ืึธืงืขืŸ (ื“ื™ ื“ืข ืคืึทืงื˜ืึธ ื ืึธืจืžืึทืœ ืคึฟืึทืจ ืง8ืก), ืžื™ืจ ื”ืึธื‘ืŸ ืฆื• ื˜ื•ื•ื™ืง ืขืก ืึท ื‘ื™ืกืœ.

ืฆื• ืกืึธืœื•ื•ืข ื“ืขื ืคึผืจืึธื‘ืœืขื, ืื™ืจ ืงืขื ืขืŸ ื ื•ืฆืŸ ื“ื™ ื’ืขื‘ื•ื™ื˜-ืื™ืŸ ื’ืจืึทืคืึทื ืึท "ืคึผืœื•ื’ื™ืŸ ืจืึธื•ื˜ืขืก" ืžืขืงืึทื ื™ื–ืึทื (ืžืขืจ ื“ืขื˜ืึทื™ืœืก ื‘ื™ื™ ื‘ืึทืึทืžื˜ืขืจ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ ื‘ืœืึทื˜). ืื™ืŸ ื“ื™ ืกืขื˜ื˜ื™ื ื’ืก ืคื•ืŸ ืื•ื ื“ื–ืขืจ ื“ืึทื˜ืŸ ืžืงื•ืจ, ืžื™ืจ ืงืขื ืขืŸ ื“ืขืจืงืœืขืจืŸ ืึท ืกื›ื•ื ืคื•ืŸ ืจื•ื˜ื™ื ื’ ื›ึผืœืœื™ื ื•ื•ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ืคึผืจืึทืกืขืกื˜ ื“ื•ืจืš ื“ื™ ื’ืจืึทืคืึทื ืึท ืคืจืืงืกื™ ืกืขืจื•ื•ืขืจ. ืœืžืฉืœ, ืคึฟืึทืจ ื™ืขื“ืขืจ ื™ื—ื™ื“ ืขื ื“ืคึผื•ื™ื ื˜ ืขืก ืื™ื– ืžืขื’ืœืขืš ืฆื• ืฉื˜ืขืœืŸ ื›ืขื“ืขืจื– ืึธื“ืขืจ URL ืก ืžื™ื˜ ื“ื™ ืžืขื’ืœืขื›ืงื™ื™ื˜ ืคื•ืŸ ื˜ืขืžืคึผืœืึทื˜ื™ื ื’, ื“ืึทื˜ืŸ ืคึฟืึทืจ ื•ื•ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขื ื•ืžืขืŸ ืคึฟื•ืŸ ื“ื™ jsonData ืื•ืŸ secureJsonData ืคืขืœื“ืขืจ (ืคึฟืึทืจ ืกื˜ืึธืจื™ื ื’ ืคึผืึทืกื•ื•ืขืจื“ื– ืึธื“ืขืจ ื˜ืึธืงืขื ืก ืื™ืŸ ื™ื ืงืจื™ืคึผื˜ื™ื“ ืคืึธืจืขื). ืื™ืŸ ืื•ื ื“ื–ืขืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืคึฟืจืื’ืŸ ื•ื•ื™ /__proxy/api/v1/namespaces ื•ื•ืขื˜ ื–ื™ื™ืŸ ืคึผืจืึทืงืกื™ื™ื“ ืฆื• ื“ื™ URL ืคื•ืŸ ื“ื™ ืคืึธืจืขื
/api/v8/namespaces ืžื™ื˜ ื“ื™ ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ: ื˜ืจืขื’ืขืจ ื›ืขื“ืขืจ.

ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคื•ืŸ ืึท ืคึผืœื•ื’ื™ืŸ ืคึฟืึทืจ ื’ืจืึทืคืึทื ืึท: ืึท ื’ืขืฉื™ื›ื˜ืข ืคื•ืŸ โ€‹โ€‹ื’ืจื•ื™ืก ืฉืึทืฅ

ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคื•ืŸ ืึท ืคึผืœื•ื’ื™ืŸ ืคึฟืึทืจ ื’ืจืึทืคืึทื ืึท: ืึท ื’ืขืฉื™ื›ื˜ืข ืคื•ืŸ โ€‹โ€‹ื’ืจื•ื™ืก ืฉืึทืฅ

ื’ืขื•ื•ื™ื™ื ื˜ืœืขืš, ืฆื• ืึทืจื‘ืขื˜ืŸ ืžื™ื˜ ื“ื™ k8s ืึทืคึผื™ ืกืขืจื•ื•ืขืจ, ืžื™ืจ ื“ืึทืจืคึฟืŸ ืึท ื‘ืึทื ื™ืฆืขืจ ืžื™ื˜ ื‘ืœื•ื™ื– ืœื™ื™ืขื ืขืŸ ืึทืงืกืขืก, ืžืึทื ื™ืคืขืกืฅ ืคึฟืึทืจ ืงืจื™ื™ื™ื˜ื™ื ื’ ื•ื•ืึธืก ืื™ืจ ืงืขื ืขืŸ ืื•ื™ืš ื’ืขืคึฟื™ื ืขืŸ ืื™ืŸ ืคึผืœื•ื’ื™ืŸ ืžืงื•ืจ ืงืึธื“.

ื˜ื™ื™ืœ 5: ืžืขืœื“ื•ื ื’

ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคื•ืŸ ืึท ืคึผืœื•ื’ื™ืŸ ืคึฟืึทืจ ื’ืจืึทืคืึทื ืึท: ืึท ื’ืขืฉื™ื›ื˜ืข ืคื•ืŸ โ€‹โ€‹ื’ืจื•ื™ืก ืฉืึทืฅ

ืึทืžืึธืœ ืื™ืจ ื”ืึธื˜ ื’ืขืฉืจื™ื‘ืŸ ื“ื™ื™ืŸ ืื™ื™ื’ืขื ืข Grafana ืคึผืœื•ื’ื™ืŸ, ืื™ืจ ื•ื•ืขื˜ ื’ืขื•ื•ื™ื™ื ื˜ืœืขืš ืžืึทื›ืŸ ืขืก ืขืคื ื˜ืœืขืš ื‘ื ื™ืžืฆื. ืื™ืŸ Grafana ื“ืึธืก ืื™ื– ืึท ื‘ื™ื‘ืœื™ืึธื˜ืขืง ืคื•ืŸ ืคึผืœื•ื’ื™ื ืก ื‘ื ื™ืžืฆื ื“ืึธ grafana.com/grafana/plugins

ื›ึผื“ื™ ื“ื™ื™ืŸ ืคึผืœื•ื’ื™ืŸ ื–ืึธืœ ื–ื™ื™ืŸ ื‘ืืจืขื›ื˜ื™ื’ื˜ ืื™ืŸ ื“ืขืจ ื‘ืึทืึทืžื˜ืขืจ ืงืจืึธื, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืžืึทื›ืŸ ืึท ืคึผืจ ืื™ืŸ ื“ืขื ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™ื“ื•ืจืš ืึทื“ื™ื ื’ ืื™ื ื”ืึทืœื˜ ื•ื•ื™ ื“ืึธืก ืฆื• ื“ื™ repo.json ื˜ืขืงืข:

ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคื•ืŸ ืึท ืคึผืœื•ื’ื™ืŸ ืคึฟืึทืจ ื’ืจืึทืคืึทื ืึท: ืึท ื’ืขืฉื™ื›ื˜ืข ืคื•ืŸ โ€‹โ€‹ื’ืจื•ื™ืก ืฉืึทืฅ

ื•ื•ื• ื•ื•ืขืจืกื™ืข ืื™ื– ื“ื™ ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹ื“ื™ื™ืŸ ืคึผืœื•ื’ื™ืŸ, URL ืื™ื– ืึท ืœื™ื ืง ืฆื• ื“ื™ ืจื™ืคึผืึทื–ืึทื˜ืึธืจื™, ืื•ืŸ commit ืื™ื– ื“ื™ ื”ืึทืฉ ืคื•ืŸ ื“ื™ ื™ื‘ืขืจื’ืขื‘ืŸ ืคึฟืึทืจ ื•ื•ืึธืก ืึท ืกืคึผืขืฆื™ืคื™ืฉ ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื“ื™ ืคึผืœื•ื’ื™ืŸ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื‘ืืจืขื›ื˜ื™ื’ื˜.

ืื•ืŸ ืื™ืŸ ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ืื™ืจ ื•ื•ืขื˜ ื–ืขืŸ ืึท ื•ื•ื•ื ื“ืขืจืœืขืš ื‘ื™ืœื“ ื•ื•ื™:

ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคื•ืŸ ืึท ืคึผืœื•ื’ื™ืŸ ืคึฟืึทืจ ื’ืจืึทืคืึทื ืึท: ืึท ื’ืขืฉื™ื›ื˜ืข ืคื•ืŸ โ€‹โ€‹ื’ืจื•ื™ืก ืฉืึทืฅ

ื“ื™ ื“ืึทื˜ืŸ ืคึฟืึทืจ ืขืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ื’ืจืึทื‘ื“ ืคึฟื•ืŸ ื“ื™ื™ืŸ Readme.md, Changelog.md ืื•ืŸ ื“ื™ plugin.json ื˜ืขืงืข ืžื™ื˜ ื“ื™ ืคึผืœื•ื’ื™ืŸ ื‘ืึทืฉืจื™ื™ึทื‘ื•ื ื’.

ื˜ื™ื™ืœ 6: ืึทื ืฉื˜ืึธื˜ ืคื•ืŸ ืงืึทื ืงืœื•ื–ืฉืึทื ื–

ืžื™ืจ ื”ืึธื‘ืŸ ื ื™ืฉื˜ ื”ืึทืœื˜ืŸ ื“ืขื•ื•ืขืœืึธืคึผื™ื ื’ ืื•ื ื“ื–ืขืจ ืคึผืœื•ื’ื™ืŸ ื ืึธืš ืžืขืœื“ื•ื ื’. ืื•ืŸ ืื™ืฆื˜ ืžื™ืจ ืึทืจื‘ืขื˜ืŸ ืื•ื™ืฃ ืจื™ื›ื˜ื™ืง ืžืึธื ื™ื˜ืึธืจื™ื ื’ ื“ื™ ื ื•ืฆืŸ ืคื•ืŸ ืจื™ืกืึธืจืกื™ื– ืคื•ืŸ ืงื ื•ื™ืœ ื ืึธื•ื“ื–, ื™ื ื˜ืจืึธื•ื“ื•ืกื™ื ื’ ื ื™ื™ึทืข ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ืฆื• ืคึฟืึทืจื‘ืขืกืขืจืŸ UX, ืื•ืŸ ืื•ื™ืš ืจืึทืงื™ื ื’ ืึท ื’ืจื•ื™ืก ืกื•ืžืข ืคื•ืŸ โ€‹โ€‹ื‘ืึทืžืขืจืงื•ื ื’ืขืŸ ื‘ืืงื•ืžืขืŸ ื ืึธืš ื™ื ืกื˜ืึธืœื™ื ื’ ื“ื™ ืคึผืœื•ื’ื™ืŸ ื‘ื™ื™ื“ืข ื“ื•ืจืš ืื•ื ื“ื–ืขืจ ืงืœื™ื™ืึทื ืฅ ืื•ืŸ ืคื•ืŸ ืžืขื ื˜ืฉืŸ ืื•ื™ืฃ GitHub (ืื•ื™ื‘ ืื™ืจ ืคืึทืจืœืึธื–ืŸ. ื“ื™ื™ืŸ ืึทืจื•ื™ืกื’ืขื‘ืŸ ืึธื“ืขืจ ืฆื™ืขืŸ ื‘ืงืฉื”, ืื™ืš ื•ื•ืขืœ ื–ื™ื™ืŸ ื–ื™ื™ืขืจ ืฆื•ืคืจื™ื“ืŸ :)

ืžื™ืจ ื”ืึธืคืŸ ืึทื– ื“ืขืจ ืึทืจื˜ื™ืงืœ ื•ื•ืขื˜ ื”ืขืœืคึฟืŸ ืื™ืจ ืคึฟืึทืจืฉื˜ื™ื™ืŸ ืึทื–ืึท ืึท ื•ื•ื•ื ื“ืขืจืœืขืš ื’ืขืฆื™ื™ึทื’ ื•ื•ื™ Grafana ืื•ืŸ, ื˜ืึธืžืขืจ, ืฉืจื™ื™ึทื‘ืŸ ื“ื™ื™ืŸ ืื™ื™ื’ืขื ืข ืคึผืœื•ื’ื™ืŸ.

ืื“ืื ืง!)

ืžืงื•ืจ: www.habr.com

ืงื•ื™ืคืŸ ืคืึทืจืœืึธื–ืœืขืš ื”ืึธืกื˜ื™ื ื’ ืคึฟืึทืจ ื–ื™ื™ื˜ืœืขืš ืžื™ื˜ DDoS ืฉื•ืฅ, VPS VDS ืกืขืจื•ื•ืขืจืก ๐Ÿ”ฅ ืงื•ื™ืคื˜ ืคืึทืจืœืขืกืœืขื›ืข ื•ื•ืขื‘ื–ื™ื™ื˜ืœ ื”ืึธืกื˜ื™ื ื’ ืžื™ื˜ DDoS ืฉื•ืฅ, VPS VDS ืกืขืจื•ื•ืขืจืก | ProHoster