Banatutako zerbitzuen hedapena Yandex.Cloud-en Grafana erabiliz adibide gisa

Kaixo guztioi! Nire ikastaroko lanaren baitan, hodei-plataforma domestiko baten gaitasunak ikertu nituen Yandex.Hodeia. Plataformak hainbat zerbitzu eskaintzen ditu arazo praktikoak konpontzeko. Hala ere, batzuetan zure hodeiko aplikazioa konfiguratu behar duzu zerbitzu horietan oinarritutako azpiegitura nahiko zabal batekin. Artikulu honetan aplikazio hori zabaltzean nire esperientzia partekatu nahi dut.

Banatutako zerbitzuen hedapena Yandex.Cloud-en Grafana erabiliz adibide gisa

Zer jaso nahi duzu?

Grafana β€” Arazo analitikoak konpontzeko edo edozein sistemaren arazoak kontrolatzeko tresna indartsua. Bere oinarrizko konfigurazioan, Grafana web zerbitzari bat duen makina birtual bat da hau, baita datu-base bat ere (ClickHouse, InfluxDB, etab.) analitikak oinarrituko dituen datu-multzo batekin.

Web zerbitzari batekin makina birtual bat abiarazi ondoren, bere ostalarira joan eta UI eder bat lor dezakezu, datu-baseak lan gehiago egiteko iturri gisa zehaztu, aginte-panelak eta grafikoak sortu.

Banatutako zerbitzuen hedapena Yandex.Cloud-en Grafana erabiliz adibide gisa

Oinarrizko bertsioak eragozpen esanguratsu bat du - ez da batere akatsekiko tolerantzia. Hau da, aplikazioaren funtzionaltasun osoa makina birtual baten bideragarritasunaren araberakoa da. Uko egiten badu edo 10 pertsonek aldi berean UI irekitzen badute, arazoak sortuko dira.

Besterik gabe konpondu daitezke: besterik ez duzu... makina birtual berdin-berdinak zabaldu web zerbitzari batekin eta L3 balantzaile baten azpian jarri. Baina hemen dena ez dago hain argi. Grafanak erabiltzaileen ezarpenak (datu-baseetarako bideak, aginte-panelak, grafikoak, etab.) gordetzen ditu zuzenean bere makina birtualeko diskoan. Horrela, UI-an ezarpen batzuk aldatzen baditugu, aldaketa horiek balantzaileak bidali digun makina birtualean soilik islatuko dira. Honek gure aplikazioaren ezarpen koherenteak ekarriko ditu, abiarazteko eta erabiltzeko arazoak sortuz.

Hemen beste datu-base bat etorriko da erreskatatzera, adibidez, MySQL edo bere baliokidea. Grafanari esaten diogu erabiltzaileen ezarpenak "ordezko" datu-base honetan gorde behar dituela. Ondoren, nahikoa izango da datu-base honetarako bidea makina bakoitzean behin zehaztea eta beste erabiltzaile-ezarpen guztiak editatzea makina birtualetan; besteetara zabalduko dira.

Hona hemen azken aplikazioaren azpiegituraren diagrama:

Banatutako zerbitzuen hedapena Yandex.Cloud-en Grafana erabiliz adibide gisa

Ikas dezagun gure eskuekin altxatzen

MySQL eta ClickHouse

Horrelako aplikazio bat botoi baten klik eginez zabaldu aurretik, beharrezkoa zen bere osagai bakoitza nola kudeatzen eta elkarren artean integratzen ikasi.

Hemen Yandex.Cloud-ek lagunduko digu, L3 orekatzaileak, ClickHouse eta MySQL kudeatutako zerbitzu gisa eskaintzen dituena. Erabiltzaileak parametroak zehaztu eta plataformak guztia funtzionatzen duen arte itxaron behar du.

Erregistratu, hodeia eta ordainketa kontu bat sortu ditut. Horren ostean, hodera joan nintzen eta MySQL eta ClickHouse klusterrak konfiguratu nituen ezarpen minimoekin. Aktibo bihurtu arte itxaron nuen.

Banatutako zerbitzuen hedapena Yandex.Cloud-en Grafana erabiliz adibide gisaBanatutako zerbitzuen hedapena Yandex.Cloud-en Grafana erabiliz adibide gisa

Era berean, gogoratu behar duzu kluster bakoitzean datu-base bat sortzea eta horretarako sarbidea konfiguratzea saio-hasiera eta pasahitza erabiliz. Ez naiz xehetasunetan sartuko hemen - interfazean dena agerikoa da.

Agerikoa ez den xehetasuna datu-base hauek ostalari asko dituztela izan zen, akatsen tolerantzia ziurtatzen dutenak. Hala ere, Grafanak ostalari bat behar du lan egiten duen datu-base bakoitzeko. Irakurketa luzea dokumentazioa Hodeiek erabaki batera eraman ninduten. Bihurtzen da espeziearen ostalaria dela c-<cluster_id>.rw.mdb.yandexcloud.net klusterraren egungo ostalari nagusi aktiboarekin mapatuta dago dagokion IDarekin. Hauxe da Grafanari emango dioguna.

Web zerbitzaria

Orain web zerbitzariari dagokio. Goazen Linux-ekin makina birtual arrunt bat eta eskuz konfigura dezagun Grafana bertan.

Banatutako zerbitzuen hedapena Yandex.Cloud-en Grafana erabiliz adibide gisa

Banatutako zerbitzuen hedapena Yandex.Cloud-en Grafana erabiliz adibide gisa

Konektatu ssh bidez eta instala ditzagun beharrezko paketeak.

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 

Horren ondoren, exekutatu Grafana systemctl-en eta instalatu dezagun ClickHouse-rekin lan egiteko plugina (bai, ez dago oinarrizko paketean ematen).

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

Hori da, ondoren komando soil batekin

sudo service grafana-server start

web zerbitzaria martxan jarriko dugu. Orain arakatzailean makina birtualaren kanpoko IP helbidea sar dezakezu, 3000 ataka zehaztu eta Grafana UI ederra ikusi.
Banatutako zerbitzuen hedapena Yandex.Cloud-en Grafana erabiliz adibide gisa

Baina ez presarik izan, Grafana konfiguratu aurretik, MySQL-rako bidea kontatu behar duzu ezarpenak bertan gordetzeko.

Grafana web zerbitzariaren konfigurazio osoa fitxategian dago /etc/grafana/grafana.ini. Beharrezko lerroa honelakoa da:

;url =

Ostalaria MySQL klusterean ezarri dugu. Fitxategi berak goiko irudian Grafana atzitzeko saioa eta pasahitza ditu, lehenespenez biak berdinak admin.

Sed komandoak erabil ditzakezu:

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

Web zerbitzaria berrabiarazteko garaia da!

sudo service grafana-server restart

Orain Grafana UI-n ClickHouse zehaztuko dugu Datu-iturburu gisa.

Ezarpen hauekin laneko konfigurazioa lortu ahal izan nuen:

Banatutako zerbitzuen hedapena Yandex.Cloud-en Grafana erabiliz adibide gisa

URL gisa zehaztu dut https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443

Denak! Makina birtual bat dugu funtzionatzen duen web zerbitzari batekin CH eta MySQL-rekin konektatuta. Dagoeneko datu-multzoa ClickHousera karga dezakezu eta aginte-panelak eraiki ditzakezu. Hala ere, oraindik ez dugu gure helburua lortu eta ez dugu erabateko azpiegiturarik zabaldu.

Packer

Yandex.Cloud-ek lehendik dagoen makina birtual baten disko-irudia sortzeko aukera ematen du, eta bere oinarrian - bata bestearen berdin-berdina den edozein makina. Hauxe da erabiliko duguna. Irudia eroso muntatzeko, hartu tresna Packer HashiCorp-en eskutik. Sarrera gisa json fitxategi bat hartzen du irudia muntatzeko argibideak dituena.

Gure json fitxategiak bi bloke izango ditu: eraikitzaileak eta hornitzaileak. Lehenengo blokeak irudiaren beraren parametroak deskribatzen ditu entitate gisa, eta bigarren blokeak beharrezko edukiz betetzeko argibideak deskribatzen ditu.

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

Txantiloi honetan, irudia sortu nahi duzun hodeian atalaren identifikatzailea ezarri behar duzu, baita atal honetan aldez aurretik sortutako zerbitzu-kontuko gakoekin fitxategirako bidea ere. Zerbitzu-kontuak eta gakoak sortzeari buruzko informazio gehiago irakur dezakezu fitxategi moduan dagokion atalean dokumentazioa.

Konfigurazio honek dio diskoaren irudia plataforman oinarrituta eraikiko dela ubuntu-1804-lts, irudi-familiako erabiltzaile-atale egokian kokatuta GRAFANA izenpean grafana-{{timestamp}}.

Hornitzaileak

Orain konfigurazioaren zati interesgarriena dator. Makina birtualean bere egoera disko-irudi batean izoztu aurretik egin beharko diren ekintzen sekuentzia deskribatuko du.

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

Hemen ekintza guztiak 3 fasetan banatzen dira. Lehenengo fasean, direktorio laguntzaile bat sortzen duen script soil bat exekutatzen da.

prestatu-ctg.sh:

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

Hurrengo fasean, direktorio honetan script bat jartzen dugu, makina birtuala abiarazi eta berehala abiarazi beharko duena. Script honek Grafana konfigurazioan erregistratu behar diren erabiltzailearen aldagaiak jarriko ditu eta web zerbitzaria berrabiaraziko du.

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

Honen ostean 3 gauza geratzen dira egiteko:
1) paketeak instalatu
2) exekutatu Grafana systemctl-en eta instalatu ClickHouse plugina
3) jarri setup.sh script-a abiarazteko ilaran makina birtuala piztu eta berehala.

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;

Orain Packer exekutatu eta irteerako irudia zehaztutako atalean jartzea da geratzen dena. Makina birtual bat sortzean, abioko disko gisa hauta dezakezu eta abiarazi ondoren prest egindako Grafana web zerbitzari bat jasoko duzu.

Banatutako zerbitzuen hedapena Yandex.Cloud-en Grafana erabiliz adibide gisa
Banatutako zerbitzuen hedapena Yandex.Cloud-en Grafana erabiliz adibide gisa

Instantzia-taldea eta orekatzailea

Grafana web zerbitzari berdin asko sortzeko aukera ematen digun disko-irudia dugunean, instantzia-talde bat sor dezakegu. Yandex.Cloud plataforman, termino honek ezaugarri berdinak dituzten makina birtualen batasunari egiten dio erreferentzia. Instantzia-talde bat sortzean, talde honetako makina guztien prototipoa konfiguratzen da, eta ondoren taldearen beraren ezaugarriak (adibidez, makina aktiboen gutxieneko eta gehienezko kopurua). Uneko zenbakiak irizpide hauek betetzen ez baditu, instantzia-taldeak berak kenduko ditu beharrezkoak ez diren makinak edo berriak sortuko ditu bere irudian.

Gure zereginaren barruan, aurretik sortutako diskoaren iruditik sortuko den web zerbitzarien instantzia-talde bat sortuko dugu.

Banatutako zerbitzuen hedapena Yandex.Cloud-en Grafana erabiliz adibide gisa

Banatutako zerbitzuen hedapena Yandex.Cloud-en Grafana erabiliz adibide gisa

Benetan aipagarria dena azken instantziako taldearen konfigurazioa da. Load Balancer-ekin integratzen den xede-taldeak talde honetako makina birtualen gainean L3 orekatzailea konfiguratzen lagunduko dizu botoi pare bat klik eginez.

Banatutako zerbitzuen hedapena Yandex.Cloud-en Grafana erabiliz adibide gisa

Balantzailea konfiguratzerakoan, bi puntu garrantzitsu ezarri ditut:

  1. Balantzaileari 80 atakan erabiltzaileen trafikoa onartu eta makina birtualen 3000 atakara birbideratu nuen, Grafana bizi den tokira hain zuzen.
  2. Makinen bideragarritasuna egiaztatzea konfiguratu nuen 3000 atakan ping eginez.

Banatutako zerbitzuen hedapena Yandex.Cloud-en Grafana erabiliz adibide gisa

Mini laburpena

Azkenik, nahi dugun aplikazio-azpiegitura eskuz zabaldu ahal izan dugu, eta gaur egun, sendotasun handiko Grafana zerbitzu bat dugu. Balantzatzailearen IP helbidea soilik ezagutu behar duzu aplikaziorako sarrera-puntu gisa eta ClickHouse klusterraren ostalari gisa datu-multzoa bertan kargatzeko.

Garaipen bat dirudi? Bai, garaipena. Baina oraindik zerbait nahastu egiten nau. Goiko prozesu osoak eskuzko urrats asko behar ditu eta ez da batere eskalagarria; ahal izanez gero automatizatu nahiko nuke. Horri eskainiko zaio hurrengo atala.

Terraform integrazioa

HashiCorp izeneko tresna bat erabiliko dugu berriro Terraform. Aplikazioaren azpiegitura osoa zabaltzen lagunduko dizu botoi baten klik eginez, erabiltzaileak emandako hainbat aldagaitan oinarrituta. Idatz dezagun hainbat aldiz exekutatu daitekeen errezeta erabiltzaile ezberdinen atal ezberdinetan.

Terraform-ekin lan guztia konfigurazio fitxategi bat idaztera dator (*.tf) eta horretan oinarritutako azpiegiturak sortzea.

aldagai

Fitxategiaren hasieran, etorkizuneko azpiegitura non eta nola zabalduko den zehazten duten aldagaiak sartuko ditugu.

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

Aplikazioa zabaltzeko prozesu osoa diskoaren irudi bat eraikitzera eta aldagai hauek ezartzera iritsiko da. Azal dezadan zertaz arduratzen diren:

oauth_token β€” hodeira sartzeko token bat. Honen bidez lor daiteke link.
hodei_id β€” aplikazioa zabalduko dugun hodeiko identifikatzailea
karpeta_id β€” aplikazioa zabalduko dugun atalaren identifikatzailea
zerbitzu_kontuaren_id β€” zerbitzu-kontuaren identifikatzailea hodeiari dagokion atalean.
irudi_id β€” Packer erabiliz lortutako disko-irudiaren identifikatzailea
erabiltzailea ΠΈ pasahitza β€” erabiltzaile-izena eta pasahitza bi datu-baseetara eta Grafana web zerbitzarira sartzeko
dbname - CH eta MySQL klusterren barruan datu-basearen izena
gako_publikoa β€” zure ssh gako publikoarekin fitxategirako bidea, izenarekin konektatzeko erabil dezakezuna ubuntu web zerbitzariak dituzten makina birtualetara

Hornitzailearen konfigurazioa

Orain Terraform hornitzailea konfiguratu behar duzu - gure kasuan, Yandex:

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

Konturatuko zara hemen goian zehaztutako aldagaiak erabiltzen ari garela.

Sarea eta klusterrak

Orain gure azpiegiturako elementuak komunikatuko diren sare bat sortuko dugu, hiru azpisare (eskualde bakoitzean bat) eta CH eta MySQL klusterrak sortuko dira.


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

Ikus dezakezunez, bi kluster bakoitza nahiko akatsekiko tolerantzia sortzen da, hiru erabilgarritasun gunetan jarrita.

Web zerbitzariak

Espiritu berean jarraitu genezakeela ematen zuen, baina zailtasunak izan nituen. Honen aurretik, MySQL kluster bat sortu nuen lehenik eta horren ondoren, bere IDa ezagututa, disko-irudi bat bildu nuen beharrezko konfigurazioarekin, non klusterraren ostalaria zehaztu nuen. Baina orain ez dakigu kluster IDa Terraform abiarazi aurretik, irudia eraikitzeko momentuan barne. Horregatik, hurrengora jo behar izan nuen trikimailua.

Amazonen metadatuen zerbitzua erabiliz, parametro batzuk pasatuko dizkiogu makina birtualeri, eta hark onartu eta prozesatu egingo ditu. Makina hasi eta gero erabiltzaileak Terraform fitxategian zehaztutako MySQL cluster ostalari eta erabiltzaile-izen-pasahitza atzean dauden metadatuetara joan behar dugu. Aldatu dezagun fitxategiaren edukia apur bat setup.sh, makina birtuala pizten denean exekutatzen dena.

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

Intance taldea eta orekatzailea

Diskoaren irudi berri bat berreraiki ondoren, azkenean gure fitxategia gehi dezakegu Terraform-erako.

Adierazi dezagun lehendik dagoen diskoaren irudi bat erabili nahi dugula:

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

Sortu dezagun instantzia talde bat:

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

Merezi du erreparatzea metadatuetara nola pasatu dugun cluster_uri, username ΠΈ password. Hauek dira makina birtualak abiaraztean atera eta Grafana konfigurazioan jarriko dituena.

Balantzaileari dagokio.

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

Azukre pixka bat

Apur bat besterik ez da geratzen. Azpiegitura zabaldu ondoren, Grafana UI-ra joan beharko duzu eta eskuz gehitu CH klusterra (horren IDa oraindik lortu behar da) Datu-iturburu gisa. Baina Terraformek badaki cluster IDa. Konfiantza diezaiogun gaia aurrera eramatea.

Gehitu dezagun hornitzaile berri bat - Grafana, eta eman diezaiogun orekatzailearen IP helbidea ostalari gisa. Terraformek bere orekatzaileak zehazten duen makinan egiten dituen aldaketa guztiak MySQL-en haziko dira, eta, beraz, gainerako makina guztietan.

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

Orraz ditzagun ilea

Bistaratu ditzagun orekatzailearen IP helbidea eta ClickHouse klusterraren ostalaria

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

Korrika egin dezake

Denak! Gure konfigurazio fitxategia prest dago eta aldagaiak ezarriz Terraform-i esan dezakegu goian deskribatu dugun guztia igotzeko. Prozesu osoak 15 minutu inguru behar izan nituen.
Amaieran mezu eder bat ikus dezakezue:

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

Eta hodeian, altxatutako azpiegituraren elementuak ikusgai egongo dira:

Banatutako zerbitzuen hedapena Yandex.Cloud-en Grafana erabiliz adibide gisa

Batuketari sortu

Orain, Grafana adibide gisa erabiliz, zuetako bakoitzak hodei arkitektura zabala duten aplikazioak heda ditzake Yandex.Cloud plataforman. Packer eta Terraform bezalako HashiCorp-en tresna lagungarriak lagun zaitzakete horretan. Espero dut norbaitek artikulu hau erabilgarria izatea :)

PS Jarraian esteka bat erantsiko dizuet biltegirako, non Packer eta Terraform-entzako prest dauden errezetak aurki ditzakezun, artikulu honetan eman ditudan zatiak.

biltegia

Iturria: www.habr.com

Gehitu iruzkin berria