แฐแแ แแแฝแแ! แฅแแฐ แจแฎแญแต แตแซแฌแฃ แฅแแฐ แจแแแญ แแตแฅ แจแฐแแ แแตแจแญ แ แ แแ แแญแแฌแซแแ . แแตแจแฉ แฐแแฃแซแ แฝแแฎแฝแ แแแแณแต แจแฐแแซแฉ แ แแแแแถแฝแ แญแฐแฃแแข แแแแฃ แ แแณแแต แแ แ แฅแแแ แ แแแแแถแฝ แแญ แฐแแตแญแฐแ แ แฐแแขแ แฐแ แแ แจแฐ แแแต แจแซแตแแ แจแฐแแ แแฐแแ แชแซ แแแแแต แซแตแแแแแณแแข แ แแ แฝแแ แแตแฅ แฅแแฒแ แแญแแฑแ แแฐแแ แชแซ แ แแฐแแซแต แจแแต แซแแแ แแแต แแซแแ แฅแแแแแ.

แแ แแแ แ แญแแแแ?
- แจแตแแณแ แฝแแฎแฝแ แแแแณแต แแญแ แจแแแแแแ แตแญแแถแฝ แฝแแฎแฝแ แแแแฃแ แญ แแญแแ แแณแชแซแข แ แแ แจแณแ แ แแแแฉ แแตแฅแฃ แญแ แจแแซแแ แตแญ แ แแแแญ แซแแ แจแญแนแแ แแฝแแฃ แฅแแฒแแ แณแณแคแ (แญแแญ แแแตแฃ แขแแแแญแตแฒแขแฃ แแแฐ) แตแแณแแแฝ แจแแแฐแจแฑแ แต แณแณ แตแฅแตแฅ แแแข
แจแญแนแแ แแฝแแ แจแตแญ แ แแแแญ แแญ แจแแแญแญ แ แแ แแฐ แ แตแฐแแแ แแฐแ แจแแซแแญ 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 แ แแ แซแแแ แแแฃแ แแฝแ แจแฒแตแญ แแตแ แฅแแฒแแฅแฉ แญแแ แตแแแณแ, แฅแ แ แฅแฑ แแฐแจแต - แฅแญแต แ แญแต แจแแแณแฐแ แแฝแแฝ แฅแแต. แ แตแญแญแ แจแแแ แแแ แญแ แแ แแแข แแตแแ แ แแแฝ แแแณ แแแฐแฅแฐแฅ, แแณแชแซแแ แญแแฐแฑ แจ HashiCorp. แแตแแ แแแฐแฅแฐแฅ แแแชแซแแฝแ แจแซแ json แแญแ แฅแแฐ แแฅแแต แญแแตแณแแข
แจแฅแ 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-datasourcerun-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
