เช—เซเชฐเชพเชซเชจเชพ เชฎเชพเชŸเซ‡ เชชเซเชฒเช—เช‡เชจเชจเซ‹ เชตเชฟเช•เชพเชธ: เชฎเซ‹เชŸเชพ เชถเซ‹เชŸเซเชธเชจเซ‹ เช‡เชคเชฟเชนเชพเชธ

เช•เซ‡เชฎ เช›เซ‹ เชฌเชงเชพ! เชฅเซ‹เชกเชพ เชฎเชนเชฟเชจเชพ เชชเชนเซ‡เชฒเชพ, เช…เชฎเซ‡ เช‰เชคเซเชชเชพเชฆเชจเชฎเชพเช‚ เช…เชฎเชพเชฐเซ‹ เชจเชตเซ‹ เช“เชชเชจ-เชธเซ‹เชฐเซเชธ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฒเซ‹เช‚เชš เช•เชฐเซเชฏเซ‹ - เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธเชจเซเช‚ เชจเชฟเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซเช‚ เช—เซเชฐเชพเชซเชจเชพ เชชเซเชฒเช—เช‡เชจ, เชœเซ‡เชจเซ‡ เช…เชฎเซ‡ เชจเชพเชฎ เช†เชชเซเชฏเซเช‚ DevOpsProdigy KubeGraf. เชชเซเชฒเช—เช‡เชจ เชธเซ‹เชฐเซเชธ เช•เซ‹เชก เช…เชนเซ€เช‚ เช‰เชชเชฒเชฌเซเชง เช›เซ‡ GitHub เชชเชฐ เชœเชพเชนเซ‡เชฐ เชญเช‚เชกเชพเชฐ. เช…เชจเซ‡ เช† เชฒเซ‡เช–เชฎเชพเช‚ เช…เชฎเซ‡ เชคเชฎเชพเชฐเซ€ เชธเชพเชฅเซ‡ เชชเซเชฒเช—เช‡เชจ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฌเชจเชพเชตเซเชฏเซเช‚, เช…เชฎเซ‡ เช•เชฏเชพ เชธเชพเชงเชจเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเชฏเซ‹ เช…เชจเซ‡ เชตเชฟเช•เชพเชธ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชฆเชฐเชฎเชฟเชฏเชพเชจ เช…เชฎเชจเซ‡ เช•เชˆ เชฎเซเชถเซเช•เซ‡เชฒเซ€เช“เชจเซ‹ เชธเชพเชฎเชจเซ‹ เช•เชฐเชตเซ‹ เชชเชกเซเชฏเซ‹ เชคเซ‡เชจเซ€ เชตเชพเชฐเซเชคเชพ เชถเซ‡เชฐ เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ€เช เช›เซ€เช. เชšเชพเชฒเซ‹ เชœเช‡เช!

เชญเชพเช— 0 - เชชเซเชฐเชพเชฐเช‚เชญเชฟเช•: เช†เชชเชฃเซ‡ เช† เชฌเชฟเช‚เชฆเซ เชธเซเชงเซ€ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชชเชนเซ‹เช‚เชšเซเชฏเชพ?

เช—เซเชฐเชพเชซเชจ เชฎเชพเชŸเซ‡ เช…เชฎเชพเชฐเซเช‚ เชชเซ‹เชคเชพเชจเซเช‚ เชชเซเชฒเช—เช‡เชจ เชฒเช–เชตเชพเชจเซ‹ เชตเชฟเชšเชพเชฐ เช…เชฎเชจเซ‡ เช†เช•เชธเซเชฎเชฟเช• เชฐเซ€เชคเซ‡ เช†เชตเซเชฏเซ‹. เช…เชฎเชพเชฐเซ€ เช•เช‚เชชเชจเซ€ 10 เชตเชฐเซเชทเชฅเซ€ เชตเชงเซ เชธเชฎเชฏเชฅเซ€ เชœเชŸเชฟเชฒเชคเชพเชจเชพ เชตเชฟเชตเชฟเชง เชธเซเชคเชฐเซ‹เชจเชพ เชตเซ‡เชฌ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเซเชธเชจเซเช‚ เชจเชฟเชฐเซ€เช•เซเชทเชฃ เช•เชฐเซ€ เชฐเชนเซ€ เช›เซ‡. เช† เชธเชฎเชฏ เชฆเชฐเชฎเชฟเชฏเชพเชจ, เช…เชฎเซ‡ เชตเชฟเชตเชฟเชง เชฎเซ‹เชจเชฟเชŸเชฐเชฟเช‚เช— เชธเชฟเชธเซเชŸเชฎเซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชฎเชพเช‚ เชฎเซ‹เชŸเซ€ เชฎเชพเชคเซเชฐเชพเชฎเชพเช‚ เช•เซเชถเชณเชคเชพ, เชฐเชธเชชเซเชฐเชฆ เช•เชฟเชธเซเชธเชพเช“ เช…เชจเซ‡ เช…เชจเซเชญเชต เชเช•เช เชพ เช•เชฐเซเชฏเชพ เช›เซ‡. เช…เชจเซ‡ เช…เชฎเซเช• เชธเชฎเชฏเซ‡ เช…เชฎเซ‡ เชœเชพเชคเชจเซ‡ เชชเซ‚เช›เซเชฏเซเช‚: "เชถเซเช‚ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธเชจเซเช‚ เชจเชฟเชฐเซ€เช•เซเชทเชฃ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช•เซ‹เชˆ เชœเชพเชฆเซเชˆ เชธเชพเชงเชจ เช›เซ‡, เชœเซ‡เชฅเซ€ เชคเซ‡เช“ เช•เชนเซ‡ เช›เซ‡ เชคเซ‡เชฎ, "เชคเซ‡เชจเซ‡ เชธเซ‡เชŸ เช•เชฐเซ‹ เช…เชจเซ‡ เชญเซ‚เชฒเซ€ เชœเชพเช“"?".. k8s เชฎเซ‹เชจเชฟเชŸเชฐ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซเช‚ เช‰เชฆเซเชฏเซ‹เช— เชฎเชพเชจเช•, เช…เชฒเชฌเชคเซเชค, เชฒเชพเช‚เชฌเชพ เชธเชฎเชฏเชฅเซ€ เช›เซ‡. เชชเซเชฐเซ‹เชฎเชฟเชฅเชฟเชฏเชธ + เช—เซเชฐเชพเชซเชจเชพ เชธเช‚เชฏเซ‹เชœเชจ. เช…เชจเซ‡ เช† เชธเซเชŸเซ‡เช• เชฎเชพเชŸเซ‡ เชคเซˆเชฏเชพเชฐ เชธเซ‹เชฒเซเชฏเซเชถเชจเซเชธ เชคเชฐเซ€เช•เซ‡, เชตเชฟเชตเชฟเชง เชชเซเชฐเช•เชพเชฐเชจเชพ เชธเชพเชงเชจเซ‹เชจเซ‹ เชฎเซ‹เชŸเซ‹ เชธเชฎเซ‚เชน เช›เซ‡: เชชเซเชฐเซ‹เชฎเชฟเชฅเชฟเชฏเชธ-เช“เชชเชฐเซ‡เชŸเชฐ, เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ-เชฎเชฟเช•เซเชธเชฟเชจ เชกเซ‡เชถเชฌเซ‹เชฐเซเชกเซเชธเชจเซ‹ เชธเชฎเซ‚เชน, เช—เซเชฐเชพเชซเชจเชพ-เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ-เชเชช.

grafana-kubernetes-app เชชเซเชฒเช—เช‡เชจ เช…เชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เชธเซŒเชฅเซ€ เชฐเชธเชชเซเชฐเชฆ เชตเชฟเช•เชฒเซเชช เชฒเชพเช—เชคเซเช‚ เชนเชคเซเช‚, เชชเชฐเช‚เชคเซ เชคเซ‡ เชเช• เชตเชฐเซเชทเชฅเซ€ เชตเชงเซ เชธเชฎเชฏเชฅเซ€ เชธเชฎเชฐเซเชฅเชฟเชค เชจเชฅเซ€ เช…เชจเซ‡ เชตเชงเซเชฎเชพเช‚, เชจเซ‹เชก-เชจเชฟเช•เชพเชธเช•เชพเชฐ เช…เชจเซ‡ เช•เซเชฏเซเชฌเซ‡-เชธเซเชŸเซ‡เชŸ-เชฎเซ‡เชŸเซเชฐเชฟเช•เซเชธเชจเชพ เชจเชตเชพ เชธเช‚เชธเซเช•เชฐเชฃเซ‹ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเซ€ เชถเช•เชคเซเช‚ เชจเชฅเซ€. เช…เชจเซ‡ เช…เชฎเซเช• เชธเชฎเชฏเซ‡ เช…เชฎเซ‡ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚: "เชถเซเช‚ เช†เชชเชฃเซ‡ เช†เชชเชฃเซ‹ เชจเชฟเชฐเซเชฃเชฏ เชœเชพเชคเซ‡ เชจ เชฒเซ‡เชตเซ‹ เชœเซ‹เชˆเช?"

เช…เชฎเซ‡ เช…เชฎเชพเชฐเชพ เชชเซเชฒเช—เช‡เชจเชฎเชพเช‚ เช•เชฏเชพ เชตเชฟเชšเชพเชฐเซ‹ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚:

  • "เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฎเซ‡เชช" เชจเซเช‚ เชตเชฟเชเซเชฏเซเชฒเชพเช‡เชเซ‡เชถเชจ: เช•เซเชฒเชธเซเชŸเชฐเชฎเชพเช‚ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธเชจเซ€ เช…เชจเซเช•เซ‚เชณ เชฐเชœเซ‚เช†เชค, เชจเซ‡เชฎเชธเซเชชเซ‡เชธ, เชกเชฟเชชเซเชฒเซ‹เชฏเชฎเซ‡เชจเซเชŸเซเชธ เชฆเซเชตเชพเชฐเชพ เชœเซ‚เชฅเชฌเชฆเซเชง...;
  • "เชกเชฟเชชเซเชฒเซ‹เชฏเชฎเซ‡เชจเซเชŸ - เชธเชฐเซเชตเชฟเชธ (+เชชเซ‹เชฐเซเชŸเซเชธ)" เชœเซ‡เชตเชพ เชœเซ‹เชกเชพเชฃเซ‹เชจเซเช‚ เชตเชฟเชเซเชฏเซเชฒเชพเช‡เชเซ‡เชถเชจ.
  • เช•เซเชฒเชธเซเชŸเชฐ เชจเซ‹เชกเซเชธเชฎเชพเช‚ เช•เซเชฒเชธเซเชŸเชฐ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธเชจเชพ เชตเชฟเชคเชฐเชฃเชจเซเช‚ เชตเชฟเชเซเชฏเซเชฒเชพเช‡เชเซ‡เชถเชจ.
  • เช˜เชฃเชพ เชธเซเชฐเซ‹เชคเซ‹เชฎเชพเช‚เชฅเซ€ เชฎเซ‡เชŸเซเชฐเชฟเช•เซเชธ เช…เชจเซ‡ เชฎเชพเชนเชฟเชคเซ€เชจเซ‹ เชธเช‚เช—เซเชฐเชน: เชชเซเชฐเซ‹เชฎเชฟเชฅเชฟเชฏเชธ เช…เชจเซ‡ k8s api เชธเชฐเซเชตเชฐ.
  • เชฌเช‚เชจเซ‡ เชˆเชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐ เชญเชพเช— (CPU เชธเชฎเชฏ, เชฎเซ‡เชฎเชฐเซ€, เชกเชฟเชธเซเช• เชธเชฌเชธเชฟเชธเซเชŸเชฎ, เชจเซ‡เชŸเชตเชฐเซเช•เชจเซ‹ เช‰เชชเชฏเซ‹เช—) เช…เชจเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฒเซ‹เชœเชฟเช• - เชนเซ‡เชฒเซเชฅ-เชธเซเชŸเซ‡เชŸเชธ เชชเซ‹เชกเซเชธ, เช‰เชชเชฒเชฌเซเชง เชชเซเชฐเชคเชฟเช•เซƒเชคเชฟเช“เชจเซ€ เชธเช‚เช–เซเชฏเชพ, เชœเซ€เชตเช‚เชคเชคเชพ/เชคเซˆเชฏเชพเชฐเชคเชพ เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชชเชพเชธ เช•เชฐเชตเชพ เชตเชฟเชถเซ‡เชจเซ€ เชฎเชพเชนเชฟเชคเซ€ เชฌเช‚เชจเซ‡เชจเซเช‚ เชจเชฟเชฐเซ€เช•เซเชทเชฃ.

เชญเชพเช— 1: "Grafana เชชเซเชฒเช—เช‡เชจ" เชถเซเช‚ เช›เซ‡?

เชŸเซ‡เช•เชจเชฟเช•เชฒ เชฆเซƒเชทเซเชŸเชฟเช•เซ‹เชฃเชฅเซ€, Grafana เชฎเชพเชŸเซ‡เชจเซเช‚ เชชเซเชฒเช—เช‡เชจ เช เช•เซ‹เชฃเซ€เชฏ เชจเชฟเชฏเช‚เชคเซเชฐเช• เช›เซ‡, เชœเซ‡ Grafana เชกเซ‡เชŸเชพ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เชฎเชพเช‚ เชธเช‚เช—เซเชฐเชนเชฟเชค เช›เซ‡ (/var/grafana/plugins/ /dist/module.js) เช…เชจเซ‡ SystemJS เชฎเซ‹เชกเซเชฏเซเชฒ เชคเชฐเซ€เช•เซ‡ เชฒเซ‹เชก เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡. เช† เชจเชฟเชฐเซเชฆเซ‡เชถเชฟเช•เชพเชฎเชพเช‚ เชคเชฎเชพเชฐเชพ เชชเซเชฒเช—เชˆเชจ เชตเชฟเชถเซ‡เชจเซ€ เชคเชฎเชพเชฎ เชฎเซ‡เชŸเชพ เชฎเชพเชนเชฟเชคเซ€ เชงเชฐเชพเชตเชคเซ€ plugin.json เชซเชพเชˆเชฒ เชนเซ‹เชตเซ€ เชœเซ‹เชˆเช: เชจเชพเชฎ, เชธเช‚เชธเซเช•เชฐเชฃ, เชชเซเชฒเช—เชˆเชจ เชชเซเชฐเช•เชพเชฐ, เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€/เชธเชพเชˆเชŸ/เชฒเชพเชˆเชธเชจเซเชธ, เช…เชตเชฒเช‚เชฌเชจ เชตเช—เซ‡เชฐเซ‡เชจเซ€ เชฒเชฟเช‚เช•เซเชธ.

เช—เซเชฐเชพเชซเชจเชพ เชฎเชพเชŸเซ‡ เชชเซเชฒเช—เช‡เชจเชจเซ‹ เชตเชฟเช•เชพเชธ: เชฎเซ‹เชŸเชพ เชถเซ‹เชŸเซเชธเชจเซ‹ เช‡เชคเชฟเชนเชพเชธ
เชฎเซ‹เชกเซเชฏเซเชฒ.ts

เช—เซเชฐเชพเชซเชจเชพ เชฎเชพเชŸเซ‡ เชชเซเชฒเช—เช‡เชจเชจเซ‹ เชตเชฟเช•เชพเชธ: เชฎเซ‹เชŸเชพ เชถเซ‹เชŸเซเชธเชจเซ‹ เช‡เชคเชฟเชนเชพเชธ
plugin.json

เชœเซ‡เชฎ เชคเชฎเซ‡ เชธเซเช•เซเชฐเซ€เชจเชถเซ‹เชŸเชฎเชพเช‚ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹, เช…เชฎเซ‡ plugin.type = app เชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซเชฏเซ‹ เช›เซ‡. เช•เชพเชฐเชฃ เช•เซ‡ Grafana เชฎเชพเชŸเซ‡เชจเชพ เชชเซเชฒเช—เชˆเชจเซ‹ เชคเซเชฐเชฃ เชชเซเชฐเช•เชพเชฐเชจเชพ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡:

เชชเซ‡เชจเชฒ: เชชเซเชฒเช—เช‡เชจเชจเซ‹ เชธเซŒเชฅเซ€ เชธเชพเชฎเชพเชจเซเชฏ เชชเซเชฐเช•เชพเชฐ - เชคเซ‡ เช•เซ‹เชˆเชชเชฃ เชฎเซ‡เชŸเซเชฐเชฟเช•เซเชธเชจเซ‡ เชตเชฟเชเซเชฏเซเช…เชฒเชพเชˆเช เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชชเซ‡เชจเชฒ เช›เซ‡, เชœเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชตเชฟเชตเชฟเชง เชกเซ‡เชถเชฌเซ‹เชฐเซเชกเซเชธ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชฅเชพเชฏ เช›เซ‡.
เชฎเชพเชนเชฟเชคเซ€เชจเซเช‚ เชชเซเชฐเชพเชชเซเชคเชฟเชธเซเชฅเชพเชจ: เช•เซ‡เชŸเชฒเชพเช• เชกเซ‡เชŸเชพ เชธเซเชคเซเชฐเซ‹เชค เชธเชพเชฅเซ‡ เชชเซเชฒเช—เช‡เชจ เช•เชจเซ‡เช•เซเชŸเชฐ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชชเซเชฐเซ‹เชฎเชฟเชฅเชฟเชฏเชธ-เชกเซ‡เชŸเชพเชธเซ‹เชฐเซเชธ, เช•เซเชฒเชฟเช•เชนเชพเช‰เชธ-เชกเซ‡เชŸเชพเชธเซ‹เชฐเซเชธ, เช‡เชฒเชพเชธเซเชŸเซ€เช• เชธเชฐเซเชš-เชกเซ‡เชŸเชพเชธเซ‹เชฐเซเชธ).
เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ: เชเช• เชชเซเชฒเช—เช‡เชจ เชœเซ‡ เชคเชฎเชจเซ‡ Grafana เชจเซ€ เช…เช‚เชฆเชฐ เชคเชฎเชพเชฐเซ€ เชชเซ‹เชคเชพเชจเซ€ เชซเซเชฐเชจเซเชŸเชเชจเซเชก เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชจเชพเชตเชตเชพ, เชคเชฎเชพเชฐเชพ เชชเซ‹เชคเชพเชจเชพ HTML เชชเซƒเชทเซเช เซ‹ เชฌเชจเชพเชตเชตเชพ เช…เชจเซ‡ เชตเชฟเชตเชฟเชง เชกเซ‡เชŸเชพเชจเซ‡ เชตเชฟเชเซเชฏเซเช…เชฒเชพเชˆเช เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชกเซ‡เชŸเชพเชธเซ‹เชฐเซเชธเชจเซ‡ เชฎเซ‡เชจเซเชฏเซเช…เชฒเซ€ เชเช•เซเชธเซ‡เชธ เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. เช‰เชชเชฐเชพเช‚เชค, เช…เชจเซเชฏ เชชเซเชฐเช•เชพเชฐเชจเชพ เชชเซเชฒเช—เชˆเชจเซ‹ (เชกเซ‡เชŸเชพเชธเซ‹เชฐเซเชธ, เชชเซ‡เชจเชฒ) เช…เชจเซ‡ เชตเชฟเชตเชฟเชง เชกเซ‡เชถเชฌเซ‹เชฐเซเชกเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชจเชฟเชฐเซเชญเชฐเชคเชพ เชคเชฐเซ€เช•เซ‡ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡.

เช—เซเชฐเชพเชซเชจเชพ เชฎเชพเชŸเซ‡ เชชเซเชฒเช—เช‡เชจเชจเซ‹ เชตเชฟเช•เชพเชธ: เชฎเซ‹เชŸเชพ เชถเซ‹เชŸเซเชธเชจเซ‹ เช‡เชคเชฟเชนเชพเชธ
type=app เชธเชพเชฅเซ‡ เชชเซเชฒเช—เช‡เชจ เช…เชตเชฒเช‚เชฌเชจเชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ.

เชคเชฎเซ‡ เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฟเช‚เช— เชญเชพเชทเชพ เชคเชฐเซ€เช•เซ‡ JavaScript เช…เชจเซ‡ TypeScript เชฌเช‚เชจเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ (เช…เชฎเซ‡ เชคเซ‡เชจเซ‡ เชชเชธเช‚เชฆ เช•เชฐเซเชฏเซเช‚ เช›เซ‡). เชคเชฎเซ‡ เช•เชฐเซ€ เชถเช•เซ‹ เชคเซ‡ เช•เซ‹เชˆเชชเชฃ เชชเซเชฐเช•เชพเชฐเชจเชพ เชนเซ‡เชฒเซ‹-เชตเชฐเซเชฒเซเชก เชชเซเชฒเช—เชˆเชจเซเชธ เชฎเชพเชŸเซ‡เชจเซ€ เชคเซˆเชฏเชพเชฐเซ€เช“ เชฒเชฟเช‚เช• เชถเซ‹เชงเซ‹: เช† เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชฎเชพเช‚ เชชเซเชฐเซ€-เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‡เชฒ เช…เชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชฟเชค เชฌเชฟเชฒเซเชกเชฐเซ‹ เชธเชพเชฅเซ‡ เชฎเซ‹เชŸเซ€ เชธเช‚เช–เซเชฏเชพเชฎเชพเช‚ เชธเซเชŸเชพเชฐเซเชŸเชฐ-เชชเซ‡เช• (เชฐเซ€เชเช•เซเชŸเชฎเชพเช‚ เชชเซเชฒเช—เช‡เชจเชจเซเช‚ เชชเซเชฐเชพเชฏเซ‹เช—เชฟเช• เช‰เชฆเชพเชนเชฐเชฃ เชชเชฃ เช›เซ‡) เช›เซ‡.

เชญเชพเช— 2: เชธเซเชฅเชพเชจเชฟเช• เชตเชพเชคเชพเชตเชฐเชฃเชจเซ€ เชคเซˆเชฏเชพเชฐเซ€

เชชเซเชฒเช—เช‡เชจ เชชเชฐ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเชจเซ‡ เช•เซเชฆเชฐเชคเซ€ เชฐเซ€เชคเซ‡ เชฌเชงเชพ เชชเซ‚เชฐเซเชตเชธเซเชฅเชพเชชเชฟเชค เชธเชพเชงเชจเซ‹ เชธเชพเชฅเซ‡ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เช•เซเชฒเชธเซเชŸเชฐเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡: เชชเซเชฐเซ‹เชฎเชฟเชฅเชฟเชฏเชธ, เชจเซ‹เชก-เชจเชฟเช•เชพเชธเช•เชพเชฐ, เช•เซเชฏเซเชฌเซ‡-เชธเซเชŸเซ‡เชŸ-เชฎเซ‡เชŸเซเชฐเชฟเช•เซเชธ, เช—เซเชฐเชพเชซเชจเชพ. เชชเชฐเซเชฏเชพเชตเชฐเชฃเชจเซ‡ เชเชกเชชเชฅเซ€, เชธเชฐเชณเชคเชพเชฅเซ€ เช…เชจเซ‡ เช•เซเชฆเชฐเชคเซ€ เชฐเซ€เชคเซ‡ เชธเซ‡เชŸ เช•เชฐเชตเซเช‚ เชœเซ‹เชˆเช เช…เชจเซ‡ เชนเซ‹เชŸ-เชฐเซ€เชฒเซ‹เชกเชจเซ€ เช–เชพเชคเชฐเซ€ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช—เซเชฐเชพเชซเชจเชพ เชกเซ‡เชŸเชพ เชกเชพเชฏเชฐเซ‡เช•เซเชŸเชฐเซ€ เชกเซ‡เชตเชฒเชชเชฐเชจเชพ เชฎเชถเซ€เชจเชฎเชพเช‚เชฅเซ€ เชธเซ€เชงเซ€ เชฎเชพเช‰เชจเซเชŸ เชฅเชฏเซ‡เชฒ เชนเซ‹เชตเซ€ เชœเซ‹เชˆเช.

เช…เชฎเชพเชฐเชพ เชฎเชคเซ‡, เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เชธเชพเชฅเซ‡ เชธเซเชฅเชพเชจเชฟเช• เชฐเซ€เชคเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพเชจเซ€ เชธเซŒเชฅเซ€ เช…เชจเซเช•เซ‚เชณ เชฐเซ€เชค เช›เซ‡ เชฎเชฟเชจเซ€เช•เซเชฏเซเชฌ. เช†เช—เชณเชจเซเช‚ เชชเช—เชฒเซเช‚ เชชเซเชฐเซ‹เชฎเชฟเชฅเชฟเชฏเชธ-เช“เชชเชฐเซ‡เชŸเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชชเซเชฐเซ‹เชฎเชฟเชฅเชฟเชฏเชธ + เช—เซเชฐเชพเชซเชพเชจเชพ เชธเช‚เชฏเซ‹เชœเชจเชจเซ‡ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพเชจเซเช‚ เช›เซ‡. IN เช† เชฒเซ‡เช– เชฎเชฟเชจเซ€เช•เซเชฏเซเชฌ เชชเชฐ เชชเซเชฐเซ‹เชฎเชฟเชฅเชฟเชฏเชธ-เช“เชชเชฐเซ‡เชŸเชฐ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชตเชฟเช—เชคเชตเชพเชฐ เชตเชฐเซเชฃเชตเซ‡เชฒ เช›เซ‡. เชฆเซเชฐเชขเชคเชพเชจเซ‡ เชธเช•เซเชทเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เชชเชฐเชฟเชฎเชพเชฃ เชธเซ‡เชŸ เช•เชฐเชตเซเช‚ เช†เชตเชถเซเชฏเช• เช›เซ‡ เชฆเซเชฐเชขเชคเชพ: เชธเชพเชšเซเช‚ charts/grafana/values.yaml เชซเชพเช‡เชฒเชฎเชพเช‚, เชคเชฎเชพเชฐเซเช‚ เชชเซ‹เชคเชพเชจเซเช‚ PV เช…เชจเซ‡ PVC เช‰เชฎเซ‡เชฐเซ‹ เช…เชจเซ‡ persistence.existingClaim เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐเชฎเชพเช‚ เชคเซ‡เชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซ‹.

เช…เชฎเชพเชฐเซ€ เช…เช‚เชคเชฟเชฎ เชฎเชฟเชจเซ€เช•เซเชฏเซเชฌ เชฒเซ‹เชจเซเชš เชธเซเช•เซเชฐเชฟเชชเซเชŸ เช†เชจเชพ เชœเซ‡เชตเซ€ เชฆเซ‡เช–เชพเชฏ เช›เซ‡:

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: เชตเชพเชธเซเชคเชตเชฟเช• เชตเชฟเช•เชพเชธ

เช‘เชฌเซเชœเซ‡เช•เซเชŸ เชฎเซ‹เชกเซ‡เชฒ

เชชเซเชฒเช—เช‡เชจเชจเชพ เช…เชฎเชฒเซ€เช•เชฐเชฃเชจเซ€ เชคเซˆเชฏเชพเชฐเซ€เชฎเชพเช‚, เช…เชฎเซ‡ เชคเชฎเชพเชฎ เชฎเซ‚เชณเชญเซ‚เชค เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เชเชจเซเชŸเชฟเชŸเซ€เชเชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚ เช›เซ‡ เชœเซ‡เชจเซ€ เชธเชพเชฅเซ‡ เช…เชฎเซ‡ 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 = [];
   }
}

เช—เซ‡เชŸเชฐเซเชธ เช…เชจเซ‡ เชธเซ‡เชŸเชฐเซเชธเชจเซ€ เชฎเชฆเชฆเชฅเซ€, เช…เชฎเซ‡ เชเช• เช…เชจเซเช•เซ‚เชณ เช…เชจเซ‡ เชตเชพเช‚เชšเซ€ เชถเช•เชพเชฏ เชคเซ‡เชตเชพ เชธเซเชตเชฐเซ‚เชชเชฎเชพเช‚ เช…เชฎเชจเซ‡ เชœเซ‹เชˆเชคเซ€ เชเชจเซเชŸเชฟเชŸเซ€ เชฎเซ‡เชŸเซเชฐเชฟเช•เซเชธ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช…เชฅเชตเชพ เชธเซ‡เชŸ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชซเชพเชณเชตเซ€ เชถเช•เชพเชฏ เชคเซ‡เชตเชพ cpu เชจเซ‹เชกเซเชธเชจเซเช‚ เชซเซ‹เชฐเซเชฎเซ‡เชŸ เช•เชฐเซ‡เชฒ เช†เช‰เชŸเชชเซเชŸ:

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

เชชเชพเชจเชพ

เช…เชฎเชพเชฐเชพ เชคเชฎเชพเชฎ เชชเซเชฒเช—เช‡เชจ เชชเซƒเชทเซเช เซ‹เชจเซ€ เชธเซ‚เชšเชฟ เชถเชฐเซ‚เช†เชคเชฎเชพเช‚ เช…เชฎเชพเชฐเชพ pluing.json เชฎเชพเช‚ เชจเชฟเชฐเซเชญเชฐเชคเชพ เชตเชฟเชญเชพเช—เชฎเชพเช‚ เชตเชฐเซเชฃเชตเซ‡เชฒ เช›เซ‡:

เช—เซเชฐเชพเชซเชจเชพ เชฎเชพเชŸเซ‡ เชชเซเชฒเช—เช‡เชจเชจเซ‹ เชตเชฟเช•เชพเชธ: เชฎเซ‹เชŸเชพ เชถเซ‹เชŸเซเชธเชจเซ‹ เช‡เชคเชฟเชนเชพเชธ

เชฆเชฐเซ‡เช• เชชเซƒเชทเซเช  เชฎเชพเชŸเซ‡เชจเชพ เชฌเซเชฒเซ‹เช•เชฎเชพเช‚ เช†เชชเชฃเซ‡ เชชเซƒเชทเซเช  เชจเชพเชฎ เชธเซ‚เชšเชตเชตเซเช‚ เช†เชตเชถเซเชฏเช• เช›เซ‡ (เชคเซ‡ เชชเช›เซ€ เช—เซ‹เช•เชณเช—เชพเชฏเชฎเชพเช‚ เชฐเซ‚เชชเชพเช‚เชคเชฐเชฟเชค เชฅเชถเซ‡ เชœเซ‡เชจเชพ เชฆเซเชตเชพเชฐเชพ เช† เชชเซƒเชทเซเช  เชเช•เซเชธเซ‡เชธเชฟเชฌเชฒ เชนเชถเซ‡); เช† เชชเซƒเชทเซเช เชจเซ€ เช•เชพเชฎเช—เซ€เชฐเซ€ เชฎเชพเชŸเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐ เช˜เชŸเช•เชจเซเช‚ เชจเชพเชฎ (เช˜เชŸเช•เซ‹เชจเซ€ เชธเซ‚เชšเชฟ module.ts เชชเชฐ เชจเชฟเช•เชพเชธ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡); เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเชจเซ€ เชญเซ‚เชฎเชฟเช•เชพ เชธเซ‚เชšเชตเซ‡ เช›เซ‡ เช•เซ‡ เชœเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เช† เชชเซƒเชทเซเช  เชธเชพเชฅเซ‡ เช•เชพเชฐเซเชฏ เช‰เชชเชฒเชฌเซเชง เช›เซ‡ เช…เชจเซ‡ เชธเชพเช‡เชกเชฌเชพเชฐ เชฎเชพเชŸเซ‡ เชจเซ‡เชตเชฟเช—เซ‡เชถเชจ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ.

เชชเซƒเชทเซเช เชจเชพ เชธเช‚เชšเชพเชฒเชจ เชฎเชพเชŸเซ‡ เชœเชตเชพเชฌเชฆเชพเชฐ เช˜เชŸเช•เชฎเชพเช‚, เช†เชชเชฃเซ‡ templateUrl เชธเซ‡เชŸ เช•เชฐเชตเซเช‚ เชœเซ‹เชˆเช, เชคเซเชฏเชพเช‚ เชฎเชพเชฐเซเช•เช…เชช เชธเชพเชฅเซ‡ html เชซเชพเช‡เชฒเชจเซ‹ เชฎเชพเชฐเซเช— เชชเชธเชพเชฐ เช•เชฐเชตเซ‹. เชจเชฟเชฏเช‚เชคเซเชฐเช•เชจเซ€ เช…เช‚เชฆเชฐ, เชจเชฟเชฐเซเชญเชฐเชคเชพ เช‡เชจเซเชœเซ‡เช•เซเชถเชจ เชฆเซเชตเชพเชฐเชพ, เช…เชฎเซ‡ 2 เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช•เซ‹เชฃเซ€เชฏ เชธเซ‡เชตเชพเช“ เชธเซเชงเซ€ เชเช•เซเชธเซ‡เชธ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช:

  • backendSrv - เชเช• เชธเซ‡เชตเชพ เช•เซ‡ เชœเซ‡ Grafana API เชธเชฐเซเชตเชฐ เชธเชพเชฅเซ‡ เช•เซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ เชชเซ‚เชฐเซ€ เชชเชพเชกเซ‡ เช›เซ‡;
  • datasourceSrv - เชเช• เชธเซ‡เชตเชพ เชœเซ‡ เชคเชฎเชพเชฐเชพ Grafana เชฎเชพเช‚ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‡เชฒเชพ เชคเชฎเชพเชฎ เชกเซ‡เชŸเชพเชธเซ‹เชฐเซเชธ เชธเชพเชฅเซ‡ เชธเซเชฅเชพเชจเชฟเช• เช•เซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ เชชเซ‚เชฐเซ€ เชชเชพเชกเซ‡ เช›เซ‡ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, .getAll() เชชเชฆเซเชงเชคเชฟ - เชฌเชงเชพ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‡เชฒเชพ เชกเซ‡เชŸเชพเชธเซ‹เชฐเซเชธเชจเซ€ เชธเซ‚เชšเชฟ เช†เชชเซ‡ เช›เซ‡; .get( ) - เชšเซ‹เช•เซเช•เชธ เชกเซ‡เชŸเชพเชธเซ‹เชฐเซเชธเชจเซ‹ เช‡เชจเซเชธเซเชŸเชจเซเชธ เช‘เชฌเซเชœเซ‡เช•เซเชŸ เชชเชฐเชค เช•เชฐเซ‡ เช›เซ‡.

เช—เซเชฐเชพเชซเชจเชพ เชฎเชพเชŸเซ‡ เชชเซเชฒเช—เช‡เชจเชจเซ‹ เชตเชฟเช•เชพเชธ: เชฎเซ‹เชŸเชพ เชถเซ‹เชŸเซเชธเชจเซ‹ เช‡เชคเชฟเชนเชพเชธ

เช—เซเชฐเชพเชซเชจเชพ เชฎเชพเชŸเซ‡ เชชเซเชฒเช—เช‡เชจเชจเซ‹ เชตเชฟเช•เชพเชธ: เชฎเซ‹เชŸเชพ เชถเซ‹เชŸเซเชธเชจเซ‹ เช‡เชคเชฟเชนเชพเชธ

เช—เซเชฐเชพเชซเชจเชพ เชฎเชพเชŸเซ‡ เชชเซเชฒเช—เช‡เชจเชจเซ‹ เชตเชฟเช•เชพเชธ: เชฎเซ‹เชŸเชพ เชถเซ‹เชŸเซเชธเชจเซ‹ เช‡เชคเชฟเชนเชพเชธ

เชญเชพเช— 4: เชกเซ‡เชŸเชพ เชธเซเชคเซเชฐเซ‹เชค

เช—เซเชฐเชพเชซเชจเชพเชจเชพ เชฆเซƒเชทเซเชŸเชฟเช•เซ‹เชฃเชฅเซ€, เชกเซ‡เชŸเชพเชธเซ‹เชฐเซเชธ เช เชฌเซ€เชœเชพ เชฌเชงเชพ เชœเซ‡เชตเชพ เชœ เชชเซเชฒเช—เช‡เชจ เช›เซ‡: เชคเซ‡เชจเซเช‚ เชชเซ‹เชคเชพเชจเซเช‚ เชเชจเซเชŸเซเชฐเซ€ เชชเซ‹เช‡เชจเซเชŸ เชฎเซ‹เชกเซเชฏเซเชฒ.เชœเซ‡เชเชธ เช›เซ‡, เชฎเซ‡เชŸเชพ เช‡เชจเซเชซเซ‹เชฐเซเชฎเซ‡เชถเชจ plugin.json เชธเชพเชฅเซ‡เชจเซ€ เชซเชพเช‡เชฒ เช›เซ‡. เชชเซเชฐเช•เชพเชฐ = เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชธเชพเชฅเซ‡ เชชเซเชฒเช—เช‡เชจ เชตเชฟเช•เชธเชพเชตเชคเซ€ เชตเช–เชคเซ‡, เช…เชฎเซ‡ เช…เชธเซเชคเชฟเชคเซเชตเชฎเชพเช‚เชจเชพ เชกเซ‡เชŸเชพเชธเซ‹เชฐเซเชธ (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชชเซเชฐเซ‹เชฎเชฟเชฅเชฟเชฏเชธ-เชกเซ‡เชŸเชพเชธเซ‹เชฐเซเชธ) เช…เชจเซ‡ เช†เชชเชฃเชพ เชชเซ‹เชคเชพเชจเชพ เชฌเช‚เชจเซ‡ เชธเชพเชฅเซ‡ เช•เซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช, เชœเซ‡เชจเซ‡ เช†เชชเชฃเซ‡ เชธเซ€เชงเชพ เชชเซเชฒเช—เช‡เชจ เชกเชฟเชฐเซ‡เช•เซเชŸเชฐเซ€เชฎเชพเช‚ เชธเซเชŸเซ‹เชฐ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช (dist/เชกเซ‡เชŸเชพเชธเซ‹เชฐเซเชธ/*) เช…เชฅเชตเชพ เชจเชฟเชฐเซเชญเชฐเชคเชพ เชคเชฐเซ€เช•เซ‡ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช. เช…เชฎเชพเชฐเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชกเซ‡เชŸเชพเชธเซ‹เชฐเซเชธ เชชเซเชฒเช—เช‡เชจ เช•เซ‹เชก เชธเชพเชฅเซ‡ เช†เชตเซ‡ เช›เซ‡. config.html เชŸเซ‡เชฎเซเชชเชฒเซ‡เชŸ เช…เชจเซ‡ ConfigCtrl เช•เช‚เชŸเซเชฐเซ‹เชฒเชฐ เชนเซ‹เชตเซเช‚ เชชเชฃ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡, เชœเซ‡เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชกเซ‡เชŸเชพเชธเซ‹เชฐเซเชธ เช‡เชจเซเชธเซเชŸเชจเซเชธ เช•เชจเซเชซเชฟเช—เชฐเซ‡เชถเชจ เชชเซ‡เชœ เช…เชจเซ‡ เชกเซ‡เชŸเชพเชธเซ‹เชฐเซเชธ เช•เช‚เชŸเซเชฐเซ‹เชฒเชฐ เชฎเชพเชŸเซ‡ เชฅเชถเซ‡, เชœเซ‡ เชคเชฎเชพเชฐเชพ เชกเซ‡เชŸเชพเชธเซ‹เชฐเซเชธเชจเชพ เชคเชฐเซเช•เชจเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เซ‡ เช›เซ‡.

เช•เซเชฌเซ‡เช—เซเชฐเชพเชซ เชชเซเชฒเช—เชˆเชจเชฎเชพเช‚, เชฏเซเชเชฐ เชˆเชจเซเชŸเชฐเชซเซ‡เชธเชจเชพ เชฆเซƒเชทเซเชŸเชฟเช•เซ‹เชฃเชฅเซ€, เชกเซ‡เชŸเชพเชธเซ‹เชฐเซเชธ เช เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เช•เซเชฒเชธเซเชŸเชฐเชจเซเช‚ เช‰เชฆเชพเชนเชฐเชฃ เช›เซ‡ เชœเซ‡ เชจเซ€เชšเซ‡เชจเซ€ เช•เซเชทเชฎเชคเชพเช“เชจเซ‡ เชฒเชพเช—เซ เช•เชฐเซ‡ เช›เซ‡ (เชธเซเชฐเซ‹เชค เช•เซ‹เชก เช‰เชชเชฒเชฌเซเชง เช›เซ‡. เชฒเชฟเช‚เช•):

  • k8s api-เชธเชฐเซเชตเชฐเชฎเชพเช‚เชฅเซ€ เชฎเชพเชนเชฟเชคเซ€ เชเช•เชคเซเชฐ เช•เชฐเซ€ เชฐเชนเซ€ เช›เซ‡ (เชจเซ‡เชฎเชธเซเชชเซ‡เชธ, เชœเชฎเชพเชตเชŸเชจเซ€ เชฏเชพเชฆเซ€ เชฎเซ‡เชณเชตเชตเซ€...)
  • เชชเซเชฐเซ‹เชฎเซ€เชฅเชฟเชฏเชธ-เชกเซ‡เชŸเชพเชธเซ‹เชฐเซเชธ (เชœเซ‡ เชฆเชฐเซ‡เช• เชšเซ‹เช•เซเช•เชธ เช•เซเชฒเชธเซเชŸเชฐ เชฎเชพเชŸเซ‡ เชชเซเชฒเช—เช‡เชจ เชธเซ‡เชŸเชฟเช‚เช—เซเชธเชฎเชพเช‚ เชชเชธเช‚เชฆ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡) เชฎเชพเชŸเซ‡ เชชเซเชฐเซ‹เช•เซเชธเซ€ เชตเชฟเชจเช‚เชคเซ€เช“ เช…เชจเซ‡ เชธเซเชฅเชฟเชฐ เชชเซƒเชทเซเช เซ‹ เช…เชจเซ‡ เชกเซ‡เชถเชฌเซ‹เชฐเซเชก เชฌเช‚เชจเซ‡เชฎเชพเช‚ เชกเซ‡เชŸเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชชเซเชฐเชคเชฟเชธเชพเชฆเซ‹เชจเซเช‚ เชซเซ‹เชฐเซเชฎเซ‡เชŸเชฟเช‚เช—.
  • เชธเซเชฅเชฟเชฐ เชชเซเชฒเช—เช‡เชจ เชชเซƒเชทเซเช เซ‹ เชชเชฐ เชกเซ‡เชŸเชพ เช…เชชเชกเซ‡เชŸ เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡ (เชธเซ‡เชŸ เชฐเซ€เชซเซเชฐเซ‡เชถ เชฐเซ‡เชŸ เชธเชพเชฅเซ‡).
  • เช—เซเชฐเชพเชซเชจเชพ-เชกเซ…เชถเชฌเซ‹เชฐเซเชกเซเชธ (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 เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช. เช† เช˜เชŸเช•เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡, เช…เชฎเซ‡ url เช…เชจเซ‡ เชฎเซ‚เชณเชญเซ‚เชค เชชเซเชฐเชฎเชพเชฃเซ€เช•เชฐเชฃ/เช…เชงเชฟเช•เซƒเชคเชคเชพ เชธเซ‡เชŸเชฟเช‚เช—เซเชธ: login-password, เช…เชฅเชตเชพ client-cert/client-key เชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเซ€เชจเซ‡ HTTP เชกเซ‡เชŸเชพ เชธเซเชคเซเชฐเซ‹เชคเชจเซ€ เชเช•เซเชธเซ‡เชธเชจเซ‡ เช—เซ‹เช เชตเซ€ เชถเช•เซ€เช เช›เซ€เช. เชฌเซ‡เชฐเชฐ เชŸเซ‹เช•เชจ (k8s เชฎเชพเชŸเซ‡ เชกเซ€ เชซเซ‡เช•เซเชŸเซ‹ เชธเซเชŸเชพเชจเซเชกเชฐเซเชก) เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชเช•เซเชธเซ‡เชธเชจเซ‡ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชฟเชค เช•เชฐเชตเชพเชจเซ€ เช•เซเชทเชฎเชคเชพเชจเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเชพเชฐเซ‡ เชฅเซ‹เชกเซเช‚ เชŸเซเชตเชฟเช•เชฟเช‚เช— เช•เชฐเชตเซเช‚ เชชเชกเซเชฏเซเช‚.

เช† เชธเชฎเชธเซเชฏเชพเชจเซ‡ เช‰เช•เซ‡เชฒเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเซ‡ เชฌเชฟเชฒเซเชŸ-เช‡เชจ เช—เซเชฐเชพเชซเชจเชพ โ€œเชชเซเชฒเช—เช‡เชจ เชฐเซ‚เชŸเซเชธโ€ เชฎเชฟเช•เซ‡เชจเชฟเชเชฎเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ (เชตเชงเซ เชตเชฟเช—เชคเซ‹ เช…เชนเซ€เช‚ เชธเชคเซเชคเชพเชตเชพเชฐ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ€เช•เชฐเชฃ เชชเซƒเชทเซเช ). เช…เชฎเชพเชฐเชพ เชกเซ‡เชŸเชพเชธเซ‹เชฐเซเชธเชจเซ€ เชธเซ‡เชŸเชฟเช‚เช—เซเชธเชฎเชพเช‚, เช…เชฎเซ‡ เชฐเซ‚เชŸเซ€เช‚เช— เชจเชฟเชฏเชฎเซ‹เชจเซ‹ เชธเชฎเซ‚เชน เชœเชพเชนเซ‡เชฐ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช เชœเซ‡เชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช—เซเชฐเชพเชซเชจเชพ เชชเซเชฐเซ‹เช•เซเชธเซ€ เชธเชฐเซเชตเชฐ เชฆเซเชตเชพเชฐเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชฆเชฐเซ‡เช• เชตเซเชฏเช•เซเชคเชฟเช—เชค เชเชจเซเชกเชชเซ‹เช‡เชจเซเชŸ เชฎเชพเชŸเซ‡ เชŸเซ‡เชฎเซเชชเซเชฒเซ‡เชŸเชฟเช‚เช—เชจเซ€ เชถเช•เซเชฏเชคเชพ เชธเชพเชฅเซ‡ เชนเซ‡เชกเชฐ เช…เชฅเชตเชพ เชฏเซเช†เชฐเชเชฒ เชธเซ‡เชŸ เช•เชฐเชตเชพเชจเซเช‚ เชถเช•เซเชฏ เช›เซ‡, เชœเซ‡ เชฎเชพเชŸเซ‡เชจเซ‹ เชกเซ‡เชŸเชพ jsonData เช…เชจเซ‡ เชธเซเชฐเช•เซเชทเชฟเชคJsonData เชซเซ€เชฒเซเชกเซเชธเชฎเชพเช‚เชฅเซ€ เชฒเชˆ เชถเช•เชพเชฏ เช›เซ‡ (เชเชจเซเช•เซเชฐเชฟเชชเซเชŸเซ‡เชก เชธเซเชตเชฐเซ‚เชชเชฎเชพเช‚ เชชเชพเชธเชตเชฐเซเชกเซเชธ เช…เชฅเชตเชพ เชŸเซ‹เช•เชจเซเชธ เชธเซเชŸเซ‹เชฐ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡). เช…เชฎเชพเชฐเชพ เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚, เชœเซ‡เชฎ เช•เซ‡ เชชเซเชฐเชถเซเชจเซ‹ /__proxy/api/v1/namespaces เชซเซ‹เชฐเซเชฎเชจเชพ url เชธเชพเชฅเซ‡ เชชเซเชฐเซ‹เช•เซเชธเซ€ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡
เช…เชงเชฟเช•เซƒเชคเชคเชพ เชธเชพเชฅเซ‡ /api/v8/namespaces: เชฌเซ‡เชฐเชฐ เชนเซ‡เชกเชฐ.

เช—เซเชฐเชพเชซเชจเชพ เชฎเชพเชŸเซ‡ เชชเซเชฒเช—เช‡เชจเชจเซ‹ เชตเชฟเช•เชพเชธ: เชฎเซ‹เชŸเชพ เชถเซ‹เชŸเซเชธเชจเซ‹ เช‡เชคเชฟเชนเชพเชธ

เช—เซเชฐเชพเชซเชจเชพ เชฎเชพเชŸเซ‡ เชชเซเชฒเช—เช‡เชจเชจเซ‹ เชตเชฟเช•เชพเชธ: เชฎเซ‹เชŸเชพ เชถเซ‹เชŸเซเชธเชจเซ‹ เช‡เชคเชฟเชนเชพเชธ

เชธเซเชตเชพเชญเชพเชตเชฟเช• เชฐเซ€เชคเซ‡, k8s api เชธเชฐเซเชตเชฐ เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช…เชฎเชพเชฐเซ‡ เชซเช•เซเชค เชตเชพเช‚เชšเชตเชพเชจเซ€ เชเช•เซเชธเซ‡เชธ เชงเชฐเชพเชตเชคเชพ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เชœเซ‡ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชฎเซ‡เชจเชฟเชซเซ‡เชธเซเชŸ เชœเซ‡ เชคเชฎเซ‡ เชคเซ‡เชฎเชพเช‚ เชชเชฃ เชถเซ‹เชงเซ€ เชถเช•เซ‹ เช›เซ‹. เชชเซเชฒเช—เช‡เชจ เชธเซเชคเซเชฐเซ‹เชค เช•เซ‹เชก.

เชญเชพเช— 5: เชฐเชฟเชฒเซ€เช

เช—เซเชฐเชพเชซเชจเชพ เชฎเชพเชŸเซ‡ เชชเซเชฒเช—เช‡เชจเชจเซ‹ เชตเชฟเช•เชพเชธ: เชฎเซ‹เชŸเชพ เชถเซ‹เชŸเซเชธเชจเซ‹ เช‡เชคเชฟเชนเชพเชธ

เชเช•เชตเชพเชฐ เชคเชฎเซ‡ เชคเชฎเชพเชฐเซเช‚ เชชเซ‹เชคเชพเชจเซเช‚ Grafana เชชเซเชฒเช—เช‡เชจ เชฒเช–เซ€ เชฒเซ‹ เชคเซ‡ เชชเช›เซ€, เชคเชฎเซ‡ เชธเซเชตเชพเชญเชพเชตเชฟเช• เชฐเซ€เชคเซ‡ เชคเซ‡เชจเซ‡ เชธเชพเชฐเซเชตเชœเชจเชฟเช• เชฐเซ‚เชชเซ‡ เช‰เชชเชฒเชฌเซเชง เช•เชฐเชพเชตเชตเชพ เชฎเชพเช‚เช—เซ‹ เช›เซ‹. Grafana เชฎเชพเช‚ เช† เชชเซเชฒเช—เชฟเชจเซเชธเชจเซ€ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€ เช…เชนเซ€เช‚ เช‰เชชเชฒเชฌเซเชง เช›เซ‡ grafana.com/grafana/plugins

เชคเชฎเชพเชฐเชพ เชชเซเชฒเช—เช‡เชจเชจเซ‡ เช…เชงเชฟเช•เซƒเชค เชธเซเชŸเซ‹เชฐ เชชเชฐ เช‰เชชเชฒเชฌเซเชง เช•เชฐเชพเชตเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ PR เช‡เชจ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เช† เชญเช‚เชกเชพเชฐrepo.json เชซเชพเช‡เชฒเชฎเชพเช‚ เช†เชจเชพ เชœเซ‡เชตเซ€ เชธเชพเชฎเช—เซเชฐเซ€ เช‰เชฎเซ‡เชฐเซ€เชจเซ‡:

เช—เซเชฐเชพเชซเชจเชพ เชฎเชพเชŸเซ‡ เชชเซเชฒเช—เช‡เชจเชจเซ‹ เชตเชฟเช•เชพเชธ: เชฎเซ‹เชŸเชพ เชถเซ‹เชŸเซเชธเชจเซ‹ เช‡เชคเชฟเชนเชพเชธ

เชœเซเชฏเชพเช‚ เชตเชฐเซเชเชจ เช เชคเชฎเชพเชฐเชพ เชชเซเชฒเช—เชˆเชจเชจเซเช‚ เชตเชฐเซเชเชจ เช›เซ‡, url เช เชฐเซ€เชชเซ‹เชเซ€เชŸเชฐเซ€เชจเซ€ เชฒเชฟเช‚เช• เช›เซ‡ เช…เชจเซ‡ เช•เชฎเชฟเชŸ เช เช•เชฎเชฟเชŸเชจเซเช‚ เชนเซ‡เชถ เช›เซ‡ เชœเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เชชเซเชฒเช—เชˆเชจเชจเซเช‚ เชšเซ‹เช•เซเช•เชธ เชตเชฐเซเชเชจ เช‰เชชเชฒเชฌเซเชง เชนเชถเซ‡.

เช…เชจเซ‡ เช†เช‰เชŸเชชเซเชŸ เชชเชฐ เชคเชฎเซ‡ เชเช• เช…เชฆเซเชญเซเชค เชšเชฟเชคเซเชฐ เชœเซ‹เชถเซ‹ เชœเซ‡เชฎ เช•เซ‡:

เช—เซเชฐเชพเชซเชจเชพ เชฎเชพเชŸเซ‡ เชชเซเชฒเช—เช‡เชจเชจเซ‹ เชตเชฟเช•เชพเชธ: เชฎเซ‹เชŸเชพ เชถเซ‹เชŸเซเชธเชจเซ‹ เช‡เชคเชฟเชนเชพเชธ

เชคเซ‡เชจเชพ เชฎเชพเชŸเซ‡เชจเซ‹ เชกเซ‡เชŸเชพ เชคเชฎเชพเชฐเชพ Readme.md, Changelog.md เช…เชจเซ‡ เชชเซเชฒเช—เช‡เชจ เชตเชฐเซเชฃเชจ เชธเชพเชฅเซ‡เชจเซ€ plugin.json เชซเชพเช‡เชฒเชฎเชพเช‚เชฅเซ€ เช†เชชเชฎเซ‡เชณเซ‡ เชฒเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡.

เชญเชพเช— 6: เชจเชฟเชทเซเช•เชฐเซเชทเชจเซ‡ เชฌเชฆเชฒเซ‡

เช…เชฎเซ‡ เชชเซเชฐเช•เชพเชถเชจ เชชเช›เซ€ เช…เชฎเชพเชฐเชพ เชชเซเชฒเช—เช‡เชจเชจเซ‡ เชตเชฟเช•เชธเชพเชตเชตเชพเชจเซเช‚ เชฌเช‚เชง เช•เชฐเซเชฏเซเช‚ เชจเชฅเซ€. เช…เชจเซ‡ เชนเชตเซ‡ เช…เชฎเซ‡ เช•เซเชฒเชธเซเชŸเชฐ เชจเซ‹เชกเซเชธเชจเชพ เชธเช‚เชธเชพเชงเชจเซ‹เชจเชพ เช‰เชชเชฏเซ‹เช— เชชเชฐ เชฏเซ‹เช—เซเชฏ เชฐเซ€เชคเซ‡ เชฆเซ‡เช–เชฐเซ‡เช– เชฐเชพเช–เชตเชพ เชชเชฐ เช•เชพเชฎ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช, UX เชจเซ‡ เชธเซเชงเชพเชฐเชตเชพ เชฎเชพเชŸเซ‡ เชจเชตเซ€ เชธเซเชตเชฟเชงเชพเช“ เชฐเชœเซ‚ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช, เช…เชจเซ‡ เช…เชฎเชพเชฐเชพ เช•เซเชฒเชพเชฏเชจเซเชŸเซเชธ เช…เชจเซ‡ GitHub เชชเชฐเชจเชพ เชฒเซ‹เช•เซ‹ (เชœเซ‹ เชคเชฎเซ‡ เช›เซ‹เชกเซ‹ เช›เซ‹ เชคเซ‹) เชฌเช‚เชจเซ‡ เชฆเซเชตเชพเชฐเชพ เชชเซเชฒเช—เช‡เชจ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซเชฏเชพ เชชเช›เซ€ เชฎเซ‹เชŸเชพ เชชเซเชฐเชฎเชพเชฃเชฎเชพเช‚ เชชเซเชฐเชคเชฟเชธเชพเชฆ เชชเซเชฐเชพเชชเซเชค เช•เชฐเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ€เช. เชคเชฎเชพเชฐเซ€ เชธเชฎเชธเซเชฏเชพ เช…เชฅเชตเชพ เชชเซเชฒ เชตเชฟเชจเช‚เชคเซ€, เชฎเชจเซ‡ เช–เซ‚เชฌ เช†เชจเช‚เชฆ เชฅเชถเซ‡ :)

เช…เชฎเซ‡ เช†เชถเชพ เชฐเชพเช–เซ€เช เช›เซ€เช เช•เซ‡ เช† เชฒเซ‡เช– เชคเชฎเชจเซ‡ เช—เซเชฐเชพเชซเชจเชพ เชœเซ‡เชตเชพ เช…เชฆเซเชญเซเชค เชธเชพเชงเชจเชจเซ‡ เชธเชฎเชœเชตเชพเชฎเชพเช‚ เช…เชจเซ‡, เช•เชฆเชพเชš, เชคเชฎเชพเชฐเซเช‚ เชชเซ‹เชคเชพเชจเซเช‚ เชชเซเชฒเช—เช‡เชจ เชฒเช–เชตเชพเชฎเชพเช‚ เชฎเชฆเชฆ เช•เชฐเชถเซ‡.

เช†เชญเชพเชฐ!)

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹