Ho tsamaisoa ha litšebeletso tse ajoang ho Yandex.Cloud ho sebelisa Grafana e le mohlala

Lumelang bohle! E le karolo ea mosebetsi oa ka oa thupelo, ke ile ka batlisisa bokhoni ba sethala sa maru se joalo sa malapeng e le Yandex.Cloud. Sethala se fana ka lits'ebeletso tse fapaneng bakeng sa ho rarolla mathata a sebetsang. Leha ho le joalo, ka linako tse ling u hloka ho theha sesebelisoa sa hau sa leru ka lisebelisoa tse pharaletseng tse ipapisitseng le lits'ebeletso tsena. Sehloohong sena ke batla ho arolelana phihlelo ea ka ea ho tsamaisa kopo e joalo.

Ho tsamaisoa ha litšebeletso tse ajoang ho Yandex.Cloud ho sebelisa Grafana e le mohlala

U batla ho fumana eng?

grafana - sesebelisoa se matla sa ho rarolla mathata a tlhahlobo kapa ho beha leihlo mathata a sistimi efe kapa efe. Ka tlhophiso ea eona ea mantlha, ona ke mochini o sebetsang o nang le seva sa marang-rang sa Grafana, hammoho le database (ClickHouse, InfluxDB, joalo-joalo) e nang le dataset eo li-analytics li tla thehoa ho eona.

Ka mor'a ho qala mochine o nang le seva sa marang-rang, u ka ea ho moamoheli oa eona 'me u fumane UI e ntle, u hlalose li-database e le mehloli ea mosebetsi o eketsehileng, etsa li-dashboards le li-graph.

Ho tsamaisoa ha litšebeletso tse ajoang ho Yandex.Cloud ho sebelisa Grafana e le mohlala

Phetolelo ea mantlha e na le tšitiso e le 'ngoe ea bohlokoa - ha e mamelle liphoso ho hang. Ke hore, ts'ebetso eohle ea kopo e ipapisitse le ts'ebetso ea mochini o le mong oa nnete. Haeba e hana kapa batho ba 10 ba bula UI ka nako e le 'ngoe, mathata a tla hlaha.

Li ka rarolloa ka mokhoa o bonolo: o hloka feela ho ... sebelisa mechine e mengata e ts'oanang e ts'oanang le seva sa marang-rang ebe o e beha tlas'a sekala sa L3. Empa ha se tsohle tse hlakileng haholo mona. Grafana e boloka litlhophiso tsa basebelisi (litsela tse eang ho li-database, li-dashboards, li-graph, joalo-joalo) ka ho toba disk ea mochine oa eona oa sebele. Ka hona, haeba re fetola litlhophiso tse ling ho UI, liphetoho tsena li tla bonahala feela mochineng oa sebele oo ho leka-lekana ho re rometseng ho oona. Sena se tla lebisa ho litlhophiso tse sa lumellaneng tsa ts'ebeliso ea rona, ho baka mathata ha ho qala le ho sebelisoa.

Mona database e 'ngoe e tla thusa, mohlala, MySQL kapa e lekanang le eona. Re bolella Grafana hore o lokela ho boloka litlhophiso tsa basebelisi sebakeng sena sa polokelo ea "spare". Ka mor'a moo, ho tla lekane ho hlalosa tsela ea polokelongtshedimosetso ena hang mochining o mong le o mong, le ho hlophisa litlhophiso tse ling tsohle tsa mosebelisi mochining ofe kapa ofe oa sebele; li tla atolohela ho tse ling.

Mona ke setšoantšo sa lisebelisoa tsa ho qetela tsa kopo:

Ho tsamaisoa ha litšebeletso tse ajoang ho Yandex.Cloud ho sebelisa Grafana e le mohlala

A re ithuteng ho phahamisa ka matsoho

MySQL le ClickHouse

Pele o kenya ts'ebeliso e joalo ka ho tobetsa konopo, ho ne ho hlokahala ho ithuta ho sebetsana le karolo e 'ngoe le e' ngoe ea eona le ho e kopanya.

Mona Yandex.Cloud e tla re thusa, e fanang ka li-balancers tsa L3, ClickHouse le MySQL e le litšebeletso tse laoloang. Mosebelisi o hloka feela ho hlakisa li-parameter ebe o ema ho fihlela sethala se tlisa ntho e 'ngoe le e' ngoe ka tatellano ea ho sebetsa.

Ke ngolisitse, ka theha leru le ak'haonte ea tefo. Ka mor'a moo, ke ile ka ea lerung 'me ka theha lihlopha tsa MySQL le ClickHouse tse nang le litlhophiso tse fokolang. Ke ile ka ema ho fihlela ba qala ho sebetsa.

Ho tsamaisoa ha litšebeletso tse ajoang ho Yandex.Cloud ho sebelisa Grafana e le mohlalaHo tsamaisoa ha litšebeletso tse ajoang ho Yandex.Cloud ho sebelisa Grafana e le mohlala

Hape o hloka ho hopola ho theha database sehlopheng ka seng le ho lokisa phihlello ho eona o sebelisa ho kena le password. Ha ke na ho bua ka lintlha mona - ntho e 'ngoe le e' ngoe e hlakile ka har'a sehokelo.

Lintlha tse sa hlakang e ne e le hore li-database tsena li na le mabotho a mangata, a netefatsang mamello ea bona ea liphoso. Leha ho le joalo, Grafana e hloka moamoheli a le mong bakeng sa database ka 'ngoe eo e sebetsang le eona. Ho bala nako e telele litokomane Maru a ile a ntlisa qetong. E fellang kateng le hore bongata ba mefuta ea c-<cluster_id>.rw.mdb.yandexcloud.net 'mapa ho moamoheli ea sebetsang oa hona joale oa sehlopha ka ID e tsamaisanang. Sena ke seo re tla se fa Grafana.

Seva ea webo

Hona joale ho ho web server. Ha re phahamiseng mochini o tloaelehileng o nang le Linux mme re hlophise Grafana ho oona.

Ho tsamaisoa ha litšebeletso tse ajoang ho Yandex.Cloud ho sebelisa Grafana e le mohlala

Ho tsamaisoa ha litšebeletso tse ajoang ho Yandex.Cloud ho sebelisa Grafana e le mohlala

Ha re ikopanye ka ssh ebe re kenya liphutheloana tse hlokahalang.

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 

Kamora moo, ha re tsamaise Grafana tlasa systemctl mme re kenye plugin bakeng sa ho sebetsa le ClickHouse (e, ha e fanoe ka har'a sephutheloana sa mantlha).

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

Ke eona, ka mor'a moo ka taelo e bonolo

sudo service grafana-server start

re tla qala seva sa webo. Joale o ka kenya aterese ea IP ea kantle ea mochini o fumanehang ho sebatli, o hlakisa port 3000 mme o bone UI e ntle ea Grafana.
Ho tsamaisoa ha litšebeletso tse ajoang ho Yandex.Cloud ho sebelisa Grafana e le mohlala

Empa u se ke ua potlaka, pele u theha Grafana, u tlameha ho hopola ho e bolella tsela ea MySQL e le hore u boloke litlhophiso moo.

Tokiso eohle ea seva ea webo ea Grafana e faeleng /etc/grafana/grafana.ini. Mohala o hlokahalang o shebahala tjena:

;url =

Re beha moamoheli sehlopheng sa MySQL. Faele e tšoanang e na le ho kena le password bakeng sa ho fihlella Grafana setšoantšong se ka holimo, tseo ka ho sa feleng li lekanang admin.

U ka sebelisa litaelo tsa 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

Ke nako ea ho qala seva sa webo bocha!

sudo service grafana-server restart

Joale ho Grafana UI re tla hlakisa ClickHouse joalo ka DataSource.

Ke khonne ho fihlela tlhophiso ea ts'ebetso ka li-setting tse latelang:

Ho tsamaisoa ha litšebeletso tse ajoang ho Yandex.Cloud ho sebelisa Grafana e le mohlala

Ke boletse joalo ka URL https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443

Kaofela! Re na le mochini o le mong o sebetsang o nang le seva sa webo se hokahantsoeng le CH le MySQL. U se u ka kenya dataset ho ClickHouse 'me u hahe li-dashboards. Leha ho le jwalo, ha re eso fihlelle sepheo sa rona mme ha re so ka ra romela meralo ya motheo e felletseng.

Paka

Yandex.Cloud e u lumella ho etsa setšoantšo sa disk sa mochine o teng oa sebele, 'me motheong oa oona - palo leha e le efe ea mechine e tšoanang le e mong. Sena ke sona hantle seo re tla se sebelisa. Ho kopanya setšoantšo hantle, nka sesebelisoa Paka ho tsoa ho HashiCorp. Ho nka e le ho kenya faele ea json ka litaelo tsa ho kopanya setšoantšo.

Faele ea rona ea json e tla ba le li-block tse peli: lihahi le bafani. Sebaka sa pele se hlalosa li-parameter tsa setšoantšo ka boeona e le mokhatlo, 'me karolo ea bobeli e hlalosa litaelo tsa ho e tlatsa ka litaba tse hlokahalang.

lihahi

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

Ka template ena, o hloka ho beha sekhetho sa karolo ka har'a leru moo u batlang ho etsa setšoantšo, hammoho le tsela e eang faeleng e nang le linotlolo tse tsoang akhaonteng ea litšebeletso tse entsoeng pele karolong ena. U ka bala haholoanyane mabapi le ho theha li-account tsa lits'ebeletso le linotlolo ka mokhoa oa faele karolong e tsamaellanang litokomane.

Tlhophiso ena e re setšoantšo sa disk se tla hahoa ho latela sethala ubuntu-1804-lts, e behiloeng karolong e loketseng ea basebelisi lelapeng la setšoantšo GRAFANA tlasa lebitso grafana-{{timestamp}}.

Bafani ba thepa

Joale ho tla karolo e khahlisang haholoanyane ea tlhophiso. E tla hlalosa tatellano ea liketso tse tla hloka ho etsoa mochineng oa sebele pele o hatsetsa boemo ba oona ho setšoantšo sa disk.

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

Mona liketso tsohle li arotsoe ka mekhahlelo e 3. Mothating oa pele, ho etsoa script e bonolo e hlahisang buka e thusang.

ready-ctg.sh:

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

Mokhahlelong o latelang, re beha script bukeng ena, e tla hloka ho qalisoa hang ka mor'a ho qala mochine oa sebele. Sengoliloeng sena se tla beha mefuta e fapaneng ea mosebelisi e hlokang ho ngolisoa ho Grafana config le ho qala seva sa webo bocha.

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

Ka mor'a moo, ho na le lintho tse 3 tse lokelang ho etsoa:
1) kenya liphutheloana
2) tsamaisa Grafana tlas'a systemctl 'me u kenye plugin ea ClickHouse
3) kenya setup.sh script moleng oa ho qala hang ka mor'a ho bulela mochine oa sebele.

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;

Hona joale se setseng ke ho tsamaisa Packer le ho etsa hore setšoantšo se behoe karolong e boletsoeng. Ha o theha mochini o sebetsang, o ka o khetha joalo ka disk ea boot mme kamora ho qala o tla fumana seva ea webo ea Grafana e seng e lokisitsoe.

Ho tsamaisoa ha litšebeletso tse ajoang ho Yandex.Cloud ho sebelisa Grafana e le mohlala
Ho tsamaisoa ha litšebeletso tse ajoang ho Yandex.Cloud ho sebelisa Grafana e le mohlala

Sehlopha sa mohlala le balancer

Ha re se re e-na le setšoantšo sa disk se re lumellang ho theha li-server tse ngata tse tšoanang tsa Grafana, re ka theha sehlopha sa mohlala. Sethaleng sa Yandex.Cloud, lentsoe lena le bolela ho kopana ha mechine ea sebele e nang le litšobotsi tse tšoanang. Ha u theha sehlopha sa mohlala, mohlala oa mechini eohle ea sehlopha sena e lokisoa, ebe litšoaneleho tsa sehlopha ka boeona (mohlala, bonyane le palo e kholo ea mechini e sebetsang). Haeba palo ea hona joale e sa finyelle litekanyetso tsena, joale sehlopha sa mohlala ka boeona se tla tlosa mechine e sa hlokahaleng kapa e iketsetse e mecha ka setšoantšo sa eona.

E le karolo ea mosebetsi oa rona, re tla theha sehlopha sa mohlala sa li-server tse tla hlahisoa ho tsoa ho setšoantšo sa disk se entsoeng pele.

Ho tsamaisoa ha litšebeletso tse ajoang ho Yandex.Cloud ho sebelisa Grafana e le mohlala

Ho tsamaisoa ha litšebeletso tse ajoang ho Yandex.Cloud ho sebelisa Grafana e le mohlala

Ntho e ikhethang haholo ke sehlopha sa ho qetela sa mohlala. Sehlopha se reriloeng se kopantsoeng le Load Balancer se tla u thusa ho lokisa tekanyo ea L3 holim'a mechine e sebetsang ea sehlopha sena ka ho tobetsa likonopo tse 'maloa.

Ho tsamaisoa ha litšebeletso tse ajoang ho Yandex.Cloud ho sebelisa Grafana e le mohlala

Ha ke theha balancer, ke sebelisitse lintlha tse peli tsa bohlokoa:

  1. Ke ile ka etsa hore motho ea leka-lekaneng a amohele sephethephethe sa basebelisi boema-kepeng ba 80 ebe ke se fetisetsa ho port 3000 ea mechini e fumanehang, hantle moo Grafana a lulang teng.
  2. Ke ile ka theha ho lekola hore na mechini e sebetsa joang ka ho e beha ho port 3000.

Ho tsamaisoa ha litšebeletso tse ajoang ho Yandex.Cloud ho sebelisa Grafana e le mohlala

Kakaretso e nyane

Qetellong, re ile ra khona ho sebelisa mekhoa ea motheo ea kopo e lakatsehang, 'me joale re na le tšebeletso e tsitsitseng ea Grafana. U hloka feela ho tseba aterese ea IP ea balancer e le sebaka sa ho kena ho kopo le moamoheli oa sehlopha sa ClickHouse e le ho kenya dataset ho eona.

E ka bonahala eka ke tlhōlo? E, tlholo. Empa ho na le ntho e ntseng e mpherekanya. Ts'ebetso eohle e kaholimo e hloka mehato e mengata ea matsoho mme ha e fokotsehe ho hang; Ke kopa ho e etsa ka bo eona ha ho khonahala. Sena ke seo karolo e latelang e tla neheloa ho sona.

Ho kopanya ha terraform

Re tla boela re sebelise sesebelisoa se tsoang ho HashiCorp se bitsoang Terraform. E tla u thusa ho tsamaisa lisebelisoa tsohle tsa ts'ebeliso ka ho tobetsa konopo, ho latela mefuta e mengata e fetisitsoeng ke mosebelisi. Ha re ngole risepe e ka tsamaisoang makhetlo a mangata likarolong tse fapaneng tsa basebelisi ba fapaneng.

Mosebetsi oohle le Terraform o theohela ho ngola faele ea tlhophiso (*.tf) le theho ea meaho e thehiloeng ho eona.

Mefuta e fapaneng

Qalong ea faele, re tla kenyelletsa mefuta e fapaneng e khethollang hore na lisebelisoa tsa nako e tlang li tla sebelisoa hokae le joang.

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

Ts'ebetso eohle ea phepelo ea kopo e tla theoha ho aha setšoantšo sa disk le ho beha mefuta ena. E re ke hlalose hore na ba ikarabella ho eng:

oauth_token — letshwao la ho fihlella leru. E ka fumanoa ka kgokahanyo.
cloud_id - sekhetho sa leru moo re tla tsamaisa ts'ebeliso
folda_id - sekhetho sa karolo moo re tla fetisetsa kopo teng
service_account_id - sekhetho sa ak'haonte ea lits'ebeletso karolong e tsamaellanang ea leru.
setšoantšo_id — sekhetho sa setšoantšo sa disk se fumanoeng ho sebelisoa Packer
mosebedisi и phasewete — lebitso la mosebedisi le phasewete ho fihlella mabolokelo a data ka bobedi le seva sa webo sa Grafana
dbname - Lebitso la database ka har'a lihlopha tsa CH le MySQL
public_key_path - tsela e eang faeleng ka senotlolo sa hau sa sechaba sa ssh, seo u ka se sebelisang ho hokela tlas'a lebitso ubuntu ho mecheng ea sebele e nang le li-server tsa marang-rang

Tlhophiso ea mofani

Joale o hloka ho hlophisa mofani oa Terraform - molemong oa rona, Yandex:

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

U tla hlokomela hore mona re sebelisa mefuta-futa e hlalositsoeng ka holimo.

Marang-rang le lihlopha

Hona joale re tla theha marang-rang ao likarolo tsa lisebelisoa tsa rona li tla buisana, li-subnets tse tharo (e le 'ngoe sebakeng se seng le se seng) le ho phahamisa lihlopha tsa CH le 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
  }
}

Joalo ka ha u bona, sehlopha ka seng sa lihlopha tse peli se entsoe hore se mamelle liphoso ka ho beoa libakeng tse tharo tse fumanehang.

Li-server tsa marang-rang

Ho ne ho ka bonahala eka re ka tsoela pele ka moea o le mong, empa ke ile ka kena mathateng. Pele ho sena, ke ile ka qala ho phahamisa sehlopha sa MySQL mme feela ka mor'a moo, ka ho tseba ID ea eona, ke ile ka bokella setšoantšo sa disk se nang le tlhophiso e hlokahalang, moo ke hlalositseng moeti ho sehlopha. Empa joale ha re tsebe ID ea sehlopha pele re qala Terraform, ho kenyeletsoa nakong ea ho haha ​​​​setšoantšo. Ka hona, ke ile ka tlameha ho retelehela ho tse latelang leqheka.

Re sebelisa ts'ebeletso ea metadata ea Amazon, re tla fetisetsa litekanyo tse ling mochining oa sebele, oo o tla o amohela le ho o sebetsa. Re hloka mochine ho ea ho metadata ka morao ho sehlopha sa MySQL cluster host le username-password, eo mosebedisi a e boletseng faeleng ea Terraform, ka mor'a ho qala. Ha re fetoleng litaba tsa faele hanyane setup.sh, e sebetsang ha mochine oa sebele o buletsoe.

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

Sehlopha sa intance le balancer

Ha re se re hahile setšoantšo se secha sa disk, qetellong re ka eketsa faele ea rona bakeng sa Terraform.

Ha re bontše hore re batla ho sebelisa setšoantšo sa disk se teng:

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

Joale ha re theheng sehlopha sa mohlala:

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

Ho bohlokoa ho ela hloko hore na re e fetisitse joang metadata cluster_uri, username и password. Ke tsena tseo mochini o tla li ntša ha o qala ebe o li kenya ho Grafana config.

Ho ho ea leka-lekana.

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

Tsoekere e nyane

Ho setse hanyenyane feela. Ka mor'a hore lisebelisoa li sebelisoe, u tla tlameha ho ea Grafana UI 'me u kenye ka letsoho sehlopha sa CH (e leng ID ea eona e ntseng e lokela ho fumanoa) e le Mohloli oa Boitsebiso. Empa Terraform e tseba ID ea sehlopha. A re mo tšepeng ho phethahatsa taba eo.

Ha re kenyeng mofani oa litšebeletso e mocha - Grafana, 'me re mo fe aterese ea IP ea mohlahlobi e le moamoheli. Liphetoho tsohle tseo Terraform e li etsang mochining moo tekanyo ea eona e lekanyang hore e tla hola ho MySQL, ka hona le mechini e meng kaofela.

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

Ha re kame moriri wa rona

Ha re bontsheng aterese ea IP ea balancer le sehlopha sa 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"
}

E ka matha

Kaofela! Faele ea rona ea tlhophiso e se e lokile, 'me ka ho beha mefuta e fapaneng, re ka bolella Terraform ho phahamisa tsohle tseo re li hlalositseng ka holimo. Ts'ebetso eohle e ile ea nkuka metsotso e ka bang 15.
Qetellong u ka bona molaetsa o monate:

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

'Me marung, likarolo tsa lisebelisoa tse phahamisitsoeng li tla bonahala:

Ho tsamaisoa ha litšebeletso tse ajoang ho Yandex.Cloud ho sebelisa Grafana e le mohlala

A re ke re akaretsa liphetho

Hona joale, ho sebelisa Grafana e le mohlala, e mong le e mong oa lona a ka sebelisa lits'ebetso tse nang le meaho ea maru e pharallang sethaleng sa Yandex.Cloud. Lisebelisoa tse thusang tse tsoang HashiCorp joalo ka Packer le Terraform li ka u thusa ka sena. Ke tšepa hore motho e mong o tla fumana sengoloa sena se le molemo :)

PS Ka tlase ke tla hokela sehokelo sebakeng sa polokelo moo o ka fumanang litlolo tse lokiselitsoeng bakeng sa Packer le Terraform, likhechana tsa tsona tseo ke faneng ka tsona sehloohong sena.

polokelo

Source: www.habr.com

Eketsa ka tlhaloso