Dejinta adeegyada la qaybiyey Yandex.Cloud iyadoo la isticmaalayo Grafana tusaale ahaan

Salaamu calaykum! Iyada oo qayb ka ah shaqada koorsada, waxaan baaray awoodaha madal daruuraha gudaha sida Yandex.Cloud. Madalku waxa ay bixisaa adeegyo kala duwan oo lagu xalliyo dhibaatooyinka la taaban karo. Si kastaba ha ahaatee, mararka qaarkood waxaad u baahan tahay inaad dejiso codsigaaga daruuriga ah oo leh kaabayaal aad u ballaaran oo ku saleysan adeegyadan. Maqaalkan waxaan rabaa in aan la wadaago waayo-aragnimadayda soo dejinta codsigan.

Dejinta adeegyada la qaybiyey Yandex.Cloud iyadoo la isticmaalayo Grafana tusaale ahaan

Maxaad doonaysaa inaad hesho?

Grafana - qalab awood leh oo lagu xalliyo dhibaatooyinka falanqaynta ama la socodka dhibaatooyinka nidaam kasta. Qaabeynteeda aasaasiga ah, kani waa mashiin macmal ah oo leh server-ka Grafana, iyo sidoo kale keydka xogta (ClickHouse, InfluxDB, iwm.)

Ka dib markii la bilaabo mashiinka farsamada leh ee server-ka webka, waxaad aadi kartaa martigeliyaha oo aad hesho UI qurux badan, u sheeg database-yada ilaha shaqada dheeraadka ah, samee dashboards iyo garaafyo.

Dejinta adeegyada la qaybiyey Yandex.Cloud iyadoo la isticmaalayo Grafana tusaale ahaan

Nooca aasaasiga ah wuxuu leeyahay hal cillad oo muhiim ah - ma aha mid loo dulqaadan karo qaladka gabi ahaanba. Taasi waa, dhammaan shaqeynta codsigu waxay kuxirantahay suurtagalnimada hal mashiinka farsamada. Haddii ay diido ama 10 qof ay furaan UI isku mar, markaa dhibaatooyin ayaa soo bixi doona.

Si fudud ayaa loo xalin karaa: kaliya waxaad u baahan tahay inaad... geyso mashiinno badan oo isku mid ah oo la mid ah server-ka shabakadda oo aad hoos geliso dheelitirka L3. Laakin wax waliba si cad uma aha halkan. Grafana waxay si toos ah ugu kaydisaa saxanka mishiinka farsamada gacanta (dashboards, garaafyada, iwm.) Sidaa darteed, haddii aan bedelno qaar ka mid ah goobaha UI, isbeddelladani waxay ka muuqan doonaan kaliya mashiinka farsamada ee uu xisaabiyaha noo soo diray. Tani waxay u horseedi doontaa habayn iswaafaqid la'aan ah ee codsigeena, taasoo keenaysa dhibaatooyin ku saabsan bilaabista iyo isticmaalka.

Halkan xog ururin kale ayaa u iman doona samatabbixinta, tusaale ahaan, MySQL ama wax u dhigma. Waxaan u sheegaynaa Grafana in ay ku kaydiso goobaha isticmaalaha kaydkan "spare" Ka dib, way ku filnaan doontaa in lagu qeexo dariiqa xogtan hal mar mashiinka kasta, oo lagu beddelo dhammaan goobaha kale ee isticmaala mid kasta oo ka mid ah mashiinnada farsamada; waxay ku fidin doonaan kuwa kale.

Halkan waxaa ah jaantuska kaabayaasha codsiga u dambeeya:

Dejinta adeegyada la qaybiyey Yandex.Cloud iyadoo la isticmaalayo Grafana tusaale ahaan

Aan barano inaan gacmahayaga wax ku qaadno

MySQL iyo ClickHouse

Ka hor inta aan la dirin codsigan oo kale adigoo gujinaya badhanka, waxay ahayd lagama maarmaan in la barto sida loo maareeyo qayb kasta oo ka mid ah oo la isku daro midba midka kale.

Halkan Yandex.Cloud ayaa naga caawin doonta, kaas oo bixiya dheelitirayaasha L3, ClickHouse iyo MySQL sida adeegyada la maareeyay. Isticmaaluhu wuxuu kaliya u baahan yahay inuu qeexo xuduudaha oo uu sugo ilaa inta uu madalku wax walba ka keenayo nidaamka shaqada.

Waan diiwaan galiyay, waxaan sameeyay daruur iyo akoon lacag bixineed. Taas ka dib, waxaan aaday daruuraha oo aan dejiyay MySQL iyo ClickHouse rucubood oo leh goobo yar. Waxaan sugay ilaa ay noqdeen kuwo firfircoon.

Dejinta adeegyada la qaybiyey Yandex.Cloud iyadoo la isticmaalayo Grafana tusaale ahaanDejinta adeegyada la qaybiyey Yandex.Cloud iyadoo la isticmaalayo Grafana tusaale ahaan

Waxa kale oo aad u baahan tahay inaad xasuusato inaad ku abuurto xog ururin koox kasta oo aad habayso gelitaankeeda adigoo isticmaalaya login iyo password. Faahfaahinta halkan kuma geli doono - wax walba waa iska cad yihiin interface-ka.

Faahfaahinta aan caddayn waxay ahayd in xog-ururintani ay leeyihiin martigeliyayaal badan, kuwaas oo hubinaya dulqaadkooda khaladaadka. Si kastaba ha ahaatee, Grafana waxay u baahan tahay hal martigaliyaha xog kasta oo ay ku shaqeyso. Akhris dheer dukumentiyo Daruuruhu waxay ii keeneen go'aan. Waxaa soo baxday in martida loo yahay noocyada c-<cluster_id>.rw.mdb.yandexcloud.net lagu sawiray maamulaha firfircoon ee kooxda ee hadda jira oo wata aqoonsiga u dhigma. Tani waa waxa aan siin doono Grafana.

server web

Hadda waxay ku xiran tahay server-ka shabakadda. Aynu kor u qaadno mashiinka farsamada casriga ah ee Linux oo aan gacanta ku habeyno Grafana.

Dejinta adeegyada la qaybiyey Yandex.Cloud iyadoo la isticmaalayo Grafana tusaale ahaan

Dejinta adeegyada la qaybiyey Yandex.Cloud iyadoo la isticmaalayo Grafana tusaale ahaan

Aan ku xirno ssh oo aan rakibno xirmooyinka lagama maarmaanka ah.

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 

Intaa ka dib, aan ku maamulno Grafana hoosta systemctl oo aan ku rakibno plugin si aad ula shaqeyso ClickHouse (haa, laguma soo koobin xirmada aasaasiga ah).

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

Taasi waa, ka dib amar fudud

sudo service grafana-server start

waxaan bilaabi doonaa server-ka webka. Hadda waxaad geli kartaa cinwaanka IP-ga dibadda ee mashiinka farsamada ee browserka, sheeg dekedda 3000 oo arag Grafana UI ee quruxda badan.
Dejinta adeegyada la qaybiyey Yandex.Cloud iyadoo la isticmaalayo Grafana tusaale ahaan

Laakiin ha degdegin, ka hor inta aanad dejin Grafana, waa inaad xasuusataa inaad u sheegto dariiqa MySQL si aad u kaydiso goobta.

Isku xidhka guud ee server-ka Grafana ayaa ku jira faylka /etc/grafana/grafana.ini. Khadka loo baahan yahay wuxuu u eg yahay sidan:

;url =

Waxaan u dejinay martigeliyaha kooxda MySQL. Fayl isku mid ah ayaa ka kooban gelitaanka iyo erayga sirta ah ee gelitaanka Grafana ee sawirka kore, kuwaas oo asal ahaan labaduba siman yihiin admin.

Waxaad isticmaali kartaa amarrada 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

Waa waqtigii dib loo bilaabi lahaa serverka shabakada!

sudo service grafana-server restart

Hadda gudaha Grafana UI waxaan ku qeexi doonaa ClickHouse sida DataSource.

Waxa aan awooday in aan gaadho habayn shaqo oo leh goobaha soo socda:

Dejinta adeegyada la qaybiyey Yandex.Cloud iyadoo la isticmaalayo Grafana tusaale ahaan

Waxaan u cayimay URL ahaan https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443

Dhammaan! Waxaan haynaa hal mashiinka farsamada gacanta ah oo leh server-ka shabakad ku xiran CH iyo MySQL. Waxaad mar hore u soo rar kartaa kaydka xogta ClickHouse oo waxaad dhisi kartaa dashboards. Si kastaba ha ahaatee, weli ma aanaan gaadhin yoolkeenna, mana aynaan dhigin kaabayaal dhammaystiran.

Xirmada

Yandex.Cloud waxay kuu ogolaaneysaa inaad abuurto sawirka diskka mashiinka farsamada ee jira, iyo iyada oo ku saleysan - tiro kasta oo mashiinno ah oo isku mid ah. Tani waa dhab ahaan waxa aan isticmaali doono. Si aad si habboon u ururiso sawirka, qaado qalabka Xirmada Shirkadda HashiCorp. Waxay u qaadanaysaa sidii gelinta faylka json oo wata tilmaamo lagu ururinayo sawirka.

Faylkayaga json wuxuu ka koobnaan doonaa laba baloog: wax-dhisayaasha iyo kuwa wax-dhiya. Baloogga koowaad wuxuu qeexayaa cabbirrada sawirka laftiisa inuu yahay qayb, qaybta labaadna waxay sharraxaysaa tilmaamaha buuxinta nuxurka lagama maarmaanka ah.

Dhisayaasha

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

Qaab-dhismeedkan, waxaad u baahan tahay inaad dejiso aqoonsiga qaybta daruuraha meesha aad rabto inaad ku abuurto sawirka, iyo sidoo kale dariiqa faylka oo leh furayaasha akoontada adeegga ee hore loogu abuuray qaybtan. Waxaad ka akhrisan kartaa wax badan oo ku saabsan abuurista xisaabaadka adeegga iyo furayaasha qaab fayl qaybta u dhiganta dukumentiyo.

Qaabayntan ayaa sheegaysa in sawirka diskka lagu dhisi doono iyadoo lagu saleynayo goobta ubuntu-1804-lts, oo lagu meeleeyay qaybta isticmaale ee habboon ee qoyska sawirka GRAFANA magaca grafana-{{timestamp}}.

Bixiyeyaal

Hadda waxay timaaddaa qaybta xiisaha badan ee qaabeynta. Waxay sharxi doontaa isku xigxiga falalka u baahan doona in lagu sameeyo mashiinka farsamada ka hor inta aan la qaboojin xaaladdeeda sawirka diskka.

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

Halkan dhammaan falalka waxa loo qaybiyaa 3 marxaladood. Marxaladda koowaad, qoraal fudud ayaa la sameeyaa kaas oo abuuraya hage caawiye ah.

diyaarin-ctg.sh:

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

Marxaladda xigta, waxaan dhigeynaa qoraal tusahan, kaas oo u baahan doona in la bilaabo isla markiiba ka dib marka la bilaabo mashiinka farsamada. Qoraalkani waxa uu gelin doonaa doorsoomayaasha isticmaalaha ee u baahan in lagu diwaan galiyo qaabka Grafana oo dib u bilaabo serverka shabakada.

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

Intaa ka dib waxaa hadhay 3 shay oo la sameeyo:
1) ku rakib baakadaha
2) Ku socodsii Grafana hoosta systemctl oo ku rakib plugin ClickHouse
3) dhig qoraalka setup.sh ee safka bilawga isla markiiba ka dib markaad shido mashiinka farsamada.

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;

Hadda waxa kaliya ee hadhay waa in la socodsiiyo Packer oo la geliyo sawirka wax soo saarka ee qaybta la cayimay. Markaad abuureyso mashiinka farsamada, waxaad u dooran kartaa sidii disk boot ka dib markaad bilowdo waxaad heli doontaa server-ka Grafana oo diyaarsan.

Dejinta adeegyada la qaybiyey Yandex.Cloud iyadoo la isticmaalayo Grafana tusaale ahaan
Dejinta adeegyada la qaybiyey Yandex.Cloud iyadoo la isticmaalayo Grafana tusaale ahaan

Kooxda tusaale ahaan iyo dheellitiriyaha

Marka aan haysano sawir disk ah oo noo ogolaanaya inaan abuurno shabakado badan oo isku mid ah oo Grafana ah, waxaan abuuri karnaa koox tusaale ah. Goobta Yandex.Cloud, ereygan waxaa loola jeedaa midowga mashiinnada farsamada ee leh sifooyin isku mid ah. Marka la abuurayo koox tusaale ah, nooca dhammaan mishiinnada kooxdan ayaa la habeeyey, ka dibna sifooyinka kooxda lafteeda (tusaale ahaan, tirada ugu yar iyo ugu badan ee mashiinnada firfircoon). Haddii lambarka hadda aanu buuxin shuruudahan, markaa kooxda tusaale ahaan lafteeda ayaa ka saari doonta mashiinnada aan loo baahnayn ama waxay abuuri doonaan kuwo cusub oo muuqaalkeeda ah.

Iyada oo qayb ka ah hawshayada, waxaanu abuuri doonaa koox tusaale ahaan server-yada shabakada kuwaas oo laga soo saari doono sawirka diskka ee hore loo abuuray.

Dejinta adeegyada la qaybiyey Yandex.Cloud iyadoo la isticmaalayo Grafana tusaale ahaan

Dejinta adeegyada la qaybiyey Yandex.Cloud iyadoo la isticmaalayo Grafana tusaale ahaan

Waxa runtii cajiib ah ayaa ah habaynta kooxda tusaalaha ugu dambeeya. Kooxda bartilmaameedka ah ee ku jirta isdhexgalka Load Balancer ayaa kaa caawin doona inaad ku habayso dheelitirka L3 ee sare ee mashiinnada farsamada ee kooxdan adigoo gujinaya dhowr badhan.

Dejinta adeegyada la qaybiyey Yandex.Cloud iyadoo la isticmaalayo Grafana tusaale ahaan

Markii aan dejinayo dheelitirka, waxaan hirgeliyay laba qodob oo muhiim ah:

  1. Waxaan ka dhigay miisaan-hayaha inuu aqbalo taraafikada isticmaalaha dekedda 80 oo aan u wareejiyo dekedda 3000 ee mashiinnada farsamada, sida saxda ah halka ay Grafana ku nooshahay.
  2. Waxaan dejiyay hubinta jiritaanka mashiinnada anigoo ku dhejinaya dekedda 3000.

Dejinta adeegyada la qaybiyey Yandex.Cloud iyadoo la isticmaalayo Grafana tusaale ahaan

Koob yar

Ugu dambayntii, waxa aanu awoodnay in aanu gacanta ku dhigno kaabayaashii codsiga ee la rabnay, imikana waxa aanu haysanaa adeeg Grafana aad u adkeysi badan. Waxa kaliya oo aad u baahan tahay inaad ogaato ciwaanka IP-ga ee dheelitiriyaha oo ah meesha laga soo galo codsiga iyo martigeliyaha kooxda ClickHouse si aad ugu shubto kaydka xogta.

Waxay u egtahay guul? Haa, guul. Laakiin wali wax baa i jahawareersan. Habka kor ku xusan oo dhan wuxuu u baahan yahay tallaabooyin badan oo gacanta ah mana aha mid la miisaami karo gabi ahaanba; Waxaan jeclaan lahaa inaan si otomaatig ah u sameeyo haddii ay suurtagal tahay. Tani waa waxa qaybta xigta lagu go'aamin doono.

Isdhexgalka Terraform

Waxaan mar labaad isticmaali doonaa qalab ka socda HashiCorp oo la yiraahdo Terraform. Waxay kaa caawin doontaa inaad geyso dhammaan kaabayaasha codsiga adigoo gujinaya badhanka, oo ku saleysan doorsoomayaal dhowr ah oo uu gudbiyay isticmaaluhu. Aynu qorno cunto karinta lagu socodsiin karo marar badan qaybo kala duwan ee isticmaalayaasha kala duwan.

Dhammaan shaqada Terraform waxay ku timaadaa qorista faylka qaabeynta (*.tf) iyo abuurista kaabayaasha dhaqaalaha oo ku salaysan.

Kala duwanaansho

Bilawga faylka, waxaanu ku dari doonaa doorsoomayaasha go'aaminaya halka iyo sida kaabayaasha mustaqbalka la geyn doono.

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

Habka geynta codsiga oo dhan ayaa hoos ugu soo degi doona si loo dhiso sawirka diskka iyo dejinta doorsoomayaashan. Aan sharaxo waxa ay masuul ka yihiin:

outh_calaamad - calaamad u ah gelitaanka daruuraha. Waxaa lagu heli karaa link.
daruur_id - Aqoonsiga daruuraha halkaasoo aan geyn doono codsiga
folder_id - aqoonsiga qaybta halka aanu geyn doono codsiga
adeegga_account_id - aqoonsiga koontada adeegga ee qaybta u dhiganta ee daruuraha.
sawirka_id - aqoonsiga sawirka saxanka ee la helay iyadoo la isticmaalayo Packer
username ΠΈ password - Magaca isticmaale iyo erayga sirta ah si aad u gasho labada xog ururin iyo server-ka Grafana
dbname - Magaca xogta ee gudaha CH iyo MySQL
Dariiqa_guud_furaha - Jidka faylka oo wata furahaaga dadweynaha ee ssh, kaas oo aad isticmaali karto si aad ugu xidhid magaca ubuntu mashiinada farsamada gacanta ee leh server-yada webka

Dejinta bixiyaha

Hadda waxaad u baahan tahay inaad dejiso bixiyaha Terraform - kiiskeena, Yandex:

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

Waxaad ogaan doontaa in halkan aan isticmaaleyno doorsoomayaasha kor lagu qeexay.

Shabakadda iyo kooxaha

Hadda waxaan abuuri doonaa shabakad ay xubno ka mid ah kaabayaashayagu ku wada xidhiidhi doonaan, saddex subnets (mid gobol kasta ah) oo kor u qaadaya CH iyo 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
  }
}

Sida aad arki karto, mid kasta oo ka mid ah labada kooxoodba waxa loo abuuray si khalad ah oo loo dulqaadan karo iyadoo la dhigayo saddex aag oo la heli karo.

Mareegaha shabakadda

Waxay u egtahay inaan ku sii socon karno isla ruuxa, laakiin waxaan la kulmay dhibaato. Intaa ka hor, waxaan markii hore kiciyay kooxda MySQL oo kaliya ka dib, aniga oo garanaya aqoonsigiisa, waxaan soo ururiyay sawirka diskka oo leh qaabeynta loo baahan yahay, halkaas oo aan ku tilmaamay kooxda martida loo yahay. Laakiin hadda ma naqaano aqoonsiga kooxda ka hor inta aan la bilaabin Terraform, oo ay ku jirto wakhtiga sawirka la dhisayo. Sidaa darteed, waxaan ku qasbanaaday in aan isticmaalo waxyaabaha soo socda khiyaano.

Isticmaalka adeega xogta badan ee Amazon, waxaan u gudbin doonaa qaar ka mid ah xuduudaha mishiinka farsamada, kaas oo uu aqbali doono oo ka shaqeyn doono. Waxaan u baahanahay mashiinka si uu u aado xogta badan ee ka dambeysa kooxda MySQL martigeliyaha iyo erayga sirta ah ee isticmaalaha, kaas oo isticmaaluhu uu ku qeexay faylka Terraform, ka dib marka uu bilaabo. Aynu wax yar ka beddelno waxa ku jira faylka setup.sh, kaas oo shaqeeya marka mishiinka farsamada la shido.

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

Kooxda qaddarinta iyo dheelli-tirka

Markaan dib u dhisnay sawir disk cusub, waxaan ugu dambeyntii ku dari karnaa faylkayaga Terraform.

Aynu tilmaanno inaan rabno inaan isticmaalno sawirka diskka jira:

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

Hadda aynu abuurno koox tusaale:

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

Waxaa habboon in fiiro gaar ah loo yeesho sida aan ugu gudbinay xogta badan cluster_uri, username ΠΈ password. Waa kuwan in mashiinka farsamada uu ka soo bixi doono bilowga oo uu gelin doono qaabka Grafana.

Waxay ku xiran tahay xisaabiyaha.

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

In yar oo sonkor ah

Wax yar baa hadhay. Ka dib marka kaabayaasha la geeyo, waa inaad tagtaa Grafana UI oo aad gacanta ku darto kooxda CH (aqoonsiga kaas oo wali u baahan in la helo) ilo Xogeed ahaan. Laakin Terraform wuu garanayaa aqoonsiga kooxda Aan ku aamino inuu arrinka ka midho dhaliyo.

Aan ku darno bixiye cusub - Grafana, oo aan siino dheelitiriyaha cinwaanka IP-ga martigeliyaha ahaan. Dhammaan isbeddelada uu Terraform ku sameeyo mishiinka halka dheellitirkiisu go'aamiyo waxay ku kori doonaan MySQL, sidaas darteedna dhammaan mishiinnada kale.

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

Aynu timaha u shanleyno

Aan soo bandhigno dheelitiriyaha IP-ga iyo martigeliyaha kooxda 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"
}

ordi kara

Dhammaan! Faylka qaabeyntayadu waa diyaar waxaanan awoodnaa, annagoo dejinaya doorsoomayaasha, u sheeg Terraform inay kor u qaadaan wax kasta oo aan kor ku sharaxnay. Hawsha oo dhami waxay igu qaadatay ilaa 15 daqiiqo.
Dhamaadka waxaad arki kartaa fariin qurux badan:

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

Iyo daruuraha, qaybaha kaabayaasha kor loo qaaday ayaa muuqan doona:

Dejinta adeegyada la qaybiyey Yandex.Cloud iyadoo la isticmaalayo Grafana tusaale ahaan

Aynu soo koobno ​​natiijooyinka

Hadda, adoo isticmaalaya Grafana tusaale ahaan, mid kasta oo idinka mid ah wuxuu geyn karaa codsiyo leh qaab dhismeedka daruuraha fidsan ee goobta Yandex.Cloud. Qalab waxtar leh oo ka socda HashiCorp sida Packer iyo Terraform ayaa kaa caawin kara tan. Waxaan rajeynayaa in qof u helo maqaalkan mid faa'iido leh :)

PS Hoosta waxaan ku soo lifaaqi doonaa isku xirka kaydka halkaas oo aad ka heli karto cuntooyinka diyaarsan ee Packer iyo Terraform, jajabyada aan ku bixiyay maqaalkan.

kayd

Source: www.habr.com

Add a comment