แฒกแแแแแ แงแแแแแก! แ แแแแ แช แฉแแแ แแฃแ แกแแก แแฃแจแแแแแก แแแฌแแแ, แแ แแแแแแแแแแแ แแกแแแ แจแแแ แฆแ แฃแแแแแแแ แแแแขแคแแ แแแก แจแแกแแซแแแแแแแแแ, แ แแแแ แแชแแ
แ แแกแ แแแฆแแแ แแกแฃแ แ?
แแแ แกแแ แแแ แแ แแแ แขแฃแแแฃแ แ แแแแฅแแแแก แแแจแแแแแก แจแแแแแ, แจแแแแซแแแแ แแแแแฎแแแแแ แแแก แฐแแกแขแจแ แแ แแแแฆแแ แแแแแแ แแแขแแ แคแแแกแ, แแแฃแแแแแ แแแแแชแแแแ แแแแแแ, แ แแแแ แช แฌแงแแ แแแแ แจแแแแแแแ แแฃแจแแแแแกแแแแก, แจแแฅแแแแ แแแคแแแ แแ แแ แแคแแแแแ.
แกแแแแแแกแ แแแ แกแแแก แแฅแแก แแ แแ แแแแจแแแแแแแแแ แแแแแ - แแก แกแแแ แแแ แแ แแ แแก แจแแชแแแแแก แจแแแฌแงแแแ แแแแแแ. แแแฃ, แแแแแแแชแแแก แแแแแ แคแฃแแฅแชแแแแแ แแแ แแแแแแแแแแฃแแแ แแ แแ แแแ แขแฃแแแฃแ แ แแแแฅแแแแก แกแแชแแชแฎแแแกแฃแแแ แแแแแแแแ. แแฃ แแก แฃแแ แก แแขแงแแแก แแ 10 แแแแแแแแ แแแฎแกแแแก แแแขแแ แคแแแกแก แแ แแแ แแฃแแแ, แแแจแแ แแ แแแแแแแแ แฌแแ แแแแฅแแแแแ.
แแแแ แแแแแแ แแแ แแแ แขแแแแ: แแฅแแแ แฃแแ แแแแ แฃแแแ... แแแแแแแแกแแ แแ แแแแแ แแแแแขแฃแ แ แแแ แขแฃแแแฃแ แ แแแแฅแแแ แแแ แกแแ แแแ แแแ แแ แแแแแแแกแแ แแกแแแ L3 แแแแแแกแแ แแก แฅแแแจ. แแแแ แแ แแฅ แงแแแแแคแแ แ แแกแ แแแแแแ แแ แแ แแก. Grafana แแแแฎแแแก แแแแฎแแแ แแแแแก แแแ แแแแขแ แแแก (แแแแแแแแก แแแแแชแแแแ แแแแแแแกแแแ, แแแคแแแ, แแ แแคแแแแแ แแ แ.แจ.) แแแ แแแแแ แแแกแ แแแ แขแฃแแแฃแ แ แแแแฅแแแแก แแแกแแแ. แแแ แแแแ, แแฃ แฉแแแ แจแแแชแแแแ แแแแแแ แ แแแ แแแแขแ แก UI-แจแ, แแก แชแแแแแแแแแ แแแกแแฎแแแ แแฎแแแแ แแแ แขแฃแแแฃแ แแแแฅแแแแแ, แกแแแแช แแแแแแกแแ แ แแแแแแแแแแแแแ. แแก แแแแแแฌแแแแก แฉแแแแ แแแแแแแชแแแก แแ แแแแแแแแแแแ แฃแ แแแ แแแแขแ แแแก, แ แแช แแแแแแฌแแแแก แแ แแแแแแแแก แแแจแแแแแกแ แแ แแแแแงแแแแแแกแแแ แแแแแแจแแ แแแแ.
แแฅ แกแฎแแ แแแแแชแแแแ แแแแ แแแแ แกแแแแจแแแแแจแ, แแแแแแแแแ, MySQL แแ แแแกแ แแฅแแแแแแแแขแ. แฉแแแ แแแฃแแแแแแ แแ แแคแแแแก, แ แแ แแแ แฃแแแ แจแแแแแฎแแก แแแแฎแแแ แแแแแก แแแ แแแแขแ แแแ แแ โแกแแแแแแ แแแโ แแแแแชแแแแ แแแแแจแ. แแแแก แจแแแแแ, แกแแแแแ แแกแ แแฅแแแแ แแแแแแฃแ แแแแฅแแแแแ แแ แแฎแแ แแแฃแแแแแ แแ แแแแแชแแแแ แแแแแก แแแ แแ แจแแชแแแแแ แงแแแแ แกแฎแแ แแแแฎแแแ แแแแแก แแแ แแแแขแ แ แ แแแแแแแ แแแ แขแฃแแแฃแ แแแแฅแแแแแ; แแกแแแ แแแแ แชแแแแแแ แกแฎแแแแแ.
แแฅ แแ แแก แกแแแแแแ แแแแแชแฎแแแแก แแแคแ แแกแขแ แฃแฅแขแฃแ แแก แแแแแ แแแ:
แแแกแฌแแแแแ แฎแแแแ แแฌแแแ
MySQL แแ ClickHouse
แฆแแแแแแ แแแฌแแแแฃแแแแแ แแกแแแ แแแแแแแชแแแก แแแแแแแกแแแแแแ แกแแญแแ แ แแงแ แแแแก แแแแแแ, แแฃ แ แแแแ แฃแแแ แแแแฃแจแแแแแก แแแกแ แแแแแแฃแแ แแแแแแแแแขแ แแ แแแขแแแ แแ แแแก แแ แแแแแแแแแ.
แแฅ แแแแแแฎแแแ แแแ Yandex.Cloud, แ แแแแแแช แแแแแแแแแ L3 แแแแแแกแแ แแแก, ClickHouse-แก แแ MySQL-แก, แ แแแแ แช แแแ แแฃแ แกแแ แแแกแแแก. แแแแฎแแแ แแแแแแ แแฎแแแแ แฃแแแ แแแฃแแแแแก แแแ แแแแขแ แแแ แแ แแแแแแแแก, แกแแแแ แแแแขแคแแ แแ แงแแแแแคแแ แก แแฃแจแ แแแแแแแ แแแแแจแ แแแแฅแแก.
แแ แแแแ แแแแกแขแ แแ แแ, แจแแแฅแแแแ แฆแ แฃแแแแ แแ แแแแแฎแแแก แแแแแ แแจแ. แแแแก แจแแแแแ แแแแแแ แฆแ แฃแแแแจแ แแ แแแแแงแแแ MySQL แแ ClickHouse แแแแกแขแแ แแแ แแแแแแแแฃแ แ แแแ แแแแขแ แแแแ. แแแแแแแแ แกแแแแ แแแแฅแขแแฃแ แแแแ.
แแฅแแแ แแกแแแ แฃแแแ แแแฎแกแแแแแ, แ แแ แจแแฅแแแแ แแแแแชแแแแ แแแแ แแแแแแฃแ แแแแกแขแแ แจแ แแ แแแแแแแคแแแฃแ แแ แแ แแแกแแ แฌแแแแแ แจแแกแแแแกแ แแ แแแ แแแแก แแแแแงแแแแแแ. แแฅ แแแขแแแแแจแ แแ แจแแแแ - แงแแแแแคแแ แ แกแแแแแแ แแจแแแ แแ แแแขแแ แคแแแกแจแ.
แแ แแแจแแแ แ แแแขแแแ แแก แแงแ, แ แแ แแ แแแแแชแแแแ แแแแแแก แแแแ แ แฐแแกแขแ แฐแงแแแก, แ แแช แฃแแ แฃแแแแแงแแคแก แแแ แจแแชแแแแแก แขแแแแ แแแขแแแแก. แแฃแแชแ, Grafana แแแแแฎแแแก แแฃแกแขแแ แแ แ แฐแแกแขแก แแแแแแฃแแ แแแแแชแแแแ แแแแแกแแแแก, แ แแแแแแแแแแช แแฃแจแแแแก. แฎแแแแ แซแแแแ แแแแฎแแ c-<cluster_id>.rw.mdb.yandexcloud.net
แแกแแฎแฃแแแ แแแแกแขแแ แแก แแแแแแแแ แ แแฅแขแแฃแ แแแแแแ แฐแแกแขแแ แจแแกแแแแแแกแ ID-แแ. แกแฌแแ แแ แแแแก แแแแชแแแ แแ แแคแแแแก.
แแแ แกแแ แแแ แ
แแฎแแ แกแแฅแแ แแแ แกแแ แแแ แแแ. แแแแแ แแแแแแ แแแ แฉแแแฃแแแแ แแแ แแแ แขแฃแแแฃแ แ แแแแฅแแแ Linux-แแ แแ แฎแแแแ แแแแแแแแคแแแฃแ แแ แแ 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 UI.
แแแแ แแ แแ แแฉแฅแแ แแ, แกแแแแ 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
แงแแแแ! แฉแแแ แแแแฅแแก แแ แแ แแแฅแแแแ แแแ แขแฃแแแฃแ แ แแแแฅแแแ แแแ แกแแ แแแ แแ, แ แแแแแแช แแแแแแจแแ แแแฃแแแ CH แแ MySQL-แแแ. แแฅแแแ แฃแแแ แจแแแแซแแแแ แแขแแแ แแแ แแแแแชแแแแ แแแแ แแแ ClickHouse-แจแ แแ แจแแฅแแแแ แแแคแแแ. แแฃแแชแ, แฉแแแ แฏแแ แแแ แแแแแฆแฌแแแ แแแกแแฎแฃแ แแแแแแก แแ แแ แแแแฅแแก แแแแแแแแแฃแแ แกแ แฃแแคแแกแแแแแ แแแคแ แแกแขแ แฃแฅแขแฃแ แ.
Packer
Yandex.Cloud แกแแจแฃแแแแแแก แแแซแแแแ แจแแฅแแแแ แแ แกแแแฃแแ แแแ แขแฃแแแฃแ แ แแแแฅแแแแก แแแกแแแก แแแแแกแแฎแฃแแแแ แแ แแแก แกแแคแฃแซแแแแแ - แแแแแกแแแแ แ แ แแแแแแแแแก แแแแฅแแแ แแ แแแแแแแแก แแแแแขแฃแ แ. แแก แแ แแก แแฃแกแขแแ แแก, แ แแกแแช แฉแแแ แแแแแแแงแแแแแ. แแแแแกแแฎแฃแแแแแก แแแกแแฎแแ แฎแแแแแ แแกแแฌแงแแแแ, แแแฆแแ แแแกแขแ แฃแแแแขแ
แฉแแแแ json แคแแแแ แจแแแแแแ แแ แ แแแแแแกแแแ: แแจแแแแแแแแ แแ แแ แแแแแแแ แแแ. แแแ แแแแ แแแแแ แแฆแฌแแ แก แแแแแ แกแฃแ แแแแก แแแ แแแแขแ แแแก, แ แแแแ แช แแ แแแฃแแก, แฎแแแ แแแแ แ แแแแแ แแฆแฌแแ แก แแแกแขแ แฃแฅแชแแแแก แแแกแ แกแแญแแ แ แจแแแแแ แกแแ แจแแแกแแแแก แแแแแแ.
Builders
{
"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;
แแฎแแ แ แฉแแแ แแฎแแแแ Packer-แแก แแแจแแแแ แแ แแแแแแแแแแ แแแแแกแแฎแฃแแแแแก แแแฆแแแ แแแแแแแแฃแ แแแแงแแคแแแแแแจแ. แแแ แขแฃแแแฃแ แ แแแแฅแแแแก แจแแฅแแแแกแแก แจแแแแซแแแแ แแแ แฉแแแ แแก แฉแแขแแแ แแแแก แแแกแแแ แแ แแแจแแแแแก แจแแแแแ แแแแฆแแแ แแแ Grafana แแแ แกแแ แแแ แก.
แแแกแขแแแชแแแก แฏแแฃแคแ แแ แแแแแแกแแ แ
แแแก แจแแแแแ แ แแช แแแแฅแแแแ แแแกแแแก แกแฃแ แแแ, แ แแแแแแช แกแแจแฃแแแแแแก แแแแซแแแแก แจแแแฅแแแแ แแ แแแแแ แแแแแขแฃแ แ Grafana แแแ แกแแ แแแ แ, แฉแแแ แจแแแแแซแแแ แจแแแฅแแแแ แแแกแขแแแชแแแก แฏแแฃแคแ. Yandex.Cloud แแแแขแคแแ แแแแ แแก แขแแ แแแแ แแฎแแแ แแแ แขแฃแแแฃแ แ แแแแฅแแแแแแก แแแแ แแแแแแแแก, แ แแแแแแกแแช แแฅแแ แแแแแ แแแฎแแกแแแแแแแแแ. แแแกแขแแแชแแแก แฏแแฃแคแแก แจแแฅแแแแกแแก, แแแแคแแแฃแ แแ แแแฃแแแ แแ แฏแแฃแคแแก แงแแแแ แแแแ แแขแแก แแ แแขแแขแแแ, แจแแแแแ แแ แแแแแ แฏแแฃแคแแก แแแฎแแกแแแแแแแแแ (แแแแแแแแแ, แแฅแขแแฃแ แ แแแแฅแแแแแแก แแแแแแแแฃแ แ แแ แแแฅแกแแแแแฃแ แ แ แแแแแแแแ). แแฃ แแแแแแแแแแแ แแแแแ แ แแ แแแแแงแแคแแแแแก แแ แแ แแขแแ แแฃแแแแก, แแแจแแ แแแกแขแแแชแแแก แฏแแฃแคแ แแแแแ แแแแแฆแแแก แแ แแกแแญแแ แ แแแแฅแแแแแก แแ แจแแฅแแแแก แแฎแแแก แกแแแฃแแแ แ แกแฃแ แแแแ.
แ แแแแ แช แฉแแแแ แแแแชแแแแก แแแฌแแแ, แฉแแแ แจแแแฅแแแแ แแแ แกแแ แแแ แแแแก แแแแแแแแแแแก แฏแแฃแคแก, แ แแแแแแช แแแแแ แแ แแแฃแแ แแฅแแแแ แแแ แ แจแแฅแแแแแ แแแกแแแก แกแฃแ แแแแแแ.
แ แแช แแแแแแแแแ แแฆแกแแแแจแแแแแ แแ แแก แแแแ แแแกแขแแแชแแแก แฏแแฃแคแแก แแแงแแแแแ. Load Balancer-แแแ แแแขแแแ แแชแแแก แกแแแแแแ แฏแแฃแคแ แแแแแฎแแแ แแแแ แแ แฏแแฃแคแแก แแแ แขแฃแแแฃแ แ แแแแฅแแแแแแก แแแแแ L3 แแแแแแกแแ แแก แแแแคแแแฃแ แแชแแแจแ แ แแแแแแแแ แฆแแแแแแ แแแฌแแแแฃแแแแแ.
แแแแแแกแแ แแก แแแงแแแแแแกแแก แแ แแแแแแฎแแ แชแแแแ แแ แ แแแแจแแแแแแแแแ แแฃแแฅแขแ:
- แแ แแแแซแฃแแแแแ แแแแแแกแแ แก แแแแฆแ แแแแฎแแแ แแแแแก แขแ แแคแแแ 80-แ แแแ แขแแ แแ แแแแแแแกแแแแ แแแ แแแ แขแฃแแแฃแ แ แแแแฅแแแแแแก 3000 แแแ แขแแ, แแฃแกแขแแ แแฅ, แกแแแแช Grafana แชแฎแแแ แแแก.
- แแ แแแแแงแแแ แแแแฅแแแแแแก แกแแชแแชแฎแแแกแฃแแแ แแแแแแแก แจแแแแฌแแแแ 3000 แแแ แขแแ แแแแแแ.
แแแแ แ แแแแฃแแ
แกแแแแแแแ, แฉแแแ แจแแแซแแแแ แกแแกแฃแ แแแแ แแแแแแแชแแแก แแแคแ แแกแขแ แฃแฅแขแฃแ แแก แฎแแแแ แแแแแแแแแ แแ แแฎแแ แแแแฅแแก แฃแแฆแ แแกแแ แแแแซแแ Grafana แกแแ แแแกแ. แแฅแแแ แแฎแแแแ แฃแแแ แแชแแแแ แแแแแแกแแ แแก IP แแแกแแแแ แแ, แ แแแแ แช แแแแแแแชแแแจแ แจแแกแแแแก แฌแแ แขแแแ แแ ClickHouse แแแแกแขแแ แแก แฐแแกแขแ, แ แแแ แฉแแขแแแ แแแ แแแแแชแแแแ แแแแ แแแ แแแกแจแ.
แ แแแแ แช แฉแแแก, แแแแแ แฏแแแแแ? แแแแฎ, แแแแแ แฏแแแแ. แแแแ แแ แ แแฆแแช แแแแแช แแแแแแแก. แแแแแแฆแแแจแแฃแแ แแแแแ แแ แแชแแกแ แแแแแฎแแแก แฃแแแ แแ แกแแฎแแแแซแฆแแแแแแ แแแแแฏแก แแ แกแแแ แแแ แแ แแ แแก แแแกแจแขแแแแ แแแแแ; แแกแฃแ แก แแแกแ แแแขแแแแขแแแแชแแ, แแฃ แแก แจแแกแแซแแแแแแแ. แกแฌแแ แแ แแแแก แแแแแแแแ แจแแแแแแ แแแแงแแคแแแแแ.
แขแแ แแคแแ แแฃแแ แแแขแแแ แแชแแ
แฉแแแ แแแแแ แแแแแแแงแแแแแ แแแกแขแ แฃแแแแขแก 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 แแแแกแขแแ แ แแ แแฎแแแแ แแแแก แจแแแแแ, แแแกแ ID-แแก แชแแแแแ, แจแแแแแ แแแ แแแกแแแก แแแแแกแแฎแฃแแแแ แกแแญแแ แ แแแแคแแแฃแ แแชแแแ, แกแแแแช แแแแแแฃแกแขแ แแแแกแขแแ แแก แฐแแกแขแ. แแแแ แแ แแฎแแ แฉแแแ แแ แแแชแแ แแแแกแขแแ แแก ID 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 UI-แแ แแ แฎแแแแ แแแแแแขแแ CH แแแแกแขแแ แ (แ แแแแแก ID แฏแแ แแแแแ แฃแแแ แแแแฆแแ), แ แแแแ แช แแแแแชแแแแ แฌแงแแ แ. แแแแ แแ Terraform-แแ แแชแแก แแแแกแขแแ แแก ID. แแแแแ, แแแก แแแแแแแแ แกแแฅแแแก แแแแแแแ แแแงแแแแ.
แแแแแแแขแแ แแฎแแแ แแ แแแแแแแ แ - 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. แแแแแแแแแแ แแแแแแก แแก แกแขแแขแแ แแแแแแแแแแ :)
PS แฅแแแแแ แแแแแแ แแแแแก แกแแชแแแแ, แกแแแแช แจแแแแซแแแแ แแแแแแ แแแ แ แแชแแแขแแแ Packer-แแกแ แแ Terraform-แแกแแแแก, แ แแแแแแ แคแ แแแแแแขแแแ แแ แแแแแฌแแแแ แแ แกแขแแขแแแจแ.
แฌแงแแ แ: www.habr.com