Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° плъгин Π·Π° Grafana: история Π½Π° Π½Π°Ρ‚Ρ€ΡƒΠΏΠ°Π½ΠΈΡ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠΈ

Π—Π΄Ρ€Π°Π²Π΅ΠΉΡ‚Π΅ Π½Π° всички! ΠŸΡ€Π΅Π΄ΠΈ няколко мСсСца пуснахмС Π² производство новия си open-source ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ β€” Grafana плъгин Π·Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π½Π° Kubernetes, ΠΊΠΎΠΉΡ‚ΠΎ Π½Π°Ρ€Π΅ΠΊΠΎΡ…ΠΌΠ΅ DevOpsProdigy KubeGraf. Π˜Π·Ρ…ΠΎΠ΄Π½ΠΈΡΡ‚ ΠΊΠΎΠ΄ Π½Π° плъгина Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ Π² публичния Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π½Π° GitHub. Π’ Ρ‚Π°Π·ΠΈ статия искамС Π΄Π° сподСлим с вас историята Π·Π° Ρ‚ΠΎΠ²Π° ΠΊΠ°ΠΊ ΡΡŠΠ·Π΄Π°Π΄ΠΎΡ…ΠΌΠ΅ плъгина, ΠΊΠ°ΠΊΠ²ΠΈ инструмСнти ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅ ΠΈ с ΠΊΠ°ΠΊΠ²ΠΈ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½ΠΈ камъни сС ΡΠ±Π»ΡŠΡΠΊΠ°Ρ…ΠΌΠ΅ Π² процСса Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°. Π”Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌ!

Част 0 β€” въвСТданС: ΠΊΠ°ΠΊ стигнахмС Π΄ΠΎ Ρ‚ΡƒΠΊ?

Π˜Π΄Π΅ΡΡ‚Π° Π΄Π° напишСм собствСн плъгин Π·Π° Grafana Π½ΠΈ Ρ…Ρ€ΡƒΠΌΠ½Π° напълно случайно. ΠΠ°ΡˆΠ°Ρ‚Π° компания Π²Π΅Ρ‡Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 10 Π³ΠΎΠ΄ΠΈΠ½ΠΈ сС Π·Π°Π½ΠΈΠΌΠ°Π²Π° с ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π½Π° web ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Π° слоТност. ΠŸΡ€Π΅Π· Ρ‚ΠΎΠ²Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π°Ρ‚Ρ€ΡƒΠΏΠ°Ρ…ΠΌΠ΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π΅Π½ ΠΎΠΏΠΈΡ‚, интСрСсни ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΈ ΠΈ Π·Π°Π΄ΡŠΠ»Π±ΠΎΡ‡Π΅Π½ΠΎ ΠΏΠΎΠ·Π½Π°Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ΠΎΠ²ΠΈ систСми. И Π² Π΅Π΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ си Π·Π°Π΄Π°Π΄ΠΎΡ…ΠΌΠ΅ Π²ΡŠΠΏΡ€ΠΎΡΠ°: β€žΠ˜ΠΌΠ° Π»ΠΈ магичСски инструмСнт Π·Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π½Π° Kubernetes, ΠΊΠΎΠΉΡ‚ΠΎ, ΠΊΠ°ΠΊΡ‚ΠΎ сС ΠΊΠ°Π·Π²Π°, β€žΡΠ»Π°Π³Π°Ρˆ ΠΈ Π·Π°Π±Ρ€Π°Π²ΡΡˆβ€œ?.. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ΡŠΡ‚ Π·Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π½Π° k8s, СстСствСно, ΠΎΡ‚Π΄Π°Π²Π½Π° Π΅ комбинацията Prometheus + Grafana. Π‘ΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° ΠΎΠ±ΡˆΠΈΡ€Π΅Π½ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ инструмСнти Π·Π° Ρ‚ΠΎΠ²Π° стСк Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅: prometheus-operator, Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Ρ‚Π°Π±Π»Π° kubernetes-mixin, grafana-kubernetes-app.

Най-интСрСсСн Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π·Π° нас сС ΠΎΠΊΠ°Π·Π° ΠΏΠ»Π°Π³ΠΈΠ½ΡŠΡ‚ grafana-kubernetes-app, Π½ΠΎ Ρ‚ΠΎΠΉ Π½Π΅ Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Π½ ΠΎΡ‚ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ Π³ΠΎΠ΄ΠΈΠ½Π° ΠΈ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ с Π½ΠΎΠ²ΠΈΡ‚Π΅ вСрсии Π½Π° node-exporter ΠΈ kube-state-metrics. И Π² Π΅Π΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅: β€žΠ ΠΊΠ°ΠΊΠ²ΠΎ Ρ‰Π΅ ΠΊΠ°ΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Π»ΠΈ собствСно Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅?β€œ

Какви ΠΈΠ΄Π΅ΠΈ Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅ Π΄Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ Π² нашия плъгин:

  • визуализация Π½Π° β€žΠΊΠ°Ρ€Ρ‚Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎβ€œ: ΡƒΠ΄ΠΎΠ±Π½ΠΎ прСдставянС Π½Π° прилоТСнията Π² кластСра, Π³Ρ€ΡƒΠΏΠΈΡ€Π°Π½ΠΈ ΠΏΠΎ namespaces, deployment-и…;
  • визуализация Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠΈ ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° β€ždeployment β€” service (+ports)”.
  • визуализация Π½Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° прилоТСнията Π² кластСра ΠΏΠΎ nod-ΠΎΠ²Π΅ Π½Π° кластСра.
  • ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ ΠΈ информация ΠΎΡ‚ няколко ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΠ°: Prometheus ΠΈ k8s API ΡΡŠΡ€Π²ΡŠΡ€.
  • ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΊΠ°ΠΊΡ‚ΠΎ Π½Π° инфраструктурната част (ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° процСсорно Π²Ρ€Π΅ΠΌΠ΅, ΠΏΠ°ΠΌΠ΅Ρ‚, дискова подсистСма, ΠΌΡ€Π΅ΠΆΠ°), Ρ‚Π°ΠΊΠ° ΠΈ Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° прилоТСнията β€” health-status Π½Π° pod-ΠΎΠ²Π΅, Π±Ρ€ΠΎΠΉ Π½Π°Π»ΠΈΡ‡Π½ΠΈ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ, информация Π·Π° изпълнСниС Π½Π° liveness/readiness ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ.

Част 1: Какво прСдставлява β€žΠΏΠ»ΡŠΠ³ΠΈΠ½ΡŠΡ‚ Π·Π° Grafanaβ€œ?

ΠžΡ‚ тСхничСска Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ°, ΠΏΠ»ΡŠΠ³ΠΈΠ½ΡŠΡ‚ Π·Π° Grafana Π΅ Angular ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€, ΠΊΠΎΠΉΡ‚ΠΎ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π² data дирСкторията Π½Π° Grafana (/var/grafana/plugins/<your_plugin_name>/dist/module.js) ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π·Π°Ρ€Π΅Π΄Π΅Π½ ΠΊΠ°Ρ‚ΠΎ SystemJS-ΠΌΠΎΠ΄ΡƒΠ». Π’ Ρ‚Π°Π·ΠΈ ΠΏΠ°ΠΏΠΊΠ° трябва Π΄Π° ΠΈΠΌΠ° Ρ„Π°ΠΉΠ» plugin.json, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ цялата мСтаинформация Π·Π° вашия плъгин: ΠΈΠΌΠ΅, вСрсия, Ρ‚ΠΈΠΏ плъгин, Π»ΠΈΠ½ΠΊΠΎΠ²Π΅ към Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ/сайт/лицСнзия, зависимости ΠΈ Ρ‚.Π½.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° плъгин Π·Π° Grafana: история Π½Π° Π½Π°Ρ‚Ρ€ΡƒΠΏΠ°Π½ΠΈΡ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠΈ
module.ts

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° плъгин Π·Π° Grafana: история Π½Π° Π½Π°Ρ‚Ρ€ΡƒΠΏΠ°Π½ΠΈΡ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠΈ
plugin.json

ΠšΠ°ΠΊΡ‚ΠΎ сС Π²ΠΈΠΆΠ΄Π° Π½Π° Π΅ΠΊΡ€Π°Π½Π°, посочихмС plugin.type = app. Π—Π°Ρ‰ΠΎΡ‚ΠΎ ΠΏΠ»ΡŠΠ³ΠΈΠ½ΠΈΡ‚Π΅ Π·Π° Grafana ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΎΡ‚ Ρ‚Ρ€ΠΈ Π²ΠΈΠ΄Π°:

panel: Π½Π°ΠΉ-разпространСният Ρ‚ΠΈΠΏ плъгини β€” прСдставлява ΠΏΠ°Π½Π΅Π» Π·Π° Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ, ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚Π°Π±Π»Π°.
datasource: плъгин-ΠΊΠΎΠ½Π΅ΠΊΡ‚ΠΎΡ€ Π·Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π° Π΄Π°Π½Π½ΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Prometheus-datasource, ClickHouse-datasource, ElasticSearch-datasource).
app: плъгин, ΠΊΠΎΠΉΡ‚ΠΎ Π²ΠΈ позволява Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΡ‚Π΅ собствСно Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Grafana, Π΄Π° ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ свои собствСни html страници ΠΈ Ρ€ΡŠΡ‡Π½ΠΎ Π΄Π° сС ΡΠ²ΡŠΡ€Π·Π²Π°Ρ‚Π΅ с datasource Π·Π° Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π΄Π°Π½Π½ΠΈ. Π’ ΡΡŠΡ‰ΠΎ Π²Ρ€Π΅ΠΌΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ плъгини ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅ (datasource, panel) ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚Π°Π±Π»Π°.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° плъгин Π·Π° Grafana: история Π½Π° Π½Π°Ρ‚Ρ€ΡƒΠΏΠ°Π½ΠΈΡ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠΈ
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° зависимости Π½Π° плъгин с type = app.

ΠšΠ°Ρ‚ΠΎ Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΊΠ°ΠΊΡ‚ΠΎ JavaScript, Ρ‚Π°ΠΊΠ° ΠΈ TypeScript (Π½ΠΈΠ΅ ΠΈΠ·Π±Ρ€Π°Ρ…ΠΌΠ΅ послСдния). Π¨Π°Π±Π»ΠΎΠ½ΠΈΡ‚Π΅ Π·Π° hello-world плъгини ΠΎΡ‚ всякакъв Ρ‚ΠΈΠΏ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π½Π° Π»ΠΈΠ½ΠΊΠ°: Π² Ρ‚ΠΎΠ·ΠΈ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΡƒΠΌ ΠΈΠΌΠ° голямо количСство starter-pack’овС (ΠΈΠΌΠ° Π΄Π°ΠΆΠ΅ СкспСримСнталСн ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° плъгин с React) с ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ инсталирани ΠΈ настроСни Π±ΠΈΠ»Π΄ систСми.

Част 2: ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π½Π° Π»ΠΎΠΊΠ°Π»Π½Π° срСда

Π—Π° Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎ плъгина, СстСствСно, Ρ‰Π΅ Π½ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ kubernetes-ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ с всички ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ инсталирани инструмСнти: prometheus, node-exporter, kube-state-metrics, grafana. Π‘Ρ€Π΅Π΄Π°Ρ‚Π° трябва Π΄Π° сС настройва Π±ΡŠΡ€Π·ΠΎ, лСсно ΠΈ нСусСтно, Π° Π·Π° осигуряванС Π½Π° hot-reload data-дирСкторията Π½Π° Grafana трябва Π΄Π° сС ΠΌΠΎΠ½Ρ‚ΠΈΡ€Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ ΠΎΡ‚ ΠΌΠ°ΡˆΠΈΠ½Π°Ρ‚Π° Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°.

Най-удобният, спорСд нас, Π½Π°Ρ‡ΠΈΠ½ Π·Π° Π»ΠΎΠΊΠ°Π»Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° с kubernetes Π΅ minikube. Π‘Π»Π΅Π΄Π²Π°Ρ‰Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ° Π΅ Π΄Π° инсталирамС Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° Prometheus + Grafana с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° prometheus-operator. Π’ Ρ‚Π°Π·ΠΈ статия Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΎ Π΅ описан ΠΏΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ ΠΏΠΎ инсталиранС Π½Π° prometheus-operator Π½Π° minikube. Π—Π° Π΄Π° сС Π²ΠΊΠ»ΡŽΡ‡ΠΈ пСрсистСнтност, Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° сС Π·Π°Π΄Π°Π΄Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ΡŠΡ‚ persistence: true Π² Ρ„Π°ΠΉΠ»Π° charts/grafana/values.yaml, Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ собствСн PV ΠΈ PVC ΠΈ Π΄Π° Π³ΠΈ Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° persistence.existingClaim

Π˜Ρ‚ΠΎΠ³ΠΎΠ²ΠΈΡΡ‚ скрипт Π·Π° стартиранС Π½Π° minikube ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°:

minikube start --kubernetes-version=v1.13.4 --memory=4096 --bootstrapper=kubeadm --extra-config=scheduler.address=0.0.0.0 --extra-config=controller-manager.address=0.0.0.0
minikube mount 
/home/sergeisporyshev/Projects/Grafana:/var/grafana --gid=472 --uid=472 --9p-version=9p2000.L

Част 3: Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅

ΠžΠ±Π΅ΠΊΡ‚Π½ΠΈΡΡ‚ ΠΌΠΎΠ΄Π΅Π»

Π’ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π·Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° приставка Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅ Π΄Π° опишСм всички основни сущности Π½Π° Kubernetes, с ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ, ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° TypeScript класовС: pod, deployment, daemonset, statefulset, job, cronjob, service, node, namespace. ВсСки ΠΎΡ‚ Ρ‚Π΅Π·ΠΈ класовС наслСдява ΠΎΡ‚ общия клас BaseModel, Π² ΠΊΠΎΠΉΡ‚ΠΎ са описани конструктор, дСструктор, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π·Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ смяна Π½Π° видимост. Π’ΡŠΠ² всСки ΠΎΡ‚ класовСтС са описани Π²Π»ΠΎΠΆΠ΅Π½ΠΈ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ с Π΄Ρ€ΡƒΠ³ΠΈ сущности, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, списък с pod’овС Π·Π° сущността ΠΎΡ‚ Ρ‚ΠΈΠΏ deployment.

import {Pod} from "./pod";
import {Service} from "./service";
import {BaseModel} from './traits/baseModel';

export class Deployment extends BaseModel{
   pods: Array;
   services: Array;

   constructor(data: any){
       super(data);
       this.pods = [];
       this.services = [];
   }
}

Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° getter’и ΠΈ setter’и ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·Π²Π΅ΠΆΠ΄Π°ΠΌΠ΅ ΠΈΠ»ΠΈ Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈΡ‚Π΅ Π½ΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ Π½Π° сущноститС ΠΏΠΎ ΡƒΠ΄ΠΎΠ±Π΅Π½ ΠΈ Ρ‡Π΅Ρ‚ΠΈΠ²Π΅Π½ Π½Π°Ρ‡ΠΈΠ½. НапримСр, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€Π°Π½ΠΎ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° allocatable cpu Π½Π° Π½ΠΎΠ΄Π°:

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

Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†ΠΈ

Π‘ΠΏΠΈΡΡŠΠΊΡŠΡ‚ Π½Π° всички страници Π½Π° Π½Π°ΡˆΠ°Ρ‚Π° приставка ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ сС описва Π² нашия pluing.json Π² Ρ€Π°Π·Π΄Π΅Π»Π° зависимости:

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° плъгин Π·Π° Grafana: история Π½Π° Π½Π°Ρ‚Ρ€ΡƒΠΏΠ°Π½ΠΈΡ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠΈ

Π’ Π±Π»ΠΎΠΊΠ° Π·Π° всяка страница трябва Π΄Π° ΡƒΠΊΠ°ΠΆΠ΅ΠΌ Π˜ΠœΠ•Π’Πž НА БВРАНИЦАВА (ΠΊΠΎΠ΅Ρ‚ΠΎ слСд Ρ‚ΠΎΠ²Π° Ρ‰Π΅ бъдС ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€Π°Π½ΠΎ Π² slug, ΠΏΠΎ ΠΊΠΎΠΉΡ‚ΠΎ Ρ‚Π°Π·ΠΈ страница Ρ‰Π΅ бъдС Π΄ΠΎΡΡ‚ΡŠΠΏΠ½Π°); ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π΅Π½ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с Ρ‚Π°Π·ΠΈ страница (ΡΠΏΠΈΡΡŠΠΊΡŠΡ‚ с ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ сС Скспортира Π² module.ts); ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π·Π° роля Π½Π° потрСбитСля, Π·Π° ΠΊΠΎΠ³ΠΎΡ‚ΠΎ Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с Ρ‚Π°Π·ΠΈ страница ΠΈ настройки Π½Π° навигацията Π·Π° страничната Π»Π΅Π½Ρ‚Π°.

Π’ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°, ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€Π΅Π½ Π·Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° страницата, трябва Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΠΌ templateUrl, ΠΏΡ€Π΅Π΄Π°Π²Π°ΠΉΠΊΠΈ Ρ‚Π°ΠΌ ΠΏΡŠΡ‚Ρ Π΄ΠΎ html Ρ„Π°ΠΉΠ»Π° с Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ°. Π’ΡŠΡ‚Ρ€Π΅ Π² ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€Π°, Ρ‡Ρ€Π΅Π· ΠΈΠ½ΠΆΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½Π΅ Π½Π° зависимости, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ 2 Π²Π°ΠΆΠ½ΠΈ angular услуги:

  • backendSrv β€” услуга, осигуряваща взаимодСйствиС с api-сСрвСра Π½Π° Grafana;
  • datasourceSrv β€” услуга, осигуряваща Π»ΠΎΠΊΠ°Π»Π½ΠΎ взаимодСйствиС с всички datasource, инсталирани Π² Π²Π°ΡˆΠ°Ρ‚Π° Grafana (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ .getAll() β€” Π²Ρ€ΡŠΡ‰Π° списък с всички инсталирани datasource; .get() β€” Π²Ρ€ΡŠΡ‰Π° ΠΎΠ±Π΅ΠΊΡ‚-инстанс Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ datasource.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° плъгин Π·Π° Grafana: история Π½Π° Π½Π°Ρ‚Ρ€ΡƒΠΏΠ°Π½ΠΈΡ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠΈ

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° плъгин Π·Π° Grafana: история Π½Π° Π½Π°Ρ‚Ρ€ΡƒΠΏΠ°Π½ΠΈΡ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠΈ

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° плъгин Π·Π° Grafana: история Π½Π° Π½Π°Ρ‚Ρ€ΡƒΠΏΠ°Π½ΠΈΡ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠΈ

Част 4: datasource

ΠžΡ‚ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° Grafana, datasource прСдставлява Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΡŠΠ² Ρ‚ΠΈΠΏ плъгин, ΠΊΠ°Ρ‚ΠΎ всички останали: Ρ‚ΠΎΠΉ ΠΈΠΌΠ° своя Ρ‚ΠΎΡ‡ΠΊΠ° Π·Π° Π²Ρ…ΠΎΠ΄ module.js, ΠΈΠΌΠ° ΠΈ Ρ„Π°ΠΉΠ» с ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ plugin.json. ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° плъгин с type = app ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° взаимодСйствамС ΠΊΠ°ΠΊΡ‚ΠΎ с Π²Π΅Ρ‡Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ datasource’и (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, prometheus-datasource), Ρ‚Π°ΠΊΠ° ΠΈ с Π½Π°ΡˆΠΈΡ‚Π΅ собствСни, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°ΠΌΠ΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π² дирСкторията Π½Π° плъгина (dist/datasource/*) ΠΈΠ»ΠΈ Π΄Π° инсталирамС ΠΊΠ°Ρ‚ΠΎ зависимост. Π’ нашия случай datasource сС ΠΏΡ€Π΅Π΄Π»Π°Π³Π° Π·Π°Π΅Π΄Π½ΠΎ с ΠΊΠΎΠ΄Π° Π½Π° плъгина. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π΅ Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅Ρ‚ΠΎ Π½Π° шаблона config.html ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€Π° ConfigCtrl, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π·Π° страницата Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° СкзСмпляра Π½Π° datasource ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€Π° Datasource, Π² ΠΊΠΎΠΉΡ‚ΠΎ сС Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π° Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° вашия datasource.

Π’ плъгина KubeGraf, ΠΎΡ‚ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° потрСбитСлския интСрфСйс, datasource прСдставлява СкзСмпляр Π½Π° kubernetes-ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°, Π² ΠΊΠΎΠΉΡ‚ΠΎ са Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ слСднитС Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ (изходният ΠΊΠΎΠ΄ Π΅ Π½Π°Π»ΠΈΡ‡Π΅Π½ ΠΎΡ‚ Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π°):

  • ΠΈΠ·Π²Π»ΠΈΡ‡Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ api-server’а k8s (ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° списък с namespace’и, deployment’и…)
  • проксириранС Π½Π° запитвания към prometheus-datasource (ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΈΠ·Π±ΠΈΡ€Π° Π² настройкитС Π½Π° плъгина Π·Π° всСки ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π΅Π½ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€) ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ ΠΊΠ°ΠΊΡ‚ΠΎ Π² статични страници, Ρ‚Π°ΠΊΠ° ΠΈ Π² Ρ‚Π°Π±Π»Π° Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅.
  • Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈΡ‚Π΅ Π½Π° статичнитС страници Π½Π° плъгина (с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π½Π° обновяванС).
  • ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° запитвания Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° шаблонСн списък Π² grafana-dashboards (ΠΌΠ΅Ρ‚ΠΎΠ΄ .metriFindQuery())

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° плъгин Π·Π° Grafana: история Π½Π° Π½Π°Ρ‚Ρ€ΡƒΠΏΠ°Π½ΠΈΡ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠΈ

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° плъгин Π·Π° Grafana: история Π½Π° Π½Π°Ρ‚Ρ€ΡƒΠΏΠ°Π½ΠΈΡ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠΈ

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° плъгин Π·Π° Grafana: история Π½Π° Π½Π°Ρ‚Ρ€ΡƒΠΏΠ°Π½ΠΈΡ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠΈ

  • тСст Π·Π° ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ с крайния k8s-ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€.
testDatasource(){
   let url = '/api/v1/namespaces';
   let _url = this.url;
   if(this.accessViaToken)
       _url += '/__proxy';
   _url += url;
   return this.backendSrv.datasourceRequest({
       url: _url,
       method: "GET",
       headers: {"Content-Type": 'application/json'}
   })
       .then(response => {
           if (response.status === 200) {
               return {status: "success", message: "Data source is OK", title: "Success"};
           }else{
               return {status: "error", message: "Data source is not OK", title: "Error"};
           }
       }, error => {
           return {status: "error", message: "Data source is not OK", title: "Error"};
       })
}

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ‚, спорСд нас, Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° Π·Π° аутСнтификация ΠΈ авторизация Π·Π° datasource. ОбикновСно, ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ° Π΄ΠΎ крайния ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ вградСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Grafana β€” datasourceHttpSettings. Π‘ ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° настроим Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ http-ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π° Π΄Π°Π½Π½ΠΈ, ΠΊΠ°Ρ‚ΠΎ посочим url ΠΈ основни настройки Π·Π° аутСнтификация/авторизация: потрСбитСлско ΠΈΠΌΠ΅ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»Π° ΠΈΠ»ΠΈ client-cert/client-key. Π—Π° Π΄Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° настройка Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏΠ° с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° bearer-Ρ‚ΠΎΠΊΠ΅Π½ (Π΄Π΅ Ρ„Π°ΠΊΡ‚ΠΎ стандарт Π·Π° k8s), сС Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ ΠΌΠ°Π»ΠΊΠΎ β€žΠΏΠΎΡ…ΠΈΠΌΠΈΡ‡Π²Π°Π½Π΅β€œ.

Π—Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° Ρ‚Π°Π·ΠΈ Π·Π°Π΄Π°Ρ‡Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ вградСния ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Π½Π° Grafana β€žPlugin Routesβ€œ (ΠΏΠΎΠ²Π΅Ρ‡Π΅ информация Π½Π° ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»Π½Π°Ρ‚Π° страница Π½Π° докумСнтацията). Π’ настройкитС Π½Π° нашия datasource ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° обявим Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° Ρ€ΠΎΡƒΡ‚ΠΈΠ½Π³, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½ΠΈ ΠΎΡ‚ proxy-сСрвСра Π½Π° grafana. НапримСр, Π·Π° всСки ΠΎΡ‚Π΄Π΅Π»Π΅Π½ endpoint ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° Π·Π°Π΄Π°Π²Π°Π½Π΅ Π½Π° Π·Π°Π³Π»Π°Π²ΠΊΠΈ ΠΈΠ»ΠΈ url с Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΡˆΠ°Π±Π»ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡ, Π΄Π°Π½Π½ΠΈ Π·Π° ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈ ΠΎΡ‚ ΠΏΠΎΠ»Π΅Ρ‚Π°Ρ‚Π° jsonData ΠΈ secureJsonData (Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°Ρ€ΠΎΠ»ΠΈ ΠΈΠ»ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ΠΈ Π² ΠΊΡ€ΠΈΠΏΡ‚ΠΈΡ€Π°Π½ Π²ΠΈΠ΄). Π’ нашия ΠΏΡ€ΠΈΠΌΠ΅Ρ€, заявки ΠΎΡ‚ Π²ΠΈΠ΄Π° /__proxy/api/v1/namespaces Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ проксирни Π½Π° url ΠΎΡ‚ Π²ΠΈΠ΄Π°
/api/v1/namespaces с задаванС на заглавка Authorization: Bearer.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° плъгин Π·Π° Grafana: история Π½Π° Π½Π°Ρ‚Ρ€ΡƒΠΏΠ°Π½ΠΈΡ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠΈ

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° плъгин Π·Π° Grafana: история Π½Π° Π½Π°Ρ‚Ρ€ΡƒΠΏΠ°Π½ΠΈΡ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠΈ

ЕстСствСно, Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с api-сСрвСра Π½Π° k8s Π½ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» с ΠΏΡ€Π°Π²Π° Π·Π° само Ρ‡Π΅Ρ‚Π΅Π½Π΅, манифСститС Π·Π° ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π² изходния ΠΊΠΎΠ΄ Π½Π° плъгина.

Част 5: ΠΈΠ·Π΄Π°Π½ΠΈΠ΅

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° плъгин Π·Π° Grafana: история Π½Π° Π½Π°Ρ‚Ρ€ΡƒΠΏΠ°Π½ΠΈΡ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠΈ

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ собствСния си плъгин Π·Π° Grafana, СстСствСно, Ρ‰Π΅ искатС Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ Π·Π° общСствСността. Π’ Grafana ΠΈΠΌΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎΡ‚ плъгини, Π΄ΠΎΡΡ‚ΡŠΠΏΠ½Π° Π½Π° адрСс grafana.com/grafana/plugins

Π—Π° Π΄Π° бъдС Π²Π°ΡˆΠΈΡΡ‚ плъгин Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ Π² официалния ΠΌΠ°Π³Π°Π·ΠΈΠ½, трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ PR Π² Ρ‚ΠΎΠ·ΠΈ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, добавяйки Π² Ρ„Π°ΠΉΠ»Π° repo.json ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ ΠΎΡ‚ Π²ΠΈΠ΄Π°:

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° плъгин Π·Π° Grafana: история Π½Π° Π½Π°Ρ‚Ρ€ΡƒΠΏΠ°Π½ΠΈΡ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠΈ

ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ version β€” вСрсията Π½Π° вашия плъгин, url β€” Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π° към рСпозитория, Π° commit β€” hash Π½Π° ΠΊΠΎΠΌΠΈΡ‚Π°, ΠΏΠΎ ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ бъдС Π΄ΠΎΡΡ‚ΡŠΠΏΠ½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π°Ρ‚Π° вСрсия Π½Π° плъгина.

И накрая, Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ чудСсна ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΎΡ‚ Π²ΠΈΠ΄Π°:

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° плъгин Π·Π° Grafana: история Π½Π° Π½Π°Ρ‚Ρ€ΡƒΠΏΠ°Π½ΠΈΡ‚Π΅ Π³Ρ€Π΅ΡˆΠΊΠΈ

Π”Π°Π½Π½ΠΈΡ‚Π΅ Π·Π° нСя Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅Π½ΠΈ ΠΎΡ‚ вашия Readme.md, Changelog.md ΠΈ Ρ„Π°ΠΉΠ»Π° plugin.json с описаниС Π½Π° плъгина.

Част 6: вмСсто Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ

НС смС ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΠ»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° нашия плъгин слСд Ρ€Π΅Π»ΠΈΠ·Π°. Π’ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌ Π²ΡŠΡ€Ρ…Ρƒ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎΡ‚ΠΎ наблюдСниС Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° рСсурситС Π½Π° Π½ΠΎΠ΄ΠΎΠ²Π΅Ρ‚Π΅ Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°, внСдрявамС Π½ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° подобряванС Π½Π° UX ΠΈ ΡΡŠΡ‰ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°ΠΌΠ΅ голямо количСство ΠΎΠ±Ρ€Π°Ρ‚Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠ°, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π° слСд инсталиранСто Π½Π° плъгина ΠΊΠ°ΠΊΡ‚ΠΎ ΠΎΡ‚ Π½Π°ΡˆΠΈΡ‚Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ, Ρ‚Π°ΠΊΠ° ΠΈ ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π² GitHub (Π°ΠΊΠΎ оставитС Π²Π°ΡˆΠΈΡΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈΠ»ΠΈ pull request, Ρ‰Π΅ бъда ΠΌΠ½ΠΎΠ³ΠΎ щастлив πŸ™‚ ).

НадявамС сС, Ρ‡Π΅ Ρ‚Π°Π·ΠΈ статия Ρ‰Π΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° сС Π·Π°ΠΏΠΎΠ·Π½Π°Π΅Ρ‚Π΅ с Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° прСкрасния инструмСнт Grafana ΠΈ, възмоТно, Π΄Π° Π½Π°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ свой собствСн плъгин.

Благодаря!)

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster