Nbunye ọrụ kesara na Yandex.Cloud iji Grafana dịka ọmụmaatụ

Ndewo, unu niile! Dịka akụkụ nke ọrụ nkuzi m, enyochara m ike nke ikpo okwu igwe ojii dị ka Yandex.Cloud. Ikpo okwu na-enye ọrụ dị iche iche maka idozi nsogbu ndị bara uru. Otú ọ dị, mgbe ụfọdụ, ị ga-achọ ịtọlite ​​​​ngwa ígwé ojii nke gị nwere nnukwu akụrụngwa dabere na ọrụ ndị a. N'ime edemede a, achọrọ m ịkọrọ ahụmịhe m na itinye ngwa dị otú ahụ.

Nbunye ọrụ kesara na Yandex.Cloud iji Grafana dịka ọmụmaatụ

Kedu ihe ị chọrọ ịnata?

Grafana - ngwá ọrụ dị ike maka idozi nsogbu nyocha ma ọ bụ nyochaa nsogbu nke sistemụ ọ bụla. N'ime nhazi ya bụ isi, nke a bụ igwe mebere nke nwere sava weebụ Grafana, yana nchekwa data (ClickHouse, InfluxDB, wdg) nwere dataset nke nyocha ga-adabere na ya.

Mgbe ịmalitere igwe mebere ya na sava weebụ, ị nwere ike ịga na onye ọbịa ya wee nweta UI mara mma, kọwaa ọdụ data dị ka isi mmalite maka ọrụ ọzọ, mepụta dashboards na eserese.

Nbunye ọrụ kesara na Yandex.Cloud iji Grafana dịka ọmụmaatụ

Ụdị nke bụ isi nwere otu ndọghachi azụ dị ịrịba ama - ọ naghị anabata mmejọ ma ọlị. Ya bụ, ọrụ niile nke ngwa ahụ dabere na ike nke otu igwe mebere. Ọ bụrụ na ọ jụrụ ma ọ bụ mmadụ 10 meghere UI n'otu oge, nsogbu ga-ebilite.

Enwere ike idozi ha n'ụzọ dị mfe: naanị ị ga-achọ ... wepụta ọtụtụ igwe mebere ya na sava weebụ wee tinye ha n'okpuru ihe nhazi L3. Mana ọ bụghị ihe niile doro anya ebe a. Grafana na-echekwa ntọala onye ọrụ (ụzọ na ọdụ data, dashboards, graphs, wdg) ozugbo na diski nke igwe mebere ya. Ya mere, ọ bụrụ na anyị agbanwee ụfọdụ ntọala na UI, mgbanwe ndị a ga-egosipụta naanị na igwe mebere ebe onye nhazi zitere anyị. Nke a ga-eduga na ntọala na-ekwekọghị ekwekọ maka ngwa anyị, na-ebute nsogbu na mwepụta na ojiji.

Ebe nchekwa data ọzọ ga-abịa napụta, dịka ọmụmaatụ, MySQL ma ọ bụ otu ya. Anyị na-agwa Grafana na ọ ga-echekwa ntọala onye ọrụ na nchekwa data "mapụtara" a. Mgbe nke ahụ gasịrị, ọ ga-ezuru ịkọwapụta ụzọ na nchekwa data a otu ugboro na igwe ọ bụla, ma dezie ntọala ndị ọrụ ndị ọzọ na igwe ọ bụla nke mebere; ha ga-agbatị ruo ndị ọzọ.

Nke a bụ eserese nke akụrụngwa ngwa ikpeazụ:

Nbunye ọrụ kesara na Yandex.Cloud iji Grafana dịka ọmụmaatụ

Ka anyị mụta iji aka anyị ebuli elu

MySQL na ClickHouse

Tupu itinye ngwa dị otú ahụ na ịpị bọtịnụ, ọ dị mkpa ịmụta otú e si edozi nke ọ bụla n'ime akụkụ ya ma jikọta ha na ibe ha.

Ebe a Yandex.Cloud ga-enyere anyị aka, nke na-enye L3 balancers, ClickHouse na MySQL dị ka ọrụ jikwaa. Onye ọrụ naanị kwesịrị ịkọwapụta paramita ma chere ruo mgbe ikpo okwu na-eweta ihe niile n'usoro ọrụ.

Edebanyela m aha, mepụta igwe ojii na akaụntụ ịkwụ ụgwọ. Mgbe nke ahụ gasịrị, agara m na ígwé ojii wee guzobe ụyọkọ MySQL na ClickHouse nwere obere ntọala. M chere ruo mgbe ha malitere ịrụsi ọrụ ike.

Nbunye ọrụ kesara na Yandex.Cloud iji Grafana dịka ọmụmaatụNbunye ọrụ kesara na Yandex.Cloud iji Grafana dịka ọmụmaatụ

I kwesịkwara icheta ịmepụta nchekwa data na ụyọkọ ọ bụla wee hazie ohere ịnweta ya site na iji nbanye na paswọọdụ. Agaghị m abanye nkọwa ebe a - ihe niile doro anya na interface ahụ.

Nkọwa na-abụghị nke doro anya bụ na ọdụ data ndị a nwere ọtụtụ ndị ọbịa, nke na-eme ka ha nwee ndidi. Agbanyeghị, Grafana chọrọ kpọmkwem otu nnabata maka nchekwa data ọ bụla ọ na-arụ ọrụ. Ogologo ọgụgụ isi akwụkwọ Igwe ojii wetara m mkpebi. Ọ na-apụta na ndị ọbịa nke ụdị c-<cluster_id>.rw.mdb.yandexcloud.net Edebere ya na onye nnabata nọ n'ọrụ ugbu a nke ụyọkọ nwere ID kwekọrọ. Nke a bụ ihe anyị ga-enye Grafana.

sava weebụ

Ugbu a ọ dịịrị sava weebụ. Ka anyị jiri Linux bulie igwe mebere oge niile wee jiri aka hazie Grafana na ya.

Nbunye ọrụ kesara na Yandex.Cloud iji Grafana dịka ọmụmaatụ

Nbunye ọrụ kesara na Yandex.Cloud iji Grafana dịka ọmụmaatụ

Ka anyị jikọọ site na ssh wee wụnye ngwugwu ndị dị mkpa.

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 

Mgbe nke ahụ gasịrị, ka anyị mee Grafana n'okpuru systemctl wee wụnye ngwa mgbakwunye maka ịrụ ọrụ na ClickHouse (ee, enyeghị ya na ngwugwu bụ isi).

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

Nke ahụ bụ ya, mgbe nke ahụ gasịrị jiri iwu dị mfe

sudo service grafana-server start

anyị ga-amalite sava weebụ. Ugbu a ị nwere ike tinye adreesị IP mpụga nke igwe mebere na ihe nchọgharị ahụ, kọwaa ọdụ ụgbọ mmiri 3000 wee hụ Grafana UI mara mma.
Nbunye ọrụ kesara na Yandex.Cloud iji Grafana dịka ọmụmaatụ

Mana emela ngwa ngwa, tupu ịtọlite ​​​​Grafana, ị ga-echeta ịgwa ya ụzọ MySQL iji chekwaa ntọala ahụ.

Nhazi niile nke sava weebụ Grafana dị na faịlụ ahụ /etc/grafana/grafana.ini. Ahịrị achọrọ dị ka nke a:

;url =

Anyị na-edobe onye ọbịa na ụyọkọ MySQL. Otu faịlụ ahụ nwere nbanye na paswọọdụ maka ịnweta Grafana na foto dị n'elu, nke na ndabara bụ ha abụọ admin.

Ị nwere ike iji iwu 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

Oge erugo ịmalitegharị sava weebụ!

sudo service grafana-server restart

Ugbu a na Grafana UI anyị ga-akọwapụta ClickHouse dị ka DataSource.

Enwere m ike iji ntọala ndị a nweta nhazi ọrụ:

Nbunye ọrụ kesara na Yandex.Cloud iji Grafana dịka ọmụmaatụ

Ekwuru m dị ka URL https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443

All! Anyị nwere otu igwe mebere na-arụ ọrụ nwere sava weebụ ejikọrọ na CH na MySQL. Ị nwere ike bulitelarị dataset na ClickHouse wee wuo dashboards. Agbanyeghị, anyị enwetabeghị ebumnuche anyị ma ebubata akụrụngwa zuru oke.

Ihe ngwugwu

Yandex.Cloud na-enye gị ohere ịmepụta ihe oyiyi diski nke igwe mebere nke dị adị, na ndabere ya - ọnụọgụ igwe ọ bụla yiri ibe ya. Nke a bụ kpọmkwem ihe anyị ga-eji. Iji chịkọta onyonyo a nke ọma, were ngwa Ihe ngwugwu sitere na HashiCorp. Ọ na-ewe dị ka ntinye faịlụ json nwere ntuziaka maka ịgbakọta onyonyo a.

Faịlụ json anyị ga-enwe ngọngọ abụọ: ndị na-ewu ụlọ na ndị na-enye ihe. Mgbochi nke mbụ na-akọwa parampat nke ihe oyiyi ahụ n'onwe ya dị ka ihe, na ngọngọ nke abụọ na-akọwa ntụziaka maka imeju ya na ọdịnaya dị mkpa.

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

Na ndebiri a, ịkwesịrị ịtọ njirimara nke ngalaba na ígwé ojii ebe ịchọrọ ịmepụta ihe oyiyi ahụ, yana ụzọ faịlụ ahụ nwere igodo sitere na akaụntụ ọrụ emebere na ngalaba a. Ị nwere ike ịgụkwu gbasara ịmepụta akaụntụ ọrụ na igodo n'ụdị faịlụ na ngalaba kwekọrọ akwụkwọ.

Nhazi a na-ekwu na a ga-ewu ihe oyiyi diski ahụ dabere na ikpo okwu ubuntu-1804-lts, etinyere na ngalaba onye ọrụ kwesịrị ekwesị na ezinụlọ ihe oyiyi GRAFANA n'okpuru aha grafana-{{timestamp}}.

Ndị na-enye ihe

Ugbu a na-abịa akụkụ na-adọrọ mmasị nke nhazi ahụ. Ọ ga-akọwa usoro nke omume ga-mkpa ka e mere na mebere igwe tupu kefriza ya ala n'ime a disk oyiyi.

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

Ebe a na-ekewa omume niile n'ime usoro atọ. Na ọkwa nke mbụ, a na-eme ihe odide dị mfe nke na-emepụta ndekọ aha inyeaka.

kwadebe-ctg.sh:

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

N'oge na-esote, anyị na-edobe edemede na ndekọ a, nke ga-adị mkpa ịmalite ozugbo mgbe ịmalitere igwe mebere. Edemede a ga-etinye mgbanwe ndị ọrụ chọrọ ka edebanye aha na nhazi Grafana wee malitegharịa sava weebụ.

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

Mgbe nke a gasịrị, e nwere ihe atọ fọdụrụ ime:
1) tinye ngwugwu
2) Gbaa Grafana n'okpuru systemctl wee wụnye ngwa mgbakwunye ClickHouse
3) tinye setup.sh script na ntinye kwụ n'ahịrị ozugbo agbanyechara igwe mebere.

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;

Ugbu a naanị ihe fọdụrụ bụ ịgba ọsọ Packer wee nweta onyonyo mmepụta etinye na ngalaba akọwapụtara. Mgbe ị na-eke igwe mebere, ị nwere ike họrọ ya dị ka diski buut na mgbe ebidochara ị ga-enweta sava weebụ Grafana dị njikere.

Nbunye ọrụ kesara na Yandex.Cloud iji Grafana dịka ọmụmaatụ
Nbunye ọrụ kesara na Yandex.Cloud iji Grafana dịka ọmụmaatụ

Otu atụ na balancer

Ozugbo anyị nwere onyonyo diski nke na-enye anyị ohere ịmepụta ọtụtụ sava weebụ Grafana, anyị nwere ike ịmepụta otu ihe atụ. Na ikpo okwu Yandex.Cloud, okwu a na-ezo aka na njikọ nke igwe mebere nke nwere otu njirimara. Mgbe ị na-eke otu ihe atụ, a na-ahazi ụdị nke igwe niile dị na otu a, wee mara njirimara nke otu n'onwe ya (dịka ọmụmaatụ, nke kacha nta na ọnụ ọgụgụ igwe na-arụ ọrụ). Ọ bụrụ na ọnụ ọgụgụ dị ugbu a emezughị njirisi ndị a, mgbe ahụ, otu ihe atụ n'onwe ya ga-ewepụ igwe ndị na-adịghị mkpa ma ọ bụ mepụta ndị ọhụrụ na oyiyi nke ya.

Dị ka akụkụ nke ọrụ anyị, anyị ga-emepụta otu ihe atụ nke sava weebụ nke a ga-esi na ihe oyiyi diski emepụtara na mbụ.

Nbunye ọrụ kesara na Yandex.Cloud iji Grafana dịka ọmụmaatụ

Nbunye ọrụ kesara na Yandex.Cloud iji Grafana dịka ọmụmaatụ

Ihe dị ịrịba ama bụ ntọlite ​​otu ihe atụ ikpeazụ. Otu ebumnuche na njikọta na Load Balancer ga-enyere gị aka ịhazi ihe nkwụnye L3 n'elu igwe mebere nke otu a site na ịpị bọtịnụ ole na ole.

Nbunye ọrụ kesara na Yandex.Cloud iji Grafana dịka ọmụmaatụ

Mgbe m na-edozi balancer, etinyere m isi ihe abụọ dị mkpa:

  1. Emere m ka onye nhazi ahụ nabata okporo ụzọ onye ọrụ na ọdụ ụgbọ mmiri 80 wee bugharịa ya na ọdụ ụgbọ mmiri 3000 nke igwe mebere, kpọmkwem ebe Grafana bi.
  2. Etinyere m ịlele ịdị mma nke igwe site na ịpịnye ha na ọdụ ụgbọ mmiri 3000.

Nbunye ọrụ kesara na Yandex.Cloud iji Grafana dịka ọmụmaatụ

Obere nchịkọta

N'ikpeazụ, anyị nwere ike iji aka bufee akụrụngwa ngwa achọrọ, ma ugbu a anyị nwere ọrụ Grafana na-agbanwe agbanwe. Naanị ị ga-achọ ịma adreesị IP nke onye na-agbazinye ihe dị ka ntinye ntinye na ngwa na onye ọbịa nke ụyọkọ ClickHouse iji buo dataset n'ime ya.

Ọ ga-adị ka mmeri? Ee, mmeri. Mana o nwere ihe ka na-agbagwoju m anya. Usoro niile dị n'elu chọrọ ọtụtụ usoro ntuziaka na ọ nweghị ike ọ bụla; Ọ ga-amasị m ịmegharị ya ma ọ bụrụ na ọ ga-ekwe omume. Nke a bụ ihe a ga-etinye na ngalaba na-esote.

Ntinye terraform

Anyị ga-eji ngwa HashiCorp akpọrọ ọzọ Terraform. Ọ ga-enyere gị aka ibugharị akụrụngwa ngwa niile site na ịpị bọtịnụ, dabere na mgbanwe dị iche iche nke onye ọrụ gafere. Ka anyị dee a uzommeputa nwere ike na-agba ọsọ ọtụtụ ugboro na dị iche iche ngalaba nke dị iche iche ọrụ.

Ọrụ niile na Terraform na-agbadata ide faịlụ nhazi (*.tf) na imepụta akụrụngwa dabere na ya.

Ihe dịgasị iche iche

Na mmalite nke faịlụ ahụ, anyị ga-agụnye mgbanwe ndị na-ekpebi ebe na otu a ga-esi tinye akụrụngwa n'ọdịnihu.

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

Usoro ntinye ngwa niile ga-agbadata iji wuo ihe oyiyi diski na ịtọ mgbanwe ndị a. Ka m kọwaara ha ihe kpatara ya:

oauth_token - akara maka ịnweta igwe ojii. Enwere ike nweta ya njikọ.
ígwé ojii_id - njirimara igwe ojii ebe anyị ga-ebuga ngwa ahụ
folder_id - njirimara ngalaba ebe anyị ga-ebuga ngwa ahụ
service_account_id - njirimara akaụntụ ọrụ na ngalaba nke igwe ojii kwekọrọ.
image_id - njirimara nke onyonyo diski enwetara site na iji Packer
aha njirimara и password - aha njirimara na paswọọdụ iji nweta ma ọdụ data yana sava weebụ Grafana
db aha - aha nchekwa data n'ime ụyọkọ CH na MySQL
ụzọ_ igodo ọha - ụzọ faịlụ na igodo ssh ọha gị, nke ị nwere ike iji jikọọ n'okpuru aha ubuntu ka mebere igwe nwere sava weebụ

Nhazi onye na-eweta

Ugbu a ịkwesịrị ịhazi onye na-eweta Terraform - n'ọnọdụ anyị, Yandex:

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

Ị ga-achọpụta na ebe a anyị na-eji mgbanwe ndị akọwapụtara n'elu.

Netwọk na ụyọkọ

Ugbu a, anyị ga-emepụta netwọk nke akụkụ nke akụrụngwa anyị ga-ekwurịta okwu, subnets atọ (otu na mpaghara ọ bụla) ma bulie ụyọkọ CH na 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
  }
}

Dịka ị na-ahụ, nke ọ bụla n'ime ụyọkọ abụọ a na-emepụta nke ọma na-anabataghị mmejọ site na itinye ya na mpaghara atọ dị.

Sava webụ

Ọ ga-adị ka anyị nwere ike ịnọgide n'otu mmụọ ahụ, ma enwere m ihe isi ike. Tupu nke a, m bu ụzọ bulie ụyọkọ MySQL na naanị mgbe nke ahụ gasịrị, n'ịmara ID ya, ana m achịkọta ihe oyiyi diski na nhazi achọrọ, ebe m na-akọwapụta onye ọbịa na ụyọkọ ahụ. Ma ugbu a, anyị amaghị ụyọkọ ID tupu ịmalite Terraform, gụnyere n'oge a na-ewu ihe oyiyi ahụ. Ya mere, m ga-amalite na-esonụ aghụghọ.

Iji ọrụ metadata nke Amazon, anyị ga-ebufe ụfọdụ paramita na igwe mebere, nke ọ ga-anabata ma hazie ya. Anyị chọrọ igwe ka ọ gaa na metadata n'azụ ụyọkọ MySQL na aha njirimara-paswọọdụ, nke onye ọrụ akọwapụtara na faịlụ Terraform, mgbe ịmalitechara. Ka anyị gbanwee ọdịnaya nke faịlụ ahụ ntakịrị setup.sh, nke na-agba ọsọ mgbe igwe mebere agbanyere.

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 otu na balancer

N'ịbụ onye wughachiri ihe oyiyi diski ọhụrụ, anyị nwere ike tinye faịlụ anyị maka Terraform.

Ka anyị gosi na anyị chọrọ iji onyonyo diski dị adị:

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

Ugbu a, ka anyị mepụta otu ihe atụ:

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

Ọ bara uru ịṅa ntị na otu anyị siri nyefee ya na metadata cluster_uri, username и password. Ọ bụ ndị a ka igwe mebere ga-apụta na mmalite wee tinye na nhazi Grafana.

Ọ dịịrị onye nhazi.

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

Obere shuga

Ọ dị naanị ntakịrị. Mgbe ebubachara akụrụngwa, ị ga-aga na Grafana UI wee tinye aka na ụyọkọ CH (ID nke a ka kwesịrị inweta) dị ka isi mmalite data. Mana Terraform maara NJ ụyọkọ. Ka anyị nye ya ikike ime ka okwu ahụ mezuo.

Ka anyị gbakwunye onye na-eweta ọhụrụ - Grafana, ma nye ya adreesị IP onye na-eme ihe nleba anya dị ka onye ọbịa. Mgbanwe niile Terraform na-eme na igwe ebe onye nhazi ya na-ekpebi ga-eto na MySQL, ya mere na igwe ndị ọzọ niile.

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

Ka anyị kpaa ntutu isi anyị

Ka anyị gosipụta adreesị IP nkwụnye ego yana onye ọbịa nke ụyọkọ 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"
}

Nwere ike ịgba ọsọ

All! Faịlụ nhazi anyị dị njikere ma anyị nwere ike, site na ịtọ mgbanwe ndị ahụ, gwa Terraform ka ọ bulie ihe niile anyị kọwara n'elu. Usoro ahụ niile were m ihe dị ka nkeji iri na ise.
Na njedebe ị nwere ike ịhụ ozi mara mma:

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

Na n'ígwé ojii ahụ, a ga-ahụ ihe ndị dị na akụrụngwa ewelitere:

Nbunye ọrụ kesara na Yandex.Cloud iji Grafana dịka ọmụmaatụ

Ka anyị chịkọta ihe ọ rụpụtara

Ugbu a, iji Grafana dị ka ọmụmaatụ, onye ọ bụla n'ime gị nwere ike ibuga ngwa nwere ihe owuwu igwe ojii na-agbasa na ikpo okwu Yandex.Cloud. Ngwa enyemaka sitere na HashiCorp dị ka Packer na Terraform nwere ike inyere gị aka na nke a. Enwere m olileanya na mmadụ ga-ahụ na akụkọ a bara uru :)

P.S. N'okpuru ebe a, m ga-etinye njikọ na ebe nchekwa ebe ị nwere ike ịchọta ntụziaka edozi maka Packer na Terraform, nke m nyere n'isiokwu a.

ebe nchekwa

isi: www.habr.com

Tinye a comment