Aloha kākou! Ma ke ʻano he ʻāpana o kaʻu hana papa, ua noiʻi au i nā hiki o kēlā ʻano paepae ao ʻāina e like me
He aha kāu makemake e loaʻa?
Ma hope o ka hoʻokuʻu ʻana i kahi mīkini virtual me kahi kikowaena pūnaewele, hiki iā ʻoe ke hele i kāna mea hoʻokipa a kiʻi i kahi UI nani, e kuhikuhi i nā ʻikepili i kumu no ka hana hou aku, hana i nā dashboards a me nā kiʻi.
He hoʻokahi drawback koʻikoʻi ka mana kumu - ʻaʻole ia e hoʻomanawanui i ka hewa. ʻO ia hoʻi, ʻo ka hana holoʻokoʻa o ka noi e pili ana i ka viability o hoʻokahi mīkini virtual. Inā hōʻole a i ʻole 10 poʻe e wehe i ka UI i ka manawa like, a laila e kū mai nā pilikia.
Hiki iā lākou ke hoʻoholo maʻalahi: pono ʻoe e ... hoʻopololei i nā mīkini virtual like me kahi kikowaena pūnaewele a waiho iā lākou ma lalo o kahi mea kaulike L3. Akā ʻaʻole maopopo loa nā mea a pau ma ʻaneʻi. Mālama ʻo Grafana i nā hoʻonohonoho mea hoʻohana (nā ala i ka ʻikepili, nā dashboards, nā kiʻi, a me nā mea ʻē aʻe) pololei ma ka disk o kāna mīkini virtual. No laila, inā hoʻololi mākou i kekahi mau hoʻonohonoho i ka UI, e ʻike ʻia kēia mau hoʻololi ma ka mīkini virtual kahi i hoʻouna ʻia ai ka mea kaulike iā mākou. E alakaʻi kēia i nā hoʻonohonoho like ʻole no kā mākou noi, e hoʻopilikia ai i ka hoʻomaka ʻana a me ka hoʻohana ʻana.
Ma ʻaneʻi e hele mai kahi waihona ʻikepili e hoʻopakele, no ka laʻana, MySQL a i ʻole ka mea like. Haʻi mākou iā Grafana e mālama ʻo ia i nā hoʻonohonoho mea hoʻohana ma kēia waihona "hoʻokoe". Ma hope iho, lawa ka wehewehe ʻana i ke ala i kēia waihona i hoʻokahi manawa ma kēlā me kēia mīkini, a hoʻoponopono i nā hoʻonohonoho mea hoʻohana ʻē aʻe ma kekahi o nā mīkini virtual; e hoʻonui lākou i nā mea ʻē aʻe.
Eia ke kiʻikuhi o ka ʻōnaehana noi hope loa:
E aʻo kākou i ka hāpai ʻana me nā lima
MySQL a me ClickHouse
Ma mua o ka hoʻohana ʻana i ia palapala noi me ke kaomi ʻana i kahi pihi, pono e aʻo pehea e mālama ai i kēlā me kēia ʻāpana a hoʻohui pū kekahi me kekahi.
Eia ʻo Yandex.Cloud e kōkua iā mākou, e hāʻawi ana i nā mea kaulike L3, ClickHouse a me MySQL e like me nā lawelawe i hoʻokele ʻia. Pono ka mea hoʻohana e kuhikuhi i nā ʻāpana a kali a hiki i ka paena e lawe i nā mea āpau i ka hana hana.
Ua hoʻopaʻa inoa wau, hana i kahi ao a me kahi moʻokāki uku. Ma hope o kēlā, hele au i ke ao a hoʻonohonoho i nā pūʻulu MySQL a me ClickHouse me nā hoʻonohonoho liʻiliʻi. Ua kali au a hiki i ko lakou ikaika.
Pono ʻoe e hoʻomanaʻo e hana i kahi waihona i kēlā me kēia puʻupuʻu a hoʻonohonoho i ke komo ʻana iā ia me ka hoʻohana ʻana i ka inoa inoa a me ka ʻōlelo huna. ʻAʻole wau e hele i nā kikoʻī ma aneʻi - maopopo loa nā mea āpau i ka interface.
ʻO nā kikoʻī i ʻike ʻole ʻia ʻo ia ka nui o kēia mau waihona, e hōʻoiaʻiʻo ana i ko lākou hoʻomanawanui hewa. Eia nō naʻe, pono ʻo Grafana i hoʻokahi host no kēlā me kēia waihona e hana pū me ia. Heluhelu lōʻihi c-<cluster_id>.rw.mdb.yandexcloud.net
palapala ʻia i ka pūʻali haku hana o kēia manawa me ka ID pili. ʻO kēia kā mākou e hāʻawi aku iā Grafana.
kikowaena pūnaewele
I kēia manawa aia i ka pūnaewele pūnaewele. E hoʻokiʻekiʻe mākou i kahi mīkini virtual maʻamau me Linux a hoʻonohonoho lima iā Grafana ma luna.
E hoʻopili kākou ma o ssh a hoʻokomo i nā pūʻolo pono.
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
Ma hope o kēlā, e holo kāua Grafana ma lalo o systemctl a hoʻokomo i ka plugin no ka hana ʻana me ClickHouse (ʻae, ʻaʻole ia i hoʻolako ʻia i ka waihona kumu).
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasource
ʻO ia, ma hope o kēlā me ke kauoha maʻalahi
sudo service grafana-server start
e hoʻomaka mākou i ka pūnaewele pūnaewele. I kēia manawa hiki iā ʻoe ke hoʻokomo i ka IP address waho o ka mīkini virtual i ka polokalamu kele pūnaewele, e kuhikuhi i ke awa 3000 a ʻike i ka nani Grafana UI.
Akā, mai wikiwiki, ma mua o ka hoʻonohonoho ʻana iā Grafana, pono ʻoe e hoʻomanaʻo e haʻi iā ia i ke ala i MySQL i mea e mālama ai i nā hoʻonohonoho ma laila.
Aia ka hoʻonohonoho holoʻokoʻa o ka pūnaewele pūnaewele Grafana i ka faila /etc/grafana/grafana.ini
. ʻO ka laina i makemake ʻia e like me kēia:
;url =
Hoʻonoho mākou i ka mea hoʻokipa i ka pūʻulu MySQL. Aia ka waihona hoʻokahi i ka inoa inoa a me ka ʻōlelo huna no ke komo ʻana iā Grafana ma ke kiʻi ma luna, a ma ke ʻano maʻamau, ua like nā mea ʻelua admin
.
Hiki iā ʻoe ke hoʻohana i nā kauoha 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
ʻO ka manawa kēia e hoʻomaka hou ai i ke kikowaena pūnaewele!
sudo service grafana-server restart
I kēia manawa ma ka Grafana UI e kuhikuhi mākou iā ClickHouse ma kahi DataSource.
Ua hiki iaʻu ke hoʻokō i kahi hoʻonohonoho hana me kēia mau hoʻonohonoho:
Ua wehewehe au i ka URL https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443
ʻO nā mea a pau! Loaʻa iā mākou kahi mīkini virtual hana me kahi kikowaena pūnaewele i pili iā CH a me MySQL. Hiki iā ʻoe ke hoʻouka i ka ʻikepili i ClickHouse a kūkulu i nā dashboards. Akā naʻe, ʻaʻole mākou i hoʻokō i kā mākou pahuhopu a ʻaʻole i hoʻokau i kahi ʻōnaehana piha.
nā mea hoʻopuka
ʻAe ʻo Yandex.Cloud iā ʻoe e hana i kahi kiʻi disk o kahi mīkini virtual e kū nei, a ma luna o kāna kumu - kekahi helu o nā mīkini e like me kekahi. ʻO kēia ka mea a mākou e hoʻohana ai. No ka hōʻuluʻulu maʻalahi i ke kiʻi, e lawe i ka mea hana
ʻO kā mākou faila json he ʻelua poloka: nā mea kūkulu hale a me nā mea hoʻolako. Hōʻike ka poloka mua i nā ʻāpana o ke kiʻi ponoʻī ma ke ʻano he hui, a ʻo ka poloka ʻelua e wehewehe i nā ʻōlelo kuhikuhi no ka hoʻopiha ʻana me nā mea e pono ai.
e uhau ana
{
"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"
}
],
...
}
I loko o kēia hiʻohiʻona, pono ʻoe e hoʻonohonoho i ka ʻike o ka ʻāpana i ke ao kahi āu e makemake ai e hana i ke kiʻi, a me ke ala i ka faila me nā kī mai ka moʻokāki lawelawe i hana mua ʻia ma kēia ʻāpana. Hiki iā ʻoe ke heluhelu hou aʻe e pili ana i ka hana ʻana i nā moʻokāki lawelawe a me nā kī ma ke ʻano o kahi faila ma ka ʻāpana pili
'Ōlelo kēia hoʻonohonoho e kūkulu ʻia ke kiʻi disk ma muli o ka paepae ubuntu-1804-lts
, waiho ʻia ma ka ʻāpana mea hoʻohana kūpono i ka ʻohana kiʻi GRAFANA
malalo o ka inoa grafana-{{timestamp}}
.
Nā mea hoʻolako
Ke hele mai nei ka ʻāpana hoihoi o ka hoʻonohonoho. E wehewehe ia i ke kaʻina o nā hana e pono ai ke hana ʻia ma ka mīkini virtual ma mua o ka hoʻokuʻu ʻana i kona kūlana i kahi kiʻi 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"
]
}
]
}
Eia nā hana a pau i māhele ʻia i 3 pae. I ka pae mua, hoʻokō ʻia kahi palapala maʻalahi e hana i kahi papa kuhikuhi kōkua.
prepare-ctg.sh:
#!/bin/bash
sudo mkdir -p /opt/grafana
sudo chown -R ubuntu:ubuntu /opt/grafana
I ka pae aʻe, kau mākou i kahi palapala i kēia papa kuhikuhi, pono e hoʻomaka koke ʻia ma hope o ka hoʻomaka ʻana i ka mīkini virtual. E hoʻokomo kēia palapala i nā mea hoʻohana e pono e hoʻopaʻa inoa ʻia ma ka config Grafana a hoʻomaka hou i ka kikowaena pūnaewele.
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
Ma hope o kēia, he 3 mau mea i koe e hana ai:
1) hoʻokomo i nā pūʻolo
2) holo iā Grafana ma lalo o systemctl a hoʻokomo i ka plugin ClickHouse
3) hoʻokomo i ka setup.sh script i ka laina hoʻomaka ma hope koke o ka hoʻohuli ʻana i ka mīkini 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;
I kēia manawa, ʻo ka holo ʻana iā Packer a hoʻokomo i ke kiʻi puka i loko o ka ʻāpana i kuhikuhi ʻia. I ka hana ʻana i kahi mīkini virtual, hiki iā ʻoe ke koho iā ia ma ke ʻano he boot disk a ma hope o ka hoʻomaka ʻana e loaʻa iā ʻoe kahi kikowaena pūnaewele ʻo Grafana i mākaukau.
ʻO ka hui a me ka mea kaulike
Ke loaʻa iā mākou kahi kiʻi disk e hiki ai iā mākou ke hana i nā kikowaena pūnaewele Grafana like ʻole, hiki iā mākou ke hana i kahi hui kumu. Ma ka Yandex.Cloud platform, pili kēia huaʻōlelo i ka hui ʻana o nā mīkini virtual i loaʻa nā ʻano like. I ka hana ʻana i kahi hui hoʻohālikelike, hoʻonohonoho ʻia ka prototype o nā mīkini āpau i kēia pūʻulu, a laila nā hiʻohiʻona o ka hui ponoʻī (no ka laʻana, ka helu liʻiliʻi a me ka nui o nā mīkini hana). Inā ʻaʻole i hoʻokō ka helu o kēia manawa i kēia mau koina, a laila e wehe ka hui i nā mīkini pono ʻole a hana paha i nā mea hou i kona kiʻi ponoʻī.
Ma ke ʻano o kā mākou hana, e hana mākou i kahi hui o nā kikowaena pūnaewele e hana ʻia mai ke kiʻi disk i hana mua ʻia.
ʻO ka mea kupaianaha maoli ka hoʻonohonoho hui hope loa. E kōkua ka pūʻulu i hoʻohui ʻia me Load Balancer iā ʻoe e hoʻonohonoho i kahi mea kaulike L3 ma luna o nā mīkini virtual o kēia pūʻulu ma ke kaomi ʻana i ʻelua mau pihi.
I ka hoʻonohonoho ʻana i ka mea kaulike, ua hoʻokō au i ʻelua mau mea nui:
- Ua hana au i ka mea kaulike e ʻae i ka hele ʻana o nā mea hoʻohana ma ke awa 80 a hoʻihoʻi hou iā ia i ke awa 3000 o nā mīkini virtual, kahi e noho ai ʻo Grafana.
- Hoʻonohonoho au i ka nānā ʻana i ka hiki ʻana o nā mīkini ma ke kaomi ʻana iā lākou i ke awa 3000.
Hōʻuluʻulu liʻiliʻi
ʻO ka mea hope loa, ua hiki iā mākou ke hoʻokau lima lima i ka ʻōnaehana noi i makemake ʻia, a i kēia manawa ua loaʻa iā mākou kahi lawelawe Grafana ikaika loa. Pono ʻoe e ʻike i ka IP address o ka mea kaulike ma ke ʻano he wahi komo i ka noi a me ka pūʻali o ka hui ClickHouse i mea e hoʻouka ai i ka dataset i loko.
Me he mea lā he lanakila? ʻAe, lanakila. Akā, ua huikau kekahi mea iaʻu. ʻO ke kaʻina holoʻokoʻa ma luna nei e koi i ka nui o nā ʻanuʻu manual a ʻaʻole hiki ke hoʻonui ʻia; Makemake wau e hoʻokaʻawale iā ia inā hiki. ʻO kēia ka mea e hoʻolaʻa ʻia ai ka pauku aʻe.
Hoʻohui Terraform
E hoʻohana hou mākou i kahi mea hana mai HashiCorp i kapa ʻia
ʻO nā hana āpau me Terraform e iho i lalo i ke kākau ʻana i kahi faila hoʻonohonoho (*.tf
) a me ka hoʻokumu ʻana i nā ʻōnaehana ma muli o ia.
Nā Loli
I ka hoʻomaka ʻana o ka faila, e hoʻokomo mākou i nā mea hoʻololi e hoʻoholo ai i hea a pehea e hoʻonohonoho ʻia ai ka ʻōnaehana e hiki mai ana.
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>"
}
E iho mai ke kaʻina hana holoʻokoʻa no ke kūkulu ʻana i kahi kiʻi disk a hoʻonohonoho i kēia mau ʻano. E wehewehe au i ke kuleana o lākou:
oauth_token - he hōʻailona no ke komo ʻana i ke ao. Hiki ke loaʻa ma
cloud_id - ka ʻike kapua kahi e kau ai mākou i ka noi
waihona_id - ʻāpana ʻāpana kahi e kau ai mākou i ka noi
service_account_id - ʻike moʻokāki lawelawe ma ka ʻāpana pili o ke ao.
kiʻi_id - ka mea hōʻike o ke kiʻi disk i loaʻa me ka hoʻohana ʻana iā Packer
inoa mea hoʻohana и hua huna — inoa inoa a me ka ʻōlelo huna no ke komo ʻana i nā ʻikepili ʻelua a me ke kikowaena pūnaewele ʻo Grafana
dbname - inoa waihona i loko o nā pūʻulu CH a me MySQL
public_key_path - ala i ka faila me kāu kī ssh lehulehu, hiki iā ʻoe ke hoʻohana e hoʻopili ma lalo o ka inoa ubuntu
i nā mīkini uila me nā kikowaena pūnaewele
Hoʻonohonoho mea hoʻolako
I kēia manawa pono ʻoe e hoʻonohonoho i ka mea hoʻolako Terraform - i kā mākou hihia, Yandex:
provider "yandex" {
token = var.oauth_token
cloud_id = var.cloud_id
folder_id = var.folder_id
zone = "ru-central1-a"
}
E ʻike ʻoe ma ʻaneʻi ke hoʻohana nei mākou i nā mea hoʻololi i wehewehe ʻia ma luna.
Pūnaewele a me nā pūʻulu
I kēia manawa, e hana mākou i kahi pūnaewele kahi e kamaʻilio ai nā mea o kā mākou ʻoihana, ʻekolu subnets (hoʻokahi ma kēlā me kēia māhele) a hoʻonui i nā pūʻulu CH a me 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
}
}
E like me kāu e ʻike ai, ua hana ʻia kēlā me kēia o nā puʻupuʻu ʻelua me ka hoʻomanawanui hewa ʻole ma o ka waiho ʻia ʻana i ʻekolu mau wahi i loaʻa.
Nā kikowaena pūnaewele
Me he mea lā hiki iā mākou ke hoʻomau i ka manaʻo hoʻokahi, akā ua holo wau i loko o ka pilikia. Ma mua o kēia, ua hoʻāla mua wau i kahi hui MySQL a ma hope wale nō, me ka ʻike ʻana i kāna ID, ua hōʻiliʻili wau i kahi kiʻi disk me ka hoʻonohonoho pono, kahi aʻu i kuhikuhi ai i ka mea hoʻokipa i ka hui. Akā i kēia manawa ʻaʻole mākou ʻike i ka cluster ID ma mua o ka hoʻokuʻu ʻana iā Terraform, me ka manawa o ke kūkulu ʻana i ke kiʻi. No laila, pono wau e hoʻohana i kēia mau mea
Ke hoʻohana nei i ka lawelawe metadata a Amazon, e hāʻawi mākou i kekahi mau ʻāpana i ka mīkini virtual, nāna e ʻae a hana. Pono mākou i ka mīkini e hele i ka metadata ma hope o ka MySQL cluster host a me ka inoa inoa-password, i ʻōlelo ʻia e ka mea hoʻohana i ka faila Terraform, ma hope o ka hoʻomaka. E hoʻololi iki i nā mea o ka faila setup.sh
, e holo ana i ka wā e ho'ā ai ka mīkini virtual.
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
ʻO ka hui intance a me ke kaulike
Ke kūkulu hou ʻana i kahi kiʻi disk hou, hiki iā mākou ke hoʻohui hope i kā mākou faila no Terraform.
E hōʻike mākou makemake mākou e hoʻohana i kahi kiʻi disk i loaʻa:
data "yandex_compute_image" "grafana_image" {
image_id = var.image_id
}
I kēia manawa, e hana mākou i hui pūʻulu:
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"
}
}
Pono e hoʻolohe i ke ʻano o kā mākou hoʻoili ʻana i ka metadata cluster_uri
, username
и password
. ʻO kēia ka mea e lawe ai ka mīkini virtual i ka hoʻomaka ʻana a hoʻokomo i ka config Grafana.
Aia i ka mea kaulike.
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
}
}
}
}
He wahi kō
He wahi koe i koe. Ma hope o ka hoʻoili ʻia ʻana o ka ʻōnaehana, pono ʻoe e hele i ka UI Grafana a hoʻohui lima i ka pūʻulu CH (ʻo ia ka ID e pono e loaʻa) ma ke ʻano he ʻikepili. Akā ʻike ʻo Terraform i ka cluster ID. E hāʻawi aku iā ia i ka hoʻokō ʻana i ka mea.
E hoʻohui i kahi mea hoʻolako hou - Grafana, a hāʻawi iā ia i ka helu IP o ka mea kaulike ma ke ʻano he mea hoʻokipa. ʻO nā hoʻololi āpau a Terraform e hana ai ma ka mīkini kahi e hoʻoholo ai kāna mea kaulike e ulu i MySQL, a no laila ma nā mīkini ʻē aʻe.
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"
}
E pulu i ko kakou lauoho
E hōʻike i ka helu IP kaulike a me ka pūʻali o ka hui 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"
}
Hiki iā ʻoe ke holo
ʻO nā mea a pau! Ua mākaukau kā mākou faila hoʻonohonoho a hiki iā mākou, ma ka hoʻonohonoho ʻana i nā mea hoʻololi, e haʻi iā Terraform e hoʻāla i nā mea āpau a mākou i wehewehe ai ma luna. ʻO ka hana holoʻokoʻa i lawe iaʻu ma kahi o 15 mau minuke.
I ka hopena hiki iā ʻoe ke ʻike i kahi leka nani:
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
A i loko o ke ao, e ʻike ʻia nā mea o ka ʻoihana hoʻokiʻekiʻe:
E hōʻuluʻulu i nā hualoaʻa
I kēia manawa, me ka hoʻohana ʻana iā Grafana ma ke ʻano he laʻana, hiki i kēlā me kēia o ʻoukou ke kau i nā noi me kahi hoʻolālā ao ākea ma ka paepae Yandex.Cloud. Hiki i nā mea kōkua kōkua mai HashiCorp e like me Packer a me Terraform ke kōkua iā ʻoe me kēia. Manaʻo wau e ʻike kekahi i kēia ʻatikala he mea pono :)
PS Ma lalo wau e hoʻopili i kahi loulou i ka waihona kahi e loaʻa ai iā ʻoe nā meaʻai mākaukau no Packer a me Terraform, nā ʻāpana aʻu i hāʻawi ai i kēia ʻatikala.
Source: www.habr.com