á°áá ááá˝áá! áĽáá° á¨áŽááľ áľáŤáŹáŁ áĽáá° á¨ááá ááľáĽ á¨á°áá ááľá¨á á á
áá ááááŹáŤáá
áá ááá á ááááá?
á¨áášáá áá˝áá á¨áľá á áááá áá á¨áááá á áá áá° á áľá°ááá áá°á á¨ááŤáá UI ááááľ áľá˝ááá ᣠá¨ááἠááłáá˝á áááŁá áľáŤ áĽáá° ááá áááá ᣠáłá˝áŚááśá˝á áĽá ááŤáá˝á ááá á áľá˝ááá á˘
á¨áá á¨áłáá áľáŞáľ á ááľ ááá ááľááľ á áá - á ááŤá˝ áľá á°áľá á¨áááá á áá°ááᢠáŤá áááľ á¨áá°áá áŞáŤá á á ááá á°ááŁá á á ááľ áááŁá áá˝á áá á¨á°áá°á¨á° áá. áĽáᢠáŤá ááá 10 á°áá˝ á á°ááłáłá áá UI á á¨á¨ááą á˝ááŽá˝ áá¨á°áłáá˘
á ááá áááą áá˝ááᥠáĽááľá áĽáť... áĽá á°ááłáłá áááŁá áá˝áá˝á á¨áľá á áááá áá áá°ááŤáľ áĽá á L3 ááá áľá ááľááἠáŤáľáááááłáᢠáá áĽáá ááá ááá ááá˝ á áá°áá. ááŤáá á¨á°á áá á ááĽáŽá˝á (áá° áłáłá¤á áąáŤáá˝áŁ áłá˝áŚááśá˝áŁ ááŤáá˝áŁ ááá°) á ááĽáł á á¨áášáá áá˝á á˛áľá áá áŤá¨ááťáᢠáľááá á áŠá á ááľáĽ á ááłááľ á ááĽáŽá˝á á¨áá¨áá áĽááá áááŚá˝ ááá á áá¨ááá áľ áááŁá áá˝á áá áĽáť ááá¸áŁá¨ááᢠáá ááá°áá áŞáŤá˝á ááĽááľ á¨ááá¸á á ááĽáŽá˝á áŤááŁáᣠá ááľááá áĽá á á ááá áá á˝áá áááĽáŤáá˘
áĽáá áá á¨ááἠááł áááłá áááŁáᣠáááłáᣠMySQL ááá á°ááłáłáᢠáááŤáá á¨á°á áá á áá áśá˝á á áá "áááááŤ" á¨ááἠááł ááľáĽ áá¨áá¸áľ áĽááłááŁáľ áĽááááŤááᢠá¨á፠á áá á áĽáŤááłááą áá˝á áá áá°áá áłáłá¤á á¨áááľá°áá ááááľ á ááľ áá ááĽááľ á á ááááᣠáĽá áááá á¨á°á áá ááźáśá˝ á ááááá á¨áášáá áá˝áá˝ áá áŤááľáᤠáá°ááášá áááááá˘
á¨áá¨á¨áťá á¨áľáá ፠áá á¨á° áááľ ááľá áá¸áá:
á áĽáá˝á áááłáľá áĽááá
MySQL áĽá ClickHouse
áĽáá˛á ááááąá áá°áá áŞáŤ á á ááľ ááá á á á¨ááľá¨áá á ááľ áĽáŤááłááąá á áŤááľ áĽáá´áľ áĽáá°ááá áĽá áĽááľ á áĽááľ áĽáá´áľ áĽáá°ááááą ááá á áľááá áá áá˘
áĽáá Yandex.Cloud áá¨áłáá, áĽáąá L3 balancers, ClickHouse áĽá MySQL áĽáá° á¨áá°áłá°áŠ á áááááśá˝ áŤáááŁá. á°á ááá áááŞáŤáášá áĽáť áááá˝ áĽá á¨ááłáŞáŤ áľáááą áááá ááá áá° áĽáŤá áĽáľáŞáŤáᣠáľá¨áľ áá á á á áá áľ.
á°áááá¤áŤááᣠá°áá áĽá á¨áá፠áá፠áá ááŠá˘ á¨á፠á áá áá° á°ááá áá MySQL áĽá ClickHouse áľáĽáľáŚá˝á á áľááš á áá áśá˝ á ááááᢠáá áĽáľáŞáá áľá¨áľ á áĽáá ááá˘
áĽáá˛áá á áĽáŤááłááą áááľá°á ááľáĽ á¨ááἠááł ááá á áĽá á¨ááá˘áŤ áĽá á¨ááá áá á áá áá á¨áĽáąá ááłá¨áť áááá áĽááłááŚáľ ááľáłááľ áŤáľáááááłáᢠáĽáá áá° ááááŽá˝ á áááŁá - á á ááááš ááľáĽ ááá ááá á áŁá ááá ááá˘
ááá˝ áŤáááá áááá áĽááá
á¨ááἠááłáá˝ áĽá á áľá°áááá˝ á áá¸á áá
á á¨áĽááąá áĽááľ ááťáťá áŤá¨áááŁáᢠááá ááŤáá ááá°áŤá áĽáŤááłááą áłáłá¤á á áľááá á ááľ á áľá°ááá
áááááᢠá¨á
á ááŁáĽ c-<cluster_id>.rw.mdb.yandexcloud.net
á¨á°ááá ááłáá፠áá á áá ááá á¨áááľá°á áá á áľá°ááá
áŤááł á°ááá
áˇáᢠáááŤáá á¨ááá°á á áá
ááá˘
á¨áľá á áááá
á áá á¨áľá¨-áá˝ á áááá ááᢠáá°á á á¨áášáá áá˝áá á¨ááááľ áá áĽááłáľá áĽá ááŤáááá á áĽáą áá áĽááá áá˘
á ssh á áŠá áĽáááá áĽá á áľááááášá áĽá áá˝ áĽááá.
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
á¨á፠á áá Grafanaá á systemctl áľá áĽááľáŹáľ áĽá ᨠClickHouse áá áááľáŤáľ á°á°áŞáá áĽááá (á á á áá á¨áłá áĽá á ááľáĽ á ááá¨á á)á˘
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasource
፠áá ᣠá¨á፠á áá á ááá áľáĽáá
sudo service grafana-server start
á¨áľá á áááá áĽááááŤáá. á áá á á áłáš ááľáĽ á¨á¨áášáá áá˝áá ááŤá á áá á áľáŤáť á áľááĽá°á áá°áĽ 3000 ááááš áĽá ᨠGrafana UI á áááá¨áąá˘
áá á áá¸áŠáᣠááŤááá á¨áááá áá á ááľáŁ á ááĽáŽášá áĽá፠ááá¨áá¸áľ áá° MySQL á¨áááľá°áá ááááľ áááááá ááľáłááľ á ááĽááľá˘
á¨ááŤáá áľá á áááá á á ááá áá
á á ááá ááľáĽ á áᢠ/etc/grafana/grafana.ini
. á¨ááááá ááľáá áá
á áááľááá˘
;url =
á áľá°áááá áá° MySQL ááá á ááá
á°ááᢠáŤá ááá á¨áá á ááľá áá ááŤááá áááááľ ááá˘áŤ áĽá á¨ááá áá áááᣠá ááŁáŞ áááąá áĽáŠá áá¸áᢠadmin
.
ᨠ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
á¨áľá á ááááŠá áĽáá°áá ááááá ááá á áá áá!
sudo service grafana-server restart
á áá á Grafana UI ááľáĽ ClickHouseá áĽáá° áłáł ááá áĽááááááá˘
á áá¨á°ááľ á áá áśá˝ á¨áľáŤ áá á ááłáŤáľ á˝áŤáááĄ-
áĽáá° URL ááá˝áŠáľ https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443
ááá! á¨CH áĽá MySQL áá á¨á°ááá á¨áľá á áááá áŤáá á ááľ á¨áá°áŤ áááŁá áá˝á á ááᢠá áľááľáá á¨áá¨á ááąá áá° ClickHouse ááľáá áĽá áłá˝áŚááśá˝á ááááŁáľ áá˝ááᢠááá áá áĽáľáŤáá á ááá˝áá á ááłáŤáá áĽá á¨á°áá áá á¨á° áááľ á ááá¨áááá˘
á áťá
Yandex.Cloud á áá áŤááá áááŁá áá˝á á¨á˛áľá ááľá áĽáá˛ááĽáŠ ááá
áľáááłá, áĽá á áĽáą áá°á¨áľ - áĽááľ á ááľ á¨áááłá°á áá˝áá˝ áĽááľ. á áľááá á¨ááá ááá áá
áá ááᢠááľáá á ááá˝ áááł ááá°áĽá°áĽ, ááłáŞáŤáá ááá°áą
á¨áĽá json ááá áááľ áĽááŽá˝á áŤáŤáľáłáᥠááá áá˝ áĽá á á áŤá˘áá˝á˘ á¨ááááŞáŤá áĽáá á¨ááľáá áá¤áśá˝ áĽáá° á ááľ á áŤá ááááá, ááá°áá áĽááł á°áá á áľááááá áááľ áááááľ áááŞáŤáá˝á ááááá.
ááá˘áá˝
{
"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"
}
],
...
}
á áá
á áĽááľ ááľáĽ, ááľáá áááá á á ááááá áľ á°áá ááľáĽ áŤááá ááá ááŞ, áĽáá˛áá á áá
ááá ááľáĽ áá°á á˛á á¨á°áá ᨠá¨á áááááľ áá፠áááá˝ áá áá° ááá á¨áááľá°áá ááááľ áááááľ áŤáľáááááłá. á¨á áááááľ áááŤáá˝á áĽá áááá˝á á ááá ááá áľáááá á á áááá°á ááá ááľáĽ á¨á áá ááá ἠáá˝ááá˘
áá
áá
á¨áľ á¨á˛áľá ááľá á ááľá¨á áá á°ááľááś áĽáá°áááᣠááááŤá ubuntu-1804-lts
, á ááľá á¤á°á°áĽ ááľáĽ á á°áá˘á á¨á°á áá ááá ááľáĽ á°ááá§á GRAFANA
á áľá áľá grafana-{{timestamp}}
.
á á áŤá˘áá˝
á áá áá áἠá áľá°áłá˝ á¨ááá á¨ááááŞáŤá ááá áááŁá. áááłáá áá° á˛áľá ááľá á¨ááľáááĽá á ááľ á áááŁáá áá˝á áá áá¨ááá áŤááŁá¸áá á¨áĽááááá˝ á á°á á°á¨á°á ááááťáá˘
{
...,
"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"
]
}
]
}
áĽáá ááá áľáááśá˝ á 3 á°á¨ááá˝ áá¨ááá. á ááááŞáŤá á°á¨á, á¨áłáľ áááŤá á¨áááĽá ááá áľááŞááľ ááá¸áá.
á ááá -ctg.sh:
#!/bin/bash
sudo mkdir -p /opt/grafana
sudo chown -R ubuntu:ubuntu /opt/grafana
á áááĽáá á°á¨á, á áá áá፠ááľáĽ áľááŞááľ áĽááľáááŁáá, áá á á¨áášáá áá˝áá á¨ááᨠá áá áá˛áŤáá áááá áŤáľááááá. áá áľááŞááľ á Grafana áá á ááľáĽ ááááἠáŤááŁá¸áá á¨á°á áá á°ááááŽá˝ áŤáľáááŁá¸áá áĽá á¨áľá á ááááŠá áĽáá°áá áŤáľáááŤáá˘
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
á¨áá
á áá 3 áááŽá˝ áááŤááĄ-
1) ááŹáá˝á ááŤá
2) Grafanaá á systemctl áľá áŤááą áĽá ᨠClickHouse á°á°áŞá ááŤá
3) á¨áášáá áá˝áá áŤá አá áá áá˛áŤáá ᨠsetup.sh áľááŞááľ á ááľáááŞáŤ áá¨á ááľáĽ áŤáľáááĄá˘
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;
á áá á¨áá¨á áá¨áá ááľáŹáľ áĽá á¨áá¤áľ ááľá á á°á áá°á ááá ááľáĽ áĽáá˛ááἠááľá¨á ááᢠá¨áášáá áá˝á á˛ááĽáŠ áĽáá° áĄáľ á˛áľá ááá¨áĽ áá˝áá áĽá á¨á°ááł á áá ááá á¨áá á¨ááŤáá áľá á áááá áá°áá°ááłáá˘
á¨á áĽááľ áĄáľá áĽá áááá
áĽá á°ááłáłá á¨ááŤáá áἠá°áá¨áŽá˝á áááá á á¨ááŤáľá˝á á¨á˛áľá ááľá áŤáá á áá á¨ááłá áĄáľá ááá á áĽáá˝áááᢠá Yandex.Cloud ááľá¨á áá, áá áá á°ááłáłá áŁá áŞáŤáľ áŤáá¸áá á¨á¨áášáá áá˝áá˝á á ááľááľ áŤááááłá. á¨ááłá áĄáľáá á áááĽáŠá áľ áá á áá áĄáľá ááľáĽ áŤááľ ááá áá˝áá˝ ááŽáśáłáá á°áá á¨áá ᣠáĽá á¨á፠á¨áĄáľá áŁá áŞáá˝ (áááłá ᣠá ááľá°á áĽá á¨áá°áá á¨áá áá˝áá˝ áĽááľ)ᢠá áá áŤáá ááĽá áĽááá á áááááá˝ á¨ááŤáá á¨áá, á¨ááłáá áĄáľá áĽáŤáą á ááľááá áá˝áá˝á áŤáľáááłá ááá á áŤáą ááľá á áłá˛áľ áá˝áá˝á áááĽáŤá.
áĽáá° á°ááŁáŤá˝á á áŤáᣠáá°á á˛á á¨á°áá á¨á á¨á˛áľá ááľá á¨áááአá¨áἠá°áá¨áŽá˝ ááłá áĄáľá áĽáááĽáŤááá˘
á áŁá á¨ááŤáľá°ááá á¨áá¨á¨áťá áĄáľá áááá ááᢠá¨áááá áĄáľá ᨠLoad Balancer áá á áááááľ á áá áĄáľá á¨áášáá áá˝áá˝ áá á¨á¤á 3 áááá áĽáá˛áŤáá አáááľ áááá˝á á á á ááľá¨á áá¨áłááłáá˘
áááá áłááá áááľ á áľááá ááĽáŚá˝á á°ááĽáŹá áááĄ-
- ááá á¨á°á áááá áľáŤáá áá°áĽ 80 áĽáá˛áá á áĽá ááŤáá áá°áááá áľ áá° 3000 á¨áášáá áá˝áá˝ áĽáá˛áá á áľáááááá˘
- á¨áá˝áášá á ááááľ á ááá°á˝ áá°áĽ 3000 á ááŤáŤá á ááááá˘
á ááľá°á áá áááŤ
á áá¨á¨áťá á¨á°ááááá á¨áá°áá áŞáŤ áá á¨á° áááľá á áĽá áá°ááŤáľ á˝áááᣠáĽá á áá á áŁá á¨áááá á¨ááŤáá á áááááľ á ááᢠá¨áá¨á ááąá áá° ááľáĽ áááŤá á¨ááłáĽ á°áŞáá á¨á áá á áľáŤáť áĽáá° á¨áá°áá áŞáŤá ááá˘áŤ ááĽáĽ áĽá ᨠClickHouse áááľá°á á áľá°ááá áĽáť ááá áŤáľáááááłáá˘
áľá ââáááľáá? á á áľáᢠááá áá á ááá á፠á¨ááŤááŁá ááá á áᢠá¨áá áŤáá á á ááá áá°áľ áĽá á áĽá á¨áááľáą áĽááááá˝á á¨áááá áĽá á ááá áá°á á¨áá˝á á áá°ááᤠá¨á°áťá á ááśáá˛á ááľá¨á áĽáááááᢠá¨áááĽáá ááá ááá áá.
á¨á´áŤááá áá á°áľ
áĽáá°áá ᨠHashiCorp á¨á°áŁá ááłáŞáŤ áĽáá áááá
ááá á¨á´áŤááá áá á¨áá°áŠáľ á¨ááááŞáŤ áááá áááá ááááłá (*.tf
) áĽá á áĽáą áá á¨á°áá°á¨á° áá á¨á° áááľ ááá á.
á°ááááŽá˝
á ááá ááááŞáŤ áá á¨áá°ááą áá á¨á° áááľ á¨áľ áĽá áĽáá´áľ áĽáá°áá°áአá¨áááľá á°ááááŽá˝á áĽááŤáľáłááá˘
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>"
}
á¨á˛áľá ááľáá áááááŁáľ áĽá áĽááá á á°ááááŽá˝ ááááááľ á á áááá á¨áá°áá áŞáŤ áá°ááŤáľ áá°áľ ááááłáᢠáá á°á áŤá áĽáá°áá ááĽáŤáŤá˘
áŚááľ_áśá¨á - á°áááá áááľá¨áľ ááááľá˘ á ááááľ ááťááá˘
á¨á°áá_ááłáá፠- áá°áá áŞáŤáá á¨ááá°ááŤá áľ á¨á°áá áááŤ
á áá_ááłáá፠- áááá¨áťáá á¨ááá°ááŤá áľ ááá áááŤ
á¨á áááááľ_áááŤ_ááłáá፠- á¨á áááááľ áá፠áá፠á á°ááá ááá ááľáĽá˘
ááľá_ááłáá፠- áá¨áá á áá áá á¨á°áááá á¨á˛áľá ááľá áááŤ
á¨á°á áá áľá и á¨ááá áá áááąáá á¨ááἠááłáá˝ áĽá á¨ááŤáá áľá á ááááá áááľá¨áľ á¨á°á áá áľá áĽá á¨ááá áá
dbname - á¨ááἠááł áľá á CH áĽá MySQL áľáĽáľáŚá˝ ááľáĽ
á¨á
ááĽ_ááá_ááááľ â áá° ááá á¨áááľá°á ááááľ á á á°áŁáŁá ssh áááá
ᣠá áľá ááááááľ ááľá ááá áľ áľá˝ááá
ubuntu
á¨áľá á ááááŽá˝ áá áá° áááŁá áá˝áá˝
á¨á á áŤá˘ áááá
á áá ᨠTerraform á á áŤá˘áá áááá áŤáľáááááłá - á áĽá áááł Yandex:
provider "yandex" {
token = var.oauth_token
cloud_id = var.cloud_id
folder_id = var.folder_id
zone = "ru-central1-a"
}
áĽáá á¨áá á¨á°ááášáľá á°ááááŽá˝ áĽá¨á°á ááá áááá áŤáľá°áááá˘
á ááłá¨ áá¨áĽ áĽá áľáĽáľáŚá˝
á áá á¨áá á¨á° áááľ ááááťá˝á á¨áááŁáĄá áľ ááľááá áĽáááĽáŤááᣠáśáľáľ ááĄáľ ááľáááŽá˝ (á áĽáŤááłááą ááá á ááľ) áĽá CH áĽá 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
}
}
áĽáá°ááłá¨áᣠáĽáŤááłááłá¸á áááą ááááá˝ á áŚáľáľ á¨á°á°áŤá˝ááľ ááá˝ ááľáĽ á ááááłá¸á áľá á°áľá á¨ááłáᥠáá¸áá˘
á¨áľá á ááááŽá˝
á á°ááłáłá ááááľ ááá á á¨ááá˝á áááľáá áá áᣠáá á˝áá ááľáĽ ááŁáᢠá¨áá
á ááľáŁ ááááŞáŤ ᨠMySQL áááľá°á á ááłá áĽá á¨á፠á áá áĽáť ááłáááŤáá á ááᣠá áľááááá áá
á áŤáá á¨á˛áľá ááľá á°á á°áĽáŠáŁ áĽááŤá á áľá°áááá áá° áááľá°á ááá˝áŠá˘ á áá áá ááľáá á áá áŤá áľ áá á¨áᎠTerraformá á¨ááááá á ááľ á¨áááľá°á ááłáááŤáá á ááá
áᢠáľááá
áá°áá¨á°áá ááá áááľ áá á¨áĽá
á¨á ááá ááłáłáł á áááááľá á áá áá á¨á°áá°á áááŞáŤáá˝á áá° á¨áášáá áá˝á áĽááľá°áááááᣠáĽáąá á°ááĽá áŤáľáŹáłáᢠáá˝á ᨠMySQL áááľá°á á áľá°ááá
áĽá á¨á°á áá áľá-ááá áá ááᣠáŤáá ááłáłáł áááľ áĽááááááᣠá°á ááá á¨ááᨠá áá á Terraform ááá ááľáĽ á¨á°ááá¸áᢠá¨áááá áááľ á áľááš áĽáááá á setup.sh
á¨áášáá áá˝á á˛á ፠á¨áá°áŤá˘
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
á¨ááá˘áŤ áĄáľá áĽá áááá
á á˛áľ á¨á˛áľá ááľá áĽáá°áá á¨áááŁáᣠá áá¨á¨áť á¨áĽáá ááá á Terraform áá¨á áĽáá˝áááá˘
á áá áŤááá á¨á˛áľá ááľá áá áá áĽáá°ááááá áĽáá áááŚ
data "yandex_compute_image" "grafana_image" {
image_id = var.image_id
}
á áá á¨á áĽááľ áĄáľá áĽááá ááĄ-
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"
}
}
áá° ááłáłáł áĽáá´áľ áĽááłáľá°áááá áľáŠá¨áľ ááľá áľ á°áᢠááᢠcluster_uri
, username
и password
. áĽááá
áá¸á á¨áášáá áá˝á á
áá áá á ááĽáś á ááŤáá áá
á¨áľ ááľáĽ áŤáľáááŁáá˘
áááá á¨á á á ááá˘
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
}
}
}
}
áľáá˝ áľáłá
áľáá˝ áĽáť áá á¨áá¨áᢠáá á¨á° áááą á¨á°áá¨á á áá áá° ááŤáá UI áááľ áĽá ᨠCH áááľá°áá (ááłáááŤá á ááá ááááľ áŤáá áľ) áĽáá° á¨ááἠááá áĽáŤáľá áá¨á á ááĽááľá˘ ááá áá á´áŤááá á¨áááľá°á ááłáááŤáá áŤáááᢠááłáŠá áá° ááťá áĽáá˛áŤá°ááľ á á°áŤ áĽááľá áá˘
á á˛áľ á á áŤá˘ áĽáá¨áá - GrafanaᣠáĽá áĽáá° á áľá°ááá á¨ááłáĽ á°áŞáá á áá á áľáŤáť áĽááľáŁáľá˘ á´áŤááá ááá á áááľáá áľ áá˝á áá á¨ááŤá°ááá¸á áááŚá˝ áá MySQL ááľáĽ áŤáľááᣠáĽá áľááá á ááá ááá˝ áá˝áá˝ ááá˘
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"
}
á¸ááŤá˝áá áĽááŚá
áááá á¨á á á á¨á á á á áľáŤáť áĽá ᨠ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"
}
ááŽáĽ áľá˝ááá
ááá! á¨áĽá á¨ááááŞáŤ ááá ááá áá áĽá á°ááááŽá˝á á áááááľ Terraform á¨áá á¨ááá
ááá áá áĽáá˛áŤáłáľá áááá áĽáá˝áááᢠá á ááá áá°áą 15 á°áá áŤá
á áá°á°áá˘
á áá¨á¨áť á ááľ á¨ááŤáá áááĽááľ áá¨áľ áá˝áá-
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
áĽá á á°ááá ááľáĽ ᣠá¨á°ááąáľ áá á¨á° áááľ á áŤááľ ááłáŤá-
áá¤áąá á á á ááá áĽáá ááá
á ááᣠGrafanaá áĽáá° ááłá á áá áá áĽáŤááłááłá˝á á Yandex.Cloud ááľá¨á áá á á°ááŁáá á¨á°áá á ááá´áá¸á á áááŹá˝áá˝á áá°ááŤáľ áľá˝ááá˝áᢠᨠHashiCorp áĽáá° áá¨á áĽá á´áŤááá áŤá á áἠááłáŞáŤáá˝ á áá áá¨áąááľ áá˝ááᢠá ááľ á°á áá á˝áá á áá áá áĽááłááá á°áľá á á°áááá :)
PS á¨áá á áłá˝ á áá á˝áá ááľáĽ áŤáá¨áĽáłá¸áá áááĽáŤáŽá˝ ááá¨á áĽá á´áŤááá ááá á¨áá á¨ááἠá áááááśá˝á áá° áá¨ááťá á¨áááľáľ á ááá á áŤááŁááá˘
ááá: hab.com