αα½ααααΈβα’αααβααΆααα’ααααααΆ! ααΆααααααα½αααααΆαααΆααααααα·ααααΆαααααααα»α αααα»ααααα»αααααΆαααααΆαααΈααααααΆααααααα·ααΆααααααα»ααααα»αααΌα
ααΆ
ααΎα’αααα ααααα½αααΆαα’αααΈ?
αααααΆααααΈα αΆααααααΎααααΆαααΈααα·αααα·αααΆαα½ααααΆαααΈαααααα ααααα α’αααα’αΆα α αΌααα ααΆαααααΆαααΈαααααααΆ α αΎαααα½αααΆα UI αααααααααα’αΆα αααααΆααααΌαααααΆααα·ααααααααΆααααααααααΆααααΆαααΆααααααα αααααΎαααααΆααααααααααα αα·αααααΆα ααα
ααααααΌαααααΆαααΆααα»ααα·ααααα·ααααΆαααα½α - ααΆαα·αααΆαααΆαα’αααααααααΆαααααααα αααβααΊβααΆαβα’αα»ααααβαααααα·ααΈβααΆααααΌαβα’αΆαααααβααΎβααααααΆαβααααααβααβαααΆαααΈαβαα·αααα·αβαα½αα ααααα·αααΎααΆαααα·ααα α¬ααααα·αααΎααα»ααα 10 ααΆααααΎα UI αααα»αααααααα½αααααααα αΆααΉαααΎαα‘αΎαα
αα½αααΆααααΌαααΆααααααααΆααααΆαααΆααααα α’αααααααΆααααααααΌαααΆααα±ααααααΎααααΆαααααΆαααΈααα·αααα·ααααααΌα ααααΆααααα·αααΆα αααΎαααΆαα½ααααΆαααΈαααααα ααααα α αΎαααΆααααΆαα ααααααα»αααααΆα L3 α ααα»αααααα·ααααα’αααΈαααΆααα’ααααΊα αααΆααααΆαααα ααΈαααα Grafana αααααΆαα»αααΆααααααα’αααααααΎααααΆαα (ααααΌααα ααΆααααΌαααααΆααα·αααααα ααααΆααααααααααα ααααΆα ααα·αααα) αααααααΆαααα ααΎααΆααααααΆαααΈααα·αααα·αααααααΆα ααΌα αααα ααααα·αααΎα’αααααααΆααααααΌαααΆαααααααα½αα ααα½ααα αααα»α UI αααααΆαααααΆααααααΌαααΆαααααααΉαααααΌαααΆααααα αΆααααα ααΎαααΆαααΈααα·αααα·ααααα’ααααα»αααααΆαααΆαααααΎααααΎαα ααΆααΉαααΆαα±ααααΆαααΆαααααααα·ααααΈαααααΆααααααΆαααααΆαααααααα·ααΈααααααΎα αααα αΆααΆαα½αααΉαααΆαααΎαααααΎαααΆα αα·αααΆαααααΎααααΆααα
αα ααΈααα ααΌαααααΆααα·αααααααα½αααααααααααΉααααα½ααααααααα α§ααΆα ααα MySQL α¬ααααΌαααααααΆα ααΎαααααΆαα Grafana ααΆααΆααα½ααααααααΆαα»αααΆααααααα’αααααααΎααααΆαααα αααα»αααΌαααααΆααα·αααααα "ααααα" αααα αααααΆααααΈααα ααΆααΉααααααααααΆααααΎααααΈαααααΆααααααΌααα ααΆααααΌαααααΆααα·ααααααααααα ααΎαααΆαααΈαααΈαα½αααααα α αΎαααααααα½αααΆααααααα’αααααααΎααααΆααααααααααααΆααα’αααα ααΎαααΆαααΈααα·αααα·αααΆαα½α αα½αααααΉαααΈαα ααααΎααα ααΎα’αααΈααααα αααα
αααααΊααΆααααΆααααΆααααα ααΆαααααααααααααα·ααΈα α»ααααααα
αααααΎαααααααα’ααα
MySQL αα·α ClickHouse
αα»ααααααΆααα±ααααααΎααααΆαααααααα·ααΈαααααααααα α»α αααΌαα»ααα½α ααΆα αΆαααΆα αααααΌααααααΈααααααΎααααΆαααΆαα»ααΈαα½ααααααααΆαααααααΎα ααα»α ααΆα α αΎααααα αΌααα½αααΆααΆαα½αααααΆα
Yandex.Cloud ααΉααα½αααΎααα ααΈααα αααααααα L3 balancers, ClickHouse αα·α MySQL ααΆααααΆαααααααααααααα α’αααααααΎααααΆααααααΆααααααααΌαααΆααααααΆαααααΆαααΆαααααα α αΎααααα αΆααα αΌαααααααα·ααΆααΆαα’αααΈαααααααααΆαα αΌααα αααα»αααααΆαααΆαααααΎαααΆαα
αααα»αααΆαα α»αααααα αααααΎαααα αα·αααααΈαα·αααααααααααααΆαααααα½ααααα»αα αααααΆααααΈααα αααα»αααΆαα αΌααα αααα»αααα α αΎαααΆαααΎαα‘αΎαααΌα MySQL αα·α ClickHouse clusters ααΆαα½αααΉαααΆαααααααα·α αα½α αααα»αα αααα αΆααα αΌαααααα½ααααααααα
α’αααααααααΌαα αα αΆαααααα ααΎααααΈαααααΎαααΌαααααΆααα·αααααααα αααα»αα αααααααΈαα½αα α αΎαααααααα ααΆααααααααααΆαα αΌαααααΎααΆαααααΆαα αΌα αα·αααΆααααααααΆααα αααα»αααΉααα·αα αΌααα αααα»αααααααΆααααα’α·ααα ααΈααααα - α’αααΈααααααααΆαααΊααΆααααααααα αααα»αα ααα»α αααααΆααα
ααααααΆααααα’α·ααα·αα
αααΆααααΊααΆ ααΌαααααΆααα·ααααααααΆαααααααΆααααΆαααΈαααΆα
αααΎαααααααααααΌαααΆαα’ααα±αα
ααααααα α»ααααααα½αααα ααααααΆαααΆααααα Grafana ααααΌαααΆααααΆαααΈααα½ααααΆααα·αααααΆαααααααΆααααΌαααααΆααα·ααααααααΈαα½αααααααΆααααΎααΆαααΆαα½αα ααΆαα’αΆαααΌα c-<cluster_id>.rw.mdb.yandexcloud.net
αααααΈαα
ααΆαααααΆαααΈαααα
αααααααααααα
αα
α»ααααααααΆαα½αααΉαααααααααΆαααααααααΌαααααΆα αααα αΎαααΆα’αααΈαααααΎαααΉααααααα±αα Grafana α
αααΆαααΈααααααααΆα
α₯α‘αΌααααααΆα’αΆαααααααΎαααΆαααΈαααααα αααααα α αΌαααΎααααΆαααΈααα·αααα·αααααααΆααΆαα½αααΈαα»α α αΎαααα‘αΎα 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 αα·αααΎα UI grafana αααααααααα’αΆαα
ααα»αααααα»ααααααΆαααααααΆαααα»ααααααα‘αΎα Grafana α’ααααα·αααααΌαααααα αααααΆααααααΌααα ααΆαα MySQL αααααΆααααΆααΎααααΈαααααΆαα»αααΆαααααααα ααΈαααα
ααΆαααααααα
ααΆααααααααααΆααααΌααααααΆαααΈαααααα ααααα Grafana ααΊαα
αααα»αα―αααΆα /etc/grafana/grafana.ini
. αααααΆαααααααααΌαααΆαααΎααα
ααΌα
αααα
;url =
ααΎααααα αΆααααΆαααΈααα
αααα»α MySQL α α―αααΆαααΌα
ααααΆαααααΆαααΆαα
αΌα αα·αααΆααααααααΆαααααααΆααααΆαα
αΌαααααΎ Grafana αααα»αααΌαααΆαααΆαααΎ αααααΆααααΈαααααΎααααΆααΆαααααΆαααΎα 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 ααΆ DataSource α
αααα»αααΆααααααααααααΎααααΈαααααα ααΆαααΌαααΆαααααααα ααΆααααααααααΆαααΆαααΆαα½αααΉαααΆααααααααΌα ααΆααααααα
αααα»αααΆααααααα±ααααΆ URL https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443
ααΆααα’αα! ααΎαβααΆαβαααΆαααΈαβαα·αααα·αβαα½αβαααβααααΎβααΆαβααΆαα½αβααΉα web server αααβααΆαβαααααΆααβαα 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
αααααΆααβααβααΆαβαα·α
αα
ααΆαβα£βαααβααααΌαβααααΎα
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 ααΌα ααααΆααΆα αααΎα ααΎαα’αΆα αααααΎααααα»α instance αα½αα αα ααΎαααα·ααΆ Yandex.Cloud ααΆαααααααααα αα ααΎααΆααα½ααα½ααααααΆαααΈααα·αααα·ααααααΆαααααααααΌα ααααΆα αα ααααααααΎααααα»α instance ααααΌαααααΆαααΈαααΆααα’αααα αααα»ααααα»ααααααααΌαααΆαααααααα ααΆαααααααα α αΎααααααΆαααααααααααααααα»ααααα½αααΆ (α§ααΆα ααα α ααα½αα’αααααααΆ αα·αα’αα·ααααΆαααααΆαααΈαααααα)α ααααα·αααΎααααα αα α»αααααααα·ααααααααΆααααααααα·αα·α ααααααααα ααααααα»αα§ααΆα ααααααα½αα―αααΉααααααΆαααΈαααααα·αα αΆαααΆα αα αα α¬αααααΎαααααΈαααα»αααΌαααΆα αα·αααΌαααΆαα
ααΆααααααααα·α αα ααΆαααααααΎα ααΎαααΉααααααΎααααα»α instance αα web servers αααααΉαααααΌαααΆααααααΎαα ααααΈααΌαααΆαααΈααααααΆααααααΎαααΈαα»αα
ααΆαααααααααα»αα§ααΆα αααα α»ααααααααΊαα·αααΆαα½αα±ααααααααααΆααα αααα»αααααα αααα»αααΆααα½ααααα αΌαααΆαα½α Load Balancer ααΉααα½αα’ααααααα α L3 Balancer αα αααααααΆαααΎαααααΆαααΈααα·αααα·ααααααα»αααααααα α»α αααΌαα»αααΈαααΈα
αα αααααα‘αΎαα§ααααααα»αααααΆα αααα»αααΆαα’αα»ααααα ααα»α ααααΆααααΈαα
- αααα»αααΆαααααΎααΆααΎααααΈα±αααααα»αααααα½αααα ααΆα αα’αααααααΎααααΆαααα ααΎα ααα 80 α αΎαααΆαααααΌααα·αααΆαα α ααα 3000 αααααΆαααΈααα·αααα·α ααΆααααααααα Grafana ααααα α
- ααα‘αΎαααΆααααα½ααα·αα·ααααα»αααΆααααααααΆαααΈαααα ping αα½αααΆαα ααΎα ααα 3000α
ααα»αααΌα
ααΈαααα»α ααΎαα’αΆα ααΆαααααααΆαα αααααΆαα ααΆαααααααααααααα·ααΈαααα ααααΆαααααα α αΎαα₯α‘αΌααααααΎαααΆαααααΆαααα Grafana αααα’αΆα αααααααΆαααΆααααααα ααΆααααΆααααααΆααΆαα αΆαααΆα αααΎααααΈααΉαααΈα’αΆααααααΆα IP αααα Balancer αααααΆα ααα»α α αΌααα ααΆαααααααα·ααΈ αα·ααααΆαααΈααααα ClickHouse cluster ααΎααααΈαααα»ααααα»ααα·αααααααα αααα»αααΆα
ααΆα αΆααααΌα ααΆααααααα? ααΆα αααααααα ααα»ααααααΆαα’αααΈαα½ααα ααααααΆααααα»αα ααααΎαααΆαααΆααααΌαααΆαααΎαααααΌαα±ααααΆααααααααΆααααααα αααΎα α αΎααα·αααααΎααΆαααααααΆαααΆααααααα αααα»αα ααααααΎα±ααααΆαααααααααααααααα·ααααα·αααΎα’αΆα ααααΎαα ααΆαα αααααΉαααΆααΆααααααα’αΆααααααααααααααααααΆααα
ααΆααα½ααααα αΌαααΆαα½α 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>"
}
ααααΎαααΆαααΆααααΌαααααΆαααΆαααααααΆααααααα·ααΈααΉαα α»αααααΎααααΈαααααΎαααΌαααΆαααΆα αα·ααααααα’αααααΆαααααα αααα»αααΌαααααααααΈα’αααΈααααα½αααααα½ααα»αααααΌαα
outh_token - αααααΆαααααΆαααααααΆααααΆαα
αΌααα
ααΆαααααα α’αΆα
ααα½αααΆαααα
cloud_id - ααΆααααααα’ααααααααΆαααααααααααΎαααΉαααΆαααααααΆααααααα·ααΈ
folder_id - ααΆααααααα’ααααααααΆαααααααααααααΎαααΉαααΆααα±ααααααΎααααΆαααααααα·ααΈ
service_account_id - ααΆααααααα’ααααααααΆαααααΈααααΆαααααα
αααα»αααααααααααααΌαααααΆαααααα
image_id - ααΆααααααα’ααααααααΆαααααΌαααΆαααΆααααααα½αααΆααααααααΎ Packer
username ΠΈ ααΆααααααααΆαα - αααααα’αααααααΎαα·αααΆααααααααΆααααΎααααΈα
αΌαααααΎααΌαααααΆααα·ααααααααΆααααΈααα·ααααΆαααΈααααααααΆα Grafana
dbname - αααααααΌαααααΆααα·αααααααα
ααΆααααα»α CH αα·α MySQL clusters
public_key_path - ααααΌααα
ααΆααα―αααΆααααααααΎααααΆααΆααα 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 αα½αααΆαααα
ααααααααΎαααΌαααΆααααααα ααΌα
αααααααα»αααααΌαααΆααα
ααα
ααα»α
ααΆαααααα
αααααααΎααααΆαααααα·ααααααααααΆααΈ Amazon ααΎαααΉααααααΌααααΆαααΆαααααααα½αα
ααα½ααα
ααΆαααααΆαααΈααα·αααα·α αααααΆααΉαααα½ααα αα·αααααΎαααΆαα ααΎαααααΌαααΆααααΆαααΈαααΎααααΈα
αΌααα
ααΆαααα·ααααααααααΆαααααΆαααααΆαααΈα 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
αααα»α Instance αα·α Balancer
αααααΆααααΆαααΌαααΆαααΆαααααΈα‘αΎααα·α ααΈαααα»αααΎαα’αΆα ααααααα―αααΆαααααααΎααααααΆαα 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 UI α αΎαααααααα ααααα CH ααααα (ααααααααΆαααααα’ααααα ααααααΌαααΆαααΎααααΈααα½αααΆα) ααΆααααααα·ααααααα ααα»αααα Terraform ααααΆααα’ααααααααΆαα αααααα ααΌαβα²ααβααΆααβαααα ααβααΆαααΆαα
αααααααααα’ααααααααααααΆααααΈ - Grafana α αΎααα’α·α IP αααα Balancer ααΆαααΆαααΈαα ααΆαααααΆααααααΌαααΆααα’ααααα 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 α’αΆα αα½αα’ααααααα»αααΏααααα αααα»ααααααΉαααΆααααΆααααΆααααααΎαα’ααααααααααΆαααααααααπ
PS ααΆααααααααααααα»αααΉαααααΆαααααααααΆαααα ααΆααααααΆαα αααα’αααα’αΆα αααααααααΌααααααααααααααα½α ααΆααααα αααααΆαα Packer αα·α Terraform αααααΆαααααααααααα»αααΆαααΎαα‘αΎααα αααα»αα’ααααααααα
ααααα: www.habr.com