Tere kĂ”igile! Kursusetöö raames olen uurinud kodumaise pilveplatvormi vĂ”imalusi, nimelt . Platvorm pakub erinevaid teenuseid praktiliste ĂŒlesannete lahendamiseks. Siiski vĂ”ib mĂ”nikord olla vajalik need teenused kasutada oma pilverakenduse seadistamiseks piisavalt ulatuslikku infrastruktuuri. Selles artiklis soovin jagada oma kogemusi sellise rakenduse seadistamisel.

Mida soovime saada?
â vĂ”imas tööriist analĂŒĂŒtiliste ĂŒlesannete vĂ”i mĂ”ne sĂŒsteemi seire ĂŒlesannete lahendamiseks. Oma pĂ”hipaketis on see virtuaalne masin koos Grafana veebiserveriga, samuti andmebaas (ClickHouse, InfluxDB jms) koos andmestikuga, mille alusel analĂŒĂŒtikat luuakse.
PÀrast virtuaalse masina koos veebiserveriga kÀivitamist on vÔimalik sisse logida selle hostisse ja saada ilus kasutajaliides, nÀidata andmebaase allikatena edasiseks tööks, luua juhtpaneele ja graafikuid.

PĂ”hiversioonil on ĂŒks suur puudus â see ei ole absoluutselt talitlushĂ€irete korral vastupidav. See tĂ€hendab, et kogu rakenduse töövĂ”ime sĂ”ltub ĂŒhest virtuaalsest masinast. Kui see ebaĂ”nnestub vĂ”i 10 inimest avavad korraga kasutajaliidese, siis tekivad probleemid.
Need lahendatakse lihtsalt: tuleb vaid⊠kÀitada palju identseid virtuaalseid masinaid koos veebiserveriga ja paigutada need L3 taseme koormuse tasakaalustaja alla. Kuid ka siin ei ole kÔik nii lihtne. Grafana salvestab kasutajaseaded (teed andmebaasidele, juhtpaneelid, graafikud jne) otse oma virtuaalse masina kettale. Seega, kui muudad kasutajaliideses mÔningaid seadeid, kajastuvad need muudatused ainult sel virtuaalsel masinal, kuhu tasakaalustaja meid suunab. See pÔhjustab meie rakenduse seadete jÀrjepidevuse probleemide tekkimise.
Siin tuleb appi teine andmebaas, nĂ€iteks MySQL vĂ”i selle analoog. Ătleme Grafanale, et ta peaks salvestama kasutajaseaded just sellele "varuabandele". PĂ€rast piisab, kui igas masinas ĂŒhel korral viidata sellele andmebaasile, ja kĂ”ik ĂŒlejÀÀnud kasutajaseaded saab redigeerida mis tahes virtuaalses masinas, nad jĂ”uavad ka teistesse.
Siin on rakenduse lÔpliku infrastruktuuri skeem:

Ăpime kĂ€sitsi ĂŒles tĂ”stma
MySQL ja ClickHouse
Enne sellise rakenduse paigaldamist ĂŒhe nupuvajutusega on vaja Ă”ppida, kuidas iga selle komponent kĂ€sitsi ĂŒles seada ja neid omavahel integreerida.
Siin aitab meid Yandex.Cloud, mis pakub L3-balanseere, ClickHouse'i ja MySQL'i hallatud teenustena. Kasutaja peab lihtsalt mÀÀrama parameetrid ja ootama, kuni platvorm viib kÔik töökorda.
Registreerisin end, lĂ”in endale pilve ja maksekonto. PĂ€rast seda sisenesin pilve ja seadsin ĂŒles MySQL ja ClickHouse klastri minimaalsete seadistustega. Ootasin, kuni nad saavad aktiivseks.


Samuti ei tohi unustada luua igas klastris andmebaasi ja seadistada sellele juurdepÀÀs sisselogimise ja parooliga. Sisenen siin detailidesse, et liideses on kÔik piisavalt selge.
Mitteilmne detail oli selles, et nende andmebaasidel on palju hoste, mis tagavad nende tĂ”rkeotsingu. Kuid Grafana vajab igas andmebaasis tĂ€pselt ĂŒhte hosti, millega ta töötab. Pikem lugemine. Pilv viis mind lahenduseni. Selgub, et host tĂŒĂŒbiga c-<cluster_id>.rw.mdb.yandexcloud.net kaardistatakse praegusele aktiivsele meistrihostile, millel on vastav ID. Just seda anname Grafanale.
Veebiserver
NĂŒĂŒd on aeg veebiserveri jaoks. Loodame tavalise Linuxi virtuaalmasina ja seadistame sellele Grafana kĂ€sitsi.


Ă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'i all ja paigaldame plugina ClickHouse'iga töötamiseks (jah, baaskomplektis ei tule see kaasa).
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasourceKÔik, pÀrast seda lihtsa kÀsu abil
sudo service grafana-server startkĂ€ivitame veebiserveri. NĂŒĂŒd saab brauserisse sisestada virtuaalmasina vĂ€lise IP-aadressi, mÀÀrata pordi 3000 ja nĂ€ha Grafana ilusat kasutajaliidest.

Kuid ei ole mÔtet kiirustada, enne kui Grafana seadistatakse, ei tohi unustada öelda, kus MySQL asub, et seal seada konfiguratsioon.
KÔik Grafana veebiserveri konfiguratsioonid asuvad failis /etc/grafana/grafana.ini. Otsitav rida nÀeb vÀlja selline:
;url =Seame host MySQL klastriga. Samas failis on kasutajanimi ja parool Grafana juurde, mis on ĂŒlaltoodud pildil ja mis on mĂ”lemad vaikimisi vĂ”rdsed. admin.
Saad 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 nĂ€itame Grafana kasutajaliideses ClickHouse'i andmeallika sĂ”ltuvusena.
Töötava konfiguratsiooni saavutamiseks kasutasin jÀrgmisi seadeid:

URL-ina mÀÀrasin https://c-.rw.mdb.yandexcloud.net:8443
KĂ”ik! Meil on ĂŒks funktsionaalne virtuaalne masin veebiserveriga, mis on ĂŒhendatud CH ja MySQL-iga. Juba on vĂ”imalik laadida andmeseti ClickHouse'i ja koostada armatuurlaudu. Kuid me pole veel oma eesmĂ€rki saavutanud ja ei ole loonud tĂ€ieĂ”iguslikku infrastruktuuri.
Packer
Yandex.Cloud vĂ”imaldab luua olemasoleva virtuaalse masina ketta pilti, ja selle alusel â piiramatu arv ĂŒksteisega identseid masinaid. Just seda me kasutame. Mugavalt pildi kogumiseks vĂ”ime kasutada tööriista HashiCorbilt. See vĂ”tab sisendiks json-faili pildi koostamise juhistega.
Meie json-fail koosneb kahest plokist: builders ja provisioners. Esimene plokk kirjeldab pildi parameetreid kui objekti, ning teine â juhiseid vajaliku sisuga tĂ€itmiseks.
Builders
{
"builders": [
{
"type": "yandex",
"endpoint": "{{user `endpoint`}}",
"folder_id": "",
"subnet_id": "{{user `subnet_id`}}",
"zone": "{{user `zone`}}",
"labels": {},
"use_ipv4_nat": true,
"use_internal_ip": false,
"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 tuleb mÀÀrata pilti moodustava sektsiooni identifikaator pilves, samuti teekonna teenuse konto vÔtme faili juurde, mis on eelnevalt selle sektsiooni jaoks loodud. Lisainfot teenuse kontode ja vÔtmete loomise kohta faili kujul leiad vastavast osast. .
Selline konfiguratsioon ĂŒtleb, et ketta pilt koostatakse platvormi pĂ”hjal ubuntu-1804-lts, ja see paigutatakse kasutaja vastavasse sektsiooni piltide peres GRAFANA koos nimega grafana-{{timestamp}}.
Provisioners
NĂŒĂŒd on aeg rÀÀkida huvitavamast konfiguratsioonist. Siin kirjeldatakse samme, mida tuleb virtuaalses masinas enne selle oleku salvestamist ketta kujutisse 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 kolme etappi. Esimeses etapis kÀivitatakse lihtne skript, mis loob abikatalooge.
prepare-ctg.sh:
#!/bin/bash
sudo mkdir -p /opt/grafana
sudo chown -R ubuntu:ubuntu /opt/grafanaJÀrgmisel etapil paigutame sellesse katalooge skripti, mis tuleb kÀivitada kohe pÀrast virtuaalse masina kÀivitamist. See skript sisestab vajalikud kasutajamuutujad Gafana konfiguratsioonifaili 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 jÀÀb teha kolm asja:
1) paigaldada paketid
2) tuua Gafana systemctl alla ja paigaldada ClickHouse'i plugin
3) lisada skript setup.sh kĂ€ivitamise jĂ€rjekorda kohe pĂ€rast virtuaalse masina sisselĂŒlitamist.
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 kĂ€ivitada Packer ja saada vĂ€ljundiks kujutis, mis paigutatakse mÀÀratud sektsiooni. Virtuaalmasina loomisel saab selle valida kĂ€ivitatavaks kettaks ning pĂ€rast kĂ€ivitamist saada valmis Gafana veebiserver.


Instantsi grupp ja koormuse tasakaalustaja
PĂ€rast ketta kujutise loomist, mis vĂ”imaldab luua palju identseid Gafana veebiservereid, saame luua instantsi grupi. Yandex Cloud platvormil tĂ€histab see termin virtuaalmasinate kogumit, millel on samad omadused. Instantsi grupi loomisel konfigureeritakse grupi kĂ”igi masinate prototĂŒĂŒp ja seejĂ€rel ka rĂŒhma omadused (nĂ€iteks minimaalne ja maksimaalne aktiivsete masinate arv). Kui praegune arv ei vasta nendele kriteeriumitele, siis instantsi grupp eemaldab ise liigsed masinad vĂ”i loob uusi nende jĂ€rgi.
Meie ĂŒlesande raames loome veebiserverite instantsi grupi, mis sĂŒnnivad varem loodud ketta kujutisest.


Viimase instantsigruppide seadistamine on tÔeliselt mÀrkimisvÀÀrne. Sihtgrupp, mis integreerub Load Balancer'iga, vÔimaldab paar nupuvajutust kÔrge taseme L3-balansseeri seadistamiseks selle grupi virtuaalmasinate peal.

Balansseeri seadistamisel rakendasin kahte olulist aspekti:
- Seadsin ĂŒhtlasi nii, et balansseerija aktsepteerib kasutajatulekut 80. porti ja suunab selle virtuaalmasinate 3000. porti, kuhu Grafana elab.
- Seadsin masinate elujÔulisuse kontrolli, pingsades neid 3000. porti.

Mini kokkuvÔte
LĂ”puks suutsime ise lahti keerata soovitud rakenduse infrastruktuuri ja nĂŒĂŒd on meil kĂ”rgelt usaldusvÀÀrne Grafana teenus. Vaja on lihtsalt teada balansseeri IP-aadressi kui sisenemispunkti rakendusse ja ClickHouse klastrihostit, et laadida sinna andmestik.
Tundub, et oleme vĂ”itnud? Jah, oleme. Kuid midagi hĂ€irib siiski. Kogu ĂŒlaltoodud protsess nĂ”uab palju manuaalseid toiminguid ning ei ole kaugeltki skaleeritav, mistĂ”ttu sooviksime seda vĂ”imalusel automatiseerida. Sellele pĂŒhendatakse jĂ€rgmine osa.
Integreerimine Terraform'iga
Kasutame taas HashiCorpi tööriista nimega . See aitab ĂŒhe nupuvajutusega rakenduse kogu infrastruktuuri ĂŒles seada, toetudes paarile muutujale, mille kasutaja edastab. Kirjutame retsepti, mida saab mitu korda erinevates kasutajate jaotustes kĂ€ivitada.
Kogu töö Terraform'iga koosneb konfiguratsioonifaili kirjutamisest (*.tf) ja infrastruktuuri loomise alusest.
Muutujad
Faili algusesse paneme muutujad, millest sĂ”ltub, kus ja kuidas tulevane infrastruktuur ĂŒles seatakse.
variable "oauth_token" {
type = string
default = ""
}
variable "cloud_id" {
type = string
default = ""
}
variable "folder_id" {
type = string
default = ""
}
variable "service_account_id" {
type = string
default = ""
}
variable "image_id" {
type = string
default = ""
}
variable "username" {
type = string
default = ""
}
variable "password" {
type = string
default = ""
}
variable "dbname" {
type = string
default = ""
}
variable "public_key_path" {
type = string
default = ""
}Kogu rakenduse deployeerimise protsess keskendub ketta pildi koostamisele ja nende muutujate seadistamisele. Selgitan, mille eest nad vastutavad:
oauth_token â token pilve juurde pÀÀsemiseks. Seda saab hankida .
cloud_id â pilve identifikaator, kus me rakendust ĂŒles seadma hakkame
folder_id â jaotuse identifikaator, kus rakendust kĂ€ivitame
service_account_id â teenuse konto identifikaator vastavas pilviosas.
image_id â ketta pildi identifikaator, mis saadakse Packeriga
username ja parool â kasutajanimi ja parool juurdepÀÀsuks mĂ”lemale andmebaasile ja Grafana veebiserverile
dbname â andmebaasi nimi CH ja MySQL klastrites
public_key_path â tee faili, kus asub teie avalik ssh-vĂ”ti, mille kaudu saab sisse logida nime all ubuntu veebiserveritega virtuaalmasinadesse
Pakkuja seadistamine
NĂŒĂŒd tuleb seadistada 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"
}
Siit on nĂ€ha, et kasutame ĂŒlal mÀÀratud muutujaid.
VÔrk ja klastrid
NĂŒĂŒd loome vĂ”rgu, milles meie infrastruktuuri elemendid suhtlevad, kolm alamsubti (ĂŒks igas regioonis) ja tĂ”stame ĂŒles CH ja MySQL klastrid.
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 mÀrgata, on iga kahest klastrist piisavalt tÔrgeteta tÀnu kolme kÀttesaadavuse tsooni paigutusele.
Veebiserverid
Tundub, et vĂ”iks jĂ€tkata samas vaimus, kuid sattusin keerukusse. Enne tĂ”stsin kĂ”igepealt MySQL klastrit ja alles pĂ€rast seda, teades selle ID-d, koostasin kettapildi soovitud konfiguratsiooniga, kus mÀÀrasin klastri hosti. Kuid nĂŒĂŒd ei tea me klastri ID-d enne Terraformi kĂ€ivitamist, sealhulgas pildi koostamise hetkel. SeetĂ”ttu pidin kasutama jĂ€rgmist .
Kasutades Amazoni metaandmete teenust, edastame virtuaalmasinale mĂ”ned parameetrid, mille ta vastu vĂ”tab ja töötleb. Me peame tagama, et pĂ€rast kĂ€ivitamist lĂ€heks masin metaandmetesse MySQL klastri hosti ja kasutajanime-parooli jaoks, mille kasutaja on mÀÀranud Terraformi failis. Muudame faili sisu veidi. setup.sh, mis kĂ€ivitub virtuaalmasina sisse lĂŒlitamisel.
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 restartInstantsigrupp ja tasakaalustaja
Uue kettapildi koostamise jÀrel saame lÔpuks tÀiendada oma faili Terraformile.
MÀÀrame, et soovime kasutada olemasolevat kettapilti:
data "yandex_compute_image" "grafana_image" {
image_id = var.image_id
}NĂŒĂŒd loome instantsigruppi:
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"
}
}Oluline on mÀrkida, kuidas me edastasime metaandmetesse cluster_uri, username ja parool. Just need tÔmbab virtuaalmasin kÀivitamisel ja paneb Grafana konfiguratsiooni.
KĂŒsimus on tasakaalustajas.
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
}
}
}
}Veidi suhkrut
JÀÀnud on vĂ€ike detail. PĂ€rast infrastruktuuri ĂŒlesehitamist tuleb minna Grafana kasutajaliidesesse ja kĂ€sitsi lisada CH klaster (mille ID tuleb veel hankida) kui andmeallikas. Kuid Terraform teab, mis on klastri ID. Anname talle ĂŒlesande see töö lĂ”pule viia.
Lisame uue teenusepakkuja â Grafana, ning hostiks anname talle tasakaalustaja IP-aadressi. KĂ”ik muudatused, mida Terraform teeb masinas, kuhu tasakaalustaja suunab, kantakse MySQL-i, seega ka kĂ”ikidesse teistesse masinatesse.
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"
}Korrigeerime
VÔtame tasakaalustaja IP-aadressi ja ClickHouse 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"
}VÔib alustada
KÔik! Meie konfiguratsioonifail on valmis ja saame, mÀÀrates muutujad, öelda Terraformile tÔsta kÔik, mida oleme eespool kirjeldanud. Kogu protsess vÔttis mul umbes 15 minutit.
LÔpuks vÔib nÀha ilusa sÔnumi:
Rakendamine lÔpetatud! Ressursid: 9 lisatud, 0 muudetud, 0 purustatud.
VĂ€ljundid:
clickhouse_cluster_host = https://c-c9q14ipa2ngadqsbp2iq.rw.mdb.yandexcloud.net:8443
grafana_balancer_ip_address = 130.193.50.25Ja pilves on nĂ€htavad ĂŒlesseatud infrastruktuuri elemendid:

Teeme kokkuvÔtte
NĂŒĂŒd, Grafana nĂ€itel, oskab igaĂŒhel teist rakendusi kĂ€ivitada laiaulatuslikus pilvearhitektuuris Yandex. Cloud platvormil. Selleks vĂ”ivad abiks olla HashiCorp'i kasulikud tööriistad nagu Packer ja Terraform. Loodan, et see artikkel on kellelegi kasulik đ
P.S. Allpool lisatakse link reposiitoriumi, kus on leidnud valmis retseptid Packerile ja Terraformile, lÔigud, mida ma selles artiklis olen maininud.
Allikas: habr.com
