Pag-deploy sa mga gipang-apod-apod nga serbisyo sa Yandex.Cloud gamit ang Grafana isip pananglitan

Kumusta tanan! Isip kabahin sa akong kurso nga trabaho, nagsiksik ko sa mga kapabilidad sa maong domestic cloud platform sama sa Yandex.Cloud. Ang plataporma nagtanyag sa lainlaing mga serbisyo alang sa pagsulbad sa praktikal nga mga problema. Bisan pa, usahay kinahanglan nimo nga i-set up ang imong kaugalingon nga aplikasyon sa panganod nga adunay medyo halapad nga imprastraktura base sa kini nga mga serbisyo. Niini nga artikulo gusto nakong ipaambit ang akong kasinatian sa pag-deploy sa maong aplikasyon.

Pag-deploy sa mga gipang-apod-apod nga serbisyo sa Yandex.Cloud gamit ang Grafana isip pananglitan

Unsay gusto nimo madawat?

grafana β€” usa ka kusgan nga himan alang sa pagsulbad sa mga problema sa analitikal o pag-monitor sa mga problema sa bisan unsang mga sistema. Sa sukaranan nga pag-configure niini, kini usa ka virtual nga makina nga adunay usa ka web server sa Grafana, ingon man usa ka database (ClickHouse, InfluxDB, ug uban pa) nga adunay usa ka dataset diin ang analytics ibase.

Pagkahuman sa paglansad sa usa ka virtual nga makina nga adunay usa ka web server, mahimo ka moadto sa host niini ug makakuha usa ka matahum nga UI, ipiho ang mga database ingon mga gigikanan alang sa dugang nga trabaho, paghimo mga dashboard ug mga graph.

Pag-deploy sa mga gipang-apod-apod nga serbisyo sa Yandex.Cloud gamit ang Grafana isip pananglitan

Ang sukaranan nga bersyon adunay usa ka hinungdanon nga disbentaha - dili kini matugoton sa sayup. Sa ato pa, ang tibuuk nga pag-andar sa aplikasyon nagdepende sa pagkaayo sa usa ka virtual machine. Kung kini magdumili o 10 ka tawo ang magbukas sa UI sa parehas nga oras, unya ang mga problema motungha.

Mahimo kini nga masulbad sa yano: kinahanglan nimo nga ... mag-deploy og daghang parehas nga virtual machine nga adunay usa ka web server ug ibutang kini sa ilawom sa usa ka L3 balancer. Apan dili ang tanan klaro kaayo dinhi. Gitipigan sa Grafana ang mga setting sa gumagamit (mga agianan padulong sa mga database, dashboard, graph, ug uban pa) direkta sa disk sa virtual nga makina niini. Busa, kung usbon namo ang pipila ka mga setting sa UI, kini nga mga pagbag-o makita lamang sa virtual machine diin gipadala kami sa balancer. Motultol kini sa dili managsama nga mga setting alang sa among aplikasyon, hinungdan sa mga problema sa paglansad ug paggamit.

Dinhi ang laing database moabut aron sa pagluwas, pananglitan, ang MySQL o ang katumbas niini. Gisultihan namon si Grafana nga kinahanglan niyang tipigan ang mga setting sa gumagamit sa kini nga "luwas" nga database. Pagkahuman, igo na nga ipiho ang agianan sa kini nga database kausa sa matag makina, ug i-edit ang tanan nga uban pang mga setting sa gumagamit sa bisan unsang virtual nga makina; ipadayon kini sa uban.

Ania ang usa ka diagram sa katapusang imprastraktura sa aplikasyon:

Pag-deploy sa mga gipang-apod-apod nga serbisyo sa Yandex.Cloud gamit ang Grafana isip pananglitan

Magkat-on ta sa pagbayaw gamit ang atong mga kamot

MySQL ug ClickHouse

Sa wala pa i-deploy ang ingon nga aplikasyon sa pag-klik sa usa ka buton, kinahanglan nga mahibal-an kung giunsa pagdumala ang matag usa sa mga sangkap niini ug i-integrate kini sa usag usa.

Dinhi makatabang kanamo ang Yandex.Cloud, nga naghatag mga L3 balancers, ClickHouse ug MySQL isip mga pagdumala nga serbisyo. Ang user kinahanglan lamang nga ipiho ang mga parameter ug maghulat hangtud nga ang plataporma magdala sa tanan ngadto sa working order.

Nagparehistro ko, naghimo ug cloud ug account sa pagbayad. Pagkahuman niana, miadto ko sa panganod ug nag-set up sa MySQL ug ClickHouse clusters nga adunay gamay nga setting. Naghulat ko hangtod nga nahimo silang aktibo.

Pag-deploy sa mga gipang-apod-apod nga serbisyo sa Yandex.Cloud gamit ang Grafana isip pananglitanPag-deploy sa mga gipang-apod-apod nga serbisyo sa Yandex.Cloud gamit ang Grafana isip pananglitan

Kinahanglan usab nimong hinumdoman nga maghimo usa ka database sa matag cluster ug i-configure ang pag-access niini gamit ang usa ka login ug password. Dili ko maghisgot sa mga detalye dinhi - ang tanan klaro kaayo sa interface.

Ang dili klaro nga detalye mao nga kini nga mga database adunay daghang mga host, nga nagsiguro sa ilang pagtugot sa sayup. Bisan pa, ang Grafana nanginahanglan eksakto usa ka host alang sa matag database nga gigamit niini. Taas nga pagbasa dokumentasyon Ang mga panganod nagdala kanako sa usa ka desisyon. Kini turns nga ang panon sa mga espisye c-<cluster_id>.rw.mdb.yandexcloud.net gimapa sa kasamtangan nga aktibong master host sa cluster nga adunay katugbang nga ID. Kini ang among ihatag kang Grafana.

web server

Karon naa na sa web server. Atong ipataas ang usa ka regular nga virtual machine nga adunay Linux ug mano-mano nga i-configure ang Grafana niini.

Pag-deploy sa mga gipang-apod-apod nga serbisyo sa Yandex.Cloud gamit ang Grafana isip pananglitan

Pag-deploy sa mga gipang-apod-apod nga serbisyo sa Yandex.Cloud gamit ang Grafana isip pananglitan

Magkonektar kita pinaagi sa ssh ug i-install ang gikinahanglan nga mga pakete.

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 

Pagkahuman niana, padaganon nato ang Grafana sa ilawom sa systemctl ug i-install ang plugin alang sa pagtrabaho kauban ang ClickHouse (oo, wala kini gihatag sa sukaranan nga pakete).

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

Mao na, pagkahuman sa usa ka yano nga mando

sudo service grafana-server start

atong sugdan ang web server. Karon mahimo nimong isulod ang eksternal nga IP address sa virtual machine sa browser, ipiho ang port 3000 ug tan-awa ang matahum nga UI sa graphic.
Pag-deploy sa mga gipang-apod-apod nga serbisyo sa Yandex.Cloud gamit ang Grafana isip pananglitan

Apan ayaw pagdali, sa wala pa i-set up ang Grafana, kinahanglan nimong hinumdoman nga isulti kini sa agianan sa MySQL aron matipigan ang mga setting didto.

Ang tibuok nga configuration sa Grafana web server anaa sa file /etc/grafana/grafana.ini. Ang gikinahanglan nga linya ingon niini:

;url =

Gibutang namo ang host sa MySQL cluster. Ang parehas nga file naglangkob sa login ug password alang sa pag-access sa Grafana sa litrato sa ibabaw, nga sa default parehas nga parehas admin.

Mahimo nimong gamiton ang sed nga mga sugo:

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

Panahon na aron i-restart ang web server!

sudo service grafana-server restart

Karon sa Grafana UI atong itakda ang ClickHouse isip DataSource.

Nakab-ot nako ang usa ka pag-configure sa pagtrabaho nga adunay mga mosunud nga setting:

Pag-deploy sa mga gipang-apod-apod nga serbisyo sa Yandex.Cloud gamit ang Grafana isip pananglitan

Gipiho nako ang URL https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443

Tanan! Kami adunay usa nga nagtrabaho nga virtual machine nga adunay usa ka web server nga konektado sa CH ug MySQL. Mahimo nimong i-upload ang dataset sa ClickHouse ug magtukod og mga dashboard. Bisan pa, wala pa namon makab-ot ang among katuyoan ug wala pa ma-deploy ang usa ka hingpit nga imprastraktura.

Packer

Gitugotan ka sa Yandex.Cloud nga maghimo usa ka imahe sa disk sa usa ka naglungtad nga virtual nga makina, ug sa sukaranan niini - bisan unsang gidaghanon sa mga makina nga managsama sa usag usa. Mao gyud ni ang atong gamiton. Aron dali nga ma-assemble ang imahe, kuhaa ang himan Packer gikan sa HashiCorp. Nagkinahanglan kini isip input sa usa ka json file nga adunay mga panudlo alang sa pag-assemble sa imahe.

Ang among json file maglangkob sa duha ka mga bloke: mga tigtukod ug tighatag. Ang una nga block naghulagway sa mga parameter sa imahe mismo isip usa ka entidad, ug ang ikaduha nga block naghulagway sa mga instruksyon sa pagpuno niini sa gikinahanglan nga sulod.

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

Sa kini nga template, kinahanglan nimo nga itakda ang identifier sa seksyon sa panganod diin gusto nimo nga himuon ang imahe, ingon man ang agianan sa file nga adunay mga yawe gikan sa account sa serbisyo nga gihimo kaniadto sa kini nga seksyon. Makabasa ka og dugang mahitungod sa paghimo og mga account sa serbisyo ug mga yawe sa porma sa usa ka file sa katugbang nga seksyon dokumentasyon.

Kini nga pagsumpo nag-ingon nga ang imahe sa disk pagatukuron base sa plataporma ubuntu-1804-lts, gibutang sa angay nga seksyon sa tiggamit sa pamilya sa imahe GRAFANA sa ilalum sa ngalan grafana-{{timestamp}}.

Mga tigtagana

Karon moabut ang labi ka makapaikag nga bahin sa pag-configure. Ihulagway niini ang han-ay sa mga aksyon nga kinahanglang ipahigayon sa virtual machine sa dili pa i-freeze ang estado niini ngadto sa disk image.

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

Dinhi ang tanan nga mga aksyon gibahin sa 3 nga mga yugto. Sa una nga yugto, usa ka yano nga script ang gipatuman nga nagmugna usa ka auxiliary nga direktoryo.

prepare-ctg.sh:

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

Sa sunod nga yugto, nagbutang kami usa ka script sa kini nga direktoryo, nga kinahanglan nga ilunsad dayon pagkahuman sa pagsugod sa virtual machine. Kini nga script magbutang sa user variables nga kinahanglang irehistro sa Grafana config ug i-restart ang web server.

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

Pagkahuman niini adunay 3 ka butang nga nahabilin nga buhaton:
1) i-install ang mga pakete
2) padagana ang Grafana ubos sa systemctl ug i-install ang ClickHouse plugin
3) ibutang ang setup.sh script sa launch queue diha-diha dayon human ma-on ang virtual machine.

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;

Karon ang nahabilin mao ang pagpadagan sa Packer ug ibutang ang imahe sa output sa gitakda nga seksyon. Kung maghimo usa ka virtual nga makina, mahimo nimo kini pilion ingon usa ka boot disk ug pagkahuman sa paglansad makadawat ka usa ka andam nga gihimo nga web server sa Grafana.

Pag-deploy sa mga gipang-apod-apod nga serbisyo sa Yandex.Cloud gamit ang Grafana isip pananglitan
Pag-deploy sa mga gipang-apod-apod nga serbisyo sa Yandex.Cloud gamit ang Grafana isip pananglitan

Instance group ug balancer

Sa higayon nga kita adunay usa ka disk image nga nagtugot kanato sa paghimo sa daghan nga managsama nga Grafana web server, makahimo kita og usa ka grupo sa pananglitan. Sa Yandex.Cloud nga plataporma, kini nga termino nagtumong sa panaghiusa sa mga virtual machine nga adunay parehas nga mga kinaiya. Kung maghimo usa ka grupo sa pananglitan, ang prototype sa tanan nga mga makina sa kini nga grupo gi-configure, ug dayon ang mga kinaiya sa grupo mismo (pananglitan, ang minimum ug labing kadaghan nga mga aktibo nga makina). Kung ang karon nga numero wala makatagbo sa kini nga mga pamatasan, nan ang grupo sa pananglitan mismo magtangtang sa wala kinahanglana nga mga makina o maghimo mga bag-o sa kaugalingon nga imahe.

Isip kabahin sa among buluhaton, maghimo kami og usa ka grupo sa mga web server nga mamugna gikan sa nabuhat kaniadto nga disk image.

Pag-deploy sa mga gipang-apod-apod nga serbisyo sa Yandex.Cloud gamit ang Grafana isip pananglitan

Pag-deploy sa mga gipang-apod-apod nga serbisyo sa Yandex.Cloud gamit ang Grafana isip pananglitan

Ang tinuud nga talagsaon mao ang katapusan nga pag-setup sa grupo. Ang target nga grupo sa integrasyon sa Load Balancer makatabang kanimo sa pag-configure sa usa ka L3 balancer sa ibabaw sa mga virtual machine niini nga grupo pinaagi sa pag-klik sa pipila ka mga buton.

Pag-deploy sa mga gipang-apod-apod nga serbisyo sa Yandex.Cloud gamit ang Grafana isip pananglitan

Sa pag-set up sa balancer, gipatuman nako ang duha ka importanteng punto:

  1. Akong gihimo ang balancer nga modawat sa trapiko sa user sa port 80 ug i-redirect kini ngadto sa port 3000 sa mga virtual machine, diin mismo si Grafana nagpuyo.
  2. Gipahimutang nako ang pagsusi sa posibilidad sa mga makina pinaagi sa pag-ping niini sa port 3000.

Pag-deploy sa mga gipang-apod-apod nga serbisyo sa Yandex.Cloud gamit ang Grafana isip pananglitan

Mini nga summary

Sa katapusan, nakahimo kami sa mano-mano nga pag-deploy sa gitinguha nga imprastraktura sa aplikasyon, ug karon kami adunay usa ka labi ka lig-on nga serbisyo sa Grafana. Kinahanglan lang nimo mahibal-an ang IP address sa balancer isip entry point sa aplikasyon ug ang host sa ClickHouse cluster aron ma-load ang dataset ngadto niini.

Morag kadaugan? Oo, kadaugan. Pero naay naglibog nako. Ang tibuuk nga proseso sa ibabaw nanginahanglan daghang manwal nga mga lakang ug dili mabag-o; Gusto nako nga i-automate kini kung mahimo. Mao kini ang igahin sa sunod nga seksyon.

Paghiusa sa Terraform

Maggamit na usab kami usa ka himan gikan sa HashiCorp nga gitawag Terraform. Makatabang kini kanimo sa pag-deploy sa tibuuk nga imprastraktura sa aplikasyon sa pag-klik sa usa ka buton, base sa daghang mga variable nga gipasa sa tiggamit. Magsulat kita og resipe nga mahimong ipadagan sa makadaghang higayon sa lain-laing mga seksyon sa lain-laing tiggamit.

Ang tanan nga trabaho sa Terraform moabut sa pagsulat sa usa ka configuration file (*.tf) ug ang paghimo sa imprastraktura nga gibase niini.

Mga variable

Sa sinugdanan pa lang sa file, iapil namo ang mga variables nga magdeterminar kung asa ug unsaon pag-deploy ang umaabot nga imprastraktura.

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

Ang tibuuk nga proseso sa pag-deploy sa aplikasyon moabut sa paghimo sa usa ka imahe sa disk ug pag-set niini nga mga variable. Pasabta ko kung unsa ang ilang responsibilidad:

oauth_token β€” usa ka timaan sa pag-access sa panganod. Mahimong makuha sa link.
cloud_id β€” cloud identifier diin among i-deploy ang aplikasyon
folder_id - identifier sa seksyon diin among i-deploy ang aplikasyon
service_account_id β€” service account identifier sa katugbang nga seksyon sa panganod.
image_id - identifier sa disk image nga nakuha gamit ang Packer
username ΠΈ password β€” username ug password aron ma-access ang duha ka database ug ang Grafana web server
dbname - ngalan sa database sulod sa CH ug MySQL clusters
public_key_path - dalan sa file gamit ang imong public ssh key, nga imong magamit aron makonektar ubos sa ngalan ubuntu sa mga virtual machine nga adunay mga web server

Setup sa provider

Karon kinahanglan nimo nga i-configure ang Terraform provider - sa among kaso, Yandex:

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

Mamatikdan nimo nga dinhi gigamit namon ang mga variable nga gipasabut sa ibabaw.

Network ug mga cluster

Karon maghimo kami usa ka network diin ang mga elemento sa among imprastraktura makigsulti, tulo nga mga subnet (usa sa matag rehiyon) ug ipataas ang mga cluster sa CH ug 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
  }
}

Sama sa imong nakita, ang matag usa sa duha nga mga pungpong gihimo nga dili matugoton sa sayup pinaagi sa pagbutang sa tulo nga mga lugar nga magamit.

Mga web server

Morag makapadayon mi sa samang espiritu, apan naglisod ko. Sa wala pa kini, una nakong gipataas ang usa ka MySQL cluster ug pagkahuman lamang niana, nahibal-an ang ID niini, nakolekta nako ang usa ka imahe sa disk nga adunay gikinahanglan nga pagsumpo, diin akong gipiho ang host sa cluster. Apan karon wala kami nahibal-an ang cluster ID sa wala pa ilunsad ang Terraform, lakip ang panahon sa pagtukod sa imahe. Busa, kinahanglan kong modangop sa mosunod limbong.

Gamit ang serbisyo sa metadata sa Amazon, ipasa namo ang pipila ka mga parameter sa virtual machine, nga dawaton ug iproseso niini. Kinahanglan namon ang makina nga moadto sa metadata sa luyo sa MySQL cluster host ug username-password, nga gipiho sa user sa Terraform file, pagkahuman nagsugod. Usbon nato gamay ang sulod sa file setup.sh, nga modagan kon ang virtual nga makina gi-on.

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 group ug balancer

Sa pagkatukod pag-usab og bag-ong disk image, mahimo namong idugang ang among file para sa Terraform.

Atong ipakita nga gusto namong gamiton ang kasamtangan nga disk image:

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

Karon maghimo kita usa ka grupo sa pananglitan:

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

Angayan nga hatagan pagtagad kung giunsa namon kini gipasa sa metadata cluster_uri, username ΠΈ password. Kini ang makuha sa virtual machine sa pagsugod ug ibutang sa Grafana config.

Bahala na sa 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
      }
    }
  }
}

Usa ka gamay nga asukal

Gamay na lang ang nahabilin. Human ma-deploy ang imprastraktura, kinahanglan ka nga moadto sa Grafana UI ug mano-mano nga idugang ang CH cluster (ang ID nga kinahanglan pa makuha) isip Tinubdan sa Data. Apan nahibal-an ni Terraform ang cluster ID. Ato siyang itugyan sa pagpalampos sa maong butang.

Magdugang ta og bag-ong provider - Grafana, ug ihatag kaniya ang IP address sa balancer isip host. Ang tanan nga mga pagbag-o nga gihimo sa Terraform sa makina diin gitino sa balancer niini nga motubo sa MySQL, ug busa sa tanan nga ubang mga makina.

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

Magsuklay ta sa atong buhok

Atong ipakita ang balancer IP address ug ang host sa ClickHouse 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"
}

Makadagan ka

Tanan! Andam na ang among configuration file ug mahimo namo, pinaagi sa pag-set sa mga variable, sultihan ang Terraform nga ipataas ang tanan nga among gihulagway sa ibabaw. Ang tibuok proseso mikuha kanako ug mga 15 minutos.
Sa katapusan imong makita ang usa ka matahum nga mensahe:

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

Ug sa panganod, ang mga elemento sa gipataas nga imprastraktura makita:

Pag-deploy sa mga gipang-apod-apod nga serbisyo sa Yandex.Cloud gamit ang Grafana isip pananglitan

Himoon naton ang mga resulta

Karon, gamit ang Grafana isip usa ka pananglitan, ang matag usa kaninyo maka-deploy og mga aplikasyon nga adunay lapad nga arkitektura sa panganod sa Yandex.Cloud nga plataporma. Makatabang nga mga himan gikan sa HashiCorp sama sa Packer ug Terraform makatabang kanimo niini. Nanghinaut ko nga adunay nakakaplag niini nga artikulo nga mapuslanon :)

PS Sa ubos akong i-attach ang usa ka link sa repository diin makit-an nimo ang andam nga mga resipe alang sa Packer ug Terraform, mga tipik nga akong gihatag niini nga artikulo.

tipiganan

Source: www.habr.com

Idugang sa usa ka comment