Ukukhishwa kwezinsizakalo ezisabalalisiwe ku-Yandex.Cloud kusetshenziswa i-Grafana njengesibonelo

Sanibonani nonke! Njengengxenye yomsebenzi wami wesifundo, ngacwaninga amakhono enkundla yamafu yasekhaya njenge I-Yandex.Cloud. Ipulatifomu inikeza izinsizakalo ezahlukahlukene zokuxazulula izinkinga ezisebenzayo. Kodwa-ke, kwesinye isikhathi udinga ukumisa uhlelo lwakho lokusebenza lwefu nengqalasizinda ebanzi ngokususelwe kulezi zinsizakalo. Kulesi sihloko ngifuna ukwabelana ngolwazi lwami ekuthumeleni isicelo esinjalo.

Ukukhishwa kwezinsizakalo ezisabalalisiwe ku-Yandex.Cloud kusetshenziswa i-Grafana njengesibonelo

Yini ofuna ukuyithola?

UGrafana - ithuluzi elinamandla lokuxazulula izinkinga zokuhlaziya noma izinkinga zokuqapha zanoma yiziphi izinhlelo. Ekucushweni kwawo okuyisisekelo, lona umshini obonakalayo oneseva yewebhu ye-Grafana, kanye nesizindalwazi (ClickHouse, InfluxDB, njll.) enedathasethi lapho izibalo zizosekelwe khona.

Ngemva kokwethula umshini obonakalayo oneseva yewebhu, ungaya kumsingathi wawo futhi uthole i-UI enhle, ucacise imininingwane yolwazi njengemithombo yomsebenzi owengeziwe, udale amadeshibhodi namagrafu.

Ukukhishwa kwezinsizakalo ezisabalalisiwe ku-Yandex.Cloud kusetshenziswa i-Grafana njengesibonelo

Inguqulo eyisisekelo ine-drawback eyodwa ebalulekile - ayiwabekezeli nhlobo amaphutha. Okusho ukuthi, konke ukusebenza kohlelo lokusebenza kuncike ekusebenzeni komshini owodwa we-virtual. Uma yenqaba noma abantu abangu-10 bavula i-UI ngesikhathi esifanayo, kuzovela izinkinga.

Angaxazululwa kalula: udinga nje... ukhiphe imishini eminingi efana neseva yewebhu futhi uyibeke ngaphansi kwesilinganisi se-L3. Kodwa akuzona zonke izinto ezicacile lapha. I-Grafana igcina izilungiselelo zabasebenzisi (izindlela eziya kusizindalwazi, amadeshibhodi, amagrafu, njll.) ngokuqondile kudiski yomshini wayo obonakalayo. Ngakho, uma sishintsha ezinye izilungiselelo ku-UI, lezi zinguquko zizobonakala kuphela emshinini obonakalayo lapho ubhalansi esithumele khona. Lokhu kuzoholela kuzilungiselelo ezingahambisani zohlelo lwethu lokusebenza, okubangela izinkinga ngokuqaliswa nokusetshenziswa.

Lapha enye i-database izosiza, isibonelo, i-MySQL noma okufana nayo. Sitshela u-Grafana ukuthi kufanele agcine izilungiselelo zabasebenzisi kulesi sizindalwazi "esisele". Ngemva kwalokho, kuyokwanela ukucacisa indlela eya kulesi sizindalwazi kanye emshinini ngamunye, futhi uhlele zonke ezinye izilungiselelo zabasebenzisi kunoma yimuphi umshini we-virtual; zizodlulela kweminye.

Nawu umdwebo wengqalasizinda yokugcina yesicelo:

Ukukhishwa kwezinsizakalo ezisabalalisiwe ku-Yandex.Cloud kusetshenziswa i-Grafana njengesibonelo

Masifunde ukuphakamisa ngezandla zethu

I-MySQL ne-ClickHouse

Ngaphambi kokufaka isicelo esinjalo ngokuchofoza inkinobho, kwakudingeka ufunde ukuthi ungayiphatha kanjani ingxenye yayo ngayinye futhi uyihlanganise nomunye nomunye.

Lapha i-Yandex.Cloud izosisiza, ehlinzeka ngezilinganiso ze-L3, i-ClickHouse ne-MySQL njengezinsizakalo eziphethwe. Umsebenzisi udinga kuphela ukucacisa amapharamitha futhi alinde kuze kube yilapho inkundla iletha yonke into ngohlelo lokusebenza.

Ngibhalisile, ngakha ifu kanye ne-akhawunti yokukhokha. Ngemuva kwalokho, ngaya efwini futhi ngamisa amaqoqo e-MySQL kanye ne-ClickHouse anezilungiselelo ezincane. Ngalinda baze baqala ukusebenza.

Ukukhishwa kwezinsizakalo ezisabalalisiwe ku-Yandex.Cloud kusetshenziswa i-Grafana njengesiboneloUkukhishwa kwezinsizakalo ezisabalalisiwe ku-Yandex.Cloud kusetshenziswa i-Grafana njengesibonelo

Udinga futhi ukukhumbula ukwakha isizindalwazi kuqoqo ngalinye futhi ulungiselele ukufinyelela kuso usebenzisa ukungena ngemvume nephasiwedi. Ngeke ngingene emininingwaneni lapha - yonke into isobala esibonakalayo.

Imininingwane engacacile ukuthi lezi zingosi zolwazi zinabasingathi abaningi, okuqinisekisa ukubekezelelana kwabo kwamaphutha. Nokho, i-Grafana idinga umsingathi oyedwa ncamashi kusizindalwazi ngasinye esebenza ngaso. Ukufunda isikhathi eside imibhalo Amafu angilethela isinqumo. Kuvela ukuthi inqwaba yezinhlobo c-<cluster_id>.rw.mdb.yandexcloud.net imephuzwe kumsingathi oyinhloko osebenzayo weqoqo nge-ID ehambisanayo. Yilokhu esizokunikeza uGrafana.

iseva yewebhu

Manje kukuseva yewebhu. Masiphakamise umshini ojwayelekile obonakalayo nge-Linux futhi silungiselele i-Grafana kuwo.

Ukukhishwa kwezinsizakalo ezisabalalisiwe ku-Yandex.Cloud kusetshenziswa i-Grafana njengesibonelo

Ukukhishwa kwezinsizakalo ezisabalalisiwe ku-Yandex.Cloud kusetshenziswa i-Grafana njengesibonelo

Masixhume nge-ssh futhi sifake amaphakheji adingekayo.

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 

Ngemuva kwalokho, masisebenzise i-Grafana ngaphansi kwe-systemctl bese sifaka i-plugin yokusebenza nge-ClickHouse (yebo, ayinikeziwe kuphakheji eyisisekelo).

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

Yilokho, ngemva kwalokho ngomyalo olula

sudo service grafana-server start

sizoqala iseva yewebhu. Manje usungakwazi ukufaka ikheli le-IP langaphandle lomshini we-virtual esipheqululini, ucacise i-port 3000 futhi ubone i-Grafana UI enhle.
Ukukhishwa kwezinsizakalo ezisabalalisiwe ku-Yandex.Cloud kusetshenziswa i-Grafana njengesibonelo

Kodwa ungajahi, ngaphambi kokusetha i-Grafana, kufanele ukhumbule ukuyitshela indlela eya ku-MySQL ukuze ugcine izilungiselelo lapho.

Konke ukucushwa kweseva yewebhu ye-Grafana kufayela /etc/grafana/grafana.ini. Umugqa odingekayo ubukeka kanje:

;url =

Setha umsingathi kuqoqo le-MySQL. Ifayela elifanayo liqukethe ukungena ngemvume nephasiwedi yokufinyelela i-Grafana esithombeni esingenhla, okuthi ngokuzenzakalelayo kokubili kuyalingana admin.

Ungasebenzisa imiyalo ye-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

Isikhathi sokuqala kabusha iseva yewebhu!

sudo service grafana-server restart

Manje ku-UI ye-Grafana sizocacisa i-ClickHouse njenge-DataSource.

Ngikwazile ukufeza ukucushwa kokusebenza ngezilungiselelo ezilandelayo:

Ukukhishwa kwezinsizakalo ezisabalalisiwe ku-Yandex.Cloud kusetshenziswa i-Grafana njengesibonelo

Ngicacise njenge-URL https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443

Konke! Sinomshini owodwa osebenzayo oneseva yewebhu exhunywe ku-CH kanye ne-MySQL. Ungakwazi kakade ukulayisha idathasethi ku-ClickHouse futhi wakhe amadeshibhodi. Nokho, asikayifezi inhloso yethu futhi asikazifaki ingqalasizinda ephelele.

I-Packer

I-Yandex.Cloud ikuvumela ukuthi udale isithombe sediski somshini okhona, futhi ngesisekelo sawo - noma iyiphi inombolo yemishini efanayo komunye nomunye. Yilokhu kanye esizokusebenzisa. Ukuze uhlanganise kahle isithombe, thatha ithuluzi I-Packer kusuka ku-HashiCorp. Kuthatha njengokufaka ifayela le-json elinemiyalelo yokuhlanganisa isithombe.

Ifayela lethu le-json lizoba namabhulokhi amabili: abakhi nabahlinzeki. Ibhulokhi yokuqala ichaza imingcele yesithombe ngokwaso njengebhizinisi, futhi ibhulokhi yesibili ichaza imiyalelo yokuyigcwalisa ngokuqukethwe okudingekayo.

Abakhi

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

Kulesi sifanekiso, udinga ukusetha isihlonzi sesigaba efwini lapho ufuna ukudala khona isithombe, kanye nendlela eya efayelini enokhiye abavela ku-akhawunti yesevisi eyakhiwe ngaphambilini kulesi sigaba. Ungafunda kabanzi mayelana nokudala ama-akhawunti wesevisi nokhiye ngendlela yefayela esigabeni esihambisanayo imibhalo.

Lokhu kulungiselelwa kuthi isithombe sediski sizokwakhiwa ngokusekelwe endaweni yesikhulumi ubuntu-1804-lts, ibekwe esigabeni esifanelekile somsebenzisi emndenini wesithombe GRAFANA ngaphansi kwegama grafana-{{timestamp}}.

Abahlinzeki

Manje kufika ingxenye ethakazelisa kakhulu yokucushwa. Izochaza ukulandelana kwezenzo okuzodingeka zenziwe emshinini obonakalayo ngaphambi kokuqandisa isimo sawo kusithombe sediski.

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

Lapha zonke izenzo zihlukaniswe ngezigaba ezi-3. Esigabeni sokuqala, iskripthi esilula senziwa esidala uhla lwemibhalo olusizayo.

prepare-ctg.sh:

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

Esigabeni esilandelayo, sibeka umbhalo kulolu hlu lwemibhalo, oluzodinga ukwethulwa ngokushesha ngemva kokuqala umshini obonakalayo. Lesi script sizobeka okuguquguqukayo komsebenzisi okudingeka ukuthi kubhaliswe ku-Grafana config futhi siqale kabusha iseva yewebhu.

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

Ngemva kwalokhu kunezinto ezi-3 ezisele okufanele zenziwe:
1) faka amaphakheji
2) sebenzisa i-Grafana ngaphansi kwe-systemctl bese ufaka i-plugin ye-ClickHouse
3) faka umbhalo we-setup.sh emgqeni wokuqalisa ngokushesha ngemva kokuvula umshini obonakalayo.

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;

Manje okusele ukusebenzisa i-Packer futhi uthole isithombe esiphumayo sibekwe esigabeni esishiwo. Lapho udala umshini obonakalayo, ungawukhetha njengediski yokuqalisa futhi ngemva kokwethulwa uzothola iseva yewebhu ye-Grafana esenziwe ngomumo.

Ukukhishwa kwezinsizakalo ezisabalalisiwe ku-Yandex.Cloud kusetshenziswa i-Grafana njengesibonelo
Ukukhishwa kwezinsizakalo ezisabalalisiwe ku-Yandex.Cloud kusetshenziswa i-Grafana njengesibonelo

Iqembu lesibonelo nebhalansi

Uma sinesithombe sediski esisivumela ukuthi sakhe amaseva amaningi ewebhu e-Grafana, singakha iqembu lesibonelo. Kuplathifomu ye-Yandex.Cloud, leli gama lisho inyunyana yemishini ebonakalayo enezici ezifanayo. Lapho udala iqembu lesibonelo, i-prototype yayo yonke imishini kuleli qembu iyalungiswa, bese kuba izici zeqembu ngokwalo (isibonelo, inani elincane neliphezulu lemishini esebenzayo). Uma inombolo yamanje ingahlangabezani nalezi zindlela zokunquma, iqembu lesibonelo ngokwalo lizosusa imishini engadingekile noma lidale emisha ngomfanekiso walo.

Njengengxenye yomsebenzi wethu, sizodala iqembu lesibonelo lamaseva ewebhu azokhiqizwa kusukela kusithombe sediski esakhiwe ngaphambilini.

Ukukhishwa kwezinsizakalo ezisabalalisiwe ku-Yandex.Cloud kusetshenziswa i-Grafana njengesibonelo

Ukukhishwa kwezinsizakalo ezisabalalisiwe ku-Yandex.Cloud kusetshenziswa i-Grafana njengesibonelo

Okuphawuleka ngempela ukusethwa kweqembu okuyisibonelo sokugcina. Iqembu eliqondiwe ekuhlanganisweni ne-Load Balancer lizokusiza ukuthi ulungiselele isilinganisi se-L3 phezu kwemishini ebonakalayo yaleli qembu ngokuchofoza izinkinobho ezimbalwa.

Ukukhishwa kwezinsizakalo ezisabalalisiwe ku-Yandex.Cloud kusetshenziswa i-Grafana njengesibonelo

Lapho ngimisa i-balancer, ngisebenzise amaphuzu amabili abalulekile:

  1. Ngenze ibhalansi yamukele ithrafikhi yomsebenzisi ku-port 80 futhi ngiyiqondise kabusha ku-port 3000 yemishini ebonakalayo, lapho u-Grafana ehlala khona.
  2. Ngimise ukuhlola ukusebenza kwemishini ngokuyifakela ku-port 3000.

Ukukhishwa kwezinsizakalo ezisabalalisiwe ku-Yandex.Cloud kusetshenziswa i-Grafana njengesibonelo

Isifinyezo esincane

Ekugcineni, sikwazile ukusebenzisa ingqalasizinda yesicelo esiyifunayo, futhi manje sinesevisi yase-Grafana ekwazi ukumelana nokuqina. Udinga kuphela ukwazi ikheli le-IP lebhalansi njengendawo yokungena kuhlelo lokusebenza kanye nomsingathi weqoqo le-ClickHouse ukuze ulayishe idathasethi kulo.

Kungabonakala njengokunqoba? Yebo, ukunqoba. Kodwa kukhona okusangididayo. Yonke le nqubo engenhla idinga izinyathelo eziningi ezenziwa ngesandla futhi ayinabungozi nakancane; ngingathanda ukuyenza ngokuzenzakalelayo uma kungenzeka. Yilokhu okuzonikezwa isigaba esilandelayo.

Ukuhlanganiswa kwe-Terraform

Sizophinda sisebenzise ithuluzi elivela ku-HashiCorp elibizwa I-Terraform. Kuzokusiza ukuthi usebenzise yonke ingqalasizinda yohlelo lokusebenza ngokuchofoza inkinobho, ngokusekelwe ezintweni eziguquguqukayo ezimbalwa eziphasiswe umsebenzisi. Masibhale iresiphi engasetshenziswa izikhathi eziningi ezigabeni ezihlukene zabasebenzisi abahlukene.

Wonke umsebenzi ngeTerraform wehlela ekubhaleni ifayela lokucushwa (*.tf) kanye nokwakhiwa kwengqalasizinda okusekelwe kuyo.

Okuguquguqukayo

Ekuqaleni kwefayela, sizofaka okuguquguqukayo okunquma ukuthi ingqalasizinda yesikhathi esizayo izosetshenziswa kuphi futhi kanjani.

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

Yonke inqubo yokuphakelwa kwesicelo izokwehla ekwakheni isithombe sediski kanye nokusetha lokhu okuguquguqukayo. Ake ngichaze ukuthi banesibopho ngani:

uphawu_lwesifungo — uphawu lokufinyelela efwini. Ingatholwa ngu isixhumanisi.
cloud_id - isihlonzi samafu lapho sizothumela khona uhlelo lokusebenza
ifolda_id - isihlonzi sesigaba lapho sizothumela khona isicelo
service_account_id — Inkomba ye-akhawunti yesevisi engxenyeni ehambisanayo yefu.
image_id — inkomba yesithombe sediski etholwe kusetshenziswa iPacker
igama lomsebenzisi и iphasiwedi — igama lomsebenzisi nephasiwedi ukufinyelela kuzo zombili izingosi zolwazi kanye neseva yewebhu ye-Grafana
dbname - Igama lesizindalwazi ngaphakathi kwamaqoqo e-CH kanye ne-MySQL
indlela_yokhiye_womphakathi — indlela eya efayelini ngokhiye wakho we-ssh womphakathi, ongawusebenzisa ukuxhuma ngaphansi kwegama ubuntu emishinini ebonakalayo enamaseva ewebhu

Ukusethwa komhlinzeki

Manje udinga ukumisa umhlinzeki we-Terraform - kithi, i-Yandex:

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

Uzoqaphela ukuthi lapha sisebenzisa okuguquguqukayo okuchazwe ngenhla.

Inethiwekhi namaqoqo

Manje sizokwakha inethiwekhi lapho izici zengqalasizinda yethu zizoxhumana khona, ama-subnets amathathu (elilodwa esifundeni ngasinye) futhi sikhulise amaqoqo e-CH kanye ne-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
  }
}

Njengoba ubona, iqoqo ngalinye kulawa amabili lidalwe likwazi ukubekezelela iphutha ngokutholakala ezindaweni ezintathu ezitholakalayo.

Amaseva ewebhu

Kubukeka sengathi singaqhubeka ngomoya ofanayo, kodwa ngangena ebunzimeni. Ngaphambi kwalokhu, ngiqale ngaphakamisa iqoqo le-MySQL futhi ngemva kwalokho kuphela, ngokwazi i-ID yayo, ngaqoqa isithombe sediski ngokucushwa okudingekayo, lapho ngachaza khona umsingathi kuqoqo. Kodwa manje asiyazi i-ID yeqoqo ngaphambi kokwethula i-Terraform, kuhlanganise nesikhathi sokwakha isithombe. Ngakho-ke, kwadingeka ngisebenzise okulandelayo iqhinga.

Ngokusebenzisa isevisi yemethadatha ye-Amazon, sizodlulisela imingcele ethile emshinini owubonayo, ozowamukela futhi uwacubungule. Sidinga umshini ukuze uye kumethadatha engemuva komsingathi weqoqo le-MySQL kanye negama lomsebenzisi-iphasiwedi, leyo umsebenzisi ayicacisile kufayela le-Terraform, ngemva kokuqala. Ake siguqule okuqukethwe kwefayela kancane setup.sh, esebenza lapho umshini obonakalayo uvuliwe.

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

Iqembu le-Intance kanye ne-balancer

Ngemva kokwakha kabusha isithombe sediski esisha, ekugcineni singangeza ifayela lethu le-Terraform.

Ake sikhombise ukuthi sifuna ukusebenzisa isithombe sediski esikhona:

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

Manje ake sakhe iqembu lesibonelo:

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

Kuhle ukunaka ukuthi siyidlulisele kanjani kumethadatha cluster_uri, username и password. Yilezi umshini obonakalayo ozozikhipha ekuqaleni bese uzifaka ku-Grafana config.

Sekuya kubalancer.

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

Ushukela omncane

Sekusele kancane. Ngemva kokuba ingqalasizinda isisetshenzisiwe, kuzodingeka uye ku-Grafana UI futhi wengeze ngokwakho iqoqo le-CH (i-ID yayo esadinga ukutholwa) njengomthombo wedatha. Kepha iTerraform iyayazi i-ID yeqoqo. Asimphathise ukuthi afeze lolu daba.

Ake sengeze umhlinzeki omusha - u-Grafana, futhi simnikeze ikheli le-IP lobhalansi njengomsingathi. Zonke izinguquko ezenziwa yi-Terraform emshinini lapho ibhalansi yayo inquma ukuthi izokhula ku-MySQL, ngakho-ke kuyo yonke eminye imishini.

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

Masikama izinwele zethu

Masibonise ikheli le-IP elibhalansi kanye nomsingathi weqoqo le-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"
}

Ungagijima

Konke! Ifayela lethu lokumisa selilungile futhi singakwazi, ngokusetha okuguquguqukayo, sitshele i-Terraform ukuthi iphakamise konke esikuchaze ngenhla. Lonke lolu hlelo lwangithatha cishe imizuzu eyi-15.
Ekugcineni ungabona umlayezo omuhle:

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

Futhi emafini, izici zengqalasizinda ephakanyisiwe zizobonakala:

Ukukhishwa kwezinsizakalo ezisabalalisiwe ku-Yandex.Cloud kusetshenziswa i-Grafana njengesibonelo

Ake sibambe imiphumela

Manje, kusetshenziswa i-Grafana njengesibonelo, ngamunye wenu angasebenzisa izinhlelo zokusebenza ezinokwakheka kwamafu okunwebekayo kuplathifomu ye-Yandex.Cloud. Amathuluzi awusizo avela ku-HashiCorp njenge-Packer ne-Terraform angakusiza ngalokhu. Ngethemba ukuthi othile uzothola lesi sihloko siwusizo :)

PS Ngezansi ngizonamathisela isixhumanisi endaweni yokugcina lapho ungathola khona izindlela zokupheka esenziwe ngomumo zePacker neTerraform, izingcezu engizinikeze kulesi sihloko.

inqolobane

Source: www.habr.com

Engeza amazwana