ืฉืืื ืืืืื! ืืืืง ืืขืืืืชื ืืงืืจืก, ืืงืจืชื ืืช ืืืืืืืช ืฉื ืคืืืคืืจืืช ืขื ื ืืงืืืืช ืืื
ืื ืืชื ืจืืฆื ืืงืื?
ืืืืจ ืืฉืงืช ืืืื ื ืืืจืืืืืืช ืขื ืฉืจืช ืืื ืืจื ื, ืืชื ืืืื ืืืืช ืืืืจื ืฉืื ืืืงืื ืืืฉืง ืืฉืชืืฉ ืืคื, ืืฆืืื ืืกืื ื ืชืื ืื ืืืงืืจืืช ืืขืืืื ื ืืกืคืช, ืืืฆืืจ ืืืืืช ืืืืื ืื ืืืจืคืื.
ืืืจืกื ืืืกืืกืืช ืืฉ ืืืกืจืื ืืื ืืฉืืขืืชื - ืืื ืืื ื ืกืืืื ืืช ืืชืงืืืช ืืื. ืืืืืจ, ืื ืืคืื ืงืฆืืื ืืืืช ืฉื ืืืคืืืงืฆืื ืชืืืื ืืืืืืืช ืฉื ืืืื ื ืืืจืืืืืืช ืืืช. ืื ืื ืืกืจื ืื 10 ืื ืฉืื ืืคืชืื ืืช ืืืฉืง ืืืฉืชืืฉ ืื ืืื ืืช, ืื ืืชืขืืจืจื ืืขืืืช.
ื ืืชื ืืคืชืืจ ืืืชื ืืคืฉืืืช: ืืชื ืจืง ืฆืจืื... ืืคืจืืก ืืืื ืืช ืืืจืืืืืืืช ืืืืช ืจืืืช ืขื ืฉืจืช ืืื ืืจื ื ืืืืฆืื ืืืชื ืืชืืช ืืืืื L3. ืืื ืื ืืื ืื ืื ืืจืืจ ืืื. Grafana ืืืืกื ืืช ืืืืจืืช ืืืฉืชืืฉ (ื ืชืืืื ืืืกืืกื ื ืชืื ืื, ืืืืืช ืืืืื ืื, ืืจืคืื ืืื') ืืฉืืจืืช ืขื ืืืืกืง ืฉื ืืืืื ื ืืืืจืืืืืืช ืฉืื. ืืคืืื, ืื ื ืฉื ื ืืื ืืืืจืืช ืืืืฉืง ืืืฉืชืืฉ, ืฉืื ืืืื ืืื ืืืืื ืืืื ืืืืื ืจืง ืืืืื ื ืืืืจืืืืืืช ืืืื ืฉืื ืืืชื ื ืืืืื. ืื ืืืืื ืืืืืจืืช ืื ืขืงืืืืช ืขืืืจ ืืืคืืืงืฆืื ืฉืื ื, ืื ืฉืืืจืื ืืืขืืืช ืืืคืขืื ืืืฉืืืืฉ.
ืืื ืืืื ืืกืืก ื ืชืื ืื ืืืจ ืืขืืจื, ืืืฉื MySQL ืื ืืืงืืืื ืฉืื. ืื ื ืืืืจืื ืืืจืืคืื ื ืฉืืื ืฆืจืืื ืืืืกื ืืช ืืืืจืืช ืืืฉืชืืฉ ืืืกื ืื ืชืื ืื ื"ืืืืืคื" ืืื. ืืืืจ ืืื, ืื ืืกืคืืง ืืฆืืื ืืช ืื ืชืื ืืืกื ืื ืชืื ืื ืืื ืคืขื ืืืช ืืื ืืืื ื, ืืืขืจืื ืืช ืื ืฉืืจ ืืืืจืืช ืืืฉืชืืฉ ืืื ืืืช ืืืืืื ืืช ืืืืืจืืืืืืืช; ืื ืืืฉืื ืืืืจืืช.
ืืืื ืชืจืฉืื ืฉื ืชืฉืชืืช ืืืคืืืงืฆืื ืืกืืคืืช:
ืืืื ื ืืื ืืืจืื ืขื ืืืืืื
MySQL ื- ClickHouse
ืืคื ื ืคืจืืกืช ืืคืืืงืฆืื ืืื ืืืืืฆืช ืืคืชืืจ, ืืื ืฆืืจื ืืืืื ืืืฆื ืืืคื ืืื ืืื ืืืจืืืืื ืฉืื ืืืฉืื ืืืชื ืืื ืขื ืืฉื ื.
ืืื ืืขืืืจ ืื ื Yandex.Cloud, ืืืกืคืงืช ืืืื ื L3, ClickHouse ื-MySQL ืืฉืืจืืชืื ืื ืืืืื. ืืืฉืชืืฉ ืฆืจืื ืจืง ืืฆืืื ืืช ืืคืจืืืจืื ืืืืืืช ืขื ืฉืืคืืืคืืจืื ืชืืื ืืช ืืื ืืืฆื ืชืงืื.
ื ืจืฉืืชื, ืืฆืจืชื ืขื ื ืืืฉืืื ืชืฉืืื. ืืืืจ ืืื, ืืืืชื ืืขื ื ืืืืืจืชื ืืฉืืืืืช MySQL ื-ClickHouse ืขื ืืืืจืืช ืืื ืืืืืืช. ืืืืืชื ืขื ืฉืื ืืืื ืคืขืืืื.
ืืชื ืื ืฆืจืื ืืืืืจ ืืืฆืืจ ืืกื ื ืชืื ืื ืืื ืืฉืืื ืืืืืืืจ ืืช ืืืืฉื ืืืื ืืืืฆืขืืช ืื ืืกื ืืกืืกืื. ืื ืืื ืก ืืื ืืคืจืืื - ืืื ืื ืืจืืจ ืืืืฉืง.
ืืคืจื ืืื ืืจืืจ ืืื ืฉืืืกืืกื ืื ืชืื ืื ืืืื ืืฉ ืืืจืืื ืจืืื, ืืืืืืืื ืืช ืกืืืื ืืช ืืชืงืืืช ืฉืืื. ืขื ืืืช, Grafana ืืืจืฉ ืืืจื ืืื ืืืืืง ืขืืืจ ืื ืืกื ื ืชืื ืื ืฉืืื ืขืืื ืืืชื. ืงืจืืื ืืจืืื c-<cluster_id>.rw.mdb.yandexcloud.net
ืืืืคื ืืืืจื ืืืืกืืจ ืืคืขืื ืื ืืืื ืฉื ืืืฉืืื ืขื ืืืืื ืืืชืืื. ืื ืื ืฉืื ืื ื ื ืืชื ืืืจืคืื ื.
ืฉืจืช ืืื ืืจื ื
ืขืืฉืื ืื ืชืืื ืืฉืจืช ืืืื ืืจื ื. ืืืื ื ืขืื ืืืื ื ืืืจืืืืืืช ืจืืืื ืขื ืืื ืืงืก ืื ืงืืข ืขืืื ืืื ืืช ืืช Grafana.
ืืืื ื ืชืืืจ ืืจื 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
ื ืชืืื ืืช ืฉืจืช ืืืื ืืจื ื. ืืขืช ืชืืืื ืืืืื ืืช ืืชืืืช ื-IP ืืืืฆืื ืืช ืฉื ืืืืื ื ืืืืจืืืืืืช ืืืคืืคื, ืืฆืืื ืืฆืืื 3000 ืืืจืืืช ืืช ืืืฉืง ืืืฉืชืืฉ ืืืคื ืฉื Grafana.
ืืื ืื ืชืืืจ, ืืคื ื ืืืืจืช Grafana, ืขืืื ืืืืืจ ืืกืคืจ ืื ืืช ืื ืชืื ื-MySQL ืืื ืืืืกื ืืช ืืืืืจืืช ืฉื.
ืื ืืชืฆืืจื ืฉื ืฉืจืช ืืืื ืืจื ื ืฉื Grafana ื ืืฆืืช ืืงืืืฅ /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 ื ืฆืืื ืืช ClickHouse ื-DataSource.
ืืฆืืืชื ืืืฉืื ืชืฆืืจื ืขืืืืช ืขื ืืืืืจืืช ืืืืืช:
ืฆืืื ืชื ืืืชืืืช ืืืชืจ 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 ืฉืืืื. ืืฉืื ืืจืืฉืื ืืืืฆืข ืกืงืจืืคื ืคืฉืื ืฉืืืฆืจ ืกืคืจืืืช ืขืืจ.
prepare-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;
ืืขืช ืื ืื ืฉื ืืชืจ ืืื ืืืคืขืื ืืช Packer ืืืืฆืื ืืช ืชืืื ืช ืืคืื ืืงืืข ืฉืฆืืื. ืืขืช ืืฆืืจืช ืืืื ื ืืืจืืืืืืช, ืชืืื ืืืืืจ ืื ืืืืกืง ืืชืืื ืืืืืจ ืืืฉืงื ืชืงืื ืฉืจืช ืืื ืืจื ื ืืืื ืฉื Grafana.
ืงืืืฆืช ืืืคืข ืืืืื
ืืจืืข ืฉืืฉ ืื ื ืชืืื ืช ืืืกืง ืืืืคืฉืจืช ืื ื ืืืฆืืจ ืฉืจืชื ืืื ืืจื ื ืืืื ืจืืื ืฉื Grafana, ื ืืื ืืืฆืืจ ืงืืืฆืช ืืืคืขืื. ืืคืืืคืืจืืช Yandex.Cloud, ืืื ื ืื ืืชืืืืก ืืืืืื ืฉื ืืืื ืืช ืืืจืืืืืืืช ืืขืืืช ืืืชื ืืืคืืื ืื. ืืขืช ืืฆืืจืช ืงืืืฆืช ืืืคืขืื, ืื ืืืืคืืก ืฉื ืื ืืืืื ืืช ืืงืืืฆื ืื ืืืืืจ, ืืืืืจ ืืื ืืืืคืืื ืื ืฉื ืืงืืืฆื ืขืฆืื (ืืืืืื, ืืืกืคืจ ืืืื ืืืื ืืืืงืกืืืื ืฉื ืืืื ืืช ืคืขืืืืช). ืื ืืืกืคืจ ืื ืืืื ืืื ื ืขืืื ืืงืจืืืจืืื ืื ืืื, ืงืืืฆืช ืืืืคืขืื ืขืฆืื ืชืกืืจ ืืืื ืืช ืืืืชืจืืช ืื ืชืืฆืืจ ืืืื ืืช ืืืฉืืช ืืชืืื ื ืืฉืื.
ืืืืง ืืืืฉืืื ืฉืื ื, ื ืืฆืืจ ืงืืืฆืช ืืืคืขืื ืฉื ืฉืจืชื ืืื ืืจื ื ืฉืชืืืืฆืจ ืืชืืื ืช ืืืืกืง ืฉื ืืฆืจื ืงืืื ืืื.
ืื ืฉืืืืช ืืืฆื ืืืคื ืืื ืืืืจืช ืงืืืฆืช ืืืืคืข ืืืืจืื. ืงืืืฆืช ืืืขื ืืืื ืืืจืฆืื ืขื Load Balancer ืชืขืืืจ ืื ืืืืืืจ ืืืื L3 ืขื ืืื ืืืืื ืืช ืืืืจืืืืืืืช ืฉื ืงืืืฆื ืื ืขื ืืื ืืืืฆื ืขื ืืื ืืคืชืืจืื.
ืืขืช ืืืืจืช ืืืืืื, ืืืฉืืชื ืฉืชื ื ืงืืืืช ืืฉืืืืช:
- ืืจืืชื ืืืืื ืืงืื ืชืขืืืจืช ืืฉืชืืฉืื ืืืฆืืื 80 ืืื ืชื ืืืชื ืืืฆืืื 3000 ืฉื ืืืืื ืืช ืืืืืจืืืืืืืช, ืืืืืง ืืืื ืฉืืจืคืื ื ืืจ.
- ืืืืจืชื ืืืืงืช ืืืืืืช ืฉื ืืืื ืืช ืขื ืืื ืคืื ื ืืืชื ืืืฆืืื 3000.
ืกืืืื ืืื ื
ืืืกืืฃ, ืืฆืืื ื ืืคืจืืก ืืืืคื ืืื ื ืืช ืชืฉืชืืช ืืืืฉืืืื ืืจืฆืืื, ืืขืืฉืื ืืฉ ืื ื ืฉืืจืืช ืืจืืคื ื ืืขื ืืืืฉืืช ืืืืื. ืืชื ืจืง ืฆืจืื ืืืขืช ืืช ืืชืืืช ื-IP ืฉื ืืืืื ืื ืงืืืช ืืื ืืกื ืืืคืืืงืฆืื ืืืช ืืืืจื ืฉื ืืฉืืื ClickHouse ืืื ืืืขืื ืืช ืืขืจื ืื ืชืื ืื ืืชืืื.
ืื ืืืจืื ืืื ื ืืฆืืื? ืื, ื ืืฆืืื. ืืื ืืฉืื ืขืืืื ืืืืื ืืืชื. ืื ืืชืืืื ืฉืืืขืื ืืืจืฉ ืืจืื ืฉืืืื ืืื ืืื ืืืื ื ื ืืชื ืืืจืืื ืืื; ืืจืฆืื ื ืืืคืื ืืืชื ืืืืืืืื ืืืืืช ืืืคืฉืจ. ืืื ืืืงืืฉ ืืืืง ืืื.
ืืื ืืืจืฆืื ืฉื Terraform
ื ืฉืชืืฉ ืฉืื ืืืื ืืืืช HashiCorp ืฉื ืงืจื
ืื ืขืืืื ืขื Terraform ืืกืชืืืช ืืืชืืืช ืงืืืฅ ืชืฆืืจื (*.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>"
}
ืื ืชืืืื ืคืจืืกืช ืืืคืืืงืฆืื ืืกืชืื ืืื ืืืช ืชืืื ืช ืืืกืง ืืืืืจืช ืืฉืชื ืื ืืื. ืชื ืื ืืืกืืืจ ืืื ืื ืืืจืืื:
oauth_token - ืืกืืืื ืืืืฉื ืืขื ื. ื ืืชื ืืืฉืื ืขื ืืื
cloud_id - ืืืื ืขื ื ืฉืื ื ืคืจืืก ืืช ืืืคืืืงืฆืื
folder_id - ืืืื ืกืขืืฃ ืฉืื ื ืคืจืืก ืืช ืืืคืืืงืฆืื
service_account_id - ืืืื ืืฉืืื ืฉืืจืืช ืืืืง ืืืชืืื ืฉื ืืขื ื.
image_id - ืืืื ืฉื ืชืืื ืช ืืืืกืง ืฉืืืฉืื ืืืืฆืขืืช Packer
ืฉื ืืฉืชืืฉ ะธ ืกืืกืื - ืฉื ืืฉืชืืฉ ืืกืืกืื ืืืืฉื ืืฉื ื ืืกืื ืื ืชืื ืื ืืืฉืจืช ืืืื ืืจื ื ืฉื Grafana
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
. ืืช ืืื ืืืืื ื ืืืืจืืืืืืช ืชืืฆืื ืืขืช ืืืคืขืื ืืชืื ืืก ืืชืฆืืจืช Grafana.
ืื ืชืืื ืืืืื.
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
}
}
}
}
ืืขื ืกืืืจ
ื ืฉืืจ ืจืง ืงืฆืช. ืืืืจ ืคืจืืกืช ืืชืฉืชืืช, ืชืฆืืจื ืืืืช ืืืืฉืง ืืืฉืชืืฉ ืฉื Grafana ืืืืืกืืฃ ืืื ืืช ืืช ืืฉืืื CH (ืฉืขืืืื ืฆืจืื ืืืฉืื ืืช ืืืืื ืฉืื) ืืืงืืจ ื ืชืื ืื. ืืื Terraform ืืืืข ืืช ืืืื ืืืฉืืื. ืืื ื ืคืงืื ืืืืื ืืืืื ืืช ืืขื ืืื ืืืื ืืืืืฉ.
ืืืื ื ืืกืืฃ ืกืคืง ืืืฉ - Grafana, ืื ืืชื ืื ืืช ืืชืืืช ื-IP ืฉื ืืืืื ืืืืจืืช. ืื ืืฉืื ืืืื ืฉ-Terraform ืขืืฉื ืืืืื ื ืฉืื ืืืืืื ืฉืื ืงืืืข ืืืืื ื-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"
}
ืืืื ื ืกืจืง ืืช ืืฉืืขืจ ืฉืื ื
ืืืื ื ืฆืื ืืช ืืชืืืช ื-IP ืฉื ืืืืื ืืืช ืืืืจื ืฉื ืืฉืืื 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 ืืื Packer ื- Terraform ืืืืืื ืืขืืืจ ืื ืืื. ืื ื ืืงืืื ืฉืืืฉืื ืืืฆื ืืช ืืืืืจ ืืื ืฉืืืืฉื :)
ื .ื. ืืืื ืืฆืจืฃ ืงืืฉืืจ ืืืืืจ ืื ืชืืืื ืืืฆืื ืืชืืื ืื ืืืื ืื ื-Packer ื- Terraform, ืฉืงืืขืื ืืื ืกืืคืงืชื ืืืืืจ ืื.
ืืงืืจ: www.habr.com