Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄ΠΎΠ±Π°Π²ΠΊΠΈ Π·Π° Grafana: историята Π½Π° ΠΏΡŠΠ»Π½Π΅Π½ΠΈΡ‚Π΅ конуси

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

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

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

ΠŸΡ€ΠΈΡΡ‚Π°Π²ΠΊΠ°Ρ‚Π° Π·Π° grafana-kubernetes-app изглСТдашС Π½Π°ΠΉ-интСрСсната опция Π·Π° нас, Π½ΠΎ тя Π½Π΅ сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ Π³ΠΎΠ΄ΠΈΠ½Π° ΠΈ освСн Ρ‚ΠΎΠ²Π° Π½Π΅ Π·Π½Π°Π΅ ΠΊΠ°ΠΊ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ с Π½ΠΎΠ²ΠΈΡ‚Π΅ вСрсии Π½Π° node-exporter ΠΈ kube-state- ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ°. И Π² Π΅Π΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ€Π΅ΡˆΠΈΡ…ΠΌΠ΅: β€žΠΠ΅ трябва Π»ΠΈ сами Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅?β€œ

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

  • визуализация Π½Π° β€žΠΊΠ°Ρ€Ρ‚Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ‚Π°β€œ: ΡƒΠ΄ΠΎΠ±Π½ΠΎ прСдставянС Π½Π° прилоТСния Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€, Π³Ρ€ΡƒΠΏΠΈΡ€Π°Π½ΠΈ ΠΏΠΎ пространства ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π°, внСдрявания…;
  • визуализация Π½Π° Π²Ρ€ΡŠΠ·ΠΊΠΈ ΠΊΠ°Ρ‚ΠΎ "Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅ - услуга (+ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅)".
  • визуализация Π½Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π½ΠΈΡ‚Π΅ прилоТСния ΠΏΠΎ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π½ΠΈ възли.
  • колСкция ΠΎΡ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈ информация ΠΎΡ‚ няколко ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΠ°: Prometheus ΠΈ k8s api ΡΡŠΡ€Π²ΡŠΡ€.
  • слСдСнС ΠΊΠ°ΠΊΡ‚ΠΎ Π½Π° инфраструктурната част (ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° процСсорно Π²Ρ€Π΅ΠΌΠ΅, ΠΏΠ°ΠΌΠ΅Ρ‚, дискова подсистСма, ΠΌΡ€Π΅ΠΆΠ°), Ρ‚Π°ΠΊΠ° ΠΈ Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ - здравния статус Π½Π° pods, броя Π½Π° Π½Π°Π»ΠΈΡ‡Π½ΠΈΡ‚Π΅ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ, информация Π·Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° сонди Π·Π° Тивост/готовност.

Част 1: Какво Π΅ "плъгин Π·Π° Grafana"?

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

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄ΠΎΠ±Π°Π²ΠΊΠΈ Π·Π° Grafana: историята Π½Π° ΠΏΡŠΠ»Π½Π΅Π½ΠΈΡ‚Π΅ конуси
module.ts

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄ΠΎΠ±Π°Π²ΠΊΠΈ Π·Π° Grafana: историята Π½Π° ΠΏΡŠΠ»Π½Π΅Π½ΠΈΡ‚Π΅ конуси
plugin.json

ΠšΠ°ΠΊΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡ‚Π΅ Π½Π° Π΅ΠΊΡ€Π°Π½Π½Π°Ρ‚Π° снимка, смС посочили plugin.type = app. ΠŸΡ€ΠΈΡΡ‚Π°Π²ΠΊΠΈΡ‚Π΅ Π·Π° Grafana ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Ρ‚Ρ€ΠΈ Π²ΠΈΠ΄Π°:

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

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

ΠšΠ°Ρ‚ΠΎ Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ ΠΊΠ°ΠΊΡ‚ΠΎ JavaScript, Ρ‚Π°ΠΊΠ° ΠΈ TypeScript (Π½ΠΈΠ΅ Π³ΠΎ ΠΈΠ·Π±Ρ€Π°Ρ…ΠΌΠ΅). ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ шаблони Π·Π° плъгини hello-world ΠΎΡ‚ всякакъв Ρ‚ΠΈΠΏ Π½Π°ΠΌΠ΅Ρ€ΠΈ Ρ‡Ρ€Π΅Π· Π²Ρ€ΡŠΠ·ΠΊΠ°: Ρ‚ΠΎΠ²Π° Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° голям Π±Ρ€ΠΎΠΉ стартови ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ (ΠΈΠΌΠ° Π΄ΠΎΡ€ΠΈ СкспСримСнталСн ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° React плъгин) с ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½ΠΎ инсталирани ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€Π°Π½ΠΈ ΡΡŠΠ·Π΄Π°Ρ‚Π΅Π»ΠΈ.

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

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

Най-удобният спорСд нас Π½Π°Ρ‡ΠΈΠ½ Π·Π° Π»ΠΎΠΊΠ°Π»Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° с kubernetes Π΅ minikube. Π‘Π»Π΅Π΄Π²Π°Ρ‰Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ° Π΅ Π΄Π° инсталиратС ΠΏΠ°ΠΊΠ΅Ρ‚Π° Prometheus + Grafana с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° prometheus-operator. IN Ρ‚Π°Π·ΠΈ статия ΠΏΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Π½Π° инсталиранС Π½Π° prometheus-operator Π½Π° minikube Π΅ описан ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ. Π—Π° Π΄Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Ρ‚Π΅ постоянството, трябва Π΄Π° Π·Π°Π΄Π°Π΄Π΅Ρ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° постоянство: вярно във Ρ„Π°ΠΉΠ»Π° 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, ΠΊΠΎΠΉΡ‚ΠΎ описва конструктора, дСструктора, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ Π·Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ ΠΈ ΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅ Π½Π° видимостта. ВсСки ΠΎΡ‚ класовСтС описва Π²Π»ΠΎΠΆΠ΅Π½ΠΈ Π²Ρ€ΡŠΠ·ΠΊΠΈ с Π΄Ρ€ΡƒΠ³ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ списък ΠΎΡ‚ ΠΏΠΎΠ΄ΠΎΠ²Π΅ Π·Π° ΠΎΠ±Π΅ΠΊΡ‚ ΠΎΡ‚ Ρ‚ΠΈΠΏ Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅.

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;
}

Pages

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

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄ΠΎΠ±Π°Π²ΠΊΠΈ Π·Π° Grafana: историята Π½Π° ΠΏΡŠΠ»Π½Π΅Π½ΠΈΡ‚Π΅ конуси

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

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

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

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄ΠΎΠ±Π°Π²ΠΊΠΈ Π·Π° Grafana: историята Π½Π° ΠΏΡŠΠ»Π½Π΅Π½ΠΈΡ‚Π΅ конуси

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄ΠΎΠ±Π°Π²ΠΊΠΈ Π·Π° Grafana: историята Π½Π° ΠΏΡŠΠ»Π½Π΅Π½ΠΈΡ‚Π΅ конуси

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄ΠΎΠ±Π°Π²ΠΊΠΈ Π·Π° Grafana: историята Π½Π° ΠΏΡŠΠ»Π½Π΅Π½ΠΈΡ‚Π΅ конуси

Част 4: ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ Π½Π° Π΄Π°Π½Π½ΠΈ

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

Π’ приставката KubeGraf, ΠΎΡ‚ Π³Π»Π΅Π΄Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ° Π½Π° потрСбитСлския интСрфСйс, ΠΈΠ·Ρ‚ΠΎΡ‡Π½ΠΈΠΊΡŠΡ‚ Π½Π° Π΄Π°Π½Π½ΠΈ Π΅ СкзСмпляр Π½Π° ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ kubernetes, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€ΠΈΠ»Π°Π³Π° слСднитС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (изходният ΠΊΠΎΠ΄ Π΅ Π½Π°Π»ΠΈΡ‡Π΅Π½ ΠΏΠΎ ссылкС):

  • ΠΈΠ·Π²Π»ΠΈΡ‡Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ k8s api-ΡΡŠΡ€Π²ΡŠΡ€ (ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° списък с пространства ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π°, внСдрявания...)
  • прокси заявки към 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"};
       })
}

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

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

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄ΠΎΠ±Π°Π²ΠΊΠΈ Π·Π° Grafana: историята Π½Π° ΠΏΡŠΠ»Π½Π΅Π½ΠΈΡ‚Π΅ конуси

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄ΠΎΠ±Π°Π²ΠΊΠΈ Π·Π° Grafana: историята Π½Π° ΠΏΡŠΠ»Π½Π΅Π½ΠΈΡ‚Π΅ конуси

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

Част 5: освобоТдаванС

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄ΠΎΠ±Π°Π²ΠΊΠΈ Π·Π° Grafana: историята Π½Π° ΠΏΡŠΠ»Π½Π΅Π½ΠΈΡ‚Π΅ конуси

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

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

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄ΠΎΠ±Π°Π²ΠΊΠΈ Π·Π° Grafana: историята Π½Π° ΠΏΡŠΠ»Π½Π΅Π½ΠΈΡ‚Π΅ конуси

ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ вСрсията Π΅ вСрсията Π½Π° вашия плъгин, url Π΅ Π²Ρ€ΡŠΠ·ΠΊΠ° към Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ, Π° commit Π΅ Ρ…Π΅ΡˆΡŠΡ‚ Π½Π° Π°Π½Π³Π°ΠΆΠΈΠΌΠ΅Π½Ρ‚Π°, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Π°Ρ‚Π° вСрсия Π½Π° плъгина Π΄ΠΎΡΡ‚ΡŠΠΏΠ½Π°.

И Π½Π° ΠΈΠ·Ρ…ΠΎΠ΄Π° Ρ‰Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ прСкрасна ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Π° Π½Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°:

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄ΠΎΠ±Π°Π²ΠΊΠΈ Π·Π° Grafana: историята Π½Π° ΠΏΡŠΠ»Π½Π΅Π½ΠΈΡ‚Π΅ конуси

Π”Π°Π½Π½ΠΈΡ‚Π΅ Π·Π° Π½Π΅Π³ΠΎ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ ΠΎΠ³Ρ€Π°Π±Π΅Π½ΠΈ ΠΎΡ‚ Π²Π°ΡˆΠΈΡ‚Π΅ Readme.md, Changelog.md ΠΈ Ρ„Π°ΠΉΠ»Π° plugin.json с описаниСто Π½Π° приставката.

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

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

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

Благодаря Π²ΠΈ!)

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€