Dreifing á dreifðri þjónustu í Yandex.Cloud með Grafana sem dæmi

Hæ allir! Sem hluti af námskeiðsvinnu minni rannsakaði ég getu innlends skýjapalls eins og Yandex.Cloud. Vettvangurinn býður upp á ýmsa þjónustu til að leysa hagnýt vandamál. Hins vegar þarftu stundum að setja upp þitt eigið skýjaforrit með nokkuð víðtæka innviði sem byggir á þessari þjónustu. Í þessari grein vil ég deila reynslu minni af því að dreifa slíku forriti.

Dreifing á dreifðri þjónustu í Yandex.Cloud með Grafana sem dæmi

Hvað viltu fá?

grafana — öflugt tæki til að leysa greiningarvandamál eða fylgjast með vandamálum hvers kyns kerfa. Í grunnstillingu sinni er þetta sýndarvél með Grafana vefþjóni, auk gagnagrunns (ClickHouse, InfluxDB o.s.frv.) með gagnasafni sem greiningin verður byggð á.

Eftir að sýndarvél með vefþjóni hefur verið opnuð geturðu farið á gestgjafa hennar og fengið fallegt notendaviðmót, tilgreint gagnagrunna sem heimildir fyrir frekari vinnu, búið til mælaborð og línurit.

Dreifing á dreifðri þjónustu í Yandex.Cloud með Grafana sem dæmi

Grunnútgáfan hefur einn verulegan galla - hún er alls ekki bilanaþolin. Það er að segja að öll virkni forritsins veltur á hagkvæmni einnar sýndarvélar. Ef það neitar eða 10 manns opna HÍ á sama tíma, þá koma upp vandamál.

Þau er hægt að leysa einfaldlega: þú þarft bara að... setja upp margar eins sýndarvélar með vefþjóni og setja þær undir L3 jafnvægisbúnað. En hér er ekki allt svo skýrt. Grafana geymir notendastillingar (slóðir í gagnagrunna, mælaborð, línurit o.s.frv.) beint á disk sýndarvélarinnar. Þannig, ef við breytum einhverjum stillingum í notendaviðmótinu, endurspeglast þessar breytingar aðeins á sýndarvélinni sem jafnvægismaðurinn sendi okkur. Þetta mun leiða til ósamræmis stillinga fyrir forritið okkar, sem veldur vandamálum við ræsingu og notkun.

Hér mun annar gagnagrunnur koma til bjargar, til dæmis MySQL eða jafngildi þess. Við segjum Grafana að hún ætti að geyma notendastillingar í þessum „vara“ gagnagrunni. Síðan er nóg að tilgreina slóðina að þessum gagnagrunni einu sinni á hverri vél og breyta öllum öðrum notendastillingum á hvaða sýndarvél sem er; þær ná til hinna.

Hér er skýringarmynd af endanlegri umsóknarinnviði:

Dreifing á dreifðri þjónustu í Yandex.Cloud með Grafana sem dæmi

Lærum að lyfta með höndunum

MySQL og ClickHouse

Áður en slíkt forrit var sett í notkun með því að smella á hnappinn var nauðsynlegt að læra hvernig ætti að meðhöndla hvern hluta þess og samþætta þá hver við annan.

Hér mun Yandex.Cloud hjálpa okkur, sem veitir L3 jafnvægistæki, ClickHouse og MySQL sem stýrða þjónustu. Notandinn þarf aðeins að tilgreina breytur og bíða þar til pallurinn kemur öllu í gang.

Ég skráði mig, bjó til ský og greiðslureikning. Eftir það fór ég í skýið og setti upp MySQL og ClickHouse klasa með lágmarks stillingum. Ég beið þar til þeir urðu virkir.

Dreifing á dreifðri þjónustu í Yandex.Cloud með Grafana sem dæmiDreifing á dreifðri þjónustu í Yandex.Cloud með Grafana sem dæmi

Þú þarft einnig að muna að búa til gagnagrunn í hverjum klasa og stilla aðgang að honum með því að nota innskráningu og lykilorð. Ég mun ekki fara í smáatriði hér - allt er nokkuð augljóst í viðmótinu.

Það sem ekki var augljóst var að þessir gagnagrunnar hafa marga hýsa sem tryggja bilanaþol þeirra. Hins vegar þarf Grafana nákvæmlega einn hýsil fyrir hvern gagnagrunn sem hann vinnur með. Langur lestur skjöl Skýin komu mér að ákvörðun. Það kemur í ljós að gestgjafi tegundarinnar c-<cluster_id>.rw.mdb.yandexcloud.net varpað á núverandi virka aðalhýsil klasans með tilheyrandi auðkenni. Þetta munum við gefa Grafana.

Vefþjónn

Nú er komið að vefþjóninum. Við skulum reisa venjulega sýndarvél með Linux og stilla Grafana handvirkt á henni.

Dreifing á dreifðri þjónustu í Yandex.Cloud með Grafana sem dæmi

Dreifing á dreifðri þjónustu í Yandex.Cloud með Grafana sem dæmi

Tengjumst í gegnum ssh og setjum upp nauðsynlega pakka.

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 

Eftir það skulum við keyra Grafana undir systemctl og setja upp viðbótina til að vinna með ClickHouse (já, það er ekki til í grunnpakkanum).

sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasource

Það er það, eftir það með einfaldri skipun

sudo service grafana-server start

við munum ræsa vefþjóninn. Nú geturðu slegið inn ytri IP tölu sýndarvélarinnar í vafranum, tilgreint port 3000 og séð fallega notendaviðmót myndarinnar.
Dreifing á dreifðri þjónustu í Yandex.Cloud með Grafana sem dæmi

En ekki flýta þér, áður en þú setur upp Grafana, verður þú að muna að segja henni leiðina að MySQL til að geyma stillingarnar þar.

Öll uppsetning Grafana vefþjónsins er í skránni /etc/grafana/grafana.ini. Nauðsynleg lína lítur svona út:

;url =

Við stillum gestgjafann á MySQL þyrpinguna. Sama skrá inniheldur innskráningu og lykilorð fyrir aðgang að Grafana á myndinni hér að ofan, sem sjálfgefið eru bæði jöfn admin.

Þú getur notað sed skipanir:

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

Það er kominn tími til að endurræsa vefþjóninn!

sudo service grafana-server restart

Nú í Grafana UI munum við tilgreina ClickHouse sem DataSource.

Mér tókst að ná virku stillingu með eftirfarandi stillingum:

Dreifing á dreifðri þjónustu í Yandex.Cloud með Grafana sem dæmi

Ég tilgreindi sem slóð https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443

Allt! Við erum með eina virka sýndarvél með vefþjóni tengdum CH og MySQL. Þú getur nú þegar hlaðið upp gagnasafninu á ClickHouse og smíðað mælaborð. Hins vegar höfum við ekki enn náð markmiði okkar og höfum ekki komið á fót fullgildum innviðum.

Pakkari

Yandex.Cloud gerir þér kleift að búa til diskmynd af núverandi sýndarvél og á grundvelli hennar - hvaða fjölda véla sem er eins hver annarri. Þetta er nákvæmlega það sem við munum nota. Taktu tólið til að setja myndina saman á þægilegan hátt Pakkari frá HashiCorp. Það tekur sem inntak json skrá með leiðbeiningum um að setja saman myndina.

json skráin okkar mun samanstanda af tveimur blokkum: smiðirnir og úthlutunaraðilar. Fyrsti blokkin lýsir breytum myndarinnar sjálfrar sem einingu og seinni blokkin lýsir leiðbeiningum um að fylla hana með nauðsynlegu efni.

Smiðirnir

{
"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"
    }
  ],
...
}

Í þessu sniðmáti þarftu að stilla auðkenni hlutans í skýinu þar sem þú vilt búa til myndina, sem og slóðina að skránni með lyklunum frá þjónustureikningnum sem áður var búið til í þessum hluta. Þú getur lesið meira um að búa til þjónustureikninga og lykla í formi skráar í samsvarandi kafla skjöl.

Þessi uppsetning segir að diskamyndin verði byggð út frá pallinum ubuntu-1804-lts, settur í viðeigandi notendahluta í myndafjölskyldunni GRAFANA undir nafninu grafana-{{timestamp}}.

Veiðimenn

Nú kemur áhugaverðari hluti stillingarinnar. Það mun lýsa röð aðgerða sem þarf að framkvæma á sýndarvélinni áður en ástand hennar er fryst í diskmynd.

{
...,
"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"
        ]
        }
  ]
}

Hér er öllum aðgerðum skipt í 3 stig. Á fyrsta stigi er einfalt handrit keyrt sem býr til aukaskrá.

undirbúning-ctg.sh:

#!/bin/bash
sudo mkdir -p /opt/grafana
sudo chown -R ubuntu:ubuntu /opt/grafana

Á næsta stigi setjum við handrit í þessa möppu, sem þarf að ræsa strax eftir að sýndarvélin er ræst. Þetta handrit mun setja notendabreyturnar sem þarf að skrá í Grafana stillinguna og endurræsa vefþjóninn.

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

Eftir þetta eru 3 hlutir eftir að gera:
1) setja upp pakka
2) keyrðu Grafana undir systemctl og settu upp ClickHouse viðbótina
3) settu setup.sh handritið í ræsingarröðina strax eftir að kveikt er á sýndarvélinni.

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

keyra-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ú er allt sem er eftir að keyra Packer og fá úttaksmyndina setta í tilgreindan hluta. Þegar þú býrð til sýndarvél geturðu valið hana sem ræsidisk og eftir ræsingu færðu tilbúinn Grafana vefþjón.

Dreifing á dreifðri þjónustu í Yandex.Cloud með Grafana sem dæmi
Dreifing á dreifðri þjónustu í Yandex.Cloud með Grafana sem dæmi

Tilvikshópur og jafnvægismaður

Þegar við erum komin með diskamynd sem gerir okkur kleift að búa til marga eins Grafana vefþjóna getum við búið til tilvikshóp. Á Yandex.Cloud pallinum vísar þetta hugtak til sameiningar sýndarvéla sem hafa sömu eiginleika. Þegar tilvikahópur er stofnaður er frumgerð allra véla í þessum hópi stillt og síðan eiginleikar hópsins sjálfs (til dæmis lágmarks- og hámarksfjöldi virkra véla). Ef núverandi fjöldi uppfyllir ekki þessi skilyrði, þá mun tilvikshópurinn sjálfur fjarlægja óþarfa vélar eða búa til nýjar í eigin mynd.

Sem hluti af verkefninu okkar munum við búa til tilvikshóp af vefþjónum sem verða búnir til úr áður búið til diskamynd.

Dreifing á dreifðri þjónustu í Yandex.Cloud með Grafana sem dæmi

Dreifing á dreifðri þjónustu í Yandex.Cloud með Grafana sem dæmi

Það sem er sannarlega merkilegt er hópuppsetning síðasta tilviksins. Markhópurinn í samþættingu við Load Balancer mun hjálpa þér að stilla L3 balancer ofan á sýndarvélar þessa hóps með því að smella á nokkra hnappa.

Dreifing á dreifðri þjónustu í Yandex.Cloud með Grafana sem dæmi

Þegar ég setti upp jafnvægisbúnaðinn útfærði ég tvö mikilvæg atriði:

  1. Ég lét jafnvægistækið samþykkja notendaumferð á port 80 og beina því á port 3000 í sýndarvélunum, nákvæmlega þar sem Grafana býr.
  2. Ég setti upp að athuga hagkvæmni véla með því að smella þeim á port 3000.

Dreifing á dreifðri þjónustu í Yandex.Cloud með Grafana sem dæmi

Smá samantekt

Að lokum gátum við handvirkt dreift tilætluðum forritainnviðum og nú erum við með mjög seigur Grafana þjónustu. Þú þarft aðeins að vita IP-tölu jafnvægisbúnaðarins sem inngangsstað forritsins og gestgjafa ClickHouse klasans til að hlaða gagnasafninu inn í það.

Það virðist sem sigur? Já, sigur. En eitthvað ruglar mig samt. Allt ferlið hér að ofan krefst margra handvirkra skrefa og er alls ekki skalanlegt; Mig langar að gera það sjálfvirkt ef mögulegt er. Þetta er það sem næsti kafli verður helgaður.

Terraform samþætting

Við munum aftur nota tól frá HashiCorp sem heitir Terraform. Það mun hjálpa þér að dreifa öllu innviði forritsins með því að smella á hnapp, byggt á nokkrum breytum sem notandinn hefur sent frá sér. Við skulum skrifa uppskrift sem hægt er að keyra mörgum sinnum í mismunandi hlutum mismunandi notenda.

Öll vinna með Terraform kemur niður á að skrifa stillingarskrá (*.tf) og gerð innviða byggða á því.

Variables

Strax í upphafi skrárinnar munum við setja inn breytur sem ákvarða hvar og hvernig framtíðarinnviðum verður dreift.

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

Allt dreifingarferlið forrita mun snúast um að búa til diskmynd og stilla þessar breytur. Leyfðu mér að útskýra hvað þeir bera ábyrgð á:

oauth_tákn — tákn fyrir aðgang að skýinu. Hægt að nálgast hjá tengill.
cloud_id - skýjakenni þar sem við munum dreifa forritinu
mappa_id — hlutaauðkenni þar sem við munum dreifa forritinu
þjónustureikningsauðkenni — auðkenni þjónustureiknings í samsvarandi hluta skýsins.
myndauðkenni — auðkenni diskamyndarinnar sem fæst með Packer
notandanafn и lykilorð — notendanafn og lykilorð til að fá aðgang að bæði gagnagrunnum og Grafana vefþjóninum
dbnafn — Nafn gagnagrunns inni í CH og MySQL klösum
opinber_lykilslóð - slóð að skránni með opinbera ssh lyklinum þínum, sem þú getur notað til að tengjast undir nafninu ubuntu í sýndarvélar með vefþjónum

Uppsetning veitenda

Nú þarftu að stilla Terraform veituna - í okkar tilviki, Yandex:

provider "yandex" {
  token     = var.oauth_token
  cloud_id  = var.cloud_id
  folder_id = var.folder_id
  zone      = "ru-central1-a"
}

Þú munt taka eftir því að hér erum við að nota breyturnar sem skilgreindar eru hér að ofan.

Net og klasar

Nú munum við búa til net þar sem þættir innviða okkar munu hafa samskipti, þrjú undirnet (eitt á hverju svæði) og ala upp CH og MySQL klasa.


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

Eins og þú sérð er hver þyrpinganna tveggja búinn til nokkuð bilunarþolinn með því að vera settur á þrjú framboðssvæði.

Vefþjónar

Það virtist sem við gætum haldið áfram í sama anda, en ég lenti í erfiðleikum. Áður en þetta kom upp ræktaði ég fyrst MySQL þyrping og aðeins eftir það, vitandi auðkenni hans, safnaði ég diskamynd með nauðsynlegri uppsetningu, þar sem ég tilgreindi hýsilinn fyrir þyrpinguna. En nú vitum við ekki klasaauðkennið áður en Terraform var ræst, þar á meðal þegar myndin var byggð. Þess vegna varð ég að grípa til eftirfarandi brellu.

Með því að nota lýsigagnaþjónustu Amazon munum við senda nokkrar breytur til sýndarvélarinnar sem hún mun samþykkja og vinna úr. Við þurfum vélina til að fara í lýsigögnin á bak við MySQL þyrpingshýsilinn og notendanafn-lykilorð, sem notandinn tilgreindi í Terraform skránni, eftir að hafa byrjað. Við skulum breyta innihaldi skráarinnar lítillega setup.sh, sem keyrir þegar kveikt er á sýndarvélinni.

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

Intance hópur og jafnvægismaður

Eftir að hafa endurbyggt nýja diskamynd getum við loksins bætt við skránni okkar fyrir Terraform.

Við skulum gefa til kynna að við viljum nota núverandi diskamynd:

data "yandex_compute_image" "grafana_image" {
  image_id = var.image_id
}

Nú skulum við búa til tilvikshóp:

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

Það er þess virði að borga eftirtekt til hvernig við sendum það inn í lýsigögnin cluster_uri, username и password. Það er þetta sem sýndarvélin mun taka út við ræsingu og setja í Grafana stillinguna.

Það er undir jafnvægismanni komið.

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

Smá sykur

Það er aðeins eftir. Eftir að innviðirnir hafa verið settir upp verður þú að fara í Grafana notendaviðmótið og bæta við CH þyrpingunni (sem þarf enn að fá auðkenni) sem gagnaheimild handvirkt. En Terraform þekkir klasaauðkennið. Við skulum fela honum að koma málinu í framkvæmd.

Bætum við nýjum þjónustuaðila - Grafana, og gefum henni IP tölu jafnvægisaðilans sem gestgjafa. Allar breytingar sem Terraform gerir á vélinni þar sem jafnvægisstillir hennar ákvarðar munu vaxa í MySQL, og þar af leiðandi á öllum öðrum vélum.

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

Við skulum greiða hárið

Sýnum IP-tölu jafnvægisbúnaðar og gestgjafa ClickHouse klasans

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

Getur hlaupið

Allt! Stillingarskráin okkar er tilbúin og við getum, með því að stilla breyturnar, sagt Terraform að hækka allt sem við lýstum hér að ofan. Allt ferlið tók mig um 15 mínútur.
Í lokin má sjá falleg skilaboð:

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

Og í skýinu munu þættir upphækkaðs innviða vera sýnilegir:

Dreifing á dreifðri þjónustu í Yandex.Cloud með Grafana sem dæmi

Summa upp

Nú, með því að nota Grafana sem dæmi, getur hver og einn sett upp forrit með víðfeðmum skýjaarkitektúr á Yandex.Cloud pallinum. Gagnleg verkfæri frá HashiCorp eins og Packer og Terraform geta hjálpað þér með þetta. Ég vona að einhverjum finnist þessi grein gagnleg :)

PS Hér að neðan mun ég hengja tengil á geymsluna þar sem þú getur fundið tilbúnar uppskriftir fyrir Packer og Terraform, brot af þeim sem ég gaf í þessari grein.

geymsla

Heimild: www.habr.com

Bæta við athugasemd