Салом ба ҳама! Дар доираи кори курсии худ ман имкониятҳои чунин платформаи абрии ватаниро таҳқиқ кардам
Шумо чӣ қабул кардан мехоҳед?
Пас аз ба кор андохтани мошини маҷозӣ бо веб-сервер, шумо метавонед ба мизбони он равед ва UI-и зебо ба даст оред, пойгоҳи додаҳоро ҳамчун манбаъ барои кори минбаъда муайян кунед, панелҳои идоракунӣ ва графикҳо созед.
Варианти асосӣ як камбудии назаррас дорад - он ба хатогиҳо тамоман тобовар нест. Яъне, тамоми фаъолияти барнома аз қобилияти як мошини виртуалӣ вобаста аст. Агар он рад кунад ё дар як вақт 10 нафар UI-ро кушоянд, пас мушкилот ба миён меоянд.
Онҳоро ба осонӣ ҳал кардан мумкин аст: ба шумо танҳо лозим аст, ки... бисёр мошинҳои виртуалии якхеларо бо веб-сервер ҷойгир кунед ва онҳоро дар зери тавозуни L3 ҷойгир кунед. Аммо на ҳама чиз дар ин ҷо оддӣ аст. Grafana танзимоти корбарро (роҳҳо ба пойгоҳи додаҳо, панелҳои идоракунӣ, графикҳо ва ғ.) мустақиман дар диски мошини виртуалии худ нигоҳ медорад. Ҳамин тариқ, агар мо баъзе танзимотро дар UI тағир диҳем, ин тағирот танҳо дар мошини маҷозӣ, ки мувозинат ба мо фиристодааст, инъикос хоҳад шуд. Ин ба танзимоти номувофиқ барои замимаи мо ва мушкилот дар оғоз ва истифодаи он оварда мерасонад.
Дар ин ҷо як пойгоҳи додаи дигар ба наҷот меояд, масалан, MySQL ё муодили он. Мо ба Grafana мегӯем, ки ӯ бояд танзимоти корбарро дар ин махзани "эхтиётӣ" нигоҳ дорад. Баъдан, як маротиба дар ҳар як мошин муайян кардани роҳ ба ин махзани маълумот кифоя хоҳад буд ва ҳама танзимоти корбарро дар ҳама гуна мошинҳои виртуалӣ таҳрир кунед; онҳо ба дигарон паҳн мешаванд.
Ин аст диаграммаи инфрасохтори ниҳоии барнома:
Биёед бо даст бардоштанро ёд гирем
MySQL ва ClickHouse
Пеш аз он ки ин гуна замимаро бо пахши тугма истифода барем, бояд тарзи коркарди ҳар як ҷузъҳои он ва муттаҳид кардани онҳоро бо ҳамдигар омӯхтан лозим буд.
Дар ин ҷо Yandex.Cloud ба мо кӯмак мекунад, ки баланси L3, ClickHouse ва MySQL-ро ҳамчун хидматҳои идорашаванда таъмин мекунад. Истифодабаранда танҳо бояд параметрҳоро муайян кунад ва интизор шавад, ки платформа ҳама чизро ба ҳолати корӣ меорад.
Ман сабти ном шудам, абр ва ҳисоби пардохт эҷод кардам. Пас аз он, ман ба абр рафтам ва кластерҳои MySQL ва ClickHouse-ро бо танзимоти ҳадди аққал насб кардам. Ман интизор будам, ки онҳо фаъол шаванд.
Шумо инчунин бояд дар хотир доред, ки дар ҳар як кластер пойгоҳи додаҳо эҷод кунед ва дастрасӣ ба он бо истифода аз логин ва парол танзим кунед. Ман дар ин ҷо ба тафсилот намеравам - ҳама чиз дар интерфейс хеле равшан аст.
Тафсилоти ғайриоддӣ дар он буд, ки ин пойгоҳи додаҳо ҳостҳои зиёде доранд, ки таҳаммулпазирии хатогиҳои онҳоро таъмин мекунанд. Аммо, Grafana барои ҳар як махзани маълумоте, ки бо он кор мекунад, маҳз як ҳост талаб мекунад. Хониши дароз c-<cluster_id>.rw.mdb.yandexcloud.net
ба мизбони фаъоли фаъоли кластер бо ID-и мувофиқ харита карда шудааст. Ин аст он чизе ки мо ба Графана медиҳем.
сервери веб
Акнун он ба сервери веб аст. Биёед як мошини муқаррарии виртуалиро бо Linux эҷод кунем ва дар он Grafana-ро дастӣ танзим кунем.
Биёед тавассути ssh пайваст шавем ва бастаҳои заруриро насб кунем.
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
Пас аз ин, биёед Grafana-ро зери systemctl иҷро кунем ва плагинро барои кор бо ClickHouse насб кунем (бале, он дар бастаи асосӣ дода нашудааст).
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasource
Ин аст, пас аз он бо фармони оддӣ
sudo service grafana-server start
мо сервери вебро оғоз мекунем. Акнун шумо метавонед суроғаи IP-и берунаи мошини виртуалиро дар браузер ворид кунед, порти 3000-ро муайян кунед ва интерфейси зебои Grafana UI-ро бубинед.
Аммо шитоб накунед, пеш аз насб кардани Grafana, шумо бояд фаромӯш накунед, ки ба он роҳи MySQL-ро гӯед, то танзимотро дар он ҷо нигоҳ доред.
Тамоми конфигуратсияи веб-сервери Grafana дар файл аст /etc/grafana/grafana.ini
. Сатри зарурӣ чунин менамояд:
;url =
Мо мизбонро ба кластери MySQL гузоштем. Дар ҳамон файл логин ва парол барои дастрасӣ ба Grafana дар расми боло мавҷуд аст, ки ба таври пешфарз ҳарду баробаранд admin
.
Шумо метавонед фармонҳои sed -ро истифода баред:
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
Вақти он расидааст, ки сервери вебро бозоғоз намоед!
sudo service grafana-server restart
Ҳоло дар UI Grafana мо ClickHouse-ро ҳамчун Сарчашмаи маълумот муайян мекунем.
Ман тавонистам ба конфигуратсияи корӣ бо танзимоти зерин ноил шавам:
Ман ҳамчун URL нишон додам https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443
Ҳама! Мо як мошини виртуалии корӣ дорем, ки сервери веб ба CH ва MySQL пайваст аст. Шумо аллакай метавонед маҷмӯи маълумотро ба ClickHouse бор кунед ва панелҳои идоракунӣ созед. Вале мо то хол ба максади худ нарасидаем ва инфраструктураи мукаммалро ба кор набаровардаем.
Packer
Yandex.Cloud ба шумо имкон медиҳад, ки тасвири диски мошини виртуалии мавҷуда ва дар асоси он - ҳама гуна шумораи мошинҳои ба ҳамдигар шабеҳро эҷод кунед. Ин маҳз ҳамон чизест, ки мо истифода хоҳем кард. Барои ба осонӣ васл кардани тасвир, асбобро гиред
Файли json мо аз ду блок иборат хоҳад буд: бинокорон ва таъминкунандагон. Блоки якум параметрҳои худи тасвирро ҳамчун объект тавсиф мекунад ва блоки дуюм дастурҳоро барои пур кардани он бо мундариҷаи зарурӣ тавсиф мекунад.
бинокорони
{
"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"
}
],
...
}
Дар ин қолаб ба шумо лозим аст, ки идентификатори қисматро дар абр, ки дар он шумо тасвир эҷод кардан мехоҳед, инчунин роҳ ба файл бо калидҳои ҳисоби хидматрасонии қаблан дар ин бахш сохташударо таъин кунед. Шумо метавонед маълумоти бештарро дар бораи эҷоди ҳисобҳои хидматӣ ва калидҳо дар шакли файл дар бахши мувофиқ хонед
Ин конфигуратсия мегӯяд, ки тасвири диск дар асоси платформа сохта мешавад ubuntu-1804-lts
, дар бахши мувофиқи корбар дар оилаи тасвирҳо ҷойгир карда шудааст GRAFANA
бо номи grafana-{{timestamp}}
.
Таъминкунандагон
Акнун қисми ҷолиби конфигуратсия меояд. Он пайдарпайии амалҳоро тавсиф мекунад, ки бояд дар мошини виртуалӣ пеш аз ях кардани ҳолати он дар тасвири диск иҷро шаванд.
{
...,
"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"
]
}
]
}
Дар ин ҷо ҳама амалҳо ба 3 марҳила тақсим мешаванд. Дар марҳилаи аввал скрипти оддӣ иҷро карда мешавад, ки директорияи ёрирасонро эҷод мекунад.
hazır-ctg.sh:
#!/bin/bash
sudo mkdir -p /opt/grafana
sudo chown -R ubuntu:ubuntu /opt/grafana
Дар марҳилаи навбатӣ, мо скриптро дар ин директория ҷойгир мекунем, ки онро фавран пас аз оғози мошини виртуалӣ оғоз кардан лозим аст. Ин скрипт тағирёбандаҳои корбарро ҷойгир мекунад, ки бояд дар конфигуратсияи Grafana ба қайд гирифта шаванд ва сервери вебро аз нав оғоз кунанд.
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
Пас аз ин 3 кор боқӣ мемонад:
1) насб кардани бастаҳо
2) Grafana-ро зери systemctl иҷро кунед ва плагини ClickHouse -ро насб кунед
3) скрипти setup.sh -ро фавран пас аз фурӯзон кардани мошини виртуалӣ дар навбати оғоз гузоред.
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;
Акнун танҳо кор кардани Packer ва гирифтани тасвири баромад дар қисмати муайяншуда боқӣ мемонад. Ҳангоми сохтани мошини виртуалӣ, шумо метавонед онро ҳамчун диски пурборкунанда интихоб кунед ва пас аз ба кор андохтан шумо веб-сервери тайёри Grafana мегиред.
Гурӯҳи мисол ва мувозинат
Вақте ки мо як тасвири диск дорем, ки ба мо имкон медиҳад, ки бисёр веб-серверҳои якхелаи Grafana эҷод кунем, мо метавонем як гурӯҳи мисол эҷод кунем. Дар платформаи Yandex.Cloud, ин истилоҳ ба иттиҳоди мошинҳои маҷозӣ, ки дорои хусусиятҳои якхела мебошанд, ишора мекунад. Ҳангоми сохтани гурӯҳи намунавӣ, прототипи ҳамаи мошинҳои ин гурӯҳ ва баъд хусусиятҳои худи гурӯҳ (масалан, шумораи минималӣ ва максималии мошинҳои фаъол) танзим карда мешавад. Агар рақами ҷорӣ ба ин меъёрҳо мувофиқат накунад, пас худи гурӯҳи мисол мошинҳои нолозимро хориҷ мекунад ё дар симои худ мошинҳои нав эҷод мекунад.
Ҳамчун як қисми вазифаи худ, мо як гурӯҳи намунаҳои веб-серверҳоро эҷод мекунем, ки аз тасвири диски қаблан сохташуда тавлид мешаванд.
Он чизе, ки воқеан аҷиб аст, насби охирини гурӯҳи намунавӣ мебошад. Гурӯҳи мақсаднок дар ҳамгироӣ бо Load Balancer ба шумо кӯмак мекунад, ки баланси L3-ро дар болои мошинҳои виртуалии ин гурӯҳ тавассути клик кардани якчанд тугма танзим кунед.
Ҳангоми насб кардани тавозун, ман ду нуктаи муҳимро амалӣ кардам:
- Ман мувозинатро водор кардам, ки трафики корбарро дар бандари 80 қабул кунад ва онро ба бандари 3000 мошинҳои виртуалӣ, ки маҳз дар он ҷо зиндагӣ мекунад, Графана равона кунад.
- Ман санҷиши қобилияти мошинҳоро тавассути пинг ба порти 3000 насб кардам.
Хулосаи хурд
Ниҳоят, мо тавонистем инфрасохтори дилхоҳи барномаро дастӣ ҷойгир кунем ва ҳоло мо хидмати хеле устувори Grafana дорем. Шумо танҳо бояд суроғаи IP-и мувозинатро ҳамчун нуқтаи вуруд ба барнома ва мизбони кластери ClickHouse донед, то маҷмӯи додаҳо ба он бор карда шавад.
Чунин ба назар мерасад, ки ин пирӯзӣ аст? Ҳа, ғалаба. Аммо чизе то ҳол маро парешон мекунад. Тамоми раванди дар боло зикршуда қадамҳои зиёди дастӣ талаб мекунад ва умуман миқёспазир нест; Ман мехоҳам онро автоматӣ кунам, агар имконпазир бошад. Ин аст он чизе ки боби оянда ба он бахшида мешавад.
Интегратсияи терраформ
Мо боз як асбоби HashiCorp -ро истифода хоҳем бурд
Ҳама корҳо бо Terraform барои навиштани файли конфигуратсия анҷом дода мешаванд (*.tf
) ва ба вучуд овардани инфраструктура дар асоси он.
Тағйирёбандаҳо
Дар ибтидои файл, мо тағирёбандаҳоро дохил хоҳем кард, ки муайян мекунанд, ки инфрасохтори оянда дар куҷо ва чӣ гуна ҷойгир карда мешаванд.
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>"
}
Тамоми раванди ҷобаҷогузории барномаҳо барои сохтани тасвири диск ва танзими ин тағирёбандаҳо поён меёбад. Биёед бифаҳмам, ки онҳо барои чӣ масъуланд:
oauth_token — нишона барои дастрасӣ ба абр. аз ҷониби дастрас кардан мумкин аст
cloud_id — идентификатори абрӣ, ки дар он мо барномаро ҷойгир мекунем
folder_id — идентификатори бахш, ки дар он мо барномаро ҷойгир мекунем
service_account_id — идентификатори ҳисоби хидматӣ дар бахши мувофиқи абр.
image_id — идентификатори тасвири диск, ки бо ёрии Packer гирифта шудааст
Логин и гузарвожа — номи корбар ва парол барои дастрасӣ ба пойгоҳи додаҳо ва веб-сервери Grafana
dbname — номи пойгоҳи додаҳо дар дохили кластерҳои CH ва MySQL
роҳи оммавии_калиди — роҳ ба файл бо калиди ҷамъиятии ssh, ки шумо метавонед онро барои пайваст шудан бо ном истифода баред ubuntu
ба мошинҳои виртуалӣ бо серверҳои веб
Танзимоти провайдер
Акнун шумо бояд провайдери Terraform-ро танзим кунед - дар ҳолати мо, Яндекс:
provider "yandex" {
token = var.oauth_token
cloud_id = var.cloud_id
folder_id = var.folder_id
zone = "ru-central1-a"
}
Шумо хоҳед дид, ки дар ин ҷо мо тағирёбандаҳои дар боло муайяншударо истифода мебарем.
Шабака ва кластерҳо
Ҳоло мо шабакаеро эҷод мекунем, ки дар он унсурҳои инфрасохтори мо, се зершабақа (якто дар ҳар як минтақа) муошират мекунанд ва кластерҳои CH ва MySQL-ро баланд мебардоранд.
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
}
}
Тавре ки шумо мебинед, ҳар як аз ин ду кластер тавассути ҷойгир кардани се минтақаи дастрас ба хатогиҳо тобовар сохта шудааст.
серверҳои веб
Чунин ба назар мерасад, ки мо метавонистем дар ҳамон рӯҳия идома диҳем, аммо ман ба душворӣ дучор шудам. Пеш аз ин, ман аввал кластери MySQL-ро ба вуҷуд овардам ва танҳо баъд аз он, ки ID-и онро дониста, тасвири дискро бо конфигуратсияи зарурӣ ҷамъоварӣ кардам, ки дар он мизбонро ба кластер муайян кардам. Аммо ҳоло мо ID кластерро пеш аз оғози Terraform, аз ҷумла ҳангоми сохтани тасвир намедонем. Бинобар ин, ба ман лозим омад, ки ба зерин муроҷиат кунам
Бо истифода аз хидмати метамаълумоти Amazon, мо баъзе параметрҳоро ба мошини маҷозӣ интиқол медиҳем, ки он онҳоро қабул ва коркард мекунад. Мо ба мошин лозим аст, ки пас аз оғоз ба метамаълумот дар паси мизбони кластери MySQL ва номи корбар-парол, ки корбар онро дар файли Terraform нишон додааст, равад. Биёед мундариҷаи файлро каме тағир диҳем setup.sh
, ки ҳангоми фаъол кардани мошини виртуалӣ кор мекунад.
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
Гурӯҳи интенсивӣ ва мувозинаткунанда
Пас аз барқарор кардани тасвири нави диск, мо дар ниҳоят метавонем файли худро барои Terraform илова кунем.
Биёед нишон диҳем, ки мо мехоҳем тасвири диски мавҷударо истифода барем:
data "yandex_compute_image" "grafana_image" {
image_id = var.image_id
}
Акнун биёед як гурӯҳи мисол эҷод кунем:
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"
}
}
Ба он диққат додан лозим аст, ки чӣ тавр мо онро ба метадата интиқол додем cluster_uri
, username
и password
. Маҳз инҳоянд, ки мошини маҷозӣ ҳангоми оғозёбӣ хориҷ карда, конфигуратсияи Grafana-ро ҷойгир мекунад.
Ин ба мувозинат вобаста аст.
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
}
}
}
}
Як каме шакар
Каме мондааст. Пас аз ҷойгиркунии инфрасохтор, шумо бояд ба UI Grafana равед ва кластери CH-ро (идентификатсияи он ҳоло ҳам бояд гирифта шавад) ҳамчун манбаи маълумот илова кунед. Аммо Terraform ID кластерро медонад. Биёед ба ӯ бовар кунем, ки ин масъаларо ба анҷом расонад.
Биёед провайдери нав - Grafana -ро илова кунем ва ба ӯ суроғаи IP-и мувозинатро ҳамчун мизбон диҳем. Ҳама тағиротҳое, ки Terraform дар мошине, ки мувозинати он муайян мекунад, дар MySQL ва аз ин рӯ дар ҳама мошинҳои дигар афзоиш хоҳад ёфт.
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"
}
Биёед мӯи худро шона кунем
Биёед суроғаи IP-и мувозинат ва мизбони кластери ClickHouse-ро нишон диҳем
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"
}
Шумо метавонед давед
Ҳама! Файли конфигуратсияи мо омода аст ва мо метавонем бо гузоштани тағирёбандаҳо ба Terraform бигӯем, ки ҳама чизеро, ки мо дар боло тавсиф кардем, баланд бардорад. Тамоми раванд ба ман тақрибан 15 дақиқа тӯл кашид.
Дар охир шумо паёми зебоеро мебинед:
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
Ва дар абр, унсурҳои инфрасохтори баландшуда намоён хоҳанд шуд:
Биёед, натиҷаҳои онро бифаҳмем
Ҳоло, бо истифода аз Grafana ҳамчун мисол, ҳар яки шумо метавонед замимаҳои дорои меъмории абрии васеъро дар платформаи Yandex.Cloud ҷойгир кунед. Асбобҳои муфид аз HashiCorp ба монанди Packer ва Terraform метавонанд дар ин кор ба шумо кӯмак расонанд. Ман умедворам, ки касе ин мақоларо муфид меҳисобад :)
P.S. Дар зер ман пайвандеро ба анбор замима хоҳам кард, ки дар он шумо метавонед рецептҳои тайёрро барои Packer ва Terraform пайдо кунед, ки порчаҳои онҳоро ман дар ин мақола овардаам.
Манбаъ: will.com