Kuendeswa kwemasevhisi akagoverwa muYandex.Cloud uchishandisa Grafana semuenzaniso

Mhoroi mose! Sechikamu chebasa rangu rekosi, ndakatsvaga kugona kwenzvimbo yakadai yegore senge Yandex.Cloud. Iyo platform inopa akasiyana masevhisi ekugadzirisa matambudziko anoshanda. Nekudaro, dzimwe nguva iwe unofanirwa kumisikidza yako wega gore application ine yakaringana yakakura zvivakwa zvinoenderana neaya masevhisi. Muchinyorwa chino ndinoda kugovera ruzivo rwangu mukutumira yakadaro application.

Kuendeswa kwemasevhisi akagoverwa muYandex.Cloud uchishandisa Grafana semuenzaniso

Chii chaunoda kugamuchira?

grafana - chishandiso chine simba chekugadzirisa matambudziko ekuongorora kana matambudziko ekutarisa echero masisitimu. Mukugadzirisa kwayo kwekutanga, uyu mushini chaiwo une Grafana web server, pamwe nedhatabhesi (ClickHouse, InfluxDB, nezvimwewo) ine dhatabheti ichave yakavakirwa analytics.

Mushure mekutangisa muchina chaiwo une webhu server, unogona kuenda kune iyo inomiririra uye utore UI yakanaka, tsanangura dhatabhesi semabviro erimwe basa, gadzira madhibhodhi uye magirafu.

Kuendeswa kwemasevhisi akagoverwa muYandex.Cloud uchishandisa Grafana semuenzaniso

Iyo yekutanga vhezheni ine imwe yakakosha drawback - haina kushivirira kukanganisa zvachose. Ndiko kuti, kushanda kwese kwechishandiso kunoenderana nekugoneka kweimwe chaiyo muchina. Kana ikaramba kana vanhu gumi vakavhura UI panguva imwe chete, ipapo matambudziko anomuka.

Zvinogona kugadziriswa zviri nyore: iwe unongoda ku ... tumira akawanda akafanana chaiwo muchina newebhu server uye woiisa pasi peL3 balancer. Asi hazvisi zvose zvakajeka pano. Grafana inochengetedza zvigadziriso zvevashandisi (makwara kune databases, dashboards, magirafu, nezvimwewo) zvakananga padhisiki yemuchina wayo chaiwo. Nekudaro, kana tikachinja mamwe marongero muUI, shanduko idzi dzinoratidzwa chete pamushini chaiwo watakatumirwa nebalancer. Izvi zvinotungamira kune zvisingaenderane marongero echishandiso chedu, zvichikonzera matambudziko nekutanga uye kushandisa.

Pano imwe dhatabhesi ichauya kuzonunura, semuenzaniso, MySQL kana yakaenzana nayo. Isu tinoudza Grafana kuti anofanirwa kuchengeta marongero evashandisi mune iyi "spare" dhatabhesi. Mushure mezvo, zvichave zvakakwana kutsanangura nzira inoenda kune iyi dhatabhesi kamwe pamushini wega wega, uye kugadzirisa mamwe ese evashandisi marongero pane chero chaiwo emuchina; ivo vanozowedzera kune vamwe.

Heino dhayagiramu yekupedzisira application zvivakwa:

Kuendeswa kwemasevhisi akagoverwa muYandex.Cloud uchishandisa Grafana semuenzaniso

Ngatidzidze kusimudza nemaoko edu

MySQL uye ClickHouse

Usati watumira chishandiso chakadaro nekudzvanya bhatani, zvaive zvakakodzera kuti udzidze kubata chimwe nechimwe chezvikamu zvayo uye nekuzvibatanidza pamwe chete.

Pano Yandex.Cloud ichatibatsira, iyo inopa L3 balancers, ClickHouse uye MySQL semasevhisi anotarisirwa. Mushandisi anongoda kutsanangura maparameter uye kumirira kusvika chikuva chaunza zvese muhurongwa hwekushanda.

Ndakanyoresa, ndakagadzira gore uye account yekubhadhara. Mushure meizvozvo, ndakaenda kune gore ndikamisa MySQL uye ClickHouse masumbu ane mashoma marongero. Ndakamirira kusvika vatanga kushanda.

Kuendeswa kwemasevhisi akagoverwa muYandex.Cloud uchishandisa Grafana semuenzanisoKuendeswa kwemasevhisi akagoverwa muYandex.Cloud uchishandisa Grafana semuenzaniso

Iwe zvakare unofanirwa kurangarira kugadzira dhatabhesi mune yega yega sumbu uye gadzirisa kuwana kwairi uchishandisa login uye password. Ini handisi kuzoenda mune zvakadzama pano - zvese zviri pachena mune iyo interface.

Iyo isiri-pachena tsanangudzo yaive yekuti aya dhatabhesi ane akawanda mauto, ayo anovimbisa kukanganisa kwavo kushivirira. Nekudaro, Grafana inoda chaizvo mugadziri mumwe kune yega yega dhatabhesi iyo inoshanda nayo. Kuverenga kwenguva refu zvinyorwa Makore akandiunza kusarudzo. Zvinoitika kuti mukuru wemarudzi c-<cluster_id>.rw.mdb.yandexcloud.net yakamepurwa kune yazvino inoshanda master host ye cluster ine inoenderana ID. Izvi ndizvo zvatichapa Grafana.

web server

Iye zvino zvave kuwebhu server. Ngatisimudzei muchina wenguva dzose neLinux uye nemaoko gadzirisa Grafana pairi.

Kuendeswa kwemasevhisi akagoverwa muYandex.Cloud uchishandisa Grafana semuenzaniso

Kuendeswa kwemasevhisi akagoverwa muYandex.Cloud uchishandisa Grafana semuenzaniso

Ngatibatanei ne ssh uye tiise mapakeji anodiwa.

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 

Mushure meizvozvo, ngatimhanyei Grafana pasi pe systemctl uye tiise iyo plugin yekushanda neClickHouse (hongu, haina kupihwa mune yekutanga package).

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

Ndizvozvo, mushure mezvo nemurairo uri nyore

sudo service grafana-server start

tichatanga web server. Iye zvino unogona kuisa iyo yekunze IP kero yemuchina chaiwo mubrowser, tsanangura port 3000 uye uone yakanaka Grafana UI.
Kuendeswa kwemasevhisi akagoverwa muYandex.Cloud uchishandisa Grafana semuenzaniso

Asi usamhanye, usati wamisa Grafana, unofanirwa kuyeuka kuitaurira nzira yekuMySQL kuitira kuchengetedza marongero ipapo.

Iyo yese gadziriso yeGrafana web server iri mufaira /etc/grafana/grafana.ini. Mutsetse unodiwa unotaridzika seizvi:

;url =

Isu tinoisa mugadziri kuMySQL cluster. Iro faira rimwechete rine login uye password yekuwana Grafana mumufananidzo uri pamusoro, izvo nekusarudzika zvese zvakaenzana admin.

Unogona kushandisa sed mirairo:

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

Yasvika nguva yekutangazve sevha yewebhu!

sudo service grafana-server restart

Iye zvino muGrafana UI tichatsanangura ClickHouse seDataSource.

Ndakakwanisa kuita gadziriro yekushanda nemasetirwo anotevera:

Kuendeswa kwemasevhisi akagoverwa muYandex.Cloud uchishandisa Grafana semuenzaniso

Ndakadoma seURL https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443

Zvose! Tine muchina mumwe chete unoshanda une webhu server yakabatana neCH uye MySQL. Iwe unogona kutoisa iyo dataset kuClickHouse uye kuvaka madhibhodhi. Nekudaro, isu hatisati tazadzisa chinangwa chedu uye hatisati taisa zvivakwa zvakazara.

packers

Yandex.Cloud inokubvumira kuti ugadzire mufananidzo wedhisiki yemuchina uripo, uye pahwaro hwayo - chero nhamba yemashini akafanana kune mumwe nemumwe. Izvi ndizvo chaizvo zvatichashandisa. Kuti uunganidze mufananidzo zviri nyore, tora chishandiso packers kubva kuHashiCorp. Zvinotora sekuisa json faira ine mirairo yekuunganidza mufananidzo.

Yedu json faira ichave nemabhuru maviri: vavaki uye vanopa. Yekutanga block inotsanangura maparamendi emufananidzo pachawo sechinhu, uye yechipiri block inotsanangura mirairo yekuizadza nezvayo zvinodiwa.

vavaki

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

Mune iyi template, iwe unofanirwa kuseta chiziviso chechikamu mugore kwaunoda kugadzira mufananidzo, pamwe negwara refaira rine makiyi kubva kuakaundi yebasa yakambogadzirwa muchikamu chino. Iwe unogona kuverenga zvakawanda nezve kugadzira masevhisi maakaundi uye makiyi muchimiro chefaira muchikamu chinoenderana zvinyorwa.

Iyi gadziriso inotaura kuti dhisiki mufananidzo uchavakwa zvichibva papuratifomu ubuntu-1804-lts, yakaiswa muchikamu chakakodzera chemushandisi mumhuri yemufananidzo GRAFANA pasi pezita grafana-{{timestamp}}.

Provider

Ikozvino kunouya chikamu chinonakidza chekugadzirisa. Ichatsanangura kutevedzana kwezviito zvinozoda kuitwa pamushini chaiwo usati waomesa mamiriro ayo kuita dhisiki mufananidzo.

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

Pano zvese zviito zvakakamurwa kuita 3 nhanho. Padanho rekutanga, script iri nyore inoitwa iyo inogadzira dhairekitori rekubatsira.

gadzirira-ctg.sh:

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

Padanho rinotevera, tinoisa script mune ino dhairekitori, iyo inoda kutangwa pakarepo mushure mekutanga muchina chaiwo. Ichi chinyorwa chinoisa mashandisirwo emushandisi anoda kunyoreswa muGrafana config uye kutangazve webhu 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

Mushure meizvi, pane zvinhu zvitatu zvasara kuti zviitwe:
1) kuisa mapakeji
2) mhanyisa Grafana pasi pe systemctl uye isa iyo ClickHouse plugin
3) isa iyo setup.sh script mumutsara wekumisikidza pakarepo mushure mekubatidza muchina chaiwo.

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;

Iye zvino chasara kumhanyisa Packer uye kuwana iyo inobuda mufananidzo yakaiswa muchikamu chakatarwa. Paunenge uchigadzira muchina chaiwo, unogona kuusarudza sebhoti dhisiki uye mushure mekutanga iwe uchagamuchira yakagadzirira-yakagadzirwa Grafana web server.

Kuendeswa kwemasevhisi akagoverwa muYandex.Cloud uchishandisa Grafana semuenzaniso
Kuendeswa kwemasevhisi akagoverwa muYandex.Cloud uchishandisa Grafana semuenzaniso

Muenzaniso boka uye balancer

Kana tangove nedhisiki mufananidzo unotibvumira kugadzira akawanda akafanana Grafana web server, tinogona kugadzira boka remuenzaniso. PaYandex.Cloud papuratifomu, izwi iri rinoreva mubatanidzwa wemashini chaiwo ane maitiro akafanana. Paunenge uchigadzira boka remuenzaniso, prototype yemashini ese ari muboka iri inogadziriswa, uyezve hunhu hweboka pacharo (semuenzaniso, hushoma uye huwandu hwehuwandu hwemichina inoshanda). Kana iyo yazvino nhamba isingaite izvi maitiro, saka boka remuenzaniso pacharo richabvisa michina isingakoshi kana kugadzira mitsva mumufananidzo wayo.

Sechikamu chebasa redu, tichagadzira boka remuenzaniso remaseva ewebhu anozogadzirwa kubva kune yakambogadzirwa dhisiki mufananidzo.

Kuendeswa kwemasevhisi akagoverwa muYandex.Cloud uchishandisa Grafana semuenzaniso

Kuendeswa kwemasevhisi akagoverwa muYandex.Cloud uchishandisa Grafana semuenzaniso

Chinonyanya kushamisa ndeyekupedzisira muenzaniso boka setup. Boka rinonangwa mukubatana neLoad Balancer rinokubatsira kugadzirisa L3 balancer pamusoro pemashini chaiwo eboka iri nekudzvanya akati wandei mabhatani.

Kuendeswa kwemasevhisi akagoverwa muYandex.Cloud uchishandisa Grafana semuenzaniso

Pakumisa iyo balancer, ndakashandisa mapoinzi maviri akakosha:

  1. Ndakaita kuti balancer igamuchire traffic yevashandisi pachiteshi 80 uye ndoiendesa kuchiteshi 3000 yemashini chaiwo, kunogara Grafana.
  2. Ini ndakamisikidza kutarisa kushanda kwemichina nekuipinza pachiteshi 3000.

Kuendeswa kwemasevhisi akagoverwa muYandex.Cloud uchishandisa Grafana semuenzaniso

Mini summary

Chekupedzisira, takakwanisa kuendesa nemaoko zvivakwa zvekushandisa, uye ikozvino tave nerutsigiro rweGrafana sevhisi. Iwe unongofanirwa kuziva iyo IP kero yemubharari seyekupinda kwechishandiso uye mugadziri weClickHouse cluster kuitira kurodha dataset mariri.

Zvingaita sokunge kukunda? Hongu, kukunda. Asi pane chinhu chichiri kundivhiringa. Iyo yese maitiro ari pamusoro anoda akawanda emaoko matanho uye haana scalable zvachose; ndinoda kuigadzirisa kana zvichibvira. Izvi ndizvo zvichapihwa chikamu chinotevera.

Terraform kubatanidzwa

Tichashandisa zvakare chishandiso kubva kuHashiCorp chinonzi Terraform. Ichakubatsira kuendesa iyo yese dhizaini yekushandisa nekudzvanya bhatani, zvichibva pane akati wandei akasiyana anopfuudzwa nemushandisi. Ngatinyorei resipi inogona kuitwa kakawanda muzvikamu zvakasiyana zvevashandisi vakasiyana.

Basa rese neTerraform rinouya pasi pakunyora faira yekumisikidza (*.tf) uye kusikwa kwezvivakwa zvichibva pazviri.

Misiyano

Pakutanga kwefaira tichaisa zvimiro zvinotarisa kupi uye kuti zvivakwa zvenguva yemberi zvichaiswa kupi.

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

Iyo yese application yekuisa maitiro ichauya pasi pakuvaka dhisiki mufananidzo uye kuseta izvi zvinosiyana. Rega nditsanangure zvavari kuita:

oauth_token - chiratidzo chekuwana gore. Inogona kuwanikwa ne batanidzo.
cloud_id - Cloud identifier kwatinozoendesa application
folder_id - chikamu identifier kwatinozoendesa application
service_account_id - sevhisi account identifier muchikamu chinoenderana chegore.
image_id - identifier yedhisiki mufananidzo wakawanikwa uchishandisa Packer
Username ΠΈ pasiwedhi - username nepassword kuti uwane ese ari maviri dhatabhesi uye Grafana web server
dbname -zita re database mukati meCH uye MySQL masumbu
public_key_nzira - nzira yekuenda kufaira ine yako yeruzhinji ssh kiyi, yaunogona kushandisa kubatanidza pasi pezita ubuntu kumakina chaiwo ane mawebhu maseva

Provider setup

Iye zvino iwe unofanirwa kugadzirisa iyo Terraform mupi - mune yedu, Yandex:

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

Iwe unozoona kuti pano tiri kushandisa vhezheni dzakatsanangurwa pamusoro.

Network nemasumbu

Iye zvino tichagadzira network umo zvinhu zvezvivakwa zvedu zvichataurirana, matatu subnets (imwe mudunhu rega rega) uye kusimudza CH uye MySQL masumbu.


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

Sezvauri kuona, rimwe nerimwe remasumbu maviri anogadzirwa akanyatso kushivirira nekuwanikwa munzvimbo nhatu dziripo.

Web servers

Zvaiita sekuti taizoenderera mberi nemweya mumwe chete, asi ndakapinda pakaoma. Izvi zvisati zvaitika, ndakatanga kusimudza sumbu reMySQL uye mushure mezvo, ndichiziva ID yayo, ndakaunganidza mufananidzo wedhisiki neinodiwa gadziriro, kwandakatsanangura muenzi kune sumbu. Asi ikozvino isu hatizive iyo cluster ID isati yatanga Terraform, kusanganisira panguva yekuvaka chifananidzo. Naizvozvo, ndaifanira kutendeukira kune zvinotevera trick.

Tichishandisa sevhisi yemetadata yeAmazon, isu tichapfuudza mamwe ma paramita kumuchina chaiwo, ayo anozogamuchira nekugadzirisa. Tinoda muchina uyu kuti uende kune metadata kuseri kweMySQL cluster host uye username-password, iyo mushandisi yakatsanangurwa muTerraform faira, mushure mekutanga. Ngatishandure zviri mukati mefaira zvishoma setup.sh, iyo inomhanya kana muchina chaiwo wabatidzwa.

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 boka uye balancer

Tavaka patsva mufananidzo wedhisiki, tinogona pakupedzisira kuwedzera faira yedu yeTerraform.

Ngatiratidze kuti isu tinoda kushandisa iripo dhisiki mufananidzo:

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

Zvino ngatigadzirei boka remuenzaniso:

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

Zvakakodzera kutarisisa kuti takaipfuudza sei mune metadata cluster_uri, username ΠΈ password. Izvi ndizvo izvo muchina chaiwo uchatora pakutanga uye woisa muGrafana config.

Zviri kumubharanzi.

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

Shuga shoma

Kwangosara zvishoma. Mushure mekunge zvivakwa zvaiswa, iwe uchafanirwa kuenda kuGrafana UI uye nemaoko uwedzere iyo CH cluster (iyo ID yayo ichiri kuda kuwanikwa) seData Source. Asi Terraform anoziva iyo cluster ID. Ngatimupei kuti agadzirise nyaya yacho.

Ngatiwedzerei mupi mutsva - Grafana, uye tipe kero yeIP yevalancer semugamuchiri. Shanduko dzese dzinoitwa neTerraform pamushini umo inotarwa nebalancer ichakura muMySQL, uye nekudaro pamimwe michina yese.

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

Ngatikamei vhudzi redu

Ngatiratidzei iyo balancer IP kero uye mubati weClickHouse 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"
}

Inogona kumhanya

Zvose! Yedu yekumisikidza faira yakagadzirira uye isu tinokwanisa, nekuisa zvinosiyana, taurira Terraform kusimudza zvese zvatakatsanangura pamusoro. Zvese izvi zvakanditorera about 15 minutes.
Pakupedzisira unogona kuona meseji yakanaka:

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

Uye mugore, zvinhu zvezvivakwa zvakasimudzwa zvichaonekwa:

Kuendeswa kwemasevhisi akagoverwa muYandex.Cloud uchishandisa Grafana semuenzaniso

Ngationei mhinduro

Iye zvino, uchishandisa Grafana semuenzaniso, mumwe nemumwe wenyu anogona kuendesa zvikumbiro neyakavhurika gore rekuvaka paYandex.Cloud papuratifomu. Zvishandiso zvinobatsira kubva kuHashiCorp sePacker uye Terraform zvinogona kukubatsira neizvi. Ndinovimba mumwe munhu anowana chinyorwa ichi chinobatsira :)

PS Pazasi ini ndichabatanidza chinongedzo kune repository kwaunogona kuwana akagadzirira-akagadzirwa mabikirwo ePacker uye Terraform, zvimedu zvandapa mune ino chinyorwa.

repository

Source: www.habr.com

Voeg