Ukusasazwa kweenkonzo ezisasazwayo kwiYandex.Cloud usebenzisa iGrafana njengomzekelo

Molweni nonke! Njengenxalenye yomsebenzi wam wekhosi, ndiphanda ubunakho beqonga lelifu lasekhaya njenge Yandex.Cloud. Iqonga libonelela ngeenkonzo ezahlukeneyo zokusombulula iingxaki ezisebenzayo. Nangona kunjalo, ngamanye amaxesha kufuneka usete esakho isicelo selifu ngesiseko esibanzi ngokusekwe kwezi nkonzo. Kweli nqaku ndifuna ukwabelana ngamava am ekuhambiseni isicelo esinjalo.

Ukusasazwa kweenkonzo ezisasazwayo kwiYandex.Cloud usebenzisa iGrafana njengomzekelo

Ufuna ukufumana ntoni?

IGrafana - isixhobo esinamandla sokusombulula iingxaki zohlalutyo okanye iingxaki zokubeka iliso kuzo naziphi na iinkqubo. Ekucwangcisweni kwayo okusisiseko, lo ngumatshini obonakalayo kunye nomncedisi wewebhu we-Grafana, kunye nesiseko sedatha (ClickHouse, InfluxDB, njl.) kunye nedatha yedatha apho i-analytics iya kusekelwa khona.

Emva kokusungula umatshini obonakalayo kunye nomncedisi wewebhu, ungaya kumamkeli wayo kwaye ufumane i-UI enhle, ucacise i-database njengemithombo yomsebenzi oqhubekayo, yenza iideshibhodi kunye neegrafu.

Ukusasazwa kweenkonzo ezisasazwayo kwiYandex.Cloud usebenzisa iGrafana njengomzekelo

Uguqulelo olusisiseko lune-drawback enye ebalulekileyo - ayinyamezeli impazamo kwaphela. Oko kukuthi, ukusebenza ngokupheleleyo kwesicelo kuxhomekeke ekusebenzeni komatshini omnye wenyani. Ukuba iyala okanye abantu abali-10 bavula i-UI ngaxeshanye, kuya kuvela iingxaki.

Zingasonjululwa ngokulula: kufuneka nje... unike oomatshini abaninzi abafanayo kunye nomncedisi wewebhu kwaye ubabeke phantsi kwe-balancer ye-L3. Kodwa asiyiyo yonke into ecacileyo apha. I-Grafana igcina izicwangciso zabasebenzisi (iindlela eziya koovimba beenkcukacha, iideshibhodi, iigrafu, njl.njl.) ngqo kwidiski yomatshini wayo wenyani. Ke, ukuba sitshintsha ezinye iisetingi kwi-UI, olu tshintsho luya kubonakaliswa kuphela kumatshini wenyani apho umlinganisi usithumele khona. Oku kuya kukhokelela kwiisetingi ezingahambelaniyo kwisicelo sethu, kubangele iingxaki ngokuqaliswa kunye nokusetyenziswa.

Apha enye i-database iza kuhlangula, umzekelo, i-MySQL okanye ilingana nayo. Sixelela uGrafana ukuba kufuneka agcine useto lwabasebenzisi kolu lwazi β€œlwespare” database. Emva koko, kuya kwanela ukucacisa indlela eya kwesi siseko sedatha kanye kumatshini ngamnye, kwaye uhlele zonke ezinye izicwangciso zabasebenzisi kuwo nawuphi na umatshini wenyani; baya kunabela kwabanye.

Nanku umzobo wesiseko sesicelo sokugqibela:

Ukusasazwa kweenkonzo ezisasazwayo kwiYandex.Cloud usebenzisa iGrafana njengomzekelo

Masifunde ukuphakamisa ngezandla zethu

MySQL kunye neClickHouse

Ngaphambi kokuthumela isicelo esinjalo ngokucofa iqhosha, kwakuyimfuneko ukufunda indlela yokuphatha icandelo ngalinye kwaye udibanise omnye nomnye.

Apha i-Yandex.Cloud iya kusinceda, ebonelela nge-balancers ye-L3, i-ClickHouse kunye ne-MySQL njengeenkonzo ezilawulwayo. Umsebenzisi ufuna kuphela ukucacisa iiparameters kwaye ulinde de kube iqonga lizisa yonke into ekusebenzeni.

Ndabhalisa, ndadala ifu kunye ne-akhawunti yokuhlawula. Emva koko, ndaya efini kwaye ndiseta i-MySQL kunye neClickHouse amaqela aneseto ezincinci. Ndalinda bade basebenza.

Ukusasazwa kweenkonzo ezisasazwayo kwiYandex.Cloud usebenzisa iGrafana njengomzekeloUkusasazwa kweenkonzo ezisasazwayo kwiYandex.Cloud usebenzisa iGrafana njengomzekelo

Kufuneka kwakhona ukhumbule ukwenza isiseko sedatha kwiqela ngalinye kwaye uqwalasele ukufikelela kulo usebenzisa igama lokungena kunye negama lokugqitha. Andizukungena kwiinkcukacha apha - yonke into ibonakala ngokucacileyo kwi-interface.

Iinkcukacha ezingacacanga yayikukuba ezi nkcukacha zogcino-lwazi zineenginginya ezininzi, eziqinisekisa ukunyamezela kwazo iimpazamo. Nangona kunjalo, iGrafana ifuna umphathi omnye ngokuthe ngqo kwisiseko sedatha nganye esebenza nayo. Ukufunda ixesha elide amaxwebhu Amafu andizisa kwisigqibo. Kuvela ukuba umkhosi weentlobo c-<cluster_id>.rw.mdb.yandexcloud.net imephu esebenzayo yangoku yenginginya yeqela kunye ne-ID ehambelanayo. Yile nto siza kuyinika iGrafana.

umncedisi wewebhu

Ngoku ixhomekeke kumncedisi wewebhu. Masiphakamise umatshini oqhelekileyo oqhelekileyo kunye neLinux kwaye siqwalasele ngesandla iGrafana kuyo.

Ukusasazwa kweenkonzo ezisasazwayo kwiYandex.Cloud usebenzisa iGrafana njengomzekelo

Ukusasazwa kweenkonzo ezisasazwayo kwiYandex.Cloud usebenzisa iGrafana njengomzekelo

Masiqhagamshele nge-ssh kwaye sifake iipakethe eziyimfuneko.

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 

Emva koko, masiqhube iGrafana phantsi kwe-systemctl kwaye sifake iplagin yokusebenza ngeClickHouse (ewe, ayinikezelwanga kwiphakheji esisiseko).

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

Yiyo loo nto, emva koko ngomyalelo olula

sudo service grafana-server start

siya kuqalisa iseva yewebhu. Ngoku ungangenisa idilesi ye-IP yangaphandle yomatshini wenyani kwisikhangeli, khankanya izibuko 3000 kwaye ubone iGrafana UI entle.
Ukusasazwa kweenkonzo ezisasazwayo kwiYandex.Cloud usebenzisa iGrafana njengomzekelo

Kodwa ungangxami, ngaphambi kokuseta iGrafana, kufuneka ukhumbule ukuyixelela indlela eya kwi-MySQL ukuze ugcine useto apho.

Lonke ubumbeko lomncedisi we web we Grafana ukwifayile /etc/grafana/grafana.ini. Umgca ofunekayo ujongeka ngolu hlobo:

;url =

Siseta umamkeli kwiqela le-MySQL. Ifayile enye iqulathe igama lokungena kunye negama lokugqitha lonikezelo lwe Grafana kumfanekiso ongentla, apho ngokungagqibekanga zilingana zombini admin.

Unokusebenzisa imiyalelo ye-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

Lixesha lokuba uqale ngokutsha iseva yewebhu!

sudo service grafana-server restart

Ngoku kwi-UI yaseGrafana siya kubonisa iClickHouse njengeDathaSource.

Ndikwazile ukufezekisa ulungelelwaniso lokusebenza ngezisetingi zilandelayo:

Ukusasazwa kweenkonzo ezisasazwayo kwiYandex.Cloud usebenzisa iGrafana njengomzekelo

Ndiyichazile njenge URL https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443

Konke! Sinomatshini omnye osebenzayo oneseva yewebhu eqhagamshelwe kwi-CH kunye ne-MySQL. Unakho ukulayisha i-dataset kwi-ClickHouse kwaye wakhe iidashboards. Nangona kunjalo, asikayiphumezi injongo yethu kwaye asikazisebenzisi iziseko ezingundoqo ezipheleleyo.

Ipakethi

I-Yandex.Cloud ikuvumela ukuba wenze umfanekiso wedisk womatshini okhoyo okhoyo, kwaye ngesiseko sawo - naliphi na inani loomatshini abafanayo omnye komnye. Yile nto kanye esiza kuyisebenzisa. Ukudibanisa ngokufanelekileyo umfanekiso, thatha isixhobo Ipakethi ukusuka HashiCorp. Kuthatha njengegalelo ifayile ye-json enemiyalelo yokuhlanganisa umfanekiso.

Ifayile yethu ye-json iya kuba neebhloko ezimbini: abakhi kunye nababoneleli. Ibhloko yokuqala ichaza iiparamitha zomfanekiso ngokwawo njengeziko, kwaye ibhloko yesibini ichaza imiyalelo yokuyizalisa ngomxholo oyimfuneko.

Abakhi

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

Kule template, kufuneka ubeke isazisi secandelo efini apho ufuna ukwenza umfanekiso, kunye nendlela eya kwifayile enezitshixo ezivela kwi-akhawunti yenkonzo eyenziwe ngaphambili kweli candelo. Unokufunda ngakumbi malunga nokudala ii-akhawunti zenkonzo kunye nezitshixo ngendlela yefayile kwicandelo elihambelanayo amaxwebhu.

Olu qwalaselo luthi umfanekiso wedisk uyakwakhiwa ngokusekwe kwiqonga ubuntu-1804-lts, ibekwe kwicandelo elifanelekileyo lomsebenzisi kwintsapho yomfanekiso GRAFANA phantsi kwegama grafana-{{timestamp}}.

Ababoneleli

Ngoku kuza inxalenye enomdla ngakumbi yoqwalaselo. Iza kuchaza ulandelelwano lwezenzo eziya kufuneka zenziwe kumatshini wenyani phambi kokukhenkceza imeko yawo kumfanekiso wedisk.

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

Apha zonke izenzo zohlulwe zibe zizigaba ezi-3. Kwinqanaba lokuqala, iskripthi esilula siyenziwa esenza isalathiso esincedisayo.

prepare-ctg.sh:

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

Kwinqanaba elilandelayo, sibeka iskripthi kolu lawulo, oluya kufuna ukuba luqaliswe ngokukhawuleza emva kokuqala umatshini wenyani. Le script iya kubeka izinto eziguquguqukayo zomsebenzisi ezifuna ukubhaliswa kuqwalaselo lweGrafana kwaye luqalise kwakhona umncedisi wewebhu.

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

Emva koku, kukho izinto ezi-3 eziseleyo ekufuneka zenziwe:
1) faka iipakethi
2) sebenzisa iGrafana phantsi kwe-systemctl kwaye ufake i-plugin ye-ClickHouse
3) beka iskripthi se-setup.sh kumgca wokuqaliswa ngokukhawuleza emva kokuvula umatshini wenyani.

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;

Ngoku konke okuseleyo kukuqhuba iPacker kwaye ufumane umfanekiso wemveliso obekwe kwicandelo elichaziweyo. Xa usenza umatshini wenyani, ungawukhetha njenge diski yokuqala kwaye emva kokusungulwa uya kufumana umncedisi wewebhu we Grafana osele elungile.

Ukusasazwa kweenkonzo ezisasazwayo kwiYandex.Cloud usebenzisa iGrafana njengomzekelo
Ukusasazwa kweenkonzo ezisasazwayo kwiYandex.Cloud usebenzisa iGrafana njengomzekelo

Iqela lomzekelo kunye ne-balancer

Nje ukuba sinomfanekiso wedisk osivumela ukuba senze iiseva ezininzi zewebhu ze-Grafana ezifanayo, singenza iqela lomzekelo. Kwi-platform ye-Yandex.Cloud, eli gama libhekisela kumanyano lomatshini obonakalayo oneempawu ezifanayo. Xa usenza iqela lomzekelo, iprototype yabo bonke oomatshini abakweli qela iqwalaselwe, kwaye ke iimpawu zeqela ngokwalo (umzekelo, ubuncinci kunye nenani eliphezulu loomatshini abasebenzayo). Ukuba inani langoku alihambelani nale migaqo, ngoko ke iqela lomzekelo ngokwalo liza kususa oomatshini abangeyomfuneko okanye lenze abatsha kumfanekiso walo.

Njengenxalenye yomsebenzi wethu, siya kudala iqela lomzekelo weeseva zewebhu eziya kuveliswa kumfanekiso wedisk owenziwe ngaphambili.

Ukusasazwa kweenkonzo ezisasazwayo kwiYandex.Cloud usebenzisa iGrafana njengomzekelo

Ukusasazwa kweenkonzo ezisasazwayo kwiYandex.Cloud usebenzisa iGrafana njengomzekelo

Okuphawuleka ngokwenene kumzekelo wokugqibela wokuseta iqela. Iqela ekujoliswe kulo ekudityanisweni kunye Lomthwalo Balancer uya kukunceda ukuba uqwalasele i L3 balancer phezu koomatshini benyani beli qela ngokucofa amaqhosha ambalwa.

Ukusasazwa kweenkonzo ezisasazwayo kwiYandex.Cloud usebenzisa iGrafana njengomzekelo

Xa ndiseta i-balancer, ndiphumeze amanqaku amabini abalulekileyo:

  1. Ndenze ibhalansi yamkele i-traffic yomsebenzisi kwi-port 80 kwaye ndiyiqondise kwakhona kwi-port 3000 yoomatshini benyani, kanye apho kuhlala khona i-Grafana.
  2. Ndimise ukujonga ukusebenza koomatshini ngokubafaka kwi-port 3000.

Ukusasazwa kweenkonzo ezisasazwayo kwiYandex.Cloud usebenzisa iGrafana njengomzekelo

Isishwankathelo esincinci

Ekugqibeleni, siye sakwazi ukuhambisa iziseko zoncedo ezifunwayo, kwaye ngoku sinenkonzo yaseGrafana eyomelela kakhulu. Udinga kuphela ukwazi idilesi ye-IP ye-balancer njengendawo yokungena kwisicelo kunye nenginginya yeClickHouse cluster ukuze ulayishe idatha yedatha kuyo.

Kuya kubonakala ngathi luloyiso? Ewe, uloyiso. Kodwa kukho into endibhidayo. Yonke le nkqubo ingentla ifuna amanyathelo amaninzi kwaye ayinakwenzeka konke konke; Ndingathanda ukuyitshintsha ukuba kuyenzeka. Le yile nto icandelo elilandelayo liza kunikezelwa kuyo.

Ukudityaniswa kweTerraform

Siza kusebenzisa kwakhona isixhobo esivela ku-HashiCorp esibizwa ngokuba Terraform. Kuya kukunceda ukuhambisa yonke isiseko sesicelo ngokucofa iqhosha, ngokusekwe kwiinguqu ezininzi ezigqithiswe ngumsebenzisi. Masibhale iresiphi enokuthi iqhutywe ngamaxesha amaninzi kumacandelo ahlukeneyo abasebenzisi abohlukeneyo.

Wonke umsebenzi ngeTerraform wehla ukuze ubhale ifayile yoqwalaselo (*.tf) kunye nokudalwa kweziseko ezingundoqo ezisekelwe kuyo.

Izinto eziguquguqukayo

Ekuqaleni kwefayile, siya kubandakanya izinto eziguquguqukayo ezimisela ukuba iziseko zophuhliso zexesha elizayo ziya kusetyenziswa phi kwaye njani.

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

Yonke inkqubo yokuthunyelwa kwesicelo iya kuhla ekwakheni umfanekiso wedisk kunye nokuseta ezi ziguquguqukayo. Makhe ndichaze ukuba banoxanduva ngantoni:

outh_token - uphawu lokufikelela kwilifu. Inokufunyanwa ngu unxibelelwano.
cloud_id -Isichongi selifu apho siya kuthumela isicelo
i-id_yencwadi β€” isichongi secandelo apho siya kuthumela isicelo
service_account_id β€” isibonisi seakhawunti yenkonzo kwicandelo elihambelanayo lelifu.
umfanekiso_id β€” isazisi somfanekiso wedisk ofunyenwe kusetyenziswa iPacker
lomsebenzisi ΠΈ inombolo yokuvula β€” igama lomsebenzisi kunye negama lokugqitha ukufikelela kuzo zombini iidathabheyisi kunye neseva yewebhu yeGrafana
dbname -Igama ledatha yedatha ngaphakathi kwe-CH kunye neqela le-MySQL
Indlela_yesitshixo_kawonke-wonke β€” indlela eya kwifayile ngesitshixo sikawonke-wonke se-ssh, onokusisebenzisa ukudibanisa phantsi kwegama ubuntu koomatshini benyani abaneeseva zewebhu

Ukuseta umnikezeli

Ngoku kufuneka uqwalasele umnikezeli weTerraform - kwimeko yethu, Yandex:

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

Uya kuqaphela ukuba apha sisebenzisa iinguqu ezichazwe ngasentla.

Inethiwekhi kunye namaqela

Ngoku siza kudala inethiwekhi apho iziseko zeziseko zethu ziya kunxibelelana, ii-subnets ezintathu (enye kwindawo nganye) kwaye ziphakamise i-CH kunye ne-MySQL yamaqela.


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

Njengoko ubona, iqela ngalinye kula mabini enziwe anyamezela iimpazamo ngokubekwa kwiindawo ezintathu zokufumaneka.

Iiseva zewebhu

Ingathi singaqhubeka ngomoya omnye, kodwa ndangena ebunzimeni. Ngaphambi koku, ndaqala ndaphakamisa iqoqo le-MySQL kwaye kuphela emva koko, ndisazi i-ID yayo, ndaqokelela umfanekiso wedisk kunye noqwalaselo olufunekayo, apho ndachaza umkhosi kwiqela. Kodwa ngoku asazi i-ID yeqela ngaphambi kokusungula iTerraform, kubandakanywa nexesha lokwakha umfanekiso. Ngoko ke, kwafuneka ndibhenele koku kulandelayo iqhinga.

Ukusebenzisa inkonzo yemethadatha ye-Amazon, siya kudlula ezinye iiparameters kumatshini obonakalayo, oya kwamkela kwaye usebenze. Sidinga umatshini ukuya kwimethadatha emva komnini weqela le-MySQL kunye negama lomsebenzisi-password, elichazwe ngumsebenzisi kwifayile yeTerraform, emva kokuqala. Masitshintshe imixholo yefayile kancinci setup.sh, esebenza xa umatshini wenyani uvuliwe.

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

Iqela le-Intance kunye ne-balancer

Emva kokuba siphinde sakha umfanekiso omtsha wedisk, ekugqibeleni sinokongeza ifayile yethu yeTerraform.

Masibonise ukuba sifuna ukusebenzisa umfanekiso okhoyo wedisk:

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

Ngoku makhe iqela lomzekelo:

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

Kufanelekile ukunikela ingqalelo kwindlela esiyidlulise ngayo kwimethadatha cluster_uri, username ΠΈ password. Zezi ukuba umatshini wenyani uya kuzithatha ekuqaleni kwaye ubeke kuqwalaselo lweGrafana.

Kuxhomekeke kwi-balancer.

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

Iswekile encinci

Kushiyeke kancinane. Emva kokuba iziseko zophuhliso zisetyenzisiwe, kuya kufuneka uye kwiGrafana UI kwaye wongeze ngesandla i-CH cluster (ekusafuneka i-ID yayo ifumaneke) njengoMthombo weDatha. Kodwa iTerraform iyayazi i-ID yeqela. Masimthembe ukuba awufezekise lo mbandela.

Masifake umboneleli omtsha - uGrafana, kwaye simnike idilesi ye-IP yomlinganisi njengomamkeli. Lonke utshintsho olwenziwa yiTerraform kumatshini apho ibhalansi yayo imisela iya kukhula kwiMySQL, kwaye ke kubo bonke abanye oomatshini.

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

Masikama iinwele zethu

Masibonise idilesi ye-IP yebhalansi kunye nenginginya yeClickHouse cluster

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

Ungabaleka

Konke! Ifayile yethu yoqwalaselo ilungile kwaye sinakho, ngokuseta izinto eziguquguqukayo, sixelele iTerraform ukuba iphakamise yonke into esiyichazile ngasentla. Yonke le nkqubo yandithatha malunga nemizuzu eyi-15.
Ekugqibeleni unokubona umyalezo omhle:

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

Kwaye kwilifu, izinto zesiseko esiphakanyisiweyo ziya kubonakala:

Ukusasazwa kweenkonzo ezisasazwayo kwiYandex.Cloud usebenzisa iGrafana njengomzekelo

Masibhale iziphumo

Ngoku, usebenzisa iGrafana njengomzekelo, ngamnye wenu unokusebenzisa usetyenziso kunye nolwakhiwo lwamafu olunabileyo kwiqonga leYandex.Cloud. Izixhobo eziluncedo ezivela kwiHashiCorp njengePacker kunye neTerraform zinokukunceda ngale nto. Ndiyathemba ukuba umntu uya kufumana eli nqaku liluncedo :)

P.S. Ngezantsi ndiza kuqhoboshela ikhonkco kwindawo yokugcina apho unokufumana khona iiresiphi esele zenziwe ngePacker kunye neTerraform, iziqwenga endizinikezeleyo kweli nqaku.

indawo yokugcina

umthombo: www.habr.com

Yongeza izimvo