рдЧреНрд░рд╛рдлрд╛рдирд╛рд╕рд╛рдареА рдкреНрд▓рдЧрдЗрдирдЪрд╛ рд╡рд┐рдХрд╛рд╕: рдореЛрдареНрдпрд╛ рд╢реЙрдЯреНрд╕рдЪрд╛ рдЗрддрд┐рд╣рд╛рд╕

рд╕рд░реНрд╡рд╛рдВрдирд╛ рдирдорд╕реНрдХрд╛рд░! рдХрд╛рд╣реА рдорд╣рд┐рдиреНрдпрд╛рдВрдкреВрд░реНрд╡реА, рдЖрдореНрд╣реА рдЖрдордЪрд╛ рдирд╡реАрди рдореБрдХреНрдд-рд╕реНрд░реЛрдд рдкреНрд░рдХрд▓реНрдк рдЙрддреНрдкрд╛рджрдирд╛рдд рд▓рд╛рдБрдЪ рдХреЗрд▓рд╛ - рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдЪреНрдпрд╛ рджреЗрдЦрд░реЗрдЦреАрд╕рд╛рдареА рдЧреНрд░рд╛рдлрд╛рдирд╛ рдкреНрд▓рдЧрдЗрди, рдЬреНрдпрд╛рд▓рд╛ рдЖрдореНрд╣реА рдореНрд╣рдгрддреЛ DevOpsProdigy KubeGraf. рдкреНрд▓рдЧрдЗрди рд╕реНрддреНрд░реЛрдд рдХреЛрдб рдпреЗрдереЗ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ GitHub рд╡рд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рднрд╛рдВрдбрд╛рд░. рдЖрдгрд┐ рдпрд╛ рд▓реЗрдЦрд╛рдд рдЖрдореНрд╣реА рдкреНрд▓рдЧрдЗрди рдХрд╕реЗ рддрдпрд╛рд░ рдХреЗрд▓реЗ, рдЖрдореНрд╣реА рдХреЛрдгрддреА рд╕рд╛рдзрдиреЗ рд╡рд╛рдкрд░рд▓реА рдЖрдгрд┐ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпреЗрджрд░рдореНрдпрд╛рди рдЖрдореНрд╣рд╛рд▓рд╛ рдХреЛрдгрддреНрдпрд╛ рдЕрдбрдЪрдгреА рдЖрд▓реНрдпрд╛ рдпрд╛рдЪреА рдХрдерд╛ рдЖрдореНрд╣реА рддреБрдордЪреНрдпрд╛рд╕реЛрдмрдд рд╢реЗрдЕрд░ рдХрд░реВ рдЗрдЪреНрдЫрд┐рддреЛ. рдЪрд▓ рдЬрд╛рдКрдпрд╛!

рднрд╛рдЧ 0 - рдкреНрд░рд╛рд╕реНрддрд╛рд╡рд┐рдХ: рдЖрдореНрд╣реА рдпрд╛ рдЯрдкреНрдкреНрдпрд╛рд╡рд░ рдХрд╕реЗ рдкреЛрд╣реЛрдЪрд▓реЛ?

рдЧреНрд░рд╛рдлрдирд╕рд╛рдареА рдЖрдордЪреЗ рд╕реНрд╡рддрдГрдЪреЗ рдкреНрд▓рдЧрдЗрди рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪреА рдХрд▓реНрдкрдирд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рдЕрдкрдШрд╛рддрд╛рдиреЗ рдЖрд▓реА. рдЖрдордЪреА рдХрдВрдкрдиреА 10 рд╡рд░реНрд╖рд╛рдВрд╣реВрди рдЕрдзрд┐рдХ рдХрд╛рд│ рдЬрдЯрд┐рд▓рддреЗрдЪреНрдпрд╛ рд╡рд┐рд╡рд┐рдз рд╕реНрддрд░рд╛рдВрдЪреНрдпрд╛ рд╡реЗрдм рдкреНрд░рдХрд▓реНрдкрд╛рдВрдЪреЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдд рдЖрд╣реЗ. рдпрд╛ рд╡реЗрд│реА, рдЖрдореНрд╣реА рд╡рд┐рд╡рд┐рдз рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪрд╛ рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рд╡рд░ рдХреМрд╢рд▓реНрдп, рдордиреЛрд░рдВрдЬрдХ рдкреНрд░рдХрд░рдгреЗ рдЖрдгрд┐ рдЕрдиреБрднрд╡ рдЬрдорд╛ рдХреЗрд▓рд╛ рдЖрд╣реЗ. рдЖрдгрд┐ рдХрд╛рд╣реА рдХреНрд╖рдгреА рдЖрдореНрд╣реА рд╕реНрд╡рддрдГрд▓рд╛ рд╡рд┐рдЪрд╛рд░рд▓реЗ: "рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдЪреЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдЦрд╛рджреЗ рдЬрд╛рджреВрдЪреЗ рд╕рд╛рдзрди рдЖрд╣реЗ рдХрд╛, рдЬреЗрдгреЗрдХрд░реБрди рддреЗ рдореНрд╣рдгрддрд╛рдд, "рд╕реЗрдЯ рдХрд░рд╛ рдЖрдгрд┐ рд╡рд┐рд╕рд░рд╛"?".. k8 рдЪреЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЙрджреНрдпреЛрдЧ рдорд╛рдирдХ, рдЕрд░реНрдерд╛рддрдЪ, рдмрд░реНрдпрд╛рдЪ рдХрд╛рд│рд╛рдкрд╛рд╕реВрди рдЖрд╣реЗ. рдкреНрд░реЛрдорд┐рдерд┐рдпрд╕ + рдЧреНрд░рд╛рдлрд╛рдирд╛ рд╕рдВрдпреЛрдЬрди. рдЖрдгрд┐ рдпрд╛ рд╕реНрдЯреЕрдХрд╕рд╛рдареА рддрдпрд╛рд░ рдЙрдкрд╛рдп рдореНрд╣рдгреВрди, рд╡рд┐рд╡рд┐рдз рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рд╕рд╛рдзрдирд╛рдВрдЪрд╛ рдПрдХ рдореЛрдард╛ рд╕рдВрдЪ рдЖрд╣реЗ: prometheus-operator, kubernetes-mixin dashboards рдЪрд╛ рд╕рдВрдЪ, grafana-kubernetes-app.

grafana-kubernetes-app рдкреНрд▓рдЧрдЗрди рдЖрдордЪреНрдпрд╛рд╕рд╛рдареА рд╕рд░реНрд╡рд╛рдд рдордиреЛрд░рдВрдЬрдХ рдкрд░реНрдпрд╛рдп рдЖрд╣реЗ рдЕрд╕реЗ рд╡рд╛рдЯрд▓реЗ, рдкрд░рдВрддреБ рддреЗ рдПрдХрд╛ рд╡рд░реНрд╖рд╛рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдХрд╛рд│ рд╕рдорд░реНрдерд┐рдд рдирд╛рд╣реА рдЖрдгрд┐ рд╢рд┐рд╡рд╛рдп, рдиреЛрдб-рдирд┐рд░реНрдпрд╛рддрдХрд░реНрддрд╛ рдЖрдгрд┐ kube-рд╕реНрдЯреЗрдЯ-рдореЗрдЯреНрд░рд┐рдХреНрд╕рдЪреНрдпрд╛ рдирд╡реАрди рдЖрд╡реГрддреНрддреНрдпрд╛рдВрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА. рдЖрдгрд┐ рдХрдзреАрддрд░реА рдЖрдореНрд╣реА рдард░рд╡рд▓рдВ: тАЬрдЖрдкрдг рд╕реНрд╡рддрдГрдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрдК рдирдпреЗ рдХрд╛?тАЭ

рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рдкреНрд▓рдЧрдЗрдирдордзреНрдпреЗ рдХреЛрдгрддреНрдпрд╛ рдХрд▓реНрдкрдирд╛ рдЕрдВрдорд▓рд╛рдд рдЖрдгрдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛:

  • тАЬрдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рдореЕрдктАЭ рдЪреЗ рд╡реНрд╣рд┐рдЬреНрдпреБрдЕрд▓рд╛рдпрдЭреЗрд╢рди: рдХреНрд▓рд╕реНрдЯрд░рдордзреАрд▓ рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдЪреЗ рд╕реЛрдпреАрд╕реНрдХрд░ рд╕рд╛рджрд░реАрдХрд░рдг, рдиреЗрдорд╕реНрдкреЗрд╕, рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯреНрд╕ рджреНрд╡рд╛рд░реЗ рдЧрдЯрдмрджреНрдз рдХреЗрд▓реЗрд▓реЗ...;
  • "рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ - рд╕рд░реНрд╡реНрд╣рд┐рд╕ (+рдкреЛрд░реНрдЯ)" рд╕рд╛рд░рдЦреНрдпрд╛ рдХрдиреЗрдХреНрд╢рдирдЪреЗ рд╡реНрд╣рд┐рдЬреНрдпреБрдЕрд▓рд╛рдпрдЭреЗрд╢рди.
  • рдХреНрд▓рд╕реНрдЯрд░ рдиреЛрдбреНрд╕рдордзреНрдпреЗ рдХреНрд▓рд╕реНрдЯрд░ рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рдЪреНрдпрд╛ рд╡рд┐рддрд░рдгрд╛рдЪреЗ рд╡реНрд╣рд┐рдЬреНрдпреБрдЕрд▓рд╛рдпрдЭреЗрд╢рди.
  • рдЕрдиреЗрдХ рд╕реНрддреНрд░реЛрддрд╛рдВрдХрдбреВрди рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдЖрдгрд┐ рдорд╛рд╣рд┐рддреАрдЪреЗ рд╕рдВрдХрд▓рди: Prometheus рдЖрдгрд┐ k8s api рд╕рд░реНрд╡реНрд╣рд░.
  • рджреЛрдиреНрд╣реА рдкрд╛рдпрд╛рднреВрдд рднрд╛рдЧрд╛рдВрдЪреЗ рдирд┐рд░реАрдХреНрд╖рдг (CPU рд╡реЗрд│, рдореЗрдорд░реА, рдбрд┐рд╕реНрдХ рд╕рдмрд╕рд┐рд╕реНрдЯрдо, рдиреЗрдЯрд╡рд░реНрдХрдЪрд╛ рд╡рд╛рдкрд░) рдЖрдгрд┐ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдЬрд┐рдХ - рд╣реЗрд▓реНрде-рд╕реНрдЯреЗрдЯрд╕ рдкреЙрдбреНрд╕, рдЙрдкрд▓рдмреНрдз рдкреНрд░рддрд┐рдХреГрддреАрдВрдЪреА рд╕рдВрдЦреНрдпрд╛, рдЬрд┐рд╡рдВрддрдкрдгрд╛/рддрдпрд╛рд░реА рдЪрд╛рдЪрдгреА рдЙрддреНрддреАрд░реНрдг рдХрд░рдгреНрдпрд╛рдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА.

рднрд╛рдЧ 1: "Grafana рдкреНрд▓рдЧрдЗрди" рдореНрд╣рдгрдЬреЗ рдХрд╛рдп?

рддрд╛рдВрддреНрд░рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рддреВрди, Grafana рд╕рд╛рдареА рдкреНрд▓рдЧрдЗрди рдПрдХ рдХреЛрдиреАрдп рдирд┐рдпрдВрддреНрд░рдХ рдЖрд╣реЗ, рдЬреЛ Grafana рдбреЗрдЯрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рд╕рдВрдЧреНрд░рд╣рд┐рдд рдЖрд╣реЗ (/var/grafana/plugins/ /dist/module.js) рдЖрдгрд┐ рд╕рд┐рд╕реНрдЯрдордЬреЗрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдореНрд╣рдгреВрди рд▓реЛрдб рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ. рддрд╕реЗрдЪ рдпрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рддреБрдордЪреНрдпрд╛ рдкреНрд▓рдЧрдЗрдирдмрджреНрджрд▓ рд╕рд░реНрд╡ рдореЗрдЯрд╛ рдорд╛рд╣рд┐рддреА рдЕрд╕рд▓реЗрд▓реА plugin.json рдлрд╛рдИрд▓ рдЕрд╕рд╛рд╡реА: рдирд╛рд╡, рдЖрд╡реГрддреНрддреА, рдкреНрд▓рдЧрдЗрди рдкреНрд░рдХрд╛рд░, рд░реЗрдкреЙрдЬрд┐рдЯрд░реА/рд╕рд╛рдЗрдЯ/рдкрд░рд╡рд╛рдирд╛, рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡ рдЗрддреНрдпрд╛рджреАрдВрдЪреНрдпрд╛ рд▓рд┐рдВрдХреНрд╕.

рдЧреНрд░рд╛рдлрд╛рдирд╛рд╕рд╛рдареА рдкреНрд▓рдЧрдЗрдирдЪрд╛ рд╡рд┐рдХрд╛рд╕: рдореЛрдареНрдпрд╛ рд╢реЙрдЯреНрд╕рдЪрд╛ рдЗрддрд┐рд╣рд╛рд╕
module.ts

рдЧреНрд░рд╛рдлрд╛рдирд╛рд╕рд╛рдареА рдкреНрд▓рдЧрдЗрдирдЪрд╛ рд╡рд┐рдХрд╛рд╕: рдореЛрдареНрдпрд╛ рд╢реЙрдЯреНрд╕рдЪрд╛ рдЗрддрд┐рд╣рд╛рд╕
plugin.json

рдЬрд╕реЗ рдЖрдкрдг рд╕реНрдХреНрд░реАрдирд╢реЙрдЯрдордзреНрдпреЗ рдкрд╛рд╣реВ рд╢рдХрддрд╛, рдЖрдореНрд╣реА plugin.type = app рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реЗ рдЖрд╣реЗ. рдХрд╛рд░рдг Grafana рд╕рд╛рдареА рдкреНрд▓рдЧрдЗрди рддреАрди рдкреНрд░рдХрд╛рд░рдЪреЗ рдЕрд╕реВ рд╢рдХрддрд╛рдд:

рдкреЕрдирд▓: рдкреНрд▓рдЧрдЗрдирдЪрд╛ рд╕рд░реНрд╡рд╛рдд рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ - рд╣реЗ рд╡рд┐рд╡рд┐рдз рдбреЕрд╢рдмреЛрд░реНрдб рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реЗрд▓реЗ рдХреЛрдгрддреЗрд╣реА рдореЗрдЯреНрд░рд┐рдХреНрд╕ рд╡реНрд╣рд┐рдЬреНрдпреБрдЕрд▓рд╛рдпрдЭ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреЕрдиреЗрд▓ рдЖрд╣реЗ.
рдорд╛рд╣рд┐рддреАрдЪрд╛ рд╕реНрд░реЛрдд: рдХрд╛рд╣реА рдбреЗрдЯрд╛ рд╕реНрд░реЛрддрд╛рд╢реА рдкреНрд▓рдЧрдЗрди рдХрдиреЗрдХреНрдЯрд░ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, Prometheus-datasource, ClickHouse-datasource, ElasticSearch-datasource).
рдЕрдиреБрдкреНрд░рдпреЛрдЧ: рдПрдХ рдкреНрд▓рдЧрдЗрди рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ Grafana рдордзреНрдпреЗ рддреБрдордЪрд╛ рд╕реНрд╡рддрдГрдЪрд╛ рдлреНрд░рдВрдЯрдПрдВрдб рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕, рддреБрдордЪреА рд╕реНрд╡рддрдГрдЪреА html рдкреЗрдЬ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕ рдЖрдгрд┐ рд╡рд┐рд╡рд┐рдз рдбреЗрдЯрд╛рдЪреА рдХрд▓реНрдкрдирд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдбреЗрдЯрд╛рд╕реНрд░реЛрдд рдореЕрдиреНрдпреБрдЕрд▓реА рдНрдХреНрд╕реЗрд╕ рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ. рддрд╕реЗрдЪ, рдЗрддрд░ рдкреНрд░рдХрд╛рд░рдЪреЗ рдкреНрд▓рдЧрдЗрди (рдбреЗрдЯрд╛рд╕реНрд░реЛрдд, рдкреЕрдиреЗрд▓) рдЖрдгрд┐ рд╡рд┐рд╡рд┐рдз рдбреЕрд╢рдмреЛрд░реНрдб рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡ рдореНрд╣рдгреВрди рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд.

рдЧреНрд░рд╛рдлрд╛рдирд╛рд╕рд╛рдареА рдкреНрд▓рдЧрдЗрдирдЪрд╛ рд╡рд┐рдХрд╛рд╕: рдореЛрдареНрдпрд╛ рд╢реЙрдЯреНрд╕рдЪрд╛ рдЗрддрд┐рд╣рд╛рд╕
type=app рд╕рд╣ рдЙрджрд╛рд╣рд░рдг рдкреНрд▓рдЧрдЗрди рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡.

рддреБрдореНрд╣реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореНрд╣рдгреВрди JavaScript рдЖрдгрд┐ TypeScript рджреЛрдиреНрд╣реА рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛ (рдЖрдореНрд╣реА рддреЗ рдирд┐рд╡рдбрд▓реЗ рдЖрд╣реЗ). рдЖрдкрдг рдХрд░реВ рд╢рдХрддрд╛ рдЕрд╢рд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рд╣реЕрд▓реЛ-рд╡рд░реНрд▓реНрдб рдкреНрд▓рдЧрдЗрдирдЪреА рддрдпрд╛рд░реА рд▓рд┐рдВрдХ рд╢реЛрдзрд╛: рдпрд╛ рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдордзреНрдпреЗ рдкреНрд░реА-рдЗрдВрд╕реНрдЯреЙрд▓ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЖрдгрд┐ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдмрд┐рд▓реНрдбрд░реНрд╕рд╕рд╣ рдореЛрдареНрдпрд╛ рд╕рдВрдЦреНрдпреЗрдиреЗ рд╕реНрдЯрд╛рд░реНрдЯрд░-рдкреЕрдХ рдЖрд╣реЗрдд (рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдордзреНрдпреЗ рдкреНрд▓рдЧрдЗрдирдЪреЗ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреАрд▓ рдЖрд╣реЗ).

рднрд╛рдЧ реи: рд╕реНрдерд╛рдирд┐рдХ рд╡рд╛рддрд╛рд╡рд░рдг рддрдпрд╛рд░ рдХрд░рдгреЗ

рдкреНрд▓рдЧрдЗрдирд╡рд░ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣рд╛рд▓рд╛ рдиреИрд╕рд░реНрдЧрд┐рдХрд░рд┐рддреНрдпрд╛ рд╕рд░реНрд╡ рдкреВрд░реНрд╡рд╕реНрдерд╛рдкрд┐рдд рд╕рд╛рдзрдирд╛рдВрд╕рд╣ kubernetes рдХреНрд▓рд╕реНрдЯрд░рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ: prometheus, node-exporter, kube-state-metrics, grafana. рд╡рд╛рддрд╛рд╡рд░рдг рдЬрд▓рдж, рд╕рд╣рдЬ рдЖрдгрд┐ рдиреИрд╕рд░реНрдЧрд┐рдХрд░рд┐рддреНрдпрд╛ рд╕реЗрдЯ рдХреЗрд▓реЗ рдЬрд╛рд╡реЗ рдЖрдгрд┐ рд╣реЙрдЯ-рд░реАрд▓реЛрдб рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, Grafana рдбреЗрдЯрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдереЗрдЯ рд╡рд┐рдХрд╕рдХрд╛рдЪреНрдпрд╛ рдорд╢реАрдирд╡рд░реВрди рдорд╛рдЙрдВрдЯ рдХреЗрд▓реА рдЬрд╛рд╡реА.

рдЖрдордЪреНрдпрд╛ рдорддреЗ, рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рд╕рд╣ рд╕реНрдерд╛рдирд┐рдХ рдкрд╛рддрд│реАрд╡рд░ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рдЪрд╛ рд╕рд░реНрд╡рд╛рдд рд╕реЛрдпреАрд╕реНрдХрд░ рдорд╛рд░реНрдЧ рдЖрд╣реЗ minikube. рдкреБрдвреАрд▓ рдкрд╛рдпрд░реА рдореНрд╣рдгрдЬреЗ рдкреНрд░реЛрдорд┐рдерд┐рдпрд╕-рдСрдкрд░реЗрдЯрд░ рд╡рд╛рдкрд░реВрди рдкреНрд░реЛрдорд┐рдерд┐рдпрд╕ + рдЧреНрд░рд╛рдлрд╛рдирд╛ рд╕рдВрдпреЛрдЬрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ. IN рд╣рд╛ рд▓реЗрдЦ рдорд┐рдиреАрдХреНрдпреБрдмрд╡рд░ рдкреНрд░реЛрдорд┐рдерд┐рдпрд╕-рдСрдкрд░реЗрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрдЪреЗ рддрдкрд╢реАрд▓рд╡рд╛рд░ рд╡рд░реНрдгрди рдХреЗрд▓реЗ рдЖрд╣реЗ. рджреГрдврддрд╛ рд╕рдХреНрд╖рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрдг рдкреЕрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рджреГрдврддрд╛: рдЦрд░реЗ рдЪрд╛рд░реНрдЯ/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: рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рдХрд╛рд╕

рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбреЗрд▓

рдкреНрд▓рдЧрдЗрди рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рддрдпрд╛рд░реАрдд, рдЖрдореНрд╣реА рд╕рд░реНрд╡ рдореВрд▓рднреВрдд рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдШрдЯрдХрд╛рдВрдЪреЗ рд╡рд░реНрдгрди рдХрд░рдгреНрдпрд╛рдЪреЗ рдард░рд╡рд┐рд▓реЗ рдЖрд╣реЗ рдЬреНрдпрд╛рдВрдЪреНрдпрд╛рд╕рд╣ рдЖрдореНрд╣реА рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд░реНрдЧрд╛рдВрдЪреНрдпрд╛ рд╕реНрд╡рд░реВрдкрд╛рдд рдХрд╛рд░реНрдп рдХрд░реВ: рдкреЙрдб, рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ, рдбреЗрдореЙрдирд╕реЗрдЯ, рд╕реНрдЯреЗрдЯрдлреБрд▓рд╕реЗрдЯ, рдиреЛрдХрд░реА, рдХреНрд░реЙрдирдЬреЙрдм, рд╕реЗрд╡рд╛, рдиреЛрдб, рдиреЗрдорд╕реНрдкреЗрд╕. рдпрд╛рддреАрд▓ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рд╕рд╛рдорд╛рдиреНрдп рдмреЗрд╕рдореЙрдбреЗрд▓ рд╡рд░реНрдЧрд╛рдХрдбреВрди рд╡рд╛рд░рд╕рд╛ рдШреЗрддреЛ, рдЬреЗ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░, рдбрд┐рд╕реНрдЯреНрд░рдХреНрдЯрд░, рджреГрд╢реНрдпрдорд╛рдирддрд╛ рдЕрдкрдбреЗрдЯ рдЖрдгрд┐ рд╕реНрд╡рд┐рдЪ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдкрджреНрдзрддреАрдВрдЪреЗ рд╡рд░реНрдгрди рдХрд░рддреЗ. рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдЗрддрд░ рдШрдЯрдХрд╛рдВрд╕рд╣ рдиреЗрд╕реНрдЯреЗрдб рдирд╛рддреЗрд╕рдВрдмрдВрдзрд╛рдВрдЪреЗ рд╡рд░реНрдгрди рдХрд░рддреЛ, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рдЙрдкрдпреЛрдЬрдирд╛рдЪреНрдпрд╛ рдШрдЯрдХрд╛рд╕рд╛рдареА рдкреЙрдбреНрд╕рдЪреА рд╕реВрдЪреА.

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: рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд

Grafana рдЪреНрдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рддреВрди, рдбреЗрдЯрд╛рд╕реЛрд░реНрд╕ рд╣реЗ рдЗрддрд░ рд╕рд░реНрд╡ рдкреНрд▓рдЧрдЗрди рд╕рд╛рд░рдЦреЗрдЪ рдЖрд╣реЗ: рддреНрдпрд╛рдЪреЗ рд╕реНрд╡рддрдГрдЪреЗ рдПрдВрдЯреНрд░реА рдкреЙрдИрдВрдЯ module.js рдЖрд╣реЗ, рдореЗрдЯрд╛ рдорд╛рд╣рд┐рддреА plugin.json рдЕрд╕рд▓реЗрд▓реА рдлрд╛рдЗрд▓ рдЖрд╣реЗ. type = app рд╕рд╣ рдкреНрд▓рдЧрдЗрди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддрд╛рдирд╛, рдЖрдореНрд╣реА рд╡рд┐рджреНрдпрдорд╛рди рдбреЗрдЯрд╛рд╕реНрд░реЛрдд (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, prometheus-datasource) рдЖрдгрд┐ рдЖрдордЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рджреЛрдиреНрд╣реАрд╢реА рд╕рдВрд╡рд╛рдж рд╕рд╛рдзреВ рд╢рдХрддреЛ, рдЬреЗ рдЖрдореНрд╣реА рдереЗрдЯ рдкреНрд▓рдЧрдЗрди рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд (dist/datasource/*) рд╕рдВрдЪрдпрд┐рдд рдХрд░реВ рд╢рдХрддреЛ рдХрд┐рдВрд╡рд╛ рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡ рдореНрд╣рдгреВрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░реВ рд╢рдХрддреЛ. рдЖрдордЪреНрдпрд╛ рдмрд╛рдмрддреАрдд, рдбреЗрдЯрд╛рд╕реНрд░реЛрдд рдкреНрд▓рдЧрдЗрди рдХреЛрдбрд╕рд╣ рдпреЗрддреЛ. config.html рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдЖрдгрд┐ ConfigCtrl рдХрдВрдЯреНрд░реЛрд▓рд░ рдЕрд╕рдгреЗ рджреЗрдЦреАрд▓ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдЬреНрдпрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдбреЗрдЯрд╛рд╕реЛрд░реНрд╕ рдЗрдиреНрд╕реНрдЯрдиреНрд╕ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдкреЗрдЬ рдЖрдгрд┐ рдбреЗрдЯрд╛рд╕реЛрд░реНрд╕ рдХрдВрдЯреНрд░реЛрд▓рд░рд╕рд╛рдареА рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓, рдЬреЛ рддреБрдордЪреНрдпрд╛ рдбреЗрдЯрд╛рд╕реЛрд░реНрд╕рдЪреЗ рд▓реЙрдЬрд┐рдХ рд▓рд╛рдЧреВ рдХрд░рддреЛ.

рдХреБрдмреЗрдЧреНрд░рд╛рдл рдкреНрд▓рдЧрдЗрдирдордзреНрдпреЗ, рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлреЗрд╕рдЪреНрдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рддреВрди, рдбреЗрдЯрд╛рд╕реЛрд░реНрд╕ рд╣реЗ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░рдЪреЗ рдЙрджрд╛рд╣рд░рдг рдЖрд╣реЗ рдЬреЗ рдЦрд╛рд▓реАрд▓ рдХреНрд╖рдорддрд╛ рд▓рд╛рдЧреВ рдХрд░рддреЗ (рд╕реНрд░реЛрдд рдХреЛрдб рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ рджреБрд╡рд╛):

  • k8s api-server рд╡рд░реВрди рдбреЗрдЯрд╛ рдЧреЛрд│рд╛ рдХрд░рдгреЗ (рдиреЗрдорд╕реНрдкреЗрд╕реЗрд╕, рдЙрдкрдпреЛрдЬрдирд╛рдВрдЪреА рдпрд╛рджреА рдорд┐рд│рд╡рдгреЗ...)
  • prometheus-datasource рд▓рд╛ рдкреНрд░реЙрдХреНрд╕реА рд╡рд┐рдирдВрддреНрдпрд╛ (рдЬреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд▓рд╕реНрдЯрд░рд╕рд╛рдареА рдкреНрд▓рдЧрдЗрди рд╕реЗрдЯрд┐рдВрдЧреНрдЬрдордзреНрдпреЗ рдирд┐рд╡рдбрд▓реЗ рдЬрд╛рддреЗ) рдЖрдгрд┐ рд╕реНрдерд┐рд░ рдкреГрд╖реНрдард╛рдВрдордзреНрдпреЗ рдЖрдгрд┐ рдбреЕрд╢рдмреЛрд░реНрдбрдордзреНрдпреЗ рдбреЗрдЯрд╛ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рддрд┐рд╕рд╛рджрд╛рдВрдЪреЗ рд╕реНрд╡рд░реВрдкрди.
  • рд╕реНрдерд┐рд░ рдкреНрд▓рдЧрдЗрди рдкреГрд╖реНрдард╛рдВрд╡рд░ рдбреЗрдЯрд╛ рдЕрджреНрдпрддрдирд┐рдд рдХрд░рдгреЗ (рд╕реЗрдЯ рд░рд┐рдлреНрд░реЗрд╢ рджрд░рд╛рд╕рд╣).
  • рдЧреНрд░рд╛рдлрд╛рдирд╛-рдбреЕрд╢рдмреЛрд░реНрдбреНрд╕ (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 рд╕рд╛рдареА рдбреА рдлреЕрдХреНрдЯреЛ рдорд╛рдирдХ) рд╡рд╛рдкрд░реВрди рдкреНрд░рд╡реЗрд╢ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣рд╛рд▓рд╛ рдереЛрдбреЗ рдЯреНрд╡реАрдХрд┐рдВрдЧ рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧрд▓реЗ.

рдпрд╛ рд╕рдорд╕реНрдпреЗрдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрдг рдЕрдВрдЧрднреВрдд рдЧреНрд░рд╛рдлрдирд╛ "рдкреНрд▓рдЧрдЗрди рдорд╛рд░реНрдЧ" рдпрдВрддреНрд░рдгрд╛ рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛ (рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓ рдпреЗрдереЗ рдЕрдзрд┐рдХреГрдд рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рдкреГрд╖реНрда). рдЖрдордЪреНрдпрд╛ рдбреЗрдЯрд╛рд╕реЛрд░реНрд╕рдЪреНрдпрд╛ рд╕реЗрдЯрд┐рдВрдЧреНрдЬрдордзреНрдпреЗ, рдЖрдореНрд╣реА рд░рд╛рдЙрдЯрд┐рдВрдЧ рдирд┐рдпрдорд╛рдВрдЪрд╛ рд╕рдВрдЪ рдШреЛрд╖рд┐рдд рдХрд░реВ рд╢рдХрддреЛ рдЬреНрдпрд╛рд╡рд░ рдЧреНрд░рд╛рдлрд╛рдирд╛ рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡реНрд╣рд░рджреНрд╡рд╛рд░реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗрд▓реА рдЬрд╛рдИрд▓. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдкреНрд░рддреНрдпреЗрдХ рд╡реИрдпрдХреНрддрд┐рдХ рдПрдВрдбрдкреЙрдЗрдВрдЯрд╕рд╛рдареА рдЯреЗрдореНрдкреНрд▓реЗрдЯрд┐рдВрдЧрдЪреНрдпрд╛ рд╢рдХреНрдпрддреЗрд╕рд╣ рд╢реАрд░реНрд╖рд▓реЗрдЦ рдХрд┐рдВрд╡рд╛ url рд╕реЗрдЯ рдХрд░рдгреЗ рд╢рдХреНрдп рдЖрд╣реЗ, рдЬреНрдпрд╛рд╕рд╛рдареА рдбреЗрдЯрд╛ jsonData рдЖрдгрд┐ рд╕реБрд░рдХреНрд╖рд┐рддJsonData рдлреАрд▓реНрдбрдордзреВрди рдШреЗрддрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ (рдПрдирдХреНрд░рд┐рдкреНрдЯреЗрдб рд╕реНрд╡рд░реВрдкрд╛рдд рдкрд╛рд╕рд╡рд░реНрдб рдХрд┐рдВрд╡рд╛ рдЯреЛрдХрди рд╕рдВрдЪрдпрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА). рдЖрдордЪреНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд, рд╕рд╛рд░рдЦреЗ рдкреНрд░рд╢реНрди /__proxy/api/v1/namespaces рдлреЙрд░реНрдордЪреНрдпрд╛ url рд╡рд░ рдкреНрд░реЙрдХреНрд╕реА рдХреЗрд▓реЗ рдЬрд╛рдИрд▓
рдЕрдзрд┐рдХреГрддрддреЗрд╕рд╣ /api/v8/namespaces: Bearer рд╢реАрд░реНрд╖рд▓реЗрдЦ.

рдЧреНрд░рд╛рдлрд╛рдирд╛рд╕рд╛рдареА рдкреНрд▓рдЧрдЗрдирдЪрд╛ рд╡рд┐рдХрд╛рд╕: рдореЛрдареНрдпрд╛ рд╢реЙрдЯреНрд╕рдЪрд╛ рдЗрддрд┐рд╣рд╛рд╕

рдЧреНрд░рд╛рдлрд╛рдирд╛рд╕рд╛рдареА рдкреНрд▓рдЧрдЗрдирдЪрд╛ рд╡рд┐рдХрд╛рд╕: рдореЛрдареНрдпрд╛ рд╢реЙрдЯреНрд╕рдЪрд╛ рдЗрддрд┐рд╣рд╛рд╕

рд╕рд╛рд╣рдЬрд┐рдХрдЪ, k8s api рд╕рд░реНрд╡реНрд╣рд░рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣рд╛рд▓рд╛ рдХреЗрд╡рд│ рд╡рд╛рдЪрдиреАрдп рдкреНрд░рд╡реЗрд╢ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ, рдЬреЗ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдореЕрдирд┐рдлреЗрд╕реНрдЯ рдЖрд╣реЗ рдЬреЗ рддреБрдореНрд╣реА рджреЗрдЦреАрд▓ рд╢реЛрдзреВ рд╢рдХрддрд╛ рдкреНрд▓рдЧрдЗрди рд╕реНрддреНрд░реЛрдд рдХреЛрдб.

рднрд╛рдЧ 5: рд░рд┐рд▓реАрдЬ

рдЧреНрд░рд╛рдлрд╛рдирд╛рд╕рд╛рдареА рдкреНрд▓рдЧрдЗрдирдЪрд╛ рд╡рд┐рдХрд╛рд╕: рдореЛрдареНрдпрд╛ рд╢реЙрдЯреНрд╕рдЪрд╛ рдЗрддрд┐рд╣рд╛рд╕

рдПрдХрджрд╛ рддреБрдореНрд╣реА рддреБрдордЪреЗ рд╕реНрд╡рддрдГрдЪреЗ Grafana рдкреНрд▓рдЧрдЗрди рд▓рд┐рд╣рд┐рд▓реНрдпрд╛рдирдВрддрд░, рддреБрдореНрд╣рд╛рд▓рд╛ рддреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХрд░рд┐рддреНрдпрд╛ рдЙрдкрд▓рдмреНрдз рдХрд░реВрди рджреНрдпрд╛рдпрдЪреЗ рдЕрд╕реЗрд▓. Grafana рдордзреНрдпреЗ рд╣реА рдкреНрд▓рдЧрдЗрдирдЪреА рд▓рд╛рдпрдмреНрд░рд░реА рдпреЗрдереЗ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ grafana.com/grafana/plugins

рддреБрдордЪреЗ рдкреНрд▓рдЧрдЗрди рдЕрдзрд┐рдХреГрдд рд╕реНрдЯреЛрдЕрд░рд╡рд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рдкреАрдЖрд░ рдЗрди рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рд╣реЗ рднрд╛рдВрдбрд╛рд░repo.json рдлрд╛рдЗрд▓рдордзреНрдпреЗ рдпрд╛рд╕рд╛рд░рдЦреА рд╕рд╛рдордЧреНрд░реА рдЬреЛрдбреВрди:

рдЧреНрд░рд╛рдлрд╛рдирд╛рд╕рд╛рдареА рдкреНрд▓рдЧрдЗрдирдЪрд╛ рд╡рд┐рдХрд╛рд╕: рдореЛрдареНрдпрд╛ рд╢реЙрдЯреНрд╕рдЪрд╛ рдЗрддрд┐рд╣рд╛рд╕

рдЬреЗрдереЗ рдЖрд╡реГрддреНрддреА рд╣реА рддреБрдордЪреНрдпрд╛ рдкреНрд▓рдЧрдЗрдирдЪреА рдЖрд╡реГрддреНрддреА рдЖрд╣реЗ, url рд╣реА рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдЪреА рд▓рд┐рдВрдХ рдЖрд╣реЗ рдЖрдгрд┐ рдХрдорд┐рдЯ рд╣рд╛ рдХрдорд┐рдЯрдЪрд╛ рд╣реЕрд╢ рдЖрд╣реЗ рдЬреНрдпрд╛рд╕рд╛рдареА рдкреНрд▓рдЧрдЗрдирдЪреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрд╡реГрддреНрддреА рдЙрдкрд▓рдмреНрдз рдЕрд╕реЗрд▓.

рдЖрдгрд┐ рдЖрдЙрдЯрдкреБрдЯрд╡рд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдПрдХ рдЕрджреНрднреБрдд рдЪрд┐рддреНрд░ рджрд┐рд╕реЗрд▓:

рдЧреНрд░рд╛рдлрд╛рдирд╛рд╕рд╛рдареА рдкреНрд▓рдЧрдЗрдирдЪрд╛ рд╡рд┐рдХрд╛рд╕: рдореЛрдареНрдпрд╛ рд╢реЙрдЯреНрд╕рдЪрд╛ рдЗрддрд┐рд╣рд╛рд╕

рддреНрдпрд╛рд╕рд╛рдареАрдЪрд╛ рдбреЗрдЯрд╛ рддреБрдордЪреНрдпрд╛ Readme.md, Changelog.md рдЖрдгрд┐ рдкреНрд▓рдЧрдЗрди рд╡рд░реНрдгрдирд╛рд╕рд╣ plugin.json рдлрд╛рдЗрд▓рдордзреВрди рдЖрдкреЛрдЖрдк рд╣рд╕реНрддрдЧрдд рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓.

рднрд╛рдЧ 6: рдирд┐рд╖реНрдХрд░реНрд╖рд╛рдВрдРрд╡рдЬреА

рдЖрдореНрд╣реА рдкреНрд░рдХрд╛рд╢рдирд╛рдирдВрддрд░ рдЖрдордЪреЗ рдкреНрд▓рдЧрдЗрди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдгреЗ рдерд╛рдВрдмрд╡рд▓реЗ рдирд╛рд╣реА. рдЖрдгрд┐ рдЖрддрд╛ рдЖрдореНрд╣реА рдХреНрд▓рд╕реНрдЯрд░ рдиреЛрдбреНрд╕рдЪреНрдпрд╛ рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рдЪреЗ рдпреЛрдЧреНрдпрд░рд┐рддреНрдпрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдгреЗ, UX рд╕реБрдзрд╛рд░рдгреНрдпрд╛рд╕рд╛рдареА рдирд╡реАрди рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рд╕рд╛рджрд░ рдХрд░рдгреЗ рдЖрдгрд┐ рдЖрдордЪреНрдпрд╛ рдХреНрд▓рд╛рдпрдВрдЯ рдЖрдгрд┐ GitHub рд╡рд░реАрд▓ рд▓реЛрдХрд╛рдВрдХрдбреВрди (рдЬрд░ рддреБрдореНрд╣реА рд╕реЛрдбрд▓реЗ рддрд░) рдкреНрд▓рдЧрдЗрди рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реНрдпрд╛рдирдВрддрд░ рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рдЕрднрд┐рдкреНрд░рд╛рдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╡рд░ рдХрд╛рдо рдХрд░рдд рдЖрд╣реЛрдд. рддреБрдордЪреА рд╕рдорд╕реНрдпрд╛ рдХрд┐рдВрд╡рд╛ рдкреБрд▓ рд╡рд┐рдирдВрддреА, рдорд▓рд╛ рдЦреВрдк рдЖрдирдВрдж рд╣реЛрдИрд▓ :)

рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрд╢рд╛ рдЖрд╣реЗ рдХреА рд╣рд╛ рд▓реЗрдЦ рддреБрдореНрд╣рд╛рд▓рд╛ рдЧреНрд░рд╛рдлрдирд╛ рд╕рд╛рд░рдЦреЗ рдЕрджреНрднреВрдд рд╕рд╛рдзрди рд╕рдордЬрдгреНрдпрд╛рд╕ рдорджрдд рдХрд░реЗрд▓ рдЖрдгрд┐ рдХрджрд╛рдЪрд┐рдд, рддреБрдордЪреЗ рд╕реНрд╡рддрдГрдЪреЗ рдкреНрд▓рдЧрдЗрди рд▓рд┐рд╣рд╛.

рдзрдиреНрдпрд╡рд╛рдж!)

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛