Penyebaran layanan sing disebarake ing Yandex.Cloud nggunakake Grafana minangka conto

Halo kabeh! Minangka bagéan saka karya kursus, aku nliti kemampuan platform maya domestik kayata Yandex.Cloud. Platform kasebut nawakake macem-macem layanan kanggo ngrampungake masalah praktis. Nanging, kadhangkala sampeyan kudu nyiyapake aplikasi maya dhewe kanthi infrastruktur sing cukup ekstensif adhedhasar layanan kasebut. Ing artikel iki, aku pengin nuduhake pengalaman babagan nggunakake aplikasi kasebut.

Penyebaran layanan sing disebarake ing Yandex.Cloud nggunakake Grafana minangka conto

Apa sing arep ditampa?

Grafana - alat sing kuat kanggo ngrampungake masalah analitis utawa ngawasi masalah sistem apa wae. Ing konfigurasi dhasar, iki minangka mesin virtual karo server web Grafana, uga database (ClickHouse, InfluxDB, lan liya-liyane) kanthi dataset sing bakal adhedhasar analytics.

Sawise ngluncurake mesin virtual kanthi server web, sampeyan bisa menyang host lan entuk UI sing apik, nemtokake database minangka sumber kanggo karya luwih lanjut, nggawe dashboard lan grafik.

Penyebaran layanan sing disebarake ing Yandex.Cloud nggunakake Grafana minangka conto

Versi dhasar nduweni kekurangan sing signifikan - ora toleran kesalahan. Tegese, kabeh fungsi aplikasi gumantung saka daya urip siji mesin virtual. Yen ora gelem utawa 10 wong mbukak UI bebarengan, banjur masalah bakal muncul.

Padha bisa ditanggulangi mung: sampeyan mung kudu ... masang akeh mesin virtual podho rupo karo server web lan sijine iku ing balancer L3. Nanging ora kabeh prasaja ing kene. Grafana nyimpen setelan pangguna (path menyang database, dashboard, grafik, lan sapiturute) langsung ing disk mesin virtual. Mangkono, yen kita ngganti sawetara setelan ing UI, owah-owahan iki bakal dibayangke mung ing mesin virtual ngendi balancer ngirim kita. Iki bakal nyebabake setelan sing ora konsisten kanggo aplikasi kita lan masalah nalika mbukak lan nggunakake.

Ing kene database liyane bakal nylametake, contone, MySQL utawa sing padha. Kita ngandhani Grafana yen dheweke kudu nyimpen setelan pangguna ing database "nyisakke" iki. Sawisé iku, bakal cukup kanggo nemtokake path menyang database iki sapisan ing saben mesin, lan ngowahi kabeh setelan panganggo liyane ing sembarang mesin virtual; padha bakal ngluwihi kanggo liyane.

Mangkene diagram infrastruktur aplikasi pungkasan:

Penyebaran layanan sing disebarake ing Yandex.Cloud nggunakake Grafana minangka conto

Ayo sinau ngangkat nganggo tangan

MySQL lan ClickHouse

Sadurunge nggunakake aplikasi kasebut kanthi ngeklik tombol, sampeyan kudu sinau carane nangani saben komponen lan nggabungake siji liyane.

Ing kene Yandex.Cloud bakal mbantu kita, sing nyedhiyakake penyeimbang L3, ClickHouse lan MySQL minangka layanan sing dikelola. Pangguna mung kudu nemtokake paramèter lan ngenteni nganti platform nggawa kabeh supaya bisa digunakake.

Aku ndhaptar, nggawe maya lan akun pembayaran. Sawisé iku, aku lunga menyang méga lan nyetel MySQL lan ClickHouse cluster karo setelan minimal. Aku ngenteni nganti padha aktif.

Penyebaran layanan sing disebarake ing Yandex.Cloud nggunakake Grafana minangka contoPenyebaran layanan sing disebarake ing Yandex.Cloud nggunakake Grafana minangka conto

Sampeyan uga kudu elinga nggawe database ing saben kluster lan ngatur akses menyang nggunakake login lan sandhi. Aku ora bakal njlentrehake rincian ing kene - kabeh wis jelas ing antarmuka.

Rincian sing ora jelas yaiku database kasebut duwe akeh host, sing njamin toleransi kesalahane. Nanging, Grafana mbutuhake persis siji host kanggo saben database sing dianggo. Wacan dawa dokumentasi Awan nggawa aku keputusan. Pranyata yen tuan rumah spesies kasebut c-<cluster_id>.rw.mdb.yandexcloud.net dipetakan menyang host master aktif saiki saka kluster karo ID cocog. Iki sing bakal diwenehake marang Grafana.

server web

Saiki iku nganti server web. Ayo ngunggahake mesin virtual biasa karo Linux lan ngatur Grafana kanthi manual.

Penyebaran layanan sing disebarake ing Yandex.Cloud nggunakake Grafana minangka conto

Penyebaran layanan sing disebarake ing Yandex.Cloud nggunakake Grafana minangka conto

Ayo nyambung liwat ssh lan nginstal paket sing dibutuhake.

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 

Sawise iku, ayo mbukak Grafana ing systemctl lan nginstal plugin kanggo nggarap ClickHouse (ya, ora diwenehake ing paket dhasar).

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

Mekaten, sawise iku karo printah prasaja

sudo service grafana-server start

kita bakal miwiti server web. Saiki sampeyan bisa ngetik alamat IP eksternal saka mesin virtual ing browser, nemtokake port 3000 lan ndeleng Grafana UI ayu.
Penyebaran layanan sing disebarake ing Yandex.Cloud nggunakake Grafana minangka conto

Nanging aja cepet-cepet, sadurunge nyiyapake Grafana, sampeyan kudu ngelingi nyritakake dalan menyang MySQL supaya bisa nyimpen setelan ing kana.

Kabeh konfigurasi server web Grafana ana ing file kasebut /etc/grafana/grafana.ini. Baris sing dibutuhake katon kaya iki:

;url =

Kita nyetel host menyang kluster MySQL. Berkas sing padha ngemot login lan sandhi kanggo ngakses Grafana ing gambar ing ndhuwur, sing minangka standar padha admin.

Sampeyan bisa nggunakake perintah 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

Wektu kanggo miwiti maneh server web!

sudo service grafana-server restart

Saiki ing UI Grafana kita bakal nemtokake ClickHouse minangka DataSource.

Aku bisa entuk konfigurasi sing bisa digunakake kanthi setelan ing ngisor iki:

Penyebaran layanan sing disebarake ing Yandex.Cloud nggunakake Grafana minangka conto

Aku kasebut minangka URL https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443

Kabeh! Kita duwe siji mesin virtual sing bisa digunakake kanthi server web sing disambungake menyang CH lan MySQL. Sampeyan wis bisa ngunggah dataset menyang ClickHouse lan mbangun dashboard. Nanging, kita durung entuk target lan durung masang infrastruktur lengkap.

packer

Yandex.Cloud ngidini sampeyan nggawe gambar disk saka mesin virtual sing wis ana, lan kanthi basis - jumlah mesin sing padha karo saben liyane. Iki persis apa sing bakal kita gunakake. Kanggo ngumpulake gambar kanthi gampang, njupuk alat kasebut packer saka HashiCorp. Dibutuhake minangka input file json kanthi instruksi kanggo ngumpulake gambar kasebut.

File json kita bakal kalebu rong blok: pembangun lan provisioner. Blok pisanan nggambarake paramèter gambar kasebut minangka entitas, lan blok kapindho nggambarake instruksi kanggo ngisi konten sing dibutuhake.

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

Ing cithakan iki, sampeyan kudu nyetel pengenal bagean ing awan sing pengin nggawe gambar, uga path menyang file kanthi tombol saka akun layanan sing sadurunge digawe ing bagean iki. Sampeyan bisa maca liyane babagan nggawe akun layanan lan tombol ing wangun file ing bagean sing cocog dokumentasi.

Konfigurasi iki ujar manawa gambar disk bakal dibangun adhedhasar platform kasebut ubuntu-1804-lts, diselehake ing bagean pangguna sing cocog ing kulawarga gambar GRAFANA miturut jeneng grafana-{{timestamp}}.

Penyedia

Saiki teka bagean konfigurasi sing luwih menarik. Bakal njlèntrèhaké urutan tumindak sing kudu ditindakake ing mesin virtual sadurunge beku negara kasebut dadi gambar disk.

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

Ing kene kabeh tumindak dipérang dadi 3 tahap. Ing tataran kapisan, skrip prasaja dieksekusi sing nggawe direktori tambahan.

prepare-ctg.sh:

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

Ing tahap sabanjure, kita nyelehake skrip ing direktori iki, sing kudu diluncurake langsung sawise miwiti mesin virtual. Skrip iki bakal nyelehake variabel pangguna sing kudu didaftar ing konfigurasi Grafana lan miwiti maneh server web.

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

Sawise iki, ana 3 perkara sing kudu ditindakake:
1) nginstal paket
2) mbukak Grafana ing systemctl lan nginstal plugin ClickHouse
3) sijine skrip setup.sh ing antrian peluncuran sanalika sawise nguripake mesin virtual.

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;

Saiki sing isih ana yaiku mbukak Packer lan entuk gambar output sing diselehake ing bagean kasebut. Nalika nggawe mesin virtual, sampeyan bisa milih minangka boot disk lan sawise diluncurake sampeyan bakal nampa server web Grafana sing wis siap.

Penyebaran layanan sing disebarake ing Yandex.Cloud nggunakake Grafana minangka conto
Penyebaran layanan sing disebarake ing Yandex.Cloud nggunakake Grafana minangka conto

grup Kayata lan balancer

Sawise kita duwe gambar disk sing ngidini kita nggawe akeh server web Grafana sing padha, kita bisa nggawe grup conto. Ing platform Yandex.Cloud, istilah iki nuduhake kesatuan mesin virtual sing nduweni karakteristik sing padha. Nalika nggawe klompok conto, prototipe kabeh mesin ing grup iki dikonfigurasi, lan banjur karakteristik klompok dhewe (contone, jumlah minimal lan maksimum mesin aktif). Yen nomer saiki ora nyukupi kritéria kasebut, grup instance dhewe bakal mbusak mesin sing ora perlu utawa nggawe sing anyar ing gambar dhewe.

Minangka bagéan saka tugas kita, kita bakal nggawe klompok conto saka server web sing bakal kui saka gambar disk digawe sadurunge.

Penyebaran layanan sing disebarake ing Yandex.Cloud nggunakake Grafana minangka conto

Penyebaran layanan sing disebarake ing Yandex.Cloud nggunakake Grafana minangka conto

Sing nggumunake yaiku persiyapan klompok conto pungkasan. Klompok target ing integrasi karo Load Balancer bakal mbantu sampeyan ngatur keseimbangan L3 ing ndhuwur mesin virtual grup iki kanthi ngeklik sawetara tombol.

Penyebaran layanan sing disebarake ing Yandex.Cloud nggunakake Grafana minangka conto

Nalika nyetel balancer, aku ngetrapake rong poin penting:

  1. Aku nggawe balancer nampa lalu lintas pangguna ing port 80 lan pangalihan menyang port 3000 saka mesin virtual, persis ing ngendi Grafana urip.
  2. Aku nyiyapake mriksa daya urip mesin kanthi ping menyang port 3000.

Penyebaran layanan sing disebarake ing Yandex.Cloud nggunakake Grafana minangka conto

Ringkesan mini

Pungkasan, kita bisa kanthi manual masang infrastruktur aplikasi sing dikarepake, lan saiki kita duwe layanan Grafana sing tahan banting. Sampeyan mung kudu ngerti alamat IP saka balancer minangka titik entri menyang aplikasi lan host kluster ClickHouse supaya bisa ngemot dataset kasebut.

Iku bakal katon kaya kamenangan? Ya, kamenangan. Nanging ana sing isih bingung. Kabeh proses ing ndhuwur mbutuhake akeh langkah manual lan ora bisa diukur; Aku pengin ngotomatisasi yen bisa. Iki minangka bagean sabanjure sing bakal ditrapake.

Integrasi Terraform

Kita bakal maneh nggunakake alat saka HashiCorp disebut Terraform. Iku bakal mbantu sampeyan masang kabeh infrastruktur aplikasi kanthi ngeklik tombol, adhedhasar sawetara variabel sing dilewati pangguna. Ayo nulis resep sing bisa ditindakake kaping pirang-pirang ing macem-macem bagean pangguna sing beda.

Kabeh karya karo Terraform teka kanggo nulis file konfigurasi (*.tf) lan nggawe infrastruktur adhedhasar iku.

Variabel

Ing wiwitan file, kita bakal nyakup variabel sing nemtokake ing endi lan kepiye infrastruktur bakal ditindakake.

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

Proses penyebaran aplikasi kabeh bakal mudhun kanggo mbangun gambar disk lan nyetel variabel kasebut. Ayo kula nerangake apa tanggung jawabe:

oauth_token - token kanggo ngakses méga. Bisa dipikolehi dening link.
cloud_id - pengenal awan ing ngendi kita bakal masang aplikasi kasebut
folder_id - pengenal bagean ngendi kita bakal masang aplikasi
id_akun_layanan - pengenal akun layanan ing bagean sing cocog ing awan.
gambar_id - pengenal gambar disk sing dipikolehi nggunakake Packer
jeneng panganggo и sandi — jeneng pangguna lan sandhi kanggo ngakses database lan server web Grafana
jeneng db - jeneng basis data ing kluster CH lan MySQL
public_key_path - path menyang file nganggo kunci ssh umum, sing bisa digunakake kanggo nyambungake jeneng kasebut ubuntu menyang mesin virtual karo server web

Persiyapan panyedhiya

Saiki sampeyan kudu ngatur panyedhiya Terraform - ing kasus kita, Yandex:

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

Sampeyan bakal weruh yen ing kene kita nggunakake variabel sing ditetepake ing ndhuwur.

Jaringan lan kluster

Saiki kita bakal nggawe jaringan ing ngendi unsur infrastruktur kita bakal komunikasi, telung subnet (siji ing saben wilayah) lan ngunggahake kluster CH lan 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
  }
}

Nalika sampeyan bisa ndeleng, saben loro kluster digawe cukup fault-tolerant dening diselehake ing telung zona kasedhiyan.

Server web

Iku misale jek sing kita bisa nerusake ing semangat padha, nanging aku mlayu menyang kangelan. Sadurunge iki, aku pisanan ngunggahake cluster MySQL lan mung sawise iku, ngerti ID sawijining, aku diklumpukake gambar disk karo konfigurasi sing dibutuhake, ngendi aku kasebut inang kanggo kluster. Nanging saiki kita ora ngerti ID kluster sadurunge ngluncurake Terraform, kalebu nalika mbangun gambar kasebut. Mulane, aku kudu Resor kanggo ing ngisor iki trik.

Nggunakake layanan metadata Amazon, kita bakal ngirim sawetara paramèter menyang mesin virtual, sing bakal ditampa lan diproses. We kudu mesin kanggo pindhah menyang metadata konco MySQL host kluster lan jeneng panganggo-sandi, kang pangguna kasebut ing file Terraform, sawise miwiti. Ayo ngganti isi file rada setup.sh, sing mlaku nalika mesin virtual diuripake.

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

Klompok intance lan balancer

Sawise nggawe gambar disk anyar, pungkasane bisa nambah file kanggo Terraform.

Ayo nuduhake yen kita pengin nggunakake gambar disk sing wis ana:

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

Saiki ayo nggawe grup conto:

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

Iku worth mbayar manungsa waé kanggo carane kita liwati menyang metadata cluster_uri, username и password. Iki sing bakal ditindakake mesin virtual nalika wiwitan lan dilebokake ing konfigurasi Grafana.

Terserah pengimbang.

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

A gula sethitik

Mung kari sethithik. Sawise infrastruktur disebarake, sampeyan kudu pindhah menyang UI Grafana lan nambah kluster CH kanthi manual (ID sing isih kudu dipikolehi) minangka Sumber Data. Nanging Terraform ngerti ID kluster. Ayo padha precaya marang dheweke supaya bisa ngrampungake perkara kasebut.

Ayo nambah panyedhiya anyar - Grafana, lan menehi alamat IP balancer minangka host. Kabeh owah-owahan sing digawe Terraform ing mesin ing ngendi balancer nemtokake bakal tuwuh ing MySQL, lan mulane ing kabeh mesin liyane.

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

Ayo nyisir rambut

Ayo nampilake alamat IP balancer lan host kluster 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"
}

Sampeyan bisa mbukak

Kabeh! File konfigurasi kita wis siyap lan kita bisa, kanthi nyetel variabel, ngandhani Terraform kanggo ngunggahake kabeh sing wis kasebut ing ndhuwur. Kabeh proses njupuk kula bab 15 menit.
Ing pungkasan sampeyan bisa ndeleng pesen sing apik:

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

Lan ing méga, unsur infrastruktur sing diunggahake bakal katon:

Penyebaran layanan sing disebarake ing Yandex.Cloud nggunakake Grafana minangka conto

Ayo sumurake asil

Saiki, nggunakake Grafana minangka conto, saben sampeyan bisa masang aplikasi kanthi arsitektur maya sing jembar ing platform Yandex.Cloud. Alat sing migunani saka HashiCorp kaya Packer lan Terraform bisa mbantu sampeyan. Muga-muga ana sing nemokake artikel iki migunani :)

P.S. Ing ngisor iki aku bakal masang link menyang gudang ing ngendi sampeyan bisa nemokake resep-resep siap kanggo Packer lan Terraform, fragmen sing diwenehake ing artikel iki.

gudang

Source: www.habr.com

Add a comment