Tere kĂ”igile! Kursusetöö raames uurisin sellise kodumaise pilveplatvormi vĂ”imalusi nagu . Platvorm pakub erinevaid teenuseid praktiliste probleemide lahendamiseks. MĂ”nikord tuleb aga nendel teenustel pĂ”hineva ĂŒsna ulatusliku infrastruktuuriga ĂŒles seada oma pilverakendus. Selles artiklis tahan jagada oma kogemusi sellise rakenduse juurutamisel.

Mida soovite saada?
â vĂ”imas tööriist analĂŒĂŒtiliste probleemide lahendamiseks vĂ”i mis tahes sĂŒsteemide probleemide jĂ€lgimiseks. PĂ”hikonfiguratsioonis on see virtuaalne masin Grafana veebiserveriga, samuti andmebaas (ClickHouse, InfluxDB jne) koos andmekogumiga, millel pĂ”hinevad analĂŒĂŒsid.
PÀrast veebiserveriga virtuaalmasina kÀivitamist saate minna selle hosti ja hankida ilus kasutajaliides, mÀÀrata edasiseks tööks allikateks andmebaasid, luua armatuurlaudu ja graafikuid.

PĂ”hiversioonil on ĂŒks mĂ€rkimisvÀÀrne puudus â see ei ole ĂŒldse tĂ”rkekindel. See tĂ€hendab, et kogu rakenduse funktsionaalsus sĂ”ltub ĂŒhe virtuaalmasina elujĂ”ulisusest. Kui see keeldub vĂ”i 10 inimest avavad kasutajaliidese korraga, siis tekivad probleemid.
Neid saab lahendada lihtsalt: peate lihtsalt... juurutama veebiserveriga palju identseid virtuaalmasinaid ja asetama need L3 tasakaalustaja alla. Kuid siin pole kÔik nii selge. Grafana salvestab kasutaja seadistused (teed andmebaasidesse, armatuurlauad, graafikud jne) otse oma virtuaalmasina kettale. Seega, kui muudame kasutajaliideses mÔnda seadet, kajastuvad need muudatused ainult selles virtuaalmasinas, kuhu tasakaalustaja meid saatis. See toob kaasa meie rakenduse seaded vastuolus, pÔhjustades probleeme kÀivitamise ja kasutamisega.
Siin tuleb appi teine ââandmebaas, nĂ€iteks MySQL vĂ”i selle ekvivalent. Me ĂŒtleme Grafanale, et ta peaks salvestama kasutaja seaded sellesse "varu" andmebaasi. SeejĂ€rel piisab, kui mÀÀrata igas masinas ĂŒks kord selle andmebaasi tee ja redigeerida kĂ”iki muid kasutajasĂ€tteid mis tahes virtuaalmasinas; need laienevad ka teistele.
Siin on lÔpliku rakenduse infrastruktuuri diagramm:

Ăpime kĂ€tega tĂ”stma
MySQL ja ClickHouse
Enne sellise rakenduse ĂŒhe nupuvajutusega juurutamist oli vaja Ă”ppida, kuidas iga selle komponenti kĂ€sitleda ja neid omavahel integreerida.
Siin aitab meid Yandex.Cloud, mis pakub hallatavate teenustena L3 tasakaalustajaid, ClickHouse'i ja MySQL-i. Kasutajal tuleb vaid tÀpsustada parameetrid ja oodata, kuni platvorm kÔik töökorda viib.
Registreerisin, tegin pilve ja maksekonto. PÀrast seda lÀksin pilve ja seadistasin MySQL ja ClickHouse klastrid minimaalsete sÀtetega. Ootasin, kuni nad aktiveeruvad.


Samuti peate meeles pidama, et igas klastris tuleb luua andmebaas ja konfigureerida sellele juurdepÀÀs sisselogimise ja parooli abil. Ma ei lasku siin ĂŒksikasjadesse - liideses on kĂ”ik ĂŒsna ilmne.
Mitteilmne detail oli see, et neil andmebaasidel on palju hoste, mis tagavad nende veataluvuse. Grafana nĂ”uab aga tĂ€pselt ĂŒhte hosti iga andmebaasi jaoks, millega ta töötab. Pikk lugemine Pilved viisid mind otsusele. Selgub, et liigi peremees c-<cluster_id>.rw.mdb.yandexcloud.net vastendatud vastava ID-ga klastri praeguse aktiivse peamise hostiga. Selle me anname Grafanale.
veebiserver
NĂŒĂŒd on aeg veebiserveri jaoks. Seadistame tavalise virtuaalmasina, millel on Linux ja me seame Grafana sellele oma kĂ€tega ĂŒles.


Ăhendame ssh kaudu ja installime vajalikud paketid.
sudo apt-get install -y apt-transport-https software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo add-apt-repository "deb https://packages.grafana.com/enterprise/deb stable main"
sudo apt-get update
sudo apt-get install -y grafana-enterprise
PÀrast seda kÀivitame Grafana systemctl all ja installime ClickHouse'iga töötamiseks mÔeldud plugina (jah, seda pole pÔhipaketis kaasas).
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasourceSee on kÔik, pÀrast seda lihtsa kÀsuga
sudo service grafana-server startkĂ€ivitame veebiserveri. NĂŒĂŒd saate brauserisse sisestada virtuaalmasina vĂ€lise IP-aadressi, mÀÀrata pordi 3000 ja nĂ€ha kaunist Grafana kasutajaliidest.

Kuid Ă€rge kiirustage, enne Grafana seadistamist peate meeles pidama, et ĂŒtlete talle MySQL-i tee, et sĂ€tteid sinna salvestada.
Grafana veebiserveri kogu konfiguratsioon on failis /etc/grafana/grafana.ini. NÔutav rida nÀeb vÀlja selline:
;url =Seadsime hostiks MySQL-i klastri. Sama fail sisaldab ĂŒlaloleval pildil Grafanale juurdepÀÀsuks vajalikku sisselogimist ja parooli, mis vaikimisi on mĂ”lemad vĂ”rdsed admin.
Saate kasutada sed-kÀske:
sudo sed -i "s#.*;url =.*#url = mysql://${MYSQL_USERNAME}:${MYSQL_PASSWORD}@${MYSQL_CLUSTER_URI}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_user =.*#admin_user = ${GRAFANA_USERNAME}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_password =.*#admin_password = ${GRAFANA_PASSWORD}#" /etc/grafana/grafana.ini
On aeg veebiserver taaskÀivitada!
sudo service grafana-server restartNĂŒĂŒd mÀÀrame Grafana kasutajaliideses andmeallikaks ClickHouse.
Suutsin saavutada toimiva konfiguratsiooni jÀrgmiste seadistustega:

MÀÀrasin URL-iks https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443
KĂ”ik! Meil on ĂŒks töötav virtuaalmasin, mille veebiserver on ĂŒhendatud CH ja MySQL-iga. Saate juba andmestiku ClickHouse'i ĂŒles laadida ja armatuurlaudu luua. Kuid me pole veel oma eesmĂ€rki saavutanud ega ole kasutusele vĂ”tnud tĂ€isvÀÀrtuslikku infrastruktuuri.
Pakkija
Yandex.Cloud vĂ”imaldab teil luua olemasoleva virtuaalmasina kettapildi ja selle pĂ”hjal - mis tahes arvu ĂŒksteisega identseid masinaid. See on tĂ€pselt see, mida me kasutame. Pildi mugavaks kokkupanemiseks vĂ”tke tööriist firmalt HashiCorp. See vĂ”tab sisendiks json-faili koos juhistega pildi kokkupanekuks.
Meie json-fail koosneb kahest plokist: koostajad ja pakkujad. Esimene plokk kirjeldab pildi enda kui olemi parameetreid ja teine ââplokk kirjeldab juhiseid selle tĂ€itmiseks vajaliku sisuga.
Builders
{
"builders": [
{
"type": "yandex",
"endpoint": "{{user `endpoint`}}",
"folder_id": "<folder_id>",
"subnet_id": "{{user `subnet_id`}}",
"zone": "{{user `zone`}}",
"labels": {},
"use_ipv4_nat": true,
"use_internal_ip": false,
"service_account_key_file": "<service_account_key_file>",
"image_name": "grafana-{{timestamp}}",
"image_family": "grafana",
"image_labels": {},
"image_description": "GRAFANA",
"source_image_family": "ubuntu-1804-lts",
"disk_size_gb": 3,
"disk_type": "network-hdd",
"ssh_username": "ubuntu"
}
],
...
}Selles mallis peate mÀÀrama pilves oleva jaotise identifikaatori, kuhu soovite pilti luua, samuti faili tee selles jaotises varem loodud teenusekonto vÔtmetega. Lisateavet teenusekontode ja vÔtmete loomise kohta faili kujul saate lugeda vastavast jaotisest .
See konfiguratsioon ĂŒtleb, et ketta kujutis ehitatakse platvormi alusel ubuntu-1804-lts, mis on paigutatud pildiperekonna vastavasse kasutajate sektsiooni GRAFANA nime all grafana-{{timestamp}}.
Varustajad
NĂŒĂŒd tuleb konfiguratsiooni huvitavam osa. See kirjeldab toimingute jada, mis tuleb virtuaalmasinas enne selle oleku kettakujutiseks kĂŒlmutamist teha.
{
...,
"provisioners": [
{
"type": "shell",
"pause_before": "5s",
"scripts": [
"prepare-ctg.sh"
]
},
{
"type": "file",
"source": "setup.sh",
"destination": "/opt/grafana/setup.sh"
},
{
"type": "shell",
"execute_command": "sudo {{ .Vars }} bash '{{ .Path }}'",
"pause_before": "5s",
"scripts": [
"install-packages.sh",
"grafana-setup.sh",
"run-setup-at-reboot.sh"
]
}
]
}Siin on kÔik toimingud jagatud 3 etappi. Esimeses etapis kÀivitatakse lihtne skript, mis loob abikataloogi.
ready-ctg.sh:
#!/bin/bash
sudo mkdir -p /opt/grafana
sudo chown -R ubuntu:ubuntu /opt/grafanaJÀrgmises etapis asetame sellesse kataloogi skripti, mis tuleb kohe pÀrast virtuaalmasina kÀivitamist kÀivitada. See skript paneb Grafana konfiguratsioonis registreeritavad kasutajamuutujad ja taaskÀivitab veebiserveri.
setup.sh:
#!/bin/bash
CLUSTER_ID="<cluster_id>"
USERNAME="<username>"
PASSWORD="<password>"
sudo sed -i "s#.*;url =.*#url = mysql://${USERNAME}:${PASSWORD}@c-${CLUSTER_ID}.rw.mdb.yandexcloud.net#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_user =.*#admin_user = ${USERNAME}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_password =.*#admin_password = ${PASSWORD}#" /etc/grafana/grafana.ini
sudo service grafana-server restartPÀrast seda on jÀÀnud teha 3 asja:
1) installige paketid
2) kÀivitage Grafana systemctl all ja installige plugin ClickHouse
3) pane setup.sh skript kohe peale virtuaalmasina sisselĂŒlitamist kĂ€ivitusjĂ€rjekorda.
install-packages.sh:
#!/bin/bash
sudo systemd-run --property='After=apt-daily.service apt-daily-upgrade.service' --wait /bin/true
sudo apt-get install -y apt-transport-https
sudo apt-get install -y software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo add-apt-repository "deb https://packages.grafana.com/enterprise/deb stable main"
sudo apt-get update
sudo apt-get install -y grafana-enterprise grafana-setup.sh:
#!/bin/bash
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasourcerun-setup-at-reboot.sh:
#!/bin/bash
chmod +x /opt/grafana/setup.sh
cat > /etc/cron.d/first-boot <<EOF
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
@reboot root /bin/bash /opt/grafana/setup.sh > /var/log/yc-setup.log 2>&1
EOF
chmod +x /etc/cron.d/first-boot;NĂŒĂŒd jÀÀb ĂŒle vaid kĂ€ivitada Packer ja panna vĂ€ljundpilt mÀÀratud jaotisesse. Virtuaalse masina loomisel saate selle valida alglaadimiskettaks ja peale kĂ€ivitamist saate valmis Grafana veebiserveri.


Instantside rĂŒhm ja tasakaalustaja
Kui meil on ketta kujutis, mis vĂ”imaldab meil luua palju identseid Grafana veebiservereid, saame luua eksemplarirĂŒhma. Platvormil Yandex.Cloud tĂ€histab see termin samade omadustega virtuaalmasinate liitu. EksemplarirĂŒhma loomisel konfigureeritakse kĂ”igi selles rĂŒhmas olevate masinate prototĂŒĂŒp ja seejĂ€rel rĂŒhma enda omadused (nĂ€iteks aktiivsete masinate minimaalne ja maksimaalne arv). Kui praegune number nendele kriteeriumidele ei vasta, eemaldab eksemplarirĂŒhm ise mittevajalikud masinad vĂ”i loob uued oma pildi jĂ€rgi.
Oma ĂŒlesande raames loome veebiserverite eksemplarirĂŒhma, mis genereeritakse eelnevalt loodud kettapildist.


TĂ”eliselt tĂ€helepanuvÀÀrne on viimase eksemplari rĂŒhma seadistamine. Load Balanceriga integreeritud sihtrĂŒhm aitab teil paari nupuga klĂ”psates seadistada L3 tasakaalustaja selle rĂŒhma virtuaalmasinate peale.

Tasakaalustaja seadistamisel rakendasin kahte olulist punkti:
- Panin tasakaalustaja aktsepteerima kasutajaliiklust pordis 80 ja suunama selle virtuaalmasinate porti 3000, tÀpselt seal, kus Grafana elab.
- Seadistasin masinate elujÔulisuse kontrollimise, pingitades need porti 3000.

Mini kokkuvÔte
LĂ”puks saime soovitud rakenduste infrastruktuuri kĂ€sitsi juurutada ja nĂŒĂŒd on meil vĂ€ga vastupidav Grafana teenus. Andmestiku sellesse laadimiseks peate teadma ainult tasakaalustaja IP-aadressi kui rakenduse sisenemispunkti ja ClickHouse klastri hosti.
Kas see tundub vĂ”iduna? Jah, vĂ”it. Aga miski ajab mind ikkagi segadusse. Kogu ĂŒlaltoodud protsess nĂ”uab palju kĂ€sitsi samme ja pole ĂŒldse skaleeritav; sooviksin seda vĂ”imaluse korral automatiseerida. Sellele on pĂŒhendatud jĂ€rgmine osa.
Terraformi integreerimine
Kasutame taas HashiCorpi tööriista nimega . See aitab teil ĂŒhe nupuvajutusega juurutada kogu rakenduse infrastruktuuri, mis pĂ”hineb mitmel kasutaja edastatud muutujal. Kirjutame retsepti, mida saab erinevate kasutajate erinevates osades mitu korda kĂ€ivitada.
Kogu töö Terraformiga taandub konfiguratsioonifaili kirjutamisele (*.tf) ja sellel pÔhineva infrastruktuuri loomine.
Muutujad
Faili alguses lisame muutujad, mis mÀÀravad, kus ja kuidas tulevane infrastruktuur juurutatakse.
variable "oauth_token" {
type = string
default = "<oauth-token>"
}
variable "cloud_id" {
type = string
default = "<cloud-id>"
}
variable "folder_id" {
type = string
default = "<folder_id>"
}
variable "service_account_id" {
type = string
default = "<service_account_id>"
}
variable "image_id" {
type = string
default = "<image_id>"
}
variable "username" {
type = string
default = "<username>"
}
variable "password" {
type = string
default = "<password>"
}
variable "dbname" {
type = string
default = "<dbname>"
}
variable "public_key_path" {
type = string
default = "<path to ssh public key>"
}Kogu rakenduse juurutamisprotsess taandub kettapildi loomisele ja nende muutujate seadistamisele. Lubage mul selgitada, mille eest nad vastutavad:
oauth_token â ĆŸetoon pilvele juurdepÀÀsuks. Saab kĂ€tte .
cloud_id â pilveidentifikaator, kuhu rakenduse juurutame
kausta_id â jaotise identifikaator, kuhu rakenduse juurutame
teenuse_konto_id â teenusekonto identifikaator pilve vastavas jaotises.
pildi_id â Packeri abil saadud ketta kujutise identifikaator
kasutajanimi Đž parool â kasutajanimi ja parool juurdepÀÀsuks nii andmebaasidele kui ka Grafana veebiserverile
dbname â andmebaasi nimi CH ja MySQL klastrites
avalik_vĂ”tme_tee â tee failini oma avaliku ssh-vĂ”tmega, mida saate kasutada nime all ĂŒhenduse loomiseks ubuntu veebiserveritega virtuaalmasinatele
Pakkuja seadistamine
NĂŒĂŒd peate konfigureerima Terraformi pakkuja - meie puhul Yandex:
provider "yandex" {
token = var.oauth_token
cloud_id = var.cloud_id
folder_id = var.folder_id
zone = "ru-central1-a"
}
MĂ€rkate, et siin kasutame ĂŒlalpool mÀÀratletud muutujaid.
VÔrgustik ja klastrid
NĂŒĂŒd loome vĂ”rgu, milles meie infrastruktuuri elemendid suhtlevad, kolm alamvĂ”rku (ĂŒks igas piirkonnas) ja tĂ”stame CH ja MySQL klastreid.
resource "yandex_vpc_network" "grafana_network" {}
resource "yandex_vpc_subnet" "subnet_a" {
zone = "ru-central1-a"
network_id = yandex_vpc_network.grafana_network.id
v4_cidr_blocks = ["10.1.0.0/24"]
}
resource "yandex_vpc_subnet" "subnet_b" {
zone = "ru-central1-b"
network_id = yandex_vpc_network.grafana_network.id
v4_cidr_blocks = ["10.2.0.0/24"]
}
resource "yandex_vpc_subnet" "subnet_c" {
zone = "ru-central1-c"
network_id = yandex_vpc_network.grafana_network.id
v4_cidr_blocks = ["10.3.0.0/24"]
}
resource "yandex_mdb_clickhouse_cluster" "ch_cluster" {
name = "grafana-clickhouse"
environment = "PRODUCTION"
network_id = yandex_vpc_network.grafana_network.id
clickhouse {
resources {
resource_preset_id = "s2.micro"
disk_type_id = "network-ssd"
disk_size = 16
}
}
zookeeper {
resources {
resource_preset_id = "s2.micro"
disk_type_id = "network-ssd"
disk_size = 10
}
}
database {
name = var.dbname
}
user {
name = var.username
password = var.password
permission {
database_name = var.dbname
}
}
host {
type = "CLICKHOUSE"
zone = "ru-central1-a"
subnet_id = yandex_vpc_subnet.subnet_a.id
}
host {
type = "CLICKHOUSE"
zone = "ru-central1-b"
subnet_id = yandex_vpc_subnet.subnet_b.id
}
host {
type = "CLICKHOUSE"
zone = "ru-central1-c"
subnet_id = yandex_vpc_subnet.subnet_c.id
}
host {
type = "ZOOKEEPER"
zone = "ru-central1-a"
subnet_id = yandex_vpc_subnet.subnet_a.id
}
host {
type = "ZOOKEEPER"
zone = "ru-central1-b"
subnet_id = yandex_vpc_subnet.subnet_b.id
}
host {
type = "ZOOKEEPER"
zone = "ru-central1-c"
subnet_id = yandex_vpc_subnet.subnet_c.id
}
}
resource "yandex_mdb_mysql_cluster" "mysql_cluster" {
name = "grafana_mysql"
environment = "PRODUCTION"
network_id = yandex_vpc_network.grafana_network.id
version = "8.0"
resources {
resource_preset_id = "s2.micro"
disk_type_id = "network-ssd"
disk_size = 16
}
database {
name = var.dbname
}
user {
name = var.username
password = var.password
permission {
database_name = var.dbname
roles = ["ALL"]
}
}
host {
zone = "ru-central1-a"
subnet_id = yandex_vpc_subnet.subnet_a.id
}
host {
zone = "ru-central1-b"
subnet_id = yandex_vpc_subnet.subnet_b.id
}
host {
zone = "ru-central1-c"
subnet_id = yandex_vpc_subnet.subnet_c.id
}
}Nagu nĂ€ete, on kĂ”ik kaks klastrit loodud ĂŒsna tĂ”rketaluvusega, kuna need asuvad kolmes saadavustsoonis.
Veebiserverid
NĂ€ib, et vĂ”iksime samas vaimus jĂ€tkata, aga sattusin raskustesse. Enne seda tĂ”stsin kĂ”igepealt ĂŒles MySQL klastri ja alles pĂ€rast seda, teades selle ID-d, kogusin vajaliku konfiguratsiooniga kettapildi, kus mÀÀrasin klastrile hosti. Kuid nĂŒĂŒd ei tea me klastri ID-d enne Terraformi kĂ€ivitamist, sealhulgas pildi loomise ajal. SeetĂ”ttu pidin kasutama jĂ€rgmist .
Amazoni metaandmete teenust kasutades edastame mĂ”ned parameetrid virtuaalmasinale, mille see vastu vĂ”tab ja töötleb. Vajame, et masin lĂ€heks pĂ€rast kĂ€ivitamist MySQL-i klastri hosti ja kasutajanime-parooli taga olevate metaandmete juurde, mille kasutaja mÀÀras Terraformi failis. Muudame veidi faili sisu setup.sh, mis töötab siis, kui virtuaalmasin on sisse lĂŒlitatud.
setup.sh:
#!/bin/bash
CLUSTER_URI="$(curl -H 'Metadata-Flavor:Google' http://169.254.169.254/computeMetadata/v1/instance/attributes/mysql_cluster_uri)"
USERNAME="$(curl -H 'Metadata-Flavor:Google' http://169.254.169.254/computeMetadata/v1/instance/attributes/username)"
PASSWORD="$(curl -H 'Metadata-Flavor:Google' http://169.254.169.254/computeMetadata/v1/instance/attributes/password)"
sudo sed -i "s#.*;url =.*#url = mysql://${USERNAME}:${PASSWORD}@${CLUSTER_URI}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_user =.*#admin_user = ${USERNAME}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_password =.*#admin_password = ${PASSWORD}#" /etc/grafana/grafana.ini
sudo service grafana-server restartIntance grupp ja tasakaalustaja
PĂ€rast uue kettapildi ĂŒmberehitamist saame lĂ”puks lisada oma faili Terraformi jaoks.
NĂ€itame, et tahame kasutada olemasolevat kettapilti:
data "yandex_compute_image" "grafana_image" {
image_id = var.image_id
}NĂŒĂŒd loome eksemplarirĂŒhma:
resource "yandex_compute_instance_group" "grafana_group" {
name = "grafana-group"
folder_id = var.folder_id
service_account_id = var.service_account_id
instance_template {
platform_id = "standard-v1"
resources {
memory = 1
cores = 1
}
boot_disk {
mode = "READ_WRITE"
initialize_params {
image_id = data.yandex_compute_image.grafana_image.id
size = 4
}
}
network_interface {
network_id = yandex_vpc_network.grafana_network.id
subnet_ids = [yandex_vpc_subnet.subnet_a.id, yandex_vpc_subnet.subnet_b.id, yandex_vpc_subnet.subnet_c.id]
nat = "true"
}
metadata = {
mysql_cluster_uri = "c-${yandex_mdb_mysql_cluster.mysql_cluster.id}.rw.mdb.yandexcloud.net:3306/${var.dbname}"
username = var.username
password = var.password
ssh-keys = "ubuntu:${file("${var.public_key_path}")}"
}
network_settings {
type = "STANDARD"
}
}
scale_policy {
fixed_scale {
size = 6
}
}
allocation_policy {
zones = ["ru-central1-a", "ru-central1-b", "ru-central1-c"]
}
deploy_policy {
max_unavailable = 2
max_creating = 2
max_expansion = 2
max_deleting = 2
}
load_balancer {
target_group_name = "grafana-target-group"
}
}Tasub pöörata tÀhelepanu sellele, kuidas me selle metaandmetesse edastasime cluster_uri, username О password. Just need vÔtab virtuaalmasin kÀivitamisel vÀlja ja sisestab Grafana konfiguratsiooni.
See on tasakaalustaja otsustada.
resource "yandex_lb_network_load_balancer" "grafana_balancer" {
name = "grafana-balancer"
listener {
name = "grafana-listener"
port = 80
target_port = 3000
external_address_spec {
ip_version = "ipv4"
}
}
attached_target_group {
target_group_id = yandex_compute_instance_group.grafana_group.load_balancer.0.target_group_id
healthcheck {
name = "healthcheck"
tcp_options {
port = 3000
}
}
}
}Natuke suhkrut
Ainult natuke on jÀÀnud. PÀrast infrastruktuuri juurutamist peate minema Grafana kasutajaliidese ja lisama kÀsitsi andmeallikana CH-klastri (mille ID tuleb veel hankida). Kuid Terraform teab klastri ID-d. Usaldagem temale asja ellu viimine.
Lisame uue pakkuja â Grafana ja anname talle hostina tasakaalustaja IP-aadressi. KĂ”ik muudatused, mida Terraform teeb masinas, mille tasakaalustaja mÀÀrab, kasvavad MySQL-is ja seega ka kĂ”igis teistes masinates.
provider "grafana" {
url = "http://${[for s in yandex_lb_network_load_balancer.grafana_balancer.listener: s.external_address_spec.0.address].0}"
auth = "${var.username}:${var.password}"
}
resource "grafana_data_source" "ch_data_source" {
type = "vertamedia-clickhouse-datasource"
name = "grafana"
url = "https://c-${yandex_mdb_clickhouse_cluster.ch_cluster.id}.rw.mdb.yandexcloud.net:8443"
basic_auth_enabled = "true"
basic_auth_username = var.username
basic_auth_password = var.password
is_default = "true"
access_mode = "proxy"
}Kammime juukseid
Kuvame tasakaalustaja IP-aadressi ja ClickHouse'i klastri hosti
output "grafana_balancer_ip_address" {
value = [for s in yandex_lb_network_load_balancer.grafana_balancer.listener: s.external_address_spec.0.address].0
}
output "clickhouse_cluster_host" {
value = "https://c-${yandex_mdb_clickhouse_cluster.ch_cluster.id}.rw.mdb.yandexcloud.net:8443"
}Saab joosta
KĂ”ik! Meie konfiguratsioonifail on valmis ja muutujate mÀÀramisega saame öelda, et Terraform tĂ”staks kĂ”ik ĂŒlalkirjeldatud. Kogu protsess vĂ”ttis mul umbes 15 minutit.
LÔpus nÀete ilusat sÔnumit:
Apply complete! Resources: 9 added, 0 changed, 0 destroyed.
Outputs:
clickhouse_cluster_host = https://c-c9q14ipa2ngadqsbp2iq.rw.mdb.yandexcloud.net:8443
grafana_balancer_ip_address = 130.193.50.25Ja pilves on nÀhtavad tÔstetud infrastruktuuri elemendid:

KokkuvÔtteks
Grafana nĂ€itel saab igaĂŒks teist juurutada laialivalguva pilvarhitektuuriga rakendusi platvormil Yandex.Cloud. HashiCorpi kasulikud tööriistad, nagu Packer ja Terraform, vĂ”ivad teid selles aidata. Loodan, et kellelegi on see artikkel kasulik :)
PS Allpool lisan lingi hoidlale, kust leiate Packeri ja Terraformi valmisretseptid, mille fragmente ma selles artiklis esitasin.
Allikas: www.habr.com
