Silav hemû! Wekî beşek ji xebata xweya qursê, min li ser kapasîteyên platformek cloudê ya navxweyî wekî lêkolîn kir
Hûn dixwazin çi bistînin?
Piştî destpêkirina makîneyek virtual bi serverek webê re, hûn dikarin biçin mêvandarê wê û UI-ya xweşik bistînin, databasan wekî çavkaniyên ji bo xebata bêtir destnîşan bikin, dashboard û grafîkan biafirînin.
Guhertoya bingehîn yek kêmasiyek girîng heye - ew qet ne xelet-tolerans e. Ango, tevahiya fonksiyona serîlêdanê bi zindîbûna yek makîneya virtual ve girêdayî ye. Ger ew red bike an jî 10 kes di heman demê de UI vekin, wê hingê dê pirsgirêk derkevin.
Ew dikarin bi hêsanî werin çareser kirin: hûn tenê hewce ne ku ... gelek makîneyên virtual yên wekhev bi serverek webê re bicîh bikin û wan bixin binê balansek L3. Lê li vir her tişt ne zelal e. Grafana mîhengên bikarhêner (rêyên databasan, dashboard, grafîk, hwd.) rasterast li ser dîska makîneya xweya virtual hilîne. Bi vî rengî, heke em di UI-yê de hin mîhengan biguhezînin, dê ev guhertin tenê li ser makîneya virtual ya ku balansek ji me re şandiye were xuyang kirin. Ev ê ji bo serîlêdana me bibe sedema mîhengên nehevgirtî, di destpêkirin û karanîna de dibe sedema pirsgirêkan.
Li vir databasek din dê were rizgariyê, mînakî, MySQL an hevwateya wê. Em ji Grafana re dibêjin ku divê ew mîhengên bikarhêner di vê databasa "vedan" de hilîne. Dûv re, bes e ku meriv li ser her makîneyê carekê riya vê databasê diyar bike, û hemî mîhengên bikarhêner ên din li ser yek ji makîneyên virtual biguhezîne; ew ê li yên din dirêj bikin.
Li vir diyagramek binesaziya serîlêdana dawîn heye:
Werin em fêrî hilgirtina bi destên xwe bibin
MySQL û ClickHouse
Berî ku serîlêdanek wusa bi tikandina bişkokekê were bicîh kirin, pêdivî bû ku meriv fêr bibe ka meriv çawa her yek ji pêkhateyên wê bi rê ve dibe û wan bi hevûdu re entegre dike.
Li vir Yandex.Cloud dê ji me re bibe alîkar, ku balansên L3, ClickHouse û MySQL wekî karûbarên birêvebir peyda dike. Bikarhêner tenê pêdivî ye ku pîvanan diyar bike û li bendê bimîne heya ku platform her tiştî bixe rêza xebatê.
Min qeyd kir, ewr û hesabek dravdanê çêkir. Piştî wê, ez çûm ewr û komên MySQL û ClickHouse bi mîhengên hindiktirîn saz kirin. Ez li bendê bûm ku ew çalak bibin.
Her weha hûn hewce ne ku ji bîr mekin ku di her komê de databasek biafirînin û gihîştina wê bi karanîna têketinek û şîfreyek mîheng bikin. Ez ê li vir neçim hûrguliyan - her tişt di navbeynê de pir eşkere ye.
Hûrguliya ne diyar ev bû ku van databasan gelek mêvandar hene, ku tolerasyona xeletiya wan piştrast dikin. Lêbelê, Grafana ji bo her databasa ku pê re dixebite yek mêvandar hewce dike. xwendina dirêj c-<cluster_id>.rw.mdb.yandexcloud.net
bi nasnama têkildar re ji hosteya sereke ya çalak a heyî ya komê re nexşe kirin. Ya ku em ê bidin Grafana ev e.
web server
Niha ew li ser servera webê ye. Ka em bi Linux-ê makîneyek virtual ya birêkûpêk rakin û bi destan Grafana li ser wê mîheng bikin.
Ka em bi ssh ve girêbidin û pakêtên pêwîst saz bikin.
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
Piştî wê, em Grafana di bin systemctl-ê de bimeşînin û pêvekê saz bikin ku bi ClickHouse re bixebitin (erê, ew di pakêta bingehîn de nayê peyda kirin).
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasource
Ew e, piştî ku bi fermanek hêsan
sudo service grafana-server start
em ê servera malperê dest pê bikin. Naha hûn dikarin navnîşana IP-ya derveyî ya makîneya virtual di gerokê de têkevin, porta 3000 diyar bikin û UI-ya xweşik a Grafana bibînin.
Lê lez nekin, berî ku Grafana saz bikin, divê hûn ji bîr mekin ku rêça MySQL jê re vebêjin da ku mîhengan li wir hilînin.
Tevahiya veavakirina web servera Grafana di pelê de ye /etc/grafana/grafana.ini
. Rêza pêwîst wiha xuya dike:
;url =
Me mêvandar li koma MySQL danî. Di heman pelê de têketin û şîfreya ji bo gihîştina Grafana di wêneya jorîn de heye, ku ji hêla xwerû ve her du jî wekhev in admin
.
Hûn dikarin fermanên sed bikar bînin:
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
Wext e ku hûn servera malperê ji nû ve bidin destpêkirin!
sudo service grafana-server restart
Naha di Grafana UI de em ê ClickHouse wekî DataSource diyar bikin.
Min karî bi mîhengên jêrîn vesazkirinek xebatê bi dest bixim:
Min wekî URL diyar kir https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443
Gişt! Me makîneyek virtual ya xebatê heye ku bi serverek webê ve girêdayî CH û MySQL ye. Hûn dikarin berê danûstendinê li ClickHouse barkirin û dashboardan ava bikin. Lê me hê negihiştiye armanca xwe û binesaziyeke tam pêk neaniye.
pakkeran
Yandex.Cloud destûrê dide te ku hûn wêneyek dîskê ya makîneyek virtual ya heyî biafirînin, û li ser bingeha wê - her hejmarek makîneyên ku bi hevûdu re wekhev in. Ya ku em ê bikar bînin ev e. Ji bo ku wêneyê bi hêsanî berhev bikin, amûrê bigirin
Dosyaya meya json dê ji du blokan pêk were: avaker û dabînker. Bloka yekem pîvanên wêneyê bixwe wekî hebûnek diyar dike, û bloka duyemîn talîmatên dagirtina wê bi naveroka pêwîst vedibêje.
Avahîner
{
"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"
}
],
...
}
Di vê şablonê de, hûn hewce ne ku nasnameya beşa di ewrê de ku hûn dixwazin wêneyê biafirînin, û her weha rêça pelê bi bişkojkên ji hesabê karûbarê ku berê di vê beşê de hatî çêkirin destnîşan bikin. Hûn dikarin li ser çêkirina hesabên karûbar û mifteyên di forma pelê de di beşa têkildar de bêtir bixwînin
Ev veavakirin dibêje ku wêneya dîskê dê li ser bingeha platformê were çêkirin ubuntu-1804-lts
, di beşa bikarhênerê ya guncan de di malbata wêneyê de tê danîn GRAFANA
bin navê grafana-{{timestamp}}
.
Pêşkêşker
Naha beşa balkêştir a veavakirinê tê. Ew ê rêza kiryarên ku dê hewce bike ku li ser makîneya virtual berî ku rewşa wê di nav wêneyek dîskê de bicemidîne rave bike.
{
...,
"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"
]
}
]
}
Li vir hemî çalakî li 3 qonaxan têne dabeş kirin. Di qonaxa yekem de, skrîptek hêsan tê darve kirin ku pelrêçek alîkar diafirîne.
amade-ctg.sh:
#!/bin/bash
sudo mkdir -p /opt/grafana
sudo chown -R ubuntu:ubuntu /opt/grafana
Di qonaxa paşîn de, em skrîptek di vê pelrêça de cîh dikin, ku dê piştî destpêkirina makîneya virtual tavilê were destpêkirin. Ev skrîpt dê guhêrbarên bikarhêner ên ku hewce ne ku bêne tomar kirin di mîhenga Grafana de bihêle û servera malperê ji nû ve bide destpêkirin.
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
Piştî vê yekê 3 tişt mane ku bikin:
1) pakêtan saz bikin
2) Grafana di bin systemctl de bimeşînin û pêveka ClickHouse saz bikin
3) skrîpta setup.sh tavilê piştî vekirina makîneya virtual tavilê têxe rêza destpêkirinê.
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;
Naha ya ku dimîne ev e ku hûn Packer bimeşînin û wêneya derketinê ya ku di beşa diyarkirî de hatî danîn bistînin. Dema ku hûn makîneyek virtual diafirînin, hûn dikarin wê wekî dîskek boot hilbijêrin û piştî destpêkirinê hûn ê serverek web-a Grafana ya amade bistînin.
Koma mînak û hevseng
Gava ku me wêneyek dîskê hebe ku destûrê dide me ku em gelek pêşkêşkerên malperê yên Grafana yên wekhev biafirînin, em dikarin komek nimûne biafirînin. Li ser platforma Yandex.Cloud, ev têgeh ji yekîtiya makîneyên virtual ku xwedî heman taybetmendiyên xwe ne, vedibêje. Dema ku komek nimûne diafirîne, prototîpa hemî makîneyên di vê komê de têne mîheng kirin, û dûv re taybetmendiyên komê bixwe (mînak, herî kêm û herî zêde hejmara makîneyên çalak) têne mîheng kirin. Ger jimareya heyî van pîvanan pêk neyne, wê hingê koma mînak bixwe dê makîneyên nehewce derxîne an di wêneya xwe de yên nû biafirîne.
Wekî beşek ji peywira xwe, em ê komek mînakek pêşkêşkerên malperê biafirînin ku dê ji wêneya dîskê ya berê hatî afirandin were çêkirin.
Ya ku bi rastî balkêş e sazkirina koma mînaka paşîn e. Koma armancê di entegrasyonê de bi Load Balancer re dê ji we re bibe alîkar ku hûn bi tikandina çend bişkokan balansek L3 li ser makîneyên virtual yên vê komê mîheng bikin.
Dema ku balansek saz kir, min du xalên girîng bicîh anîn:
- Min kir ku balansek seyrûsefera bikarhêner li porta 80-ê qebûl bike û wê berbi porta 3000-a makîneyên virtual, tam cihê ku Grafana dijî.
- Min kontrolkirina zindîbûna makîneyan bi pingkirina wan li porta 3000 saz kir.
kurteya Mini
Di dawiyê de, me karî binesaziya serîlêdanê ya xwestî bi destan bicîh bikin, û naha me karûbarek Grafana ya pir berxwedêr heye. Hûn tenê hewce ne ku navnîşana IP-ya balanserê wekî xala têketina serîlêdanê û mêvandarê koma ClickHouse zanibin da ku hûn databasê tê de bar bikin.
Ew ê wekî serfiraziyek xuya bike? Erê, serketin. Lê dîsa jî tiştek min tevlihev dike. Tevahiya pêvajoya li jor gelek gavên destan hewce dike û bi tevahî ne berbelav e; heke gengaz be ez dixwazim wê bixweber bikim. Ev e ya ku dê beşa paşîn jê re were veqetandin.
Yekbûna Terraform
Em ê dîsa amûrek ji HashiCorp bi navê bikar bînin
Hemî xebata bi Terraform re bi nivîsandina pelek vesazkirinê ve tê (*.tf
) û çêkirina binesaziyê li ser wê.
Guhêrbar
Di destpêka pelê de, em ê guhêrbarên ku diyar dikin ku dê binesaziya pêşerojê li ku û çawa were bicîh kirin vehewînin.
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>"
}
Tevahiya pêvajoya bicîhkirina serîlêdanê dê ji bo avakirina wêneyek dîskê û danîna van guherbaran were xwarê. Bila ez rave bikim ka ew ji çi berpirsiyar in:
oauth_token - nîşanek ji bo gihîştina ewr. Dikare ji aliyê
cloud_id - Nasnameya cloudê ku em ê sepanê li ku derê bicîh bikin
peldanka_id - Nasnameya beşa ku em ê serîlêdanê li ku derê bicîh bikin
service_account_id - Nasnameya hesabê karûbarê di beşa têkildar a ewr de.
image_id - Nasnameya wêneya dîskê ya ku bi karanîna Packer ve hatî wergirtin
navê bikarhêner и şîfre - Navê bikarhêner û şîfreya ku hûn bigihîjin hem databases û hem jî servera malperê Grafana
dbname - Navê databasê di nav komên CH û MySQL de
public_key_path - riya pelê bi mifteya xweya ssh ya gelemperî, ku hûn dikarin di bin navê xwe de girêbidin bikar bînin ubuntu
ji bo makîneyên virtual bi pêşkêşkerên webê
Sazkirina pêşkêşkar
Naha hûn hewce ne ku pêşkêşvanê Terraform - di doza me de, Yandex-ê mîheng bikin:
provider "yandex" {
token = var.oauth_token
cloud_id = var.cloud_id
folder_id = var.folder_id
zone = "ru-central1-a"
}
Hûn ê bala xwe bidin ku li vir em guhêrbarên ku li jor hatine destnîşan kirin bikar tînin.
Tor û kom
Naha em ê torgilokek biafirînin ku tê de hêmanên binesaziya me dê bi hev re têkilî daynin, sê subnet (yek li her deverê) û komikên CH û MySQL bilind bikin.
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
}
}
Wekî ku hûn dikarin bibînin, her yek ji her du koman ji ber ku di sê deverên berdestbûnê de cih digirin bi xeletî-tolerans têne afirandin.
Pêşkêşkerên Webê
Wusa dixuye ku em dikarin bi heman ruhî berdewam bikin, lê ez ketim tengasiyê. Berî vê yekê, min pêşî komek MySQL rakir û tenê piştî wê, bi nasnama wê, min wêneyek dîskê bi veavakirina pêdivî berhev kir, li wir min mêvandarê komê diyar kir. Lê naha em berî destpêkirina Terraform nasnama komê nizanin, di nav de di dema çêkirina wêneyê de. Ji ber vê yekê, ez neçar bûm ku serî li tiştên jêrîn bidim
Bi karanîna karûbarê metadata Amazon-ê, em ê hin parametreyan ji makîneya virtual re derbas bikin, ku ew ê qebûl bike û pêvajoyê bike. Em hewce ne ku makîneyê piştî destpêkirinê biçe metadata li pişt mêvandarê koma MySQL û navê bikarhêner-şîfreya ku bikarhêner di pelê Terraform de destnîşan kiriye. Ka em naveroka pelê hinekî biguherînin setup.sh
, ya ku dema ku makîneya virtual vekirî ye dimeşe.
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
Koma mînak û hevseng
Piştî ku wêneyek dîskek nû ji nû ve ava kir, em dikarin di dawiyê de pelê xwe ji bo Terraform zêde bikin.
Ka em destnîşan bikin ku em dixwazin wêneyek dîskek heyî bikar bînin:
data "yandex_compute_image" "grafana_image" {
image_id = var.image_id
}
Naha em grûbek mînakek çêbikin:
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"
}
}
Hêja ye ku em bala xwe bidin ka me ew çawa derbasî metadata kir cluster_uri
, username
и password
. Vana ye ku makîneya virtual dê di destpêkê de derxe û têxe mîhenga Grafana.
Ew bi balanserê ve girêdayî ye.
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
}
}
}
}
Piçek şekir
Tenê hindik maye. Piştî ku binesaziyê hate bicîh kirin, hûn ê neçar bibin ku biçin Grafana UI û bi destan komika CH (nasnameya ku hîn jî pêdivî ye ku were bidestxistin) wekî Çavkaniyek Daneyê zêde bikin. Lê Terraform nasnameya komê dizane. Werin em wî bispêrin ku meselê bi cî bîne.
Werin em pêşkêşkerek nû lê zêde bikin - Grafana, û navnîşana IP-ya balanserê wekî mêvandar bidin wê. Hemî guheztinên ku Terraform li ser makîneya ku balansa wê diyar dike çêdike dê di MySQL de, û ji ber vê yekê li ser hemî makîneyên din mezin bibin.
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"
}
Werin em porê xwe bişon
Ka em navnîşana IP-ya hevseng û mêvandarê koma ClickHouse nîşan bidin
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"
}
Hûn dikarin birevin
Gişt! Pelê veavakirina me amade ye û em dikarin, bi danîna guherbaran, ji Terraformê re bibêjin ku her tiştê ku me li jor behs kir bilind bike. Tevahiya pêvajoyê min nêzî 15 hûrdem girt.
Di dawiyê de hûn dikarin peyamek xweş bibînin:
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
Û di ewr de, hêmanên binesaziya bilindkirî dê xuya bibin:
Bila encama encam bikin
Naha, Grafana wekî mînak bikar bînin, her yek ji we dikare serîlêdanên bi mîmariya ewr a berbelav li ser platforma Yandex.Cloud bicîh bike. Amûrên alîkar ên HashiCorp ên mîna Packer û Terraform dikarin bi vê yekê ji we re bibin alîkar. Ez hêvî dikim ku kesek vê gotarê kêrhatî bibîne :)
PS Li jêr ez ê girêdanek bi depoyê ve girêbidim ku hûn dikarin ji bo Packer û Terraform reçeteyên amadekirî bibînin, perçeyên ku min di vê gotarê de pêşkêş kirin.
Source: www.habr.com