Bonjou tout moun! Kòm yon pati nan travay kou mwen an, mwen fè rechèch sou kapasite yo nan tankou yon platfòm nwaj domestik tankou . Platfòm nan ofri divès sèvis pou rezoud pwoblèm pratik. Sepandan, pafwa ou bezwen mete pwòp aplikasyon nwaj ou a ak yon enfrastrikti jistis vaste ki baze sou sèvis sa yo. Nan atik sa a mwen vle pataje eksperyans mwen nan deplwaye yon aplikasyon konsa.

Kisa ou vle resevwa?
â yon zouti pwisan pou rezoud pwoblèm analyse oswa siveyans pwoblèm nenpòt sistèm. Nan konfigirasyon debaz li yo, sa a se yon machin vityèl ak yon sèvè entènèt Grafana, osi byen ke yon baz done (ClickHouse, InfluxDB, elatriye) ak yon seri done sou ki analiz yo pral baze.
Apre lanse yon machin vityèl ak yon sèvè entènèt, ou ka ale nan lame li a epi jwenn yon bèl UI, presize baz done kòm sous pou plis travay, kreye tablodbò ak graf.

Vèsyon debaz la gen yon dezavantaj enpòtan - li pa toleran fòt ditou. Sa vle di, tout fonksyonalite aplikasyon an depann sou rantabilite yon sèl machin vityèl. Si li refize oswa 10 moun louvri UI a an menm tan, Lè sa a, pwoblèm yo pral leve.
Yo ka rezoud tou senpleman: ou jis bezwen... deplwaye anpil machin vityèl ki idantik ak yon sèvè entènèt epi mete yo anba yon balans L3. Men, se pa tout bagay ki tèlman klè isit la. Grafana estoke anviwònman itilizatè yo (chemen ki mennen nan baz done, tablodbò, graf, elatriye) dirèkteman sou disk machin vityèl li yo. Kidonk, si nou chanje kèk paramèt nan UI a, chanjman sa yo pral reflete sèlman sou machin vityèl kote balans lan voye nou an. Sa a pral mennen nan anviwònman konsistan pou aplikasyon nou an, sa ki lakòz pwoblèm ak lansman ak itilizasyon.
Isit la yon lòt baz done ap vin pote sekou, pou egzanp, MySQL oswa ekivalan li yo. Nou di Grafana ke li ta dwe estoke anviwònman itilizatè yo nan baz done "rezèv" sa a. Apre sa, li pral ase yo presize chemen an nan baz done sa a yon fwa sou chak machin, epi modifye tout lòt anviwònman itilizatè sou nenpòt nan machin yo vityèl yo pral pwolonje nan lòt yo.
Men yon dyagram nan enfrastrikti aplikasyon final la:

Ann aprann leve ak men nou
MySQL ak ClickHouse
Anvan deplwaye yon aplikasyon konsa ak klike sou yon bouton, li te nesesè pou aprann kijan pou okipe chak nan eleman li yo ak entegre yo youn ak lòt.
Isit la Yandex.Cloud pral ede nou, ki bay balans L3, ClickHouse ak MySQL kòm sèvis jere. Itilizatè a sèlman bezwen presize paramèt yo epi tann jiskaske platfòm la pote tout bagay an fonksyon.
Mwen anrejistre, kreye yon nwaj ak yon kont peman. Apre sa, mwen te ale nan nwaj la ak mete kanpe MySQL ak ClickHouse grap ak anviwònman minim. Mwen te tann jiskaske yo te vin aktif.


Ou bezwen sonje tou pou kreye yon baz done nan chak gwoup epi configured aksè a li lè l sèvi avèk yon login ak yon modpas. Mwen pa pral antre nan detay isit la - tout bagay se byen evidan nan koòdone a.
Detay ki pa evidan te ke baz done sa yo gen anpil lame, ki asire tolerans fòt yo. Sepandan, Grafana mande egzakteman yon lame pou chak baz done li travay avèk yo. Long lekti Nwaj yo mennen m 'nan yon desizyon. Li sanble ke lame a nan espès yo c-<cluster_id>.rw.mdb.yandexcloud.net kat lame aktyèl mèt aktif gwoup la ak ID ki koresponn lan. Se sa nou pral bay Grafana.
Sèvè entènèt
Kounye a se lè pou sèvè entènèt la. Ann mete kanpe yon machin vityèl òdinè avèk Linux epi nou pral mete Grafana sou li ak men nou.


Ann konekte via ssh epi enstale pakè ki nesesè yo.
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
Apre sa, ann kouri Grafana anba systemctl epi enstale plugin pou travay ak ClickHouse (wi, li pa apwovizyone nan pake debaz la).
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasourceSa a li, apre sa ak yon kòmandman senp
sudo service grafana-server startnou pral kòmanse sèvè entènèt la. Koulye a, ou ka antre adrès IP ekstèn nan machin vityèl la nan navigatè a, presize pò 3000 epi wè bèl Grafana UI a.

Men, pa prese, anvan ou mete Grafana, ou dwe sonje di li chemen an nan MySQL yo nan lòd yo estoke anviwònman yo la.
Tout konfigirasyon sèvè entènèt Grafana a nan dosye a /etc/grafana/grafana.ini. Liy ki nesesè yo sanble sa a:
;url =Nou mete lame a nan gwoup la MySQL. Fichye a menm gen login ak modpas pou jwenn aksè nan Grafana nan foto ki anwo a, ki pa default yo tou de egal admin.
Ou ka itilize kòmand 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
Li lè pou rekòmanse sèvè entènèt la!
sudo service grafana-server restartKoulye a, nan Grafana UI a nou pral presize ClickHouse kòm yon DataSource.
Mwen te kapab reyalize yon konfigirasyon k ap travay ak paramèt sa yo:

Mwen espesifye kòm URL la https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443
Tout! Nou gen yon machin vityèl k ap travay ak yon sèvè entènèt ki konekte ak CH ak MySQL. Ou ka deja telechaje dataset la nan ClickHouse epi konstwi tablodbò yo. Sepandan, nou poko reyalize objektif nou epi nou pa deplwaye yon enfrastrikti konplè.
pakè
Yandex.Cloud pèmèt ou kreye yon imaj ki gen kapasite nan yon machin vityèl ki deja egziste, epi sou baz li yo - nenpòt ki kantite machin ki idantik youn ak lòt. Sa a se egzakteman sa nou pral itilize. Pou byen rasanble imaj la, pran zouti a soti nan HashiCorp. Li pran kòm antre yon dosye json ak enstriksyon pou rasanble imaj la.
Fichye json nou an ap konpoze de de blòk: mason ak pwovizyon. Premye blòk la dekri paramèt imaj la tèt li kòm yon antite, ak dezyèm blòk la dekri enstriksyon pou ranpli li ak kontni ki nesesè yo.
Builders
{
"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"
}
],
...
}Nan modèl sa a, ou bezwen mete idantifyan an nan seksyon an nan nwaj la kote ou vle kreye imaj la, osi byen ke chemen an nan dosye a ak kle yo soti nan kont sèvis la te deja kreye nan seksyon sa a. Ou ka li plis sou kreye kont sèvis ak kle nan fòm yon dosye nan seksyon ki koresponn lan .
Konfigirasyon sa a di ke imaj la ki gen kapasite yo pral bati ki baze sou platfòm la ubuntu-1804-lts, mete nan seksyon itilizatè ki apwopriye a nan fanmi imaj la GRAFANA anba non an grafana-{{timestamp}}.
Founisè yo
Koulye a, vini pati ki pi enteresan nan konfigirasyon an. Li pral dekri sekans nan aksyon ki pral bezwen fè sou machin vityèl la anvan konjelasyon eta li nan yon imaj ki gen kapasite.
{
...,
"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"
]
}
]
}Isit la tout aksyon yo divize an 3 etap. Nan premye etap la, yon senp script egzekite ki kreye yon anyè oksilyè.
prepare-ctg.sh:
#!/bin/bash
sudo mkdir -p /opt/grafana
sudo chown -R ubuntu:ubuntu /opt/grafanaNan pwochen etap la, nou mete yon script nan anyè sa a, ki pral bezwen lanse imedyatman apre yo fin kòmanse machin vityèl la. Script sa a pral mete varyab itilizatè yo ki bezwen anrejistre nan konfigirasyon Grafana a epi rekòmanse sèvè entènèt la.
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 restartApre sa, gen 3 bagay ki rete pou fè:
1) enstale pakè yo
2) kouri Grafana anba systemctl epi enstale Plugin ClickHouse la
3) mete script setup.sh la nan keu lansman imedyatman apre limen machin vityèl la.
install-packages.sh:
#!/bin/bash
sudo systemd-run --property='After=apt-daily.service apt-daily-upgrade.service' --wait /bin/true
sudo apt-get install -y apt-transport-https
sudo apt-get install -y software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo add-apt-repository "deb https://packages.grafana.com/enterprise/deb stable main"
sudo apt-get update
sudo apt-get install -y grafana-enterprise grafana-setup.sh:
#!/bin/bash
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasourcerun-setup-at-reboot.sh:
#!/bin/bash
chmod +x /opt/grafana/setup.sh
cat > /etc/cron.d/first-boot <<EOF
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
@reboot root /bin/bash /opt/grafana/setup.sh > /var/log/yc-setup.log 2>&1
EOF
chmod +x /etc/cron.d/first-boot;Koulye a, tout sa ki rete se kouri Packer epi jwenn imaj pwodiksyon an mete nan seksyon an espesifye. Lè w ap kreye yon machin vityèl, ou ka chwazi li kòm yon disk bòt epi apre lansman w ap resevwa yon sèvè entènèt Grafana pare.


Gwoup egzanp ak balans
Yon fwa nou gen yon imaj disk ki pèmèt nou kreye anpil sèvè entènèt Grafana ki idantik, nou ka kreye yon gwoup egzanp. Sou platfòm Yandex.Cloud, tèm sa a refere a sendika a nan machin vityèl ki gen menm karakteristik yo. Lè w ap kreye yon gwoup egzanp, se pwototip tout machin nan gwoup sa a konfigirasyon, ak Lè sa a, karakteristik gwoup la li menm (pa egzanp, minimòm ak maksimòm kantite machin aktif). Si nimewo aktyèl la pa satisfè kritè sa yo, lè sa a gwoup egzanp lan tèt li pral retire machin ki pa nesesè oswa kreye lòt nan pwòp imaj li.
Kòm yon pati nan travay nou an, nou pral kreye yon gwoup egzanp nan sèvè entènèt ki pral pwodwi nan imaj la disk te deja kreye.


Ki sa ki vrèman remakab se konfigirasyon gwoup la dènye egzanp. Gwoup sib la nan entegrasyon ak Load Balancer pral ede w configured yon balans L3 sou tèt machin yo vityèl nan gwoup sa a lè w klike sou yon koup la bouton.

Lè m te mete balans lan, mwen te aplike de pwen enpòtan:
- Mwen te fè balanse a aksepte trafik itilizatè sou pò 80 epi redireksyon li nan pò 3000 nan machin vityèl yo, egzakteman kote Grafana ap viv.
- Mwen mete sou pye tcheke viabilite machin yo pa ping yo nan pò 3000.

Mini rezime
Finalman, nou te kapab deplwaye manyèlman enfrastrikti aplikasyon an vle, epi kounye a nou gen yon sèvis Grafana trè fleksib. Ou sèlman bezwen konnen adrès IP balanse a kòm pwen antre nan aplikasyon an ak lame a nan gwoup ClickHouse la yo nan lòd yo chaje dataset la nan li.
Li ta sanble yon viktwa? Wi, viktwa. Men, yon bagay toujou konfonn mwen. Tout pwosesis ki anwo a mande anpil etap manyèl epi li pa Êvolutive ditou, mwen ta renmen otomatize li si sa posib. Sa a se sa pwochen seksyon an pral konsakre.
Entegrasyon Terraform
Nou pral ankò itilize yon zouti ki soti nan HashiCorp rele . Li pral ede w deplwaye tout enfrastrikti aplikasyon an ak klike sou yon bouton, ki baze sou plizyè varyab itilizatè a pase. Ann ekri yon resèt ki ka kouri plizyè fwa nan diferan seksyon nan itilizatè diferan.
Tout travay ak Terraform se sèlman ekri yon fichye konfigirasyon (*.tf) ak kreyasyon enfrastrikti ki baze sou li.
Varyab
Nan kòmansman dosye a, nou pral enkli varyab ki detèmine ki kote ak ki jan enfrastrikti nan lavni pral deplwaye.
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>"
}Tout pwosesis deplwaman aplikasyon an pral desann nan bati yon imaj ki gen kapasite ak mete varyab sa yo. Kite m eksplike sa yo responsab pou:
oauth_token â yon siy pou jwenn aksè nan nwaj la. Ka jwenn pa .
cloud_id â idantifyan nwaj kote nou pral deplwaye aplikasyon an
folder_id â idantifyan seksyon kote nou pral deplwaye aplikasyon an
service_account_id â idantifyan kont sèvis nan seksyon korespondan nwaj la.
image_id â idantifyan imaj ki gen kapasite yo jwenn lè l sèvi avèk Packer
non itilizatè и modpas â non itilizatè ak modpas pou jwenn aksè nan tou de baz done ak sèvè entènèt Grafana
dbname - non baz done andedan CH ak MySQL grap
piblik_key_path â chemen nan dosye a ak kle piblik ssh ou a, ki ou ka itilize pou konekte anba non an ubuntu nan machin vityèl ak sèvè entènèt
Konfigirasyon founisè a
Koulye a, ou bezwen konfigirasyon founisè Terraform - nan ka nou an, Yandex:
provider "yandex" {
token = var.oauth_token
cloud_id = var.cloud_id
folder_id = var.folder_id
zone = "ru-central1-a"
}
Ou pral remake ke isit la nou ap itilize varyab yo defini pi wo a.
Rezo ak grap
Koulye a, nou pral kreye yon rezo kote eleman nan enfrastrikti nou an pral kominike, twa subnets (youn nan chak rejyon) ak ogmante CH ak MySQL grap.
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
}
}Kòm ou ka wè, chak nan de grap yo kreye byen toleran fay lè yo mete yo nan twa zòn disponiblite.
Web serveurs
Li ta sanble ke nou te kapab kontinye nan menm lespri a, men mwen te rankontre difikilte. Anvan sa, mwen premye leve yon gwoup MySQL epi sèlman apre sa, konnen ID li yo, mwen kolekte yon imaj ki gen kapasite ak konfigirasyon ki nesesè yo, kote mwen espesifye lame a nan gwoup la. Men koulye a, nou pa konnen ID gwoup la anvan lanse Terraform, ki gen ladan nan moman an nan bati imaj la. Se poutèt sa, mwen te oblije resort nan sa ki annapre yo .
Sèvi ak sèvis metadata Amazon an, nou pral pase kèk paramèt nan machin vityèl la, ke li pral aksepte ak trete. Nou bezwen machin nan ale nan metadata ki dèyè lame gwoup la MySQL ak non itilizatè-modpas, ki itilizatè a espesifye nan dosye Terraform la, apre yo fin kòmanse. Ann chanje sa ki nan dosye a yon ti kras setup.sh, ki kouri lè machin vityèl la limen.
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 restartGwoup Intance ak balans
Ăske w gen rebati yon nouvo imaj ki gen kapasite, nou ka finalman ajoute dosye nou an pou Terraform.
Ann endike ke nou vle sèvi ak yon imaj disk ki deja egziste:
data "yandex_compute_image" "grafana_image" {
image_id = var.image_id
}Koulye a, ann kreye yon gwoup egzanp:
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"
}
}Li vo peye atansyon sou fason nou te pase li nan metadata yo cluster_uri, username и password. Li se sa yo ke machin vityèl la pral pran soti nan demaraj epi mete nan konfigirasyon Grafana la.
Se balans lan.
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
}
}
}
}Yon ti sik
Se sèlman yon ti kras ki rete. Apre yo fin deplwaye enfrastrikti a, w ap oblije ale nan Grafana UI epi ajoute gwoup CH la (ID ki toujou bezwen jwenn) kòm yon Sous Done. Men, Terraform konnen ID gwoup la. Annou konfye li pou pote zafè a bay bon rezilta.
Ann ajoute yon nouvo founisè - Grafana, epi ba li adrès IP balanse a kòm yon lame. Tout chanjman ke Terraform fè sou machin nan kote balans li detèmine ap grandi nan MySQL, ak Se poutèt sa sou tout lòt machin yo.
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"
}Ann penyen cheve nou
Ann montre adrès IP balanse a ak lame gwoup ClickHouse la
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"
}Ou ka kouri
Tout! Fichye konfigirasyon nou an pare epi nou ka, lè nou mete varyab yo, di Terraform ogmante tout sa nou dekri pi wo a. Tout pwosesis la te pran m 'apeprè 15 minit.
Nan fen ou ka wè yon bèl mesaj:
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.25Ak nan nwaj la, eleman nan enfrastrikti ki ogmante yo pral vizib:

Sòm moute
Koulye a, lè l sèvi avèk Grafana kòm yon egzanp, chak nan ou ka deplwaye aplikasyon ak yon achitekti nwaj etandu sou platfòm Yandex.Cloud la. Zouti itil soti nan HashiCorp tankou Packer ak Terraform ka ede w ak sa. Mwen espere ke yon moun jwenn atik sa a itil :)
PS Anba a mwen pral tache yon lyen nan depo a kote ou ka jwenn resèt ki pare pou Packer ak Terraform, fragman yo mwen bay nan atik sa a.
Sous: www.habr.com
