Nyob zoo sawv daws! Raws li ib feem ntawm kuv cov chav kawm ua haujlwm, Kuv tshawb fawb lub peev xwm ntawm xws li huab cua hauv tsev xws li
Koj xav tau dab tsi?
Tom qab tso lub tshuab virtual nrog lub vev xaib server, koj tuaj yeem mus rau nws tus tswv tsev thiab tau txais UI zoo nkauj, qhia cov ntaub ntawv raws li qhov chaw rau kev ua haujlwm ntxiv, tsim dashboards thiab graphs.
Qhov yooj yim version muaj ib tug tseem ceeb drawback - nws tsis yog txhaum-tolerant tag nrho. Ntawd yog, tag nrho cov haujlwm ntawm daim ntawv thov nyob ntawm qhov muaj peev xwm ntawm ib lub tshuab virtual. Yog tias nws tsis kam lossis 10 tus neeg qhib UI tib lub sijhawm, ces teeb meem yuav tshwm sim.
Lawv tuaj yeem daws tau yooj yim: koj tsuas yog xav tau ... xa ntau lub tshuab virtual zoo tib yam nrog lub vev xaib server thiab muab tso rau hauv L3 balancer. Tab sis tsis yog txhua yam yog qhov tseeb ntawm no. Grafana khaws cov neeg siv kev teeb tsa (txoj kev mus rau databases, dashboards, graphs, thiab lwm yam) ncaj qha rau ntawm disk ntawm nws lub tshuab virtual. Yog li, yog tias peb hloov qee qhov chaw hauv UI, cov kev hloov no yuav cuam tshuam tsuas yog ntawm lub tshuab virtual uas tus ntsuas xa tuaj rau peb. Qhov no yuav ua rau muaj kev tsis sib haum xeeb rau peb daim ntawv thov, ua rau muaj teeb meem nrog kev tso tawm thiab siv.
Ntawm no lwm cov ntaub ntawv yuav los cawm, piv txwv li, MySQL lossis nws qhov sib npaug. Peb qhia Grafana tias nws yuav tsum khaws cov neeg siv cov chaw nyob rau hauv cov ntaub ntawv "sparre" no. Tom qab ntawd, nws yuav txaus los qhia txog txoj hauv kev rau cov ntaub ntawv no ib zaug ntawm txhua lub tshuab, thiab kho tag nrho lwm cov neeg siv kev teeb tsa ntawm ib qho ntawm cov tshuab virtual; lawv yuav txuas mus rau lwm tus.
Ntawm no yog ib daim duab ntawm qhov kawg daim ntawv thov infrastructure:
Cia peb kawm nqa nrog peb txhais tes
MySQL thiab ClickHouse
Ua ntej xa daim ntawv thov no nrog nias ntawm lub pob, nws yuav tsum tau kawm yuav ua li cas los tswj txhua yam ntawm nws cov khoom thiab sib xyaw ua ke.
Ntawm no Yandex.Cloud yuav pab peb, uas muab L3 balancers, ClickHouse thiab MySQL raws li kev tswj hwm kev pabcuam. Tus neeg siv tsuas yog yuav tsum tau qhia cov kev txwv thiab tos kom txog thaum lub platform coj txhua yam mus rau hauv kev ua haujlwm.
Kuv sau npe, tsim huab thiab them nyiaj. Tom qab ntawd, kuv tau mus rau huab thiab teeb tsa MySQL thiab ClickHouse pawg nrog cov chaw tsawg. Kuv tos kom txog thaum lawv ua haujlwm.
Koj kuj yuav tsum nco ntsoov tsim cov ntaub ntawv hauv txhua pawg thiab teeb tsa kev nkag mus rau nws siv tus ID nkag mus thiab lo lus zais. Kuv yuav tsis mus rau hauv cov ntsiab lus ntawm no - txhua yam yog pom tseeb hauv qhov interface.
Cov ntsiab lus tsis meej yog tias cov ntaub ntawv no muaj ntau tus tswv, uas ua kom lawv qhov kev zam txim txhaum cai. Txawm li cas los xij, Grafana xav kom muaj ib tus tswv tsev rau txhua qhov database nws ua haujlwm nrog. Kev nyeem ntawv ntev c-<cluster_id>.rw.mdb.yandexcloud.net
mapped rau tus tswv tsev tam sim no nquag ntawm pawg nrog tus ID sib raug. Nov yog qhov peb yuav muab rau Grafana.
Web server
Tam sim no nws yog nyob ntawm lub web server. Cia peb tsa lub tshuab virtual tsis tu ncua nrog Linux thiab manually teeb tsa Grafana rau nws.
Cia peb txuas ntawm ssh thiab nruab cov pob tsim nyog.
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
Tom qab ntawd, cia peb khiav Grafana hauv qab systemctl thiab nruab lub plugin rau kev ua haujlwm nrog ClickHouse (yog, nws tsis tau muab rau hauv cov pob yooj yim).
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasource
Qhov ntawd yog nws, tom qab ntawd nrog cov lus txib yooj yim
sudo service grafana-server start
peb yuav pib lub web server. Tam sim no koj tuaj yeem nkag mus rau sab nraud IP chaw nyob ntawm lub tshuab virtual hauv qhov browser, qhia qhov chaw nres nkoj 3000 thiab pom qhov zoo nkauj Grafana UI.
Tab sis tsis txhob maj, ua ntej teeb tsa Grafana, koj yuav tsum nco ntsoov qhia nws txoj hauv kev rau MySQL txhawm rau khaws cov chaw nyob ntawd.
Tag nrho kev teeb tsa ntawm Grafana web server yog nyob rau hauv cov ntaub ntawv /etc/grafana/grafana.ini
. Cov kab xav tau zoo li no:
;url =
Peb teeb tsa tus tswv tsev rau MySQL pawg. Tib cov ntaub ntawv muaj tus ID nkag mus thiab lo lus zais rau kev nkag mus rau Grafana hauv daim duab saum toj no, uas yog vim li cas ob qho tib si sib npaug admin
.
Koj tuaj yeem siv sed commands:
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
Nws yog lub sijhawm los rov pib lub web server!
sudo service grafana-server restart
Tam sim no hauv Grafana UI peb yuav qhia ClickHouse ua DataSource.
Kuv tuaj yeem ua tiav qhov kev teeb tsa ua haujlwm nrog cov teeb tsa hauv qab no:
Kuv teev raws li qhov URL https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443
Txhua tus! Peb muaj ib lub tshuab ua haujlwm virtual nrog lub web server txuas nrog CH thiab MySQL. Koj tuaj yeem xa cov ntaub ntawv rau ClickHouse thiab tsim dashboards. Txawm li cas los xij, peb tseem tsis tau ua tiav peb lub hom phiaj thiab tseem tsis tau siv cov txheej txheem tag nrho.
Pob Ntawv
Yandex.Cloud tso cai rau koj los tsim cov duab disk ntawm lub tshuab virtual uas twb muaj lawm, thiab ntawm nws lub hauv paus - txhua lub tshuab zoo tib yam rau ib leeg. Qhov no yog qhov peb yuav siv. Txhawm rau kom yooj yim sib sau cov duab, nqa lub cuab yeej
Peb cov ntaub ntawv json yuav muaj ob lub blocks: builders thiab provisioners. Thawj qhov thaiv tau piav qhia txog qhov tsis zoo ntawm daim duab nws tus kheej yog ib qho chaw, thiab lub block thib ob piav qhia cov lus qhia rau kev sau nws nrog cov ntsiab lus tsim nyog.
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"
}
],
...
}
Hauv cov qauv no, koj yuav tsum teeb tsa tus cim ntawm ntu hauv huab uas koj xav tsim cov duab, nrog rau txoj hauv kev mus rau cov ntaub ntawv nrog cov yuam sij los ntawm kev pabcuam tus account yav dhau los tsim hauv ntu no. Koj tuaj yeem nyeem ntxiv txog kev tsim cov nyiaj pabcuam thiab cov yuam sij hauv daim ntawv ntawm cov ntaub ntawv nyob rau hauv seem
Qhov kev teeb tsa no hais tias daim duab disk yuav tsim raws li lub platform ubuntu-1804-lts
, muab tso rau hauv cov neeg siv khoom tsim nyog hauv tsev neeg cov duab GRAFANA
nyob rau hauv lub npe grafana-{{timestamp}}
.
Cov kev npaj
Tam sim no los txog qhov nthuav ntau dua ntawm kev teeb tsa. Nws yuav piav qhia txog kev ua ntu zus uas yuav tsum tau ua ntawm lub tshuab virtual ua ntej khov nws lub xeev rau hauv daim duab 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"
]
}
]
}
Ntawm no txhua qhov kev ua tau muab faib ua 3 theem. Nyob rau thawj theem, ib tsab ntawv yooj yim raug tua uas tsim ib phau ntawv pabcuam.
npaj-ctg.sh:
#!/bin/bash
sudo mkdir -p /opt/grafana
sudo chown -R ubuntu:ubuntu /opt/grafana
Nyob rau theem tom ntej, peb tso ib tsab ntawv rau hauv phau ntawv teev npe no, uas yuav tsum tau pib tam sim tom qab pib lub tshuab virtual. Tsab ntawv no yuav muab cov neeg siv hloov pauv uas yuav tsum tau sau npe hauv Grafana config thiab rov pib lub web 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
Tom qab ntawd, muaj 3 yam uas yuav tsum tau ua:
1) nruab pob
2) khiav Grafana nyob rau hauv systemctl thiab nruab ClickHouse plugin
3) muab cov ntawv setup.sh tso rau hauv cov kab pib tam sim tom qab tig lub tshuab virtual.
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;
Tam sim no txhua yam uas tseem tshuav yog khiav Packer thiab tau txais cov duab tso zis tso rau hauv ntu ntu. Thaum tsim lub tshuab virtual, koj tuaj yeem xaiv nws ua lub khau raj disk thiab tom qab tso tawm koj yuav tau txais qhov npaj ua Grafana web server.
Piv txwv pab pawg thiab balancer
Thaum peb muaj daim duab disk uas tso cai rau peb los tsim ntau yam zoo tib yam Grafana web servers, peb tuaj yeem tsim ib pawg piv txwv. Ntawm Yandex.Cloud platform, lo lus no hais txog kev sib koom ua ke ntawm cov tshuab virtual uas muaj cov yam ntxwv zoo ib yam. Thaum tsim ib pab pawg, cov qauv ntawm tag nrho cov tshuab hauv pab pawg no tau teeb tsa, thiab tom qab ntawd cov yam ntxwv ntawm pab pawg nws tus kheej (piv txwv li, qhov tsawg kawg nkaus thiab ntau tshaj ntawm cov tshuab ua haujlwm). Yog tias tus lej tam sim no tsis ua raws li cov qauv no, ces pawg piv txwv nws tus kheej yuav tshem tawm cov tshuab tsis tsim nyog lossis tsim cov tshiab hauv nws tus kheej daim duab.
Raws li ib feem ntawm peb txoj haujlwm, peb yuav tsim ib pawg piv txwv ntawm cov web servers uas yuav raug tsim los ntawm cov duab disk uas tau tsim yav dhau los.
Dab tsi yog qhov zoo kawg nkaus yog qhov kawg piv txwv pab pawg teeb tsa. Lub hom phiaj pab pawg hauv kev koom ua ke nrog Load Balancer yuav pab koj teeb tsa L3 balancer rau saum cov tshuab virtual ntawm pab pawg no los ntawm nias ob peb lub khawm.
Thaum teeb tsa lub ntsuas ntsuas, kuv tau siv ob lub ntsiab lus tseem ceeb:
- Kuv ua tus balancer txais neeg siv tsheb khiav ntawm chaw nres nkoj 80 thiab redirect nws mus rau qhov chaw nres nkoj 3000 ntawm lub virtual machines, raws nraim qhov Grafana nyob.
- Kuv teeb tsa kev tshuaj xyuas qhov muaj peev xwm ntawm cov tshuab los ntawm pinging lawv mus rau chaw nres nkoj 3000.
Cov ntsiab lus me me
Thaum kawg, peb muaj peev xwm siv tau manually xa cov ntawv thov infrastructure, thiab tam sim no peb muaj cov kev pab cuam Grafana zoo heev. Koj tsuas yog yuav tsum paub tus IP chaw nyob ntawm tus balancer raws li qhov nkag mus rau daim ntawv thov thiab tus tswv tsev ntawm ClickHouse pawg txhawm rau txhawm rau thauj cov ntaub ntawv rau hauv nws.
Nws yuav zoo li yeej? Yog lawm, yeej. Tab sis qee yam tseem ua rau kuv tsis meej pem. Tag nrho cov txheej txheem saum toj no yuav tsum muaj ntau cov kauj ruam ntawm phau ntawv thiab tsis tuaj yeem ua kom tiav; Kuv xav ua kom nws siv tau yog tias ua tau. Qhov no yog qhov seem tom ntej yuav mob siab rau.
Terraform kev koom ua ke
Peb yuav rov siv lub cuab yeej los ntawm HashiCorp hu ua
Txhua txoj haujlwm nrog Terraform los sau cov ntaub ntawv teeb tsa (*.tf
) thiab tsim cov infrastructure raws li nws.
Hloov pauv
Thaum pib ntawm cov ntaub ntawv, peb yuav suav nrog cov kev hloov pauv uas txiav txim siab qhov twg thiab yuav ua li cas cov txheej txheem yav tom ntej yuav raug xa mus.
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>"
}
Tag nrho cov txheej txheem kev xa mus rau daim ntawv thov yuav nqis los tsim cov duab disk thiab teeb tsa cov kev hloov pauv no. Cia kuv piav qhia lawv lub luag haujlwm rau dab tsi:
oauth_token - lub cim rau kev nkag mus rau huab. Yuav tau los ntawm
cloud_id - huab identifier qhov twg peb yuav xa daim ntawv thov
folder_id - tus cim ntu uas peb yuav xa daim ntawv thov
service_account_id - tus lej nyiaj pabcuam kev pabcuam hauv ntu sib txuas ntawm huab.
duab_id - tus cim ntawm daim duab disk tau siv Packer
username ΠΈ lo lus zais - username thiab password kom nkag mus rau ob lub databases thiab Grafana web server
db npe - lub npe database hauv CH thiab MySQL pawg
public_key_path - txoj hauv kev rau cov ntaub ntawv nrog koj tus yuam sij ssh pej xeem, uas koj tuaj yeem siv los txuas hauv qab lub npe ubuntu
rau cov tshuab virtual nrog web servers
Kev teeb tsa tus kws kho mob
Tam sim no koj yuav tsum teeb tsa Terraform tus muab kev pabcuam - hauv peb rooj plaub, Yandex:
provider "yandex" {
token = var.oauth_token
cloud_id = var.cloud_id
folder_id = var.folder_id
zone = "ru-central1-a"
}
Koj yuav pom tias ntawm no peb tab tom siv cov kev hloov pauv uas tau teev tseg saum toj no.
Network thiab pawg
Tam sim no peb yuav tsim ib lub network uas cov ntsiab lus ntawm peb cov infrastructure yuav sib txuas lus, peb subnets (ib qho hauv txhua cheeb tsam) thiab tsa CH thiab MySQL pawg.
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
}
}
Raws li koj tuaj yeem pom, txhua qhov ntawm ob pawg tau tsim muaj kev ua txhaum loj heev los ntawm kev nyob hauv peb thaj chaw muaj.
Web servers
Nws yuav zoo li tias peb muaj peev xwm txuas ntxiv mus rau tib lub siab, tab sis kuv tau khiav mus rau qhov nyuaj. Ua ntej no, kuv thawj zaug tsa ib pawg MySQL thiab tsuas yog tom qab ntawd, paub txog nws tus ID, kuv tau sau ib daim duab disk nrog rau qhov yuav tsum tau teeb tsa, qhov twg kuv teev tus tswv tsev rau pawg. Tab sis tam sim no peb tsis paub pawg ID ua ntej tso Terraform, suav nrog thaum lub sijhawm tsim cov duab. Yog li ntawd, kuv yuav tsum tau ua raws li cov hauv qab no
Siv Amazon cov kev pabcuam metadata, peb yuav dhau qee qhov kev txwv rau lub tshuab virtual, uas nws yuav lees txais thiab ua tiav. Peb xav tau lub tshuab mus rau cov metadata qab MySQL pawg tswv tsev thiab username-password, uas tus neeg siv tau teev tseg hauv Terraform cov ntaub ntawv, tom qab pib. Cia peb hloov cov ntsiab lus ntawm cov ntaub ntawv me ntsis setup.sh
, uas khiav thaum lub tshuab virtual qhib.
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 pab pawg thiab balancer
Thaum rov tsim kho cov duab disk tshiab, peb tuaj yeem thaum kawg ntxiv peb cov ntaub ntawv rau Terraform.
Cia peb qhia tias peb xav siv cov duab disk uas twb muaj lawm:
data "yandex_compute_image" "grafana_image" {
image_id = var.image_id
}
Tam sim no cia peb tsim ib pawg piv txwv:
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"
}
}
Nws tsim nyog ua tib zoo saib seb peb kis nws mus rau hauv cov metadata li cas cluster_uri
, username
ΠΈ password
. Nws yog cov no tias lub tshuab virtual yuav tawm ntawm qhov pib thiab muab tso rau hauv Grafana config.
Nws yog nyob ntawm tus balancer.
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
}
}
}
}
Ib me ntsis qab zib
Tsuas tshuav me ntsis xwb. Tom qab cov txheej txheem raug xa mus, koj yuav tau mus rau Grafana UI thiab manually ntxiv CH pawg (tus ID uas tseem yuav tsum tau txais) ua Cov Ntaub Ntawv. Tab sis Terraform paub cov pawg ID. Cia peb tso siab rau nws coj qhov teeb meem mus rau fruition.
Cia peb ntxiv ib tus neeg muab kev pabcuam tshiab - Grafana, thiab muab nws tus lej IP chaw nyob ua tus tswv tsev. Txhua qhov kev hloov pauv uas Terraform ua rau ntawm lub tshuab uas nws qhov ntsuas ntsuas ntsuas yuav loj hlob hauv MySQL, thiab yog li ntawm tag nrho lwm lub tshuab.
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"
}
Wb comb peb cov plaub hau
Cia peb tso saib qhov sib npaug IP chaw nyob thiab tus tswv tsev ntawm ClickHouse pawg
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"
}
Koj khiav tau
Txhua tus! Peb cov ntaub ntawv teeb tsa tau npaj txhij thiab peb tuaj yeem, los ntawm kev teeb tsa qhov hloov pauv, qhia Terraform kom tsa txhua yam uas peb tau piav qhia saum toj no. Tag nrho cov txheej txheem coj kuv txog 15 feeb.
Thaum kawg koj tuaj yeem pom cov lus zoo nkauj:
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
Thiab nyob rau hauv huab, cov ntsiab lus ntawm cov tsa cov txheej txheem yuav pom:
Cia li muab cov ntsiab lus los sib piv
Tam sim no, siv Grafana ua piv txwv, txhua tus ntawm koj tuaj yeem xa cov ntawv thov nrog cov huab dav dav dav dav ntawm Yandex.Cloud platform. Cov cuab yeej pab tau los ntawm HashiCorp zoo li Packer thiab Terraform tuaj yeem pab koj nrog qhov no. Kuv vam tias ib tug neeg pom cov kab lus no muaj txiaj ntsig :)
PS Hauv qab no kuv yuav xa ib qhov txuas mus rau qhov chaw cia khoom uas koj tuaj yeem nrhiav cov zaub mov npaj npaj rau Packer thiab Terraform, cov khoom uas kuv tau muab rau hauv tsab xov xwm no.
Tau qhov twg los: www.hab.com