Moien alleguer! Als Deel vu menger Coursaarbecht hunn ech d'Fähigkeiten vun esou enger Haus Cloud Plattform wéi
Wat wëllt Dir kréien?
Nodeems Dir eng virtuell Maschinn mat engem Webserver lancéiert hutt, kënnt Dir op säi Host goen an e schéine UI kréien, Datenbanken als Quelle fir weider Aarbecht spezifizéieren, Dashboards a Grafike erstellen.
Der Basis Versioun huet e groussen Nodeel - et ass guer net Feeler-tolerant. Dat ass, déi ganz Funktionalitéit vun der Applikatioun hänkt vun der Viabilitéit vun enger virtueller Maschinn of. Wann et refuséiert oder 10 Leit d'UI zur selwechter Zäit opmaachen, da komme Problemer.
Si kënnen einfach geléist ginn: Dir musst just ... vill identesch virtuell Maschinnen mat engem Webserver ofsetzen an se ënner engem L3 Balancer setzen. Awer net alles ass hei sou kloer. Grafana späichert d'Benotzer Astellunge (Weeër zu Datenbanken, Dashboards, Grafiken, etc.) direkt op der Scheif vu senger virtueller Maschinn. Also, wa mir e puer Astellungen an der UI änneren, ginn dës Ännerungen nëmmen op der virtueller Maschinn reflektéiert wou de Balancer eis geschéckt huet. Dëst wäert zu inkonsistente Astellunge fir eis Applikatioun féieren, wat Problemer mam Start a Gebrauch verursaacht.
Hei kënnt eng aner Datebank zur Rettung, zum Beispill MySQL oder seng Äquivalent. Mir soen Grafana datt si Benotzer Astellungen an dëser "Ersatzspiller" Datebank späichere soll. Duerno ass et genuch fir de Wee zu dëser Datebank eemol op all Maschinn ze spezifizéieren, an all aner Benotzer-Astellungen op eng vun de virtuelle Maschinnen z'änneren; si ginn op déi aner verlängert.
Hei ass en Diagramm vun der definitiver Applikatiounsinfrastruktur:
Loosst eis léieren mat eisen Hänn opzehiewen
MySQL a ClickHouse
Ier Dir esou eng Applikatioun mat engem Klick op de Knäppchen deployéiert, war et néideg ze léieren wéi ee vu senge Komponenten handelt an se mateneen integréiert.
Hei hëlleft Yandex.Cloud eis, déi L3 Balancer, ClickHouse a MySQL als verwaltete Servicer ubitt. De Benotzer brauch nëmmen d'Parameteren ze spezifizéieren a waart bis d'Plattform alles an d'Aarbechtsplaz bréngt.
Ech hunn mech ugemellt, eng Wollek an e Bezuelkonto erstallt. Duerno sinn ech an d'Wollek gaang an hunn MySQL a ClickHouse Cluster mat minimalen Astellungen opgestallt. Ech hunn gewaart bis se aktiv ginn.
Dir musst och drun erënneren datt Dir eng Datebank an all Stärekoup erstellt an den Zougang dozou konfiguréiert mat engem Login a Passwuert. Ech ginn net an Detailer hei - alles ass ganz offensichtlech an der Interface.
Den net offensichtlechen Detail war datt dës Datenbanken vill Hosten hunn, déi hir Feeler Toleranz garantéieren. Wéi och ëmmer, Grafana erfuerdert genau een Host fir all Datebank mat deem se funktionnéiert. Laang liesen c-<cluster_id>.rw.mdb.yandexcloud.net
op den aktuellen aktive Masterhost vum Cluster mat der entspriechender ID kartéiert. Dëst ass wat mir Grafana ginn.
Webserver
Elo ass et un de Webserver. Loosst eis eng regulär virtuell Maschinn mat Linux erhéijen an Grafana manuell konfiguréieren.
Loosst eis iwwer ssh verbannen an déi néideg Packagen installéieren.
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
Duerno, loosst eis Grafana ënner systemctl lafen an de Plugin installéieren fir mat ClickHouse ze schaffen (jo, et gëtt net am Basispaket geliwwert).
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasource
Dat ass et, duerno mat engem einfachen Kommando
sudo service grafana-server start
mir starten de Webserver. Elo kënnt Dir déi extern IP Adress vun der virtueller Maschinn am Browser aginn, port 3000 spezifizéieren an de schéine Grafana UI gesinn.
Awer net presséiert, ier Dir Grafana opstellt, musst Dir drun erënneren et de Wee op MySQL ze soen fir d'Astellungen do ze späicheren.
Déi ganz Konfiguratioun vum Grafana Webserver ass an der Datei /etc/grafana/grafana.ini
. Déi erfuerderlech Linn gesäit esou aus:
;url =
Mir setzen den Host op de MySQL Cluster. Déi selwecht Datei enthält de Login a Passwuert fir Zougang zu Grafana am Bild hei uewen, déi als Standard allebéid gläich sinn admin
.
Dir kënnt sed Kommandoen benotzen:
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
Et ass Zäit de Webserver nei ze starten!
sudo service grafana-server restart
Elo an der Grafana UI spezifizéiere mir ClickHouse als DataSource.
Ech konnt eng Aarbechtskonfiguratioun mat de folgenden Astellungen erreechen:
Ech uginn als URL https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443
Alles! Mir hunn eng funktionéierend virtuell Maschinn mat engem Webserver verbonne mat CH a MySQL. Dir kënnt d'Dateset schonn op ClickHouse eroplueden an Dashboards bauen. Mir hunn eist Zil awer nach net erreecht an hunn keng vollwäerteg Infrastruktur agesat.
Packer
Yandex.Cloud erlaabt Iech e Scheifbild vun enger existéierender virtueller Maschinn ze kreéieren, an op senger Basis - all Zuel vu Maschinnen identesch mateneen. Dëst ass genau wat mir wäerte benotzen. Fir d'Bild bequem ze sammelen, huelt de Tool
Eis json Datei besteet aus zwee Blocken: Builder a Provisioner. Den éischte Block beschreift d'Parameter vum Bild selwer als Entitéit, an den zweete Block beschreift d'Instruktioune fir et mat dem néidegen Inhalt ze fëllen.
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"
}
],
...
}
An dëser Schabloun musst Dir den Identifizéierer vun der Sektioun an der Wollek setzen, wou Dir d'Bild erstellen wëllt, wéi och de Wee fir d'Datei mat de Schlësselen aus dem Servicekonto, dee virdrun an dëser Sektioun erstallt gouf. Dir kënnt méi iwwer d'Erstelle vu Servicekonten a Schlësselen a Form vun enger Datei an der entspriechender Rubrik liesen
Dës Konfiguratioun seet datt d'Disk Image baséiert op der Plattform gebaut gëtt ubuntu-1804-lts
, an der entspriechender Benotzersektioun an der Bildfamill gesat GRAFANA
ënner dem Numm grafana-{{timestamp}}
.
Provisoren
Elo kënnt de méi interessanten Deel vun der Konfiguratioun. Et wäert d'Sequenz vun Aktiounen beschreiwen, déi op der virtueller Maschinn ausgeführt musse ginn ier se säin Zoustand an e Scheifbild afréieren.
{
...,
"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"
]
}
]
}
Hei sinn all Aktiounen an 3 Etappen opgedeelt. Op der éischter Etapp gëtt en einfache Skript ausgefouert deen en Hilfsverzeechnes erstellt.
preparéieren-ctg.sh:
#!/bin/bash
sudo mkdir -p /opt/grafana
sudo chown -R ubuntu:ubuntu /opt/grafana
Op der nächster Stuf setzen mir e Skript an dësem Verzeichnis, deen direkt no der Start vun der virtueller Maschinn lancéiert muss ginn. Dëse Skript wäert d'Benotzervariablen setzen déi an der Grafana Konfiguratioun registréiert musse ginn an de Webserver nei starten.
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
Duerno bleiwen nach 3 Saachen ze maachen:
1) Packagen installéieren
2) lafen Grafana ënner systemctl an installéiert de ClickHouse Plugin
3) setzt de setup.sh Skript an der Startschlaang direkt nodeems Dir d'virtuell Maschinn aktivéiert.
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;
Elo bleift alles fir Packer ze lafen an d'Ausgabbild an der spezifizéierter Sektioun ze kréien. Wann Dir eng virtuell Maschinn erstellt, kënnt Dir se als Bootdisk auswielen an nom Start kritt Dir e fäerdege Grafana Webserver.
Instanz Grupp a Balancer
Wann mir en Disk Image hunn, deen eis erlaabt vill identesch Grafana Webserver ze kreéieren, kënne mir eng Instanzgrupp erstellen. Op der Yandex.Cloud Plattform bezitt dëse Begrëff op d'Gewerkschaft vu virtuelle Maschinnen, déi déiselwecht Charakteristiken hunn. Wann Dir eng Instanzgrupp erstellt, gëtt de Prototyp vun alle Maschinnen an dëser Grupp konfiguréiert, an dann d'Charakteristike vun der Grupp selwer (zum Beispill d'Mindest- a Maximalzuel vun aktive Maschinnen). Wann déi aktuell Zuel dës Critèren net entsprécht, da wäert d'Instanzgrupp selwer onnéideg Maschinnen ewechhuelen oder nei a sengem eegene Bild erstellen.
Als Deel vun eiser Aufgab wäerte mir eng Instanzgrupp vu Webserver erstellen, déi aus dem virdru erstallte Disk Image generéiert ginn.
Wat wierklech bemierkenswäert ass ass déi lescht Instanz Grupp Setup. D'Zilgrupp an der Integratioun mam Load Balancer hëlleft Iech fir e L3 Balancer uewen op de virtuelle Maschinnen vun dëser Grupp ze konfiguréieren andeems Dir e puer Knäppercher klickt.
Beim Astellung vum Balancer hunn ech zwee wichteg Punkten ëmgesat:
- Ech hunn de Balancer de Benotzerverkéier um Hafen 80 akzeptéiert an et op den Hafen 3000 vun de virtuelle Maschinnen ëmgeleet, genau wou Grafana wunnt.
- Ech hunn opgestallt d'Viabilitéit vu Maschinnen ze kontrolléieren andeems se se op den Hafen 3000 pingelen.
Mini Resumé
Schlussendlech konnte mir déi gewënscht Applikatiounsinfrastruktur manuell ofsetzen, an elo hu mir en héich elastesche Grafana Service. Dir braucht nëmmen d'IP Adress vum Balancer ze kennen als Entrée fir d'Applikatioun an den Host vum ClickHouse Cluster fir d'Dateset an et ze lueden.
Et géif schéngen wéi eng Victoire? Jo, Victoire. Mee eppes duercherneen mech nach. De ganze Prozess hei uewen erfuerdert vill manuell Schrëtt an ass guer net skalierbar; Ech wéilt et automatiséieren wa méiglech. Dëst ass wat déi nächst Sektioun gewidmet ass.
Terraform Integratioun
Mir wäerten erëm en Outil vun HashiCorp benotzen genannt
All Aarbecht mat Terraform geet erof op d'Schreiwen vun enger Konfiguratiounsdatei (*.tf
) an d'Schafe vun Infrastrukturen op der Basis.
Verännerlechen
Ganz am Ufank vum Fichier wäerte mir Variablen enthalen déi bestëmmen wou a wéi déi zukünfteg Infrastruktur agesat gëtt.
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>"
}
De ganze Applikatiouns-Deploymentprozess wäert erofgoen fir en Disk Image ze bauen an dës Variablen ze setzen. Loosst mech erkläre fir wat se verantwortlech sinn:
oauth_token - en Token fir Zougang zu der Wollek. Kann duerch kritt ginn
cloud_id - Cloud Identifizéierer wou mir d'Applikatioun ofsetzen
folder_id - Sektioun Identifizéierer wou mir d'Applikatioun ofsetzen
service_account_id - Service Account Identifizéierer an der entspriechender Sektioun vun der Wollek.
image_id - Identifizéierer vum Disk Image kritt mat Packer
Benotzernumm и Passwuert - Benotzernumm a Passwuert fir Zougang zu béid Datenbanken an de Grafana Webserver
dbnumm - Datebank Numm bannent CH a MySQL Cluster
public_key_path - Wee op d'Datei mat Ärem ëffentleche ssh Schlëssel, deen Dir benotze kënnt fir ënner dem Numm ze verbannen ubuntu
zu virtuelle Maschinnen mat Webserver
Provider Setup
Elo musst Dir den Terraform Provider konfiguréieren - an eisem Fall, Yandex:
provider "yandex" {
token = var.oauth_token
cloud_id = var.cloud_id
folder_id = var.folder_id
zone = "ru-central1-a"
}
Dir wäert feststellen datt hei mir d'Variabelen benotzen déi hei uewen definéiert sinn.
Netzwierk a Stärekéip
Elo wäerte mir en Netz erstellen an deem Elementer vun eiser Infrastruktur kommunizéieren, dräi Subnets (een an all Regioun) an CH an MySQL Cluster erhéijen.
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
}
}
Wéi Dir kënnt gesinn, ass jidderee vun deenen zwee Stärekéip zimmlech Feelertolerant erstallt andeems se an dräi Disponibilitéitszonen lokaliséiert sinn.
Web Serveren
Et géif schéngen datt mir am selwechte Geescht weiderfuere kënnen, awer ech sinn a Schwieregkeeten gerannt. Virun dësem hunn ech fir d'éischt e MySQL Cluster opgeworf an eréischt duerno, well ech seng ID kennen, hunn ech e Disk Image mat der erfuerderter Konfiguratioun gesammelt, wou ech den Host an de Cluster spezifizéiert hunn. Awer elo kennen mir d'Cluster ID net ier Dir Terraform lancéiert, och zum Zäitpunkt vum Bau vum Bild. Dofir hunn ech missen op déi folgend zréckgräifen
Mat Amazon's Metadatenservice benotze mir e puer Parameteren un déi virtuell Maschinn, déi se akzeptéiert a veraarbecht. Mir brauchen d'Maschinn fir op d'Metadaten hannert dem MySQL Clusterhost a Benotzernumm-Passwuert ze goen, wat de Benotzer an der Terraform-Datei spezifizéiert huet, nom Start. Loosst eis den Inhalt vun der Datei liicht änneren setup.sh
, déi leeft wann déi virtuell Maschinn ageschalt ass.
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
Intanz Grupp a Balancer
Nodeems mir en neit Disk Image nei opgebaut hunn, kënne mir endlech eis Datei fir Terraform derbäisetzen.
Loosst eis uginn datt mir en existent Disk Image benotze wëllen:
data "yandex_compute_image" "grafana_image" {
image_id = var.image_id
}
Loosst eis elo eng Instanzgrupp erstellen:
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"
}
}
Et ass derwäert opmierksam ze maachen wéi mir et an d'Metadaten iwwerginn hunn cluster_uri
, username
и password
. Et ass dës déi d'virtuell Maschinn beim Start eraushëlt an an d'Grafana Config setzt.
Et ass un de 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
}
}
}
}
E bësse Zocker
Et bleift nëmmen e bëssen. Nodeems d'Infrastruktur ofgesat ass, musst Dir op d'Grafana UI goen an den CH Cluster manuell addéieren (d'ID vun deem nach ëmmer kritt muss ginn) als Datenquell. Awer Terraform weess de Cluster ID. Loosst eis him uvertraut d'Saach op d'Been ze bréngen.
Loosst eis en neie Provider addéieren - Grafana, a gitt hir d'IP Adress vum Balancer als Host. All Ännerungen déi Terraform op der Maschinn mécht, wou säi Balancer bestëmmt, wäerten am MySQL wuessen, an dofir op all aner Maschinnen.
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"
}
Komm mir kämmen eis Hoer
Loosst eis d'Balancer IP Adress an den Host vum ClickHouse Cluster weisen
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"
}
Dir kënnt lafen
Alles! Eis Konfiguratiounsdatei ass prett a mir kënnen, andeems Dir d'Variabelen setzt, Terraform soen fir alles z'erhéijen wat mir hei uewen beschriwwen hunn. De ganze Prozess huet mech ongeféier 15 Minutten gedauert.
Um Enn kënnt Dir e schéine Message gesinn:
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
An an der Wollek wäerten Elementer vun der opgehuewe Infrastruktur siichtbar sinn:
Loosst eis d'Resultater summen
Elo, mat Grafana als Beispill, kann jidderee vun iech Uwendungen mat enger verbreeter Cloudarchitektur op der Yandex.Cloud Plattform ofsetzen. Nëtzlech Tools vun HashiCorp wéi Packer an Terraform kënnen Iech mat dësem hëllefen. Ech hoffen, datt een dësen Artikel nëtzlech fënnt :)
PS Hei drënner wäert ech e Link op de Repository befestegt wou Dir fäerdeg Rezepter fir Packer an Terraform fannt, Fragmenter vun deenen ech an dësem Artikel geliwwert hunn.
Source: will.com