Deplwaman sèvis distribiye nan Yandex.Cloud lè l sèvi avèk Grafana kòm yon egzanp

Bonjou tout moun! Kòm yon pati nan travay kou mwen an, mwen fè rechèch sou kapasite yo nan tankou yon platfòm nwaj domestik tankou Yandex.Cloud. Platfòm nan ofri divès sèvis pou rezoud pwoblèm pratik. Sepandan, pafwa ou bezwen mete pwòp aplikasyon nwaj ou a ak yon enfrastrikti jistis vaste ki baze sou sèvis sa yo. Nan atik sa a mwen vle pataje eksperyans mwen nan deplwaye yon aplikasyon konsa.

Deplwaman sèvis distribiye nan Yandex.Cloud lè l sèvi avèk Grafana kòm yon egzanp

Kisa ou vle resevwa?

grafana — yon zouti pwisan pou rezoud pwoblèm analyse oswa siveyans pwoblèm nenpòt sistèm. Nan konfigirasyon debaz li yo, sa a se yon machin vityèl ak yon sèvè entènèt Grafana, osi byen ke yon baz done (ClickHouse, InfluxDB, elatriye) ak yon seri done sou ki analiz yo pral baze.

Apre lanse yon machin vityèl ak yon sèvè entènèt, ou ka ale nan lame li a epi jwenn yon bèl UI, presize baz done kòm sous pou plis travay, kreye tablodbò ak graf.

Deplwaman sèvis distribiye nan Yandex.Cloud lè l sèvi avèk Grafana kòm yon egzanp

Vèsyon debaz la gen yon dezavantaj enpòtan - li pa toleran fòt ditou. Sa vle di, tout fonksyonalite aplikasyon an depann sou rantabilite yon sèl machin vityèl. Si li refize oswa 10 moun louvri UI a an menm tan, Lè sa a, pwoblèm yo pral leve.

Yo ka rezoud tou senpleman: ou jis bezwen... deplwaye anpil machin vityèl ki idantik ak yon sèvè entènèt epi mete yo anba yon balans L3. Men, se pa tout bagay ki tèlman klè isit la. Grafana estoke anviwònman itilizatè yo (chemen ki mennen nan baz done, tablodbò, graf, elatriye) dirèkteman sou disk machin vityèl li yo. Kidonk, si nou chanje kèk paramèt nan UI a, chanjman sa yo pral reflete sèlman sou machin vityèl kote balans lan voye nou an. Sa a pral mennen nan anviwònman konsistan pou aplikasyon nou an, sa ki lakòz pwoblèm ak lansman ak itilizasyon.

Isit la yon lòt baz done ap vin pote sekou, pou egzanp, MySQL oswa ekivalan li yo. Nou di Grafana ke li ta dwe estoke anviwònman itilizatè yo nan baz done "rezèv" sa a. Apre sa, li pral ase yo presize chemen an nan baz done sa a yon fwa sou chak machin, epi modifye tout lòt anviwònman itilizatè sou nenpòt nan machin yo vityèl yo pral pwolonje nan lòt yo.

Men yon dyagram nan enfrastrikti aplikasyon final la:

Deplwaman sèvis distribiye nan Yandex.Cloud lè l sèvi avèk Grafana kòm yon egzanp

Ann aprann leve ak men nou

MySQL ak ClickHouse

Anvan deplwaye yon aplikasyon konsa ak klike sou yon bouton, li te nesesè pou aprann kijan pou okipe chak nan eleman li yo ak entegre yo youn ak lòt.

Isit la Yandex.Cloud pral ede nou, ki bay balans L3, ClickHouse ak MySQL kòm sèvis jere. Itilizatè a sèlman bezwen presize paramèt yo epi tann jiskaske platfòm la pote tout bagay an fonksyon.

Mwen anrejistre, kreye yon nwaj ak yon kont peman. Apre sa, mwen te ale nan nwaj la ak mete kanpe MySQL ak ClickHouse grap ak anviwònman minim. Mwen te tann jiskaske yo te vin aktif.

Deplwaman sèvis distribiye nan Yandex.Cloud lè l sèvi avèk Grafana kòm yon egzanpDeplwaman sèvis distribiye nan Yandex.Cloud lè l sèvi avèk Grafana kòm yon egzanp

Ou bezwen sonje tou pou kreye yon baz done nan chak gwoup epi configured aksè a li lè l sèvi avèk yon login ak yon modpas. Mwen pa pral antre nan detay isit la - tout bagay se byen evidan nan koòdone a.

Detay ki pa evidan te ke baz done sa yo gen anpil lame, ki asire tolerans fòt yo. Sepandan, Grafana mande egzakteman yon lame pou chak baz done li travay avèk yo. Long lekti dokiman Nwaj yo mennen m 'nan yon desizyon. Li sanble ke lame a nan espès yo c-<cluster_id>.rw.mdb.yandexcloud.net kat lame aktyèl mèt aktif gwoup la ak ID ki koresponn lan. Se sa nou pral bay Grafana.

Sèvè entènèt

Kounye a se lè pou sèvè entènèt la. Ann mete kanpe yon machin vityèl òdinè avèk Linux epi nou pral mete Grafana sou li ak men nou.

Deplwaman sèvis distribiye nan Yandex.Cloud lè l sèvi avèk Grafana kòm yon egzanp

Deplwaman sèvis distribiye nan Yandex.Cloud lè l sèvi avèk Grafana kòm yon egzanp

Ann konekte via ssh epi enstale pakè ki nesesè yo.

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 

Apre sa, ann kouri Grafana anba systemctl epi enstale plugin pou travay ak ClickHouse (wi, li pa apwovizyone nan pake debaz la).

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

Sa a li, apre sa ak yon kòmandman senp

sudo service grafana-server start

nou pral kòmanse sèvè entènèt la. Koulye a, ou ka antre adrès IP ekstèn nan machin vityèl la nan navigatè a, presize pò 3000 epi wè bèl Grafana UI a.
Deplwaman sèvis distribiye nan Yandex.Cloud lè l sèvi avèk Grafana kòm yon egzanp

Men, pa prese, anvan ou mete Grafana, ou dwe sonje di li chemen an nan MySQL yo nan lòd yo estoke anviwònman yo la.

Tout konfigirasyon sèvè entènèt Grafana a nan dosye a /etc/grafana/grafana.ini. Liy ki nesesè yo sanble sa a:

;url =

Nou mete lame a nan gwoup la MySQL. Fichye a menm gen login ak modpas pou jwenn aksè nan Grafana nan foto ki anwo a, ki pa default yo tou de egal admin.

Ou ka itilize kòmand 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

Li lè pou rekòmanse sèvè entènèt la!

sudo service grafana-server restart

Koulye a, nan Grafana UI a nou pral presize ClickHouse kòm yon DataSource.

Mwen te kapab reyalize yon konfigirasyon k ap travay ak paramèt sa yo:

Deplwaman sèvis distribiye nan Yandex.Cloud lè l sèvi avèk Grafana kòm yon egzanp

Mwen espesifye kòm URL la https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443

Tout! Nou gen yon machin vityèl k ap travay ak yon sèvè entènèt ki konekte ak CH ak MySQL. Ou ka deja telechaje dataset la nan ClickHouse epi konstwi tablodbò yo. Sepandan, nou poko reyalize objektif nou epi nou pa deplwaye yon enfrastrikti konplè.

pakè

Yandex.Cloud pèmèt ou kreye yon imaj ki gen kapasite nan yon machin vityèl ki deja egziste, epi sou baz li yo - nenpòt ki kantite machin ki idantik youn ak lòt. Sa a se egzakteman sa nou pral itilize. Pou byen rasanble imaj la, pran zouti a pakè soti nan HashiCorp. Li pran kòm antre yon dosye json ak enstriksyon pou rasanble imaj la.

Fichye json nou an ap konpoze de de blòk: mason ak pwovizyon. Premye blòk la dekri paramèt imaj la tèt li kòm yon antite, ak dezyèm blòk la dekri enstriksyon pou ranpli li ak kontni ki nesesè yo.

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

Nan modèl sa a, ou bezwen mete idantifyan an nan seksyon an nan nwaj la kote ou vle kreye imaj la, osi byen ke chemen an nan dosye a ak kle yo soti nan kont sèvis la te deja kreye nan seksyon sa a. Ou ka li plis sou kreye kont sèvis ak kle nan fòm yon dosye nan seksyon ki koresponn lan dokiman.

Konfigirasyon sa a di ke imaj la ki gen kapasite yo pral bati ki baze sou platfòm la ubuntu-1804-lts, mete nan seksyon itilizatè ki apwopriye a nan fanmi imaj la GRAFANA anba non an grafana-{{timestamp}}.

Founisè yo

Koulye a, vini pati ki pi enteresan nan konfigirasyon an. Li pral dekri sekans nan aksyon ki pral bezwen fè sou machin vityèl la anvan konjelasyon eta li nan yon imaj ki gen kapasite.

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

Isit la tout aksyon yo divize an 3 etap. Nan premye etap la, yon senp script egzekite ki kreye yon anyè oksilyè.

prepare-ctg.sh:

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

Nan pwochen etap la, nou mete yon script nan anyè sa a, ki pral bezwen lanse imedyatman apre yo fin kòmanse machin vityèl la. Script sa a pral mete varyab itilizatè yo ki bezwen anrejistre nan konfigirasyon Grafana a epi rekòmanse sèvè entènèt la.

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

Apre sa, gen 3 bagay ki rete pou fè:
1) enstale pakè yo
2) kouri Grafana anba systemctl epi enstale Plugin ClickHouse la
3) mete script setup.sh la nan keu lansman imedyatman apre limen machin vityèl la.

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;

Koulye a, tout sa ki rete se kouri Packer epi jwenn imaj pwodiksyon an mete nan seksyon an espesifye. Lè w ap kreye yon machin vityèl, ou ka chwazi li kòm yon disk bòt epi apre lansman w ap resevwa yon sèvè entènèt Grafana pare.

Deplwaman sèvis distribiye nan Yandex.Cloud lè l sèvi avèk Grafana kòm yon egzanp
Deplwaman sèvis distribiye nan Yandex.Cloud lè l sèvi avèk Grafana kòm yon egzanp

Gwoup egzanp ak balans

Yon fwa nou gen yon imaj disk ki pèmèt nou kreye anpil sèvè entènèt Grafana ki idantik, nou ka kreye yon gwoup egzanp. Sou platfòm Yandex.Cloud, tèm sa a refere a sendika a nan machin vityèl ki gen menm karakteristik yo. Lè w ap kreye yon gwoup egzanp, se pwototip tout machin nan gwoup sa a konfigirasyon, ak Lè sa a, karakteristik gwoup la li menm (pa egzanp, minimòm ak maksimòm kantite machin aktif). Si nimewo aktyèl la pa satisfè kritè sa yo, lè sa a gwoup egzanp lan tèt li pral retire machin ki pa nesesè oswa kreye lòt nan pwòp imaj li.

Kòm yon pati nan travay nou an, nou pral kreye yon gwoup egzanp nan sèvè entènèt ki pral pwodwi nan imaj la disk te deja kreye.

Deplwaman sèvis distribiye nan Yandex.Cloud lè l sèvi avèk Grafana kòm yon egzanp

Deplwaman sèvis distribiye nan Yandex.Cloud lè l sèvi avèk Grafana kòm yon egzanp

Ki sa ki vrèman remakab se konfigirasyon gwoup la dènye egzanp. Gwoup sib la nan entegrasyon ak Load Balancer pral ede w configured yon balans L3 sou tèt machin yo vityèl nan gwoup sa a lè w klike sou yon koup la bouton.

Deplwaman sèvis distribiye nan Yandex.Cloud lè l sèvi avèk Grafana kòm yon egzanp

Lè m te mete balans lan, mwen te aplike de pwen enpòtan:

  1. Mwen te fè balanse a aksepte trafik itilizatè sou pò 80 epi redireksyon li nan pò 3000 nan machin vityèl yo, egzakteman kote Grafana ap viv.
  2. Mwen mete sou pye tcheke viabilite machin yo pa ping yo nan pò 3000.

Deplwaman sèvis distribiye nan Yandex.Cloud lè l sèvi avèk Grafana kòm yon egzanp

Mini rezime

Finalman, nou te kapab deplwaye manyèlman enfrastrikti aplikasyon an vle, epi kounye a nou gen yon sèvis Grafana trè fleksib. Ou sèlman bezwen konnen adrès IP balanse a kòm pwen antre nan aplikasyon an ak lame a nan gwoup ClickHouse la yo nan lòd yo chaje dataset la nan li.

Li ta sanble yon viktwa? Wi, viktwa. Men, yon bagay toujou konfonn mwen. Tout pwosesis ki anwo a mande anpil etap manyèl epi li pa Êvolutive ditou, mwen ta renmen otomatize li si sa posib. Sa a se sa pwochen seksyon an pral konsakre.

Entegrasyon Terraform

Nou pral ankò itilize yon zouti ki soti nan HashiCorp rele Terraform. Li pral ede w deplwaye tout enfrastrikti aplikasyon an ak klike sou yon bouton, ki baze sou plizyè varyab itilizatè a pase. Ann ekri yon resèt ki ka kouri plizyè fwa nan diferan seksyon nan itilizatè diferan.

Tout travay ak Terraform se sèlman ekri yon fichye konfigirasyon (*.tf) ak kreyasyon enfrastrikti ki baze sou li.

Varyab

Nan kòmansman dosye a, nou pral enkli varyab ki detèmine ki kote ak ki jan enfrastrikti nan lavni pral deplwaye.

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

Tout pwosesis deplwaman aplikasyon an pral desann nan bati yon imaj ki gen kapasite ak mete varyab sa yo. Kite m eksplike sa yo responsab pou:

oauth_token — yon siy pou jwenn aksè nan nwaj la. Ka jwenn pa lyen.
cloud_id — idantifyan nwaj kote nou pral deplwaye aplikasyon an
folder_id — idantifyan seksyon kote nou pral deplwaye aplikasyon an
service_account_id — idantifyan kont sèvis nan seksyon korespondan nwaj la.
image_id — idantifyan imaj ki gen kapasite yo jwenn lè l sèvi avèk Packer
non itilizatè и modpas — non itilizatè ak modpas pou jwenn aksè nan tou de baz done ak sèvè entènèt Grafana
dbname - non baz done andedan CH ak MySQL grap
piblik_key_path — chemen nan dosye a ak kle piblik ssh ou a, ki ou ka itilize pou konekte anba non an ubuntu nan machin vityèl ak sèvè entènèt

Konfigirasyon founisè a

Koulye a, ou bezwen konfigirasyon founisè Terraform - nan ka nou an, Yandex:

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

Ou pral remake ke isit la nou ap itilize varyab yo defini pi wo a.

Rezo ak grap

Koulye a, nou pral kreye yon rezo kote eleman nan enfrastrikti nou an pral kominike, twa subnets (youn nan chak rejyon) ak ogmante CH ak MySQL grap.


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

Kòm ou ka wè, chak nan de grap yo kreye byen toleran fay lè yo mete yo nan twa zòn disponiblite.

Web serveurs

Li ta sanble ke nou te kapab kontinye nan menm lespri a, men mwen te rankontre difikilte. Anvan sa, mwen premye leve yon gwoup MySQL epi sèlman apre sa, konnen ID li yo, mwen kolekte yon imaj ki gen kapasite ak konfigirasyon ki nesesè yo, kote mwen espesifye lame a nan gwoup la. Men koulye a, nou pa konnen ID gwoup la anvan lanse Terraform, ki gen ladan nan moman an nan bati imaj la. Se poutèt sa, mwen te oblije resort nan sa ki annapre yo jwe fent.

Sèvi ak sèvis metadata Amazon an, nou pral pase kèk paramèt nan machin vityèl la, ke li pral aksepte ak trete. Nou bezwen machin nan ale nan metadata ki dèyè lame gwoup la MySQL ak non itilizatè-modpas, ki itilizatè a espesifye nan dosye Terraform la, apre yo fin kòmanse. Ann chanje sa ki nan dosye a yon ti kras setup.sh, ki kouri lè machin vityèl la limen.

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

Gwoup Intance ak balans

Èske w gen rebati yon nouvo imaj ki gen kapasite, nou ka finalman ajoute dosye nou an pou Terraform.

Ann endike ke nou vle sèvi ak yon imaj disk ki deja egziste:

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

Koulye a, ann kreye yon gwoup egzanp:

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

Li vo peye atansyon sou fason nou te pase li nan metadata yo cluster_uri, username и password. Li se sa yo ke machin vityèl la pral pran soti nan demaraj epi mete nan konfigirasyon Grafana la.

Se balans lan.

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

Yon ti sik

Se sèlman yon ti kras ki rete. Apre yo fin deplwaye enfrastrikti a, w ap oblije ale nan Grafana UI epi ajoute gwoup CH la (ID ki toujou bezwen jwenn) kòm yon Sous Done. Men, Terraform konnen ID gwoup la. Annou konfye li pou pote zafè a bay bon rezilta.

Ann ajoute yon nouvo founisè - Grafana, epi ba li adrès IP balanse a kòm yon lame. Tout chanjman ke Terraform fè sou machin nan kote balans li detèmine ap grandi nan MySQL, ak Se poutèt sa sou tout lòt machin yo.

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

Ann penyen cheve nou

Ann montre adrès IP balanse a ak lame gwoup ClickHouse la

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

Ou ka kouri

Tout! Fichye konfigirasyon nou an pare epi nou ka, lè nou mete varyab yo, di Terraform ogmante tout sa nou dekri pi wo a. Tout pwosesis la te pran m 'apeprè 15 minit.
Nan fen ou ka wè yon bèl mesaj:

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

Ak nan nwaj la, eleman nan enfrastrikti ki ogmante yo pral vizib:

Deplwaman sèvis distribiye nan Yandex.Cloud lè l sèvi avèk Grafana kòm yon egzanp

Sòm moute

Koulye a, lè l sèvi avèk Grafana kòm yon egzanp, chak nan ou ka deplwaye aplikasyon ak yon achitekti nwaj etandu sou platfòm Yandex.Cloud la. Zouti itil soti nan HashiCorp tankou Packer ak Terraform ka ede w ak sa. Mwen espere ke yon moun jwenn atik sa a itil :)

PS Anba a mwen pral tache yon lyen nan depo a kote ou ka jwenn resèt ki pare pou Packer ak Terraform, fragman yo mwen bay nan atik sa a.

depo

Sous: www.habr.com

Achte hosting serye pou sit ki gen pwoteksyon DDoS, sèvè VPS VDS 🔥 Achte yon hébergement sit entènèt serye ak pwoteksyon DDoS, sèvè VPS VDS | ProHoster