Tere kÔigile! Kursusetööd tehes uurisin meie kodumaise pilveplatvormi vÔimalusi, nagu . Platvorm pakub erinevaid teenuseid praktiliste probleemide lahendamiseks. Kuid mÔnikord on vajalik nende teenuste pÔhjal seadistada oma pilveprogramm ulatusliku infrastruktuuriga. Selles artiklis tahan jagada kogemusi sellise rakenduse juurutamisest.

Mida soovitakse saavutada?
â vĂ”imas tööriist analĂŒĂŒsivajaduste vĂ”i sĂŒsteemide jĂ€lgimise ĂŒlesannete lahendamiseks. Selle pĂ”hivarustuses on virtuaalne masin koos Grafana veebiserveriga ning andmebaas (ClickHouse, InfluxDB jne), millel pĂ”hinev andmestik, mille alusel vahetatakse analĂŒĂŒsi.
PÀrast virtuaalse masina kÀivitamist, kus on veebiserver, saab selle hosti sisse logida ja saada ilus UI, mÀÀrata andmebaasid allikateks edasiseks töötlemiseks, luua armatuurlaudu ja graafikuid.

Baasi versioonil on ĂŒks mĂ€rkimisvÀÀrne puudus â see ei ole absoluutselt tĂ”rkekindel. See tĂ€hendab, et rakenduse funktsionaalsus sĂ”ltub tĂ€ielikult ĂŒhe virtuaalse masina töövĂ”imest. Kui see ebaĂ”nnestub vĂ”i kui kĂŒmme inimest avavad samal ajal kasutajaliidese, tekivad probleemid.
Need lahendatakse lihtsalt: on vaja lihtsalt⊠kĂ€ivitada palju sama tĂŒĂŒpi virtuaalseid masinaid koos veebiserveriga ja paigutada need L3- taseme koormuse tasakaalustaja alla. Kuid siin ei ole kĂ”ik nii lihtne. Grafana salvestab kasutaja seaded (andmebaaside teed, armatuurlaud, graafikud jne) otse oma virtuaalse masina kettale. Seega, kui teete UI-s mingeid muudatusi, kajastuvad need muudatused ainult seal, kuhu koormuse tasakaalustaja meid saatis. See viib rakenduste konfiguratsioonide ebajĂ€rjekindluseni ning tekitab probleeme kĂ€ivitamise ja kasutamise osas.
Siin tuleb appi veel ĂŒks andmebaas, nĂ€iteks MySQL vĂ”i selle analoog. Ătlesime Grafanale, et ta peab hoidma kasutaja seadistusi just selle "varu" andmebaasis. PĂ€rast on piisav, kui igal masinal korra viidata sellele andmebaasile, ja kĂ”ik muud kasutaja seadistused saab redigeerida ĂŒkskĂ”ik millisel virtuaalmasinal, need kanduvad ĂŒle teistele.
Siin on rakenduse lÔppstruktuuri skeem:

Ăpime kĂ€sitsi ĂŒles seadma
MySQL ja ClickHouse
Enne kui sellist rakendust ĂŒhe nupuvajutusega ĂŒles seada, tuli Ă”ppida kĂ€sitsi igat komponenti ĂŒles seadma ja need omavahel integreerima.
Siin aitab meid Yandex.Cloud, mis pakub L3-balansiereid, ClickHouse'i ja MySQL managed-teenustena. Kasutajal on vaja vaid mÀÀrata parameetrid ja oodata, kuni platvorm viib kÔik töökorda.
Registreerisin end, lÔin enda jaoks pilve ja maksekonto. PÀrast seda sisenesin pilve ja tÔin seadmesse MySQL ja ClickHouse klastri minimaalsete seadistustega. Ootasin, kuni need aktiveeruvad.


Samuti ei tohi unustada luua igas klastri andmebaas ja seadistada ligipÀÀs sellele kasutajanime ja parooli abil. SĂŒgavale detailidesse ma ei lasku â liideses on kĂ”ik piisavalt selge.
Mitte nii ilmne detail oli see, et nende andmebaaside jaoks on mitmeid hoste, mis tagavad nende tĂ”rketaluvuse. Kuid Grafana vajab iga andmebaasi tööks tĂ€pselt ĂŒhte hosti. Pikaajaline lugemine Pilv viis mind lahendusele. Selgub, et hosti tĂŒĂŒp c-<cluster_id>.rw.mdb.yandexcloud.net mappib aktiivse peahosti praegusele klastri ID-le. Just seda me Grafanale anname.
Veebiserver
NĂŒĂŒd on vuugimas nimetatud veebiserveri kĂ€tte. KĂ€ivitame tavalise virtuaalmaquina Linuxiga ja seadistame 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-all ja installime plugin ClickHouse'i kasutamiseks (jah, algkomplektis see ei sisaldu).
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasourceKogu, pÀrast seda lihtsa kÀsuga
sudo service grafana-server startkĂ€ivitame veebiserveri. NĂŒĂŒd saab brauserisse sisestada virtuaalmasina vĂ€list IP-aadressi, mÀÀrata pordiks 3000 ja nĂ€ha Grafana ilusat kasutajaliidese olemasolu.

Kuid ei tasu kiirustada, enne kui Grafanat seadistama hakkame, tuleb kindlasti mÀÀrata MySQL tee, et seadeid seal hoida.
Kogu veebiserveri Grafana konfiguratsioon asub failis /etc/grafana/grafana.ini. Vajalik rida nÀeb vÀlja nii:
;url =Seame hosti MySQL klastrisse. Samas failis on sisendi ja parooli info Grafanale nagu ĂŒlaloleval pildil, mis on vaikimisi mĂ”lemad admin.
Saame 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 Ôige aeg veebiserverit taaskÀivitada!
sudo service grafana-server restartNĂŒĂŒd mÀÀrame Grafana kasutajaliideses ClickHouse andmeallikaks.
Saavutada töötav konfiguratsioon olen saanud jÀrgmiste seadistustega:

URL-ina mÀÀrasin https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443
KĂ”ik! Meil on ĂŒks toimiv virtuaalmasin, millel on veebiserver, mis on ĂŒhendatud CH-ga ja MySQL-iga. NĂŒĂŒd on vĂ”imalik yĂŒk yĂŒkida andmestikke ClickHouse'i ja ehitada juhtpaneele. Siiski pole me veel oma eesmĂ€rki saavutanud ja pole tĂ€ielikku infrastruktuuri vĂ€lja pannud.
Packer
Yandex.Cloud vĂ”imaldab luua olemasoleva virtuaalmasina ketta pilti, mille pĂ”hjal â niipalju identseid masinaid kui soovite. Just seda me teeme. Mugavalt pildi kogumiseks kasutame tööriista HashiCorpi poolt. See vĂ”tab sisendina vastu json-faili, milles on pildi loomise juhised.
Meie json-fail koosneb kahest plokist: builders ja provisioners. Esimene plokk kirjeldab pildi parameetreid kui olemust, teine aga â 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 malleis tuleb mÀÀrata osa ID pilves, kus soovite luua kujundi, samuti tee teenusekonto vÔtmefailile, mis on eelnevalt selles osas loodud. Rohkem teenusekontode ja vÔtmete loomise kohta saate lugeda vastavas jaotises. .
Selline konfiguratsioon ĂŒtleb, et kettapilt koostatakse platvormi pĂ”hjal ubuntu-1804-lts, asetatakse kasutaja vastavasse jaotisse kujundite perekonnas GRAFANA nimega grafana-{{timestamp}}.
Provisioners
NĂŒĂŒd huvitavam osa konfiguratsioonist. Selles kirjeldatakse tegevuste jĂ€rjestust, mille tuleb lĂ€bi viia virtuaalses masinas enne, kui kĂŒlmutada selle olek kettapildiks.
{
...,
"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 tegevused jagatud kolmeks etapiks. Esimeses etapis kÀivitatakse lihtne skript, mis loob abikausta.
prepare-ctg.sh:
#!/bin/bash
sudo mkdir -p /opt/grafana
sudo chown -R ubuntu:ubuntu /opt/grafanaJÀrgmises etapis paigutame sellesse kausta skripti, mida tuleb kÀivitada kohe pÀrast virtuaalmasina alustamist. See skript lisab kasutaja muutujad, mis tuleb kirjutada Grafana 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 on veel kolm asja, mis tuleb teha:
1) paigaldada paketid
2) kÀivitada Grafana systemctl abil ja paigaldada ClickHouse plugin
3) lisada skript setup.sh kĂ€ivitamise jĂ€rjekorda kohe pĂ€rast virtuaalmasina 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 ĂŒle kĂ€ivitada Packer ja saada vĂ€ljundiks pilt, mis paigutatakse mÀÀratud sektsiooni. Virtuaalmasina loomisel saab seda valida alglaadurina ja pĂ€rast kĂ€ivitamist saadakse valmis Grafana veebiserver.


Instantsi grupp ja koormuse tasakaalustaja
PĂ€rast sellest, kui diskipilt on loodud, mille abil saab luua mitu sama Grafana veebi-serverit, saame luua instantsgrupi. Yandex.Cloudi platvormil nimetatakse seda mĂ”istet virtuaalmasinate ĂŒhenduseks, millel on samad omadused. Instantsgrupi loomisel konfigureeritakse kĂ”ikide selle grupi masinate prototĂŒĂŒp ning seejĂ€rel grupi omadused (nt minimaalne ja maksimaalne aktiivsete masinate arv). Kui praegune arv ei vasta nendele kriteeriumidele, siis instantsgrupp eemaldab ise ĂŒleliigsed masinad vĂ”i loob uusi sarnaste omadustega masiname.
Meie ĂŒlesande raames loome veebiserverite instantsgrupi, mis sĂŒnnib varem loodud diskipildist.


TÔeliselt tÀhelepanuvÀÀrne on instantsgrupi viimane seadistus. Integreeritud Load Balanceriga sihtgrupp aitab vaid paari nupuvajutusega seadistada L3-balanserit selle grupi virtuaalmasinate kohal.

Balanseri seadistamisel rakendasin kaks olulist punkti:
- Seadsime, et koormuse jaotaja aktsepteerib kasutaja liiklust 80. pordil ning suunab selle virtuaalmasinate 3000. pordile, seal, kus Grafana resideerib.
- Seadsime masinate elujÔudluse kontrollimise, pingutades neid 3000. pordil.

LĂŒhikokkuvĂ”te
LĂ”puks suutsime kĂ€sitsi ĂŒles seada soovitud rakenduse infrastruktuuri ning nĂŒĂŒd on meil kĂ”rge kĂ€ttesaadavusega Grafana teenus. On vajalik vaid teada koormuse jaotaja IP-aadressi rakenduse sisenemise punktina ja ClickHouse'i klastrihostina, et andmestik sinna laadida.
NĂ€ib, et vĂ”it? Jah, vĂ”it. Kuid siiski teatud asjad hĂ€irivad. Ăkski eespool toodud protsess ei ole vĂ€ga automatiseeritud ja nĂ”uab palju kĂ€sitsi sekkumist, tahame seda vĂ”imalikult palju automatiseerida. Sellele pĂŒhendatakse jĂ€rgmine osa.
Integratsioon Terraformiga
Kasutame taas HashiCorpi tööriista nimega . See aitab ĂŒksiku nupuvajutusega ĂŒles seada kogu rakenduse infrastruktuuri, tuginedes mitmele muutujale, mille kasutaja edastab. Kirjutame retsepti, mida saab mitmel korral erinevates kasutuskohtades kĂ€ivitada.
KÔik töö Terraformiga seisneb konfiguratsioonifaili kirjutamises (*.tf) ja selle alusel infrastruktuuri loomises.
Muutujad
Alguses toome vÀlja muutujad, millest sÔltub, kus ja kuidas tulevane infrastruktuur rakendatakse.
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 juurutamisprotsess seisneb diskihalduse pildina koostamises ja nende muutujate seadistamises. Selgitan, mille eest need vastutavad:
oauth_token â juurdepÀÀsutoken, et ligipÀÀseda pilve. Seda saab hankida .
cloud_id â pilve identifikaator, kus me rakendust juurutame
folder_id â kaustas oleva identifikaator, kus me rakendust juurutame
service_account_id â teenusekonto identifikaator vastavas pilveosas.
image_id â kettapildi identifikaator, mis saadakse Packeriga.
username ja password â kasutajanimi ja parool, et pÀÀseda juurde nii andmebaasidele kui ka Grafana veebiserverile
dbname â andmebaasi nimi CH ja MySQL klastris
public_key_path â tee faili, mis sisaldab teie avalikku ssh-vĂ”tit, mille kaudu saab sisse logida nime all ubuntu virtuaalmasinatele, millel on veebiserverid
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"
}
VĂ”ime mĂ€rgata, et siin kasutame ĂŒlalloetletud muutujaid.
VÔrk ja klastrid
NĂŒĂŒd loome vĂ”rgu, kus meie infrastruktuuri elemendid suhtlevad, kolm alamvĂ”rku (igaĂŒhes ĂŒks igas piirkonnas) ning tĂ”stame ĂŒles CH ja MySQL klastrid.
resource "yandex_vpc_network" "grafana_network" {}
resource "yandex_vpc_subnet" "subnet_a" {
zone = "ee-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 = "ee-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 = "ee-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 = "ee-central1-a"
subnet_id = yandex_vpc_subnet.subnet_a.id
}
host {
type = "CLICKHOUSE"
zone = "ee-central1-b"
subnet_id = yandex_vpc_subnet.subnet_b.id
}
host {
type = "CLICKHOUSE"
zone = "ee-central1-c"
subnet_id = yandex_vpc_subnet.subnet_c.id
}
host {
type = "ZOOKEEPER"
zone = "ee-central1-a"
subnet_id = yandex_vpc_subnet.subnet_a.id
}
host {
type = "ZOOKEEPER"
zone = "ee-central1-b"
subnet_id = yandex_vpc_subnet.subnet_b.id
}
host {
type = "ZOOKEEPER"
zone = "ee-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 = "ee-central1-a"
subnet_id = yandex_vpc_subnet.subnet_a.id
}
host {
zone = "ee-central1-b"
subnet_id = yandex_vpc_subnet.subnet_b.id
}
host {
zone = "ee-central1-c"
subnet_id = yandex_vpc_subnet.subnet_c.id
}
}Nagu mÀrkida, on iga kahe klastrit loodud piisavalt talitlushÀirete kindlaks, kuna need asuvad kolmes kÀttesaadavuspiirkonnas.
Veebiserverid
Tundub, et vĂ”iks jĂ€tkata sama rada, kuid ma sattusin keerukusse. Varem tĂ”stsin kĂ”igepealt MySQL klastrit ja alles seejĂ€rel, teades selle ID-d, kogusin vajaliku konfiguratsiooniga ketaspildi, kus mÀÀrasin klastrile hosti. Kuid nĂŒĂŒd ei tea me klastrite ID-d enne Terraformi kĂ€ivitamist, sealhulgas ka kujutise koostamise hetkel. SeetĂ”ttu pidime varuma jĂ€rgmise .
Kasutades Amazoni metaandmete teenust, edastame virtuaalmasinale mĂ”ned parameetrid, mida see aktsepteerib ja töötleb. Meil on vajalik, et pĂ€rast kĂ€ivitamist lĂ€heks masin metaandmete juurde, et leida MySQL klastrile host ja kasutajanimi-parool, mida kasutaja Terraformi failis mÀÀras. Teeme faili sisu veidi muudatusi setup.sh, mis kĂ€ivitatakse virtuaalmasina sisselĂŒlitamise ajal.
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 restartInstantsi rĂŒhm ja tasakaalustaja
Uue ketaspildi ĂŒmber koostamisel saame lĂ”puks oma faili Terraformi jaoks tĂ€iendavalt kirjutada.
MÀÀrame, et soovime kasutada olemasolevat ketaspilti:
data "yandex_compute_image" "grafana_image" {
image_id = var.image_id
}Loo nĂŒĂŒd instantsrĂŒ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 mÀrkida, kuidas me metadatas edastasime cluster_uri, username ja password. Just nende andmed, mille virtuaalne masin kÀivitamise korral kÀtte saab ja Grafaana konfi paigutab.
JÀÀk on koormuse tasakaalustaja teha.
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
Ainus, mis jÀÀb teha, on see, et kui infrastruktuur on ĂŒles seatud, tuleb minna Grafana UI-sse ja kĂ€sitsi lisada CH-klaster (mille ID tuleb veel hankida) andmeallikana. Kuid ID teab klastrist Terraform. Usaldame talle, et ta viib asja lĂ”pule.
Lisame uue pakkuja â Grafana, ja anname hostiks balancer'i IP-aadressi. KĂ”ik muudatused, mida Terraform masinas teeb, kuhu tema balancer suunab, peegelduvad MySQL-is, mis tĂ€hendab, et need jĂ”uavad ka kĂ”ikidesse ĂŒlejÀÀnud 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"
}Kammime
TÔstame esile ClickHouse'i tasakaalustaja ja klastri IP-aadressi
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 kÀivitada
KĂ”ik! Meie konfiguratsioonifail on valmis ning pĂ€rast muutujate seadistamist saame öelda Terraformile, et tĂ”sta ĂŒles kĂ”ik, mida ĂŒlal kirjeldasime. Kogu protsess vĂ”ttis mul umbes 15 minutit.
LÔpus vÔib nÀha kaunist teadet:
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:

Teeme kokkuvÔtte
NĂŒĂŒd oskab igaĂŒks teist Grafana nĂ€itel rakendusi Yandex.Cloudi platvormil keerulise pilvearhitektuuriga ĂŒles seada. Sellistes olukordades vĂ”ivad abiks olla sellised kasulikud tööriistad nagu HashiCorpi Packer ja Terraform. Loodan, et kellelegi osutub see artikkel kasulikuks đ
P.S. Allpool jagan linki repole, kus leiate valmislahendused Packerile ja Terraformile, mille fragmente jagasin selles artiklis.
Allikas: habr.com
