Jaotusjaotiste juurutamine Yandex.Cloudis Grafana nÀitel

Tere kĂ”igile! Kursusetöö raames olen uurinud kodumaise pilveplatvormi vĂ”imalusi, nimelt Yandex.Cloud. 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.

Jaotusjaotiste juurutamine Yandex.Cloudis Grafana nÀitel

Mida soovime saada?

Grafana — 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.

Jaotusjaotiste juurutamine Yandex.Cloudis Grafana nÀitel

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:

Jaotusjaotiste juurutamine Yandex.Cloudis Grafana nÀitel

Õ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.

Jaotusjaotiste juurutamine Yandex.Cloudis Grafana nÀitelJaotusjaotiste juurutamine Yandex.Cloudis Grafana nÀitel

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. dokumentatsioon 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.

Jaotusjaotiste juurutamine Yandex.Cloudis Grafana nÀitel

Jaotusjaotiste juurutamine Yandex.Cloudis Grafana nÀitel

Ü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-datasource

KÔik, pÀrast seda lihtsa kÀsu abil

sudo service grafana-server start

kĂ€ivitame veebiserveri. NĂŒĂŒd saab brauserisse sisestada virtuaalmasina vĂ€lise IP-aadressi, mÀÀrata pordi 3000 ja nĂ€ha Grafana ilusat kasutajaliidest.
Jaotusjaotiste juurutamine Yandex.Cloudis Grafana nÀitel

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 restart

NĂŒĂŒd nĂ€itame Grafana kasutajaliideses ClickHouse'i andmeallika sĂ”ltuvusena.

Töötava konfiguratsiooni saavutamiseks kasutasin jÀrgmisi seadeid:

Jaotusjaotiste juurutamine Yandex.Cloudis Grafana nÀitel

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 Packer 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. dokumentatsioon.

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/grafana

JÀ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 restart

PÀ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-datasource

run-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.

Jaotusjaotiste juurutamine Yandex.Cloudis Grafana nÀitel
Jaotusjaotiste juurutamine Yandex.Cloudis Grafana nÀitel

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.

Jaotusjaotiste juurutamine Yandex.Cloudis Grafana nÀitel

Jaotusjaotiste juurutamine Yandex.Cloudis Grafana nÀitel

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.

Jaotusjaotiste juurutamine Yandex.Cloudis Grafana nÀitel

Balansseeri seadistamisel rakendasin kahte olulist aspekti:

  1. Seadsin ĂŒhtlasi nii, et balansseerija aktsepteerib kasutajatulekut 80. porti ja suunab selle virtuaalmasinate 3000. porti, kuhu Grafana elab.
  2. Seadsin masinate elujÔulisuse kontrolli, pingsades neid 3000. porti.

Jaotusjaotiste juurutamine Yandex.Cloudis Grafana nÀitel

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 Terraform. 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 lingil.
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 trikki.

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 restart

Instantsigrupp 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.25

Ja pilves on nĂ€htavad ĂŒlesseatud infrastruktuuri elemendid:

Jaotusjaotiste juurutamine Yandex.Cloudis Grafana nÀitel

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.

Repo

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster