ืคืจื™ืกืช ืฉื™ืจื•ืชื™ื ืžื‘ื•ื–ืจื™ื ื‘-Yandex.Cloud ื‘ืืžืฆืขื•ืช Grafana ื›ื“ื•ื’ืžื”

ืฉืœื•ื ืœื›ื•ืœื! ื›ื—ืœืง ืžืขื‘ื•ื“ืชื™ ื‘ืงื•ืจืก, ื—ืงืจืชื™ ืืช ื”ื™ื›ื•ืœื•ืช ืฉืœ ืคืœื˜ืคื•ืจืžืช ืขื ืŸ ืžืงื•ืžื™ืช ื›ืžื• Yandex.Cloud. ื”ืคืœื˜ืคื•ืจืžื” ืžืฆื™ืขื” ืฉื™ืจื•ืชื™ื ืฉื•ื ื™ื ืœืคืชืจื•ืŸ ื‘ืขื™ื•ืช ืžืขืฉื™ื•ืช. ืขื ื–ืืช, ืœืคืขืžื™ื ืืชื” ืฆืจื™ืš ืœื”ื’ื“ื™ืจ ืืคืœื™ืงืฆื™ื™ืช ืขื ืŸ ืžืฉืœืš ืขื ืชืฉืชื™ืช ื ืจื—ื‘ืช ืœืžื“ื™ ื”ืžื‘ื•ืกืกืช ืขืœ ืฉื™ืจื•ืชื™ื ืืœื”. ื‘ืžืืžืจ ื–ื” ืื ื™ ืจื•ืฆื” ืœื—ืœื•ืง ืืช ื”ื ื™ืกื™ื•ืŸ ืฉืœื™ ื‘ืคืจื™ืกืช ืืคืœื™ืงืฆื™ื” ื›ื–ื•.

ืคืจื™ืกืช ืฉื™ืจื•ืชื™ื ืžื‘ื•ื–ืจื™ื ื‘-Yandex.Cloud ื‘ืืžืฆืขื•ืช Grafana ื›ื“ื•ื’ืžื”

ืžื” ืืชื” ืจื•ืฆื” ืœืงื‘ืœ?

ื’ืจืคื ื” - ื›ืœื™ ืจื‘ ืขื•ืฆืžื” ืœืคืชืจื•ืŸ ื‘ืขื™ื•ืช ืื ืœื™ื˜ื™ื•ืช ืื• ื ื™ื˜ื•ืจ ื‘ืขื™ื•ืช ืฉืœ ื›ืœ ืžืขืจื›ื•ืช. ื‘ืชืฆื•ืจืชื” ื”ื‘ืกื™ืกื™ืช ืžื“ื•ื‘ืจ ื‘ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ืขื ืฉืจืช ืื™ื ื˜ืจื ื˜ ืฉืœ Grafana ื•ื›ืŸ ื‘ืžืกื“ ื ืชื•ื ื™ื (ClickHouse, InfluxDB ื•ื›ื•') ืขื ืžืขืจืš ื ืชื•ื ื™ื ืขืœื™ื• ื™ืชื‘ืกืก ืื ืœื™ื˜ื™ืงืก.

ืœืื—ืจ ื”ืฉืงืช ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ืขื ืฉืจืช ืื™ื ื˜ืจื ื˜, ืืชื” ื™ื›ื•ืœ ืœืœื›ืช ืœืžืืจื— ืฉืœื” ื•ืœืงื‘ืœ ืžืžืฉืง ืžืฉืชืžืฉ ื™ืคื”, ืœืฆื™ื™ืŸ ืžืกื“ื™ ื ืชื•ื ื™ื ื›ืžืงื•ืจื•ืช ืœืขื‘ื•ื“ื” ื ื•ืกืคืช, ืœื™ืฆื•ืจ ืœื•ื—ื•ืช ืžื—ื•ื•ื ื™ื ื•ื’ืจืคื™ื.

ืคืจื™ืกืช ืฉื™ืจื•ืชื™ื ืžื‘ื•ื–ืจื™ื ื‘-Yandex.Cloud ื‘ืืžืฆืขื•ืช Grafana ื›ื“ื•ื’ืžื”

ืœื’ืจืกื” ื”ื‘ืกื™ืกื™ืช ื™ืฉ ื—ื™ืกืจื•ืŸ ืื—ื“ ืžืฉืžืขื•ืชื™ - ื”ื™ื ืื™ื ื” ืกื•ื‘ืœื ื™ืช ืœืชืงืœื•ืช ื›ืœืœ. ื›ืœื•ืžืจ, ื›ืœ ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืœ ื”ืืคืœื™ืงืฆื™ื” ืชืœื•ื™ื” ื‘ื›ื“ืื™ื•ืช ืฉืœ ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ืื—ืช. ืื ื–ื” ื™ืกืจื‘ ืื• 10 ืื ืฉื™ื ื™ืคืชื—ื• ืืช ืžืžืฉืง ื”ืžืฉืชืžืฉ ื‘ื• ื–ืžื ื™ืช, ืื– ื™ืชืขื•ืจืจื• ื‘ืขื™ื•ืช.

ื ื™ืชืŸ ืœืคืชื•ืจ ืื•ืชื ื‘ืคืฉื˜ื•ืช: ืืชื” ืจืง ืฆืจื™ืš... ืœืคืจื•ืก ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ื–ื”ื•ืช ืจื‘ื•ืช ืขื ืฉืจืช ืื™ื ื˜ืจื ื˜ ื•ืœื”ืฆื™ื‘ ืื•ืชืŸ ืžืชื—ืช ืœืžืื–ืŸ L3. ืื‘ืœ ืœื ื”ื›ืœ ื›ืœ ื›ืš ื‘ืจื•ืจ ื›ืืŸ. Grafana ืžืื—ืกืŸ ืืช ื”ื’ื“ืจื•ืช ื”ืžืฉืชืžืฉ (ื ืชื™ื‘ื™ื ืœื‘ืกื™ืกื™ ื ืชื•ื ื™ื, ืœื•ื—ื•ืช ืžื—ื•ื•ื ื™ื, ื’ืจืคื™ื ื•ื›ื•') ื™ืฉื™ืจื•ืช ืขืœ ื”ื“ื™ืกืง ืฉืœ ื”ืžื›ื•ื ื” ื”ื•ื™ืจื˜ื•ืืœื™ืช ืฉืœื”. ืœืคื™ื›ืš, ืื ื ืฉื ื” ื›ืžื” ื”ื’ื“ืจื•ืช ื‘ืžืžืฉืง ื”ืžืฉืชืžืฉ, ืฉื™ื ื•ื™ื™ื ืืœื• ื™ื‘ื•ืื• ืœื™ื“ื™ ื‘ื™ื˜ื•ื™ ืจืง ื‘ืžื›ื•ื ื” ื”ื•ื™ืจื˜ื•ืืœื™ืช ืืœื™ื” ืฉืœื— ืื•ืชื ื• ื”ืžืื–ืŸ. ื–ื” ื™ื•ื‘ื™ืœ ืœื”ื’ื“ืจื•ืช ืœื ืขืงื‘ื™ื•ืช ืขื‘ื•ืจ ื”ืืคืœื™ืงืฆื™ื” ืฉืœื ื•, ืžื” ืฉื™ื’ืจื•ื ืœื‘ืขื™ื•ืช ื‘ื”ืคืขืœื” ื•ื‘ืฉื™ืžื•ืฉ.

ื›ืืŸ ื™ื‘ื•ื ื‘ืกื™ืก ื ืชื•ื ื™ื ืื—ืจ ืœืขื–ืจื”, ืœืžืฉืœ MySQL ืื• ื”ืžืงื‘ื™ืœื” ืฉืœื•. ืื ื• ืื•ืžืจื™ื ืœื’ืจืืคืื ื” ืฉื”ื™ื ืฆืจื™ื›ื” ืœืื—ืกืŸ ืืช ื”ื’ื“ืจื•ืช ื”ืžืฉืชืžืฉ ื‘ืžืกื“ ื”ื ืชื•ื ื™ื ื”"ื—ื™ืœื•ืคื™" ื”ื–ื”. ืœืื—ืจ ืžื›ืŸ, ื–ื” ื™ืกืคื™ืง ืœืฆื™ื™ืŸ ืืช ื”ื ืชื™ื‘ ืœืžืกื“ ื”ื ืชื•ื ื™ื ื”ื–ื” ืคืขื ืื—ืช ื‘ื›ืœ ืžื›ื•ื ื”, ื•ืœืขืจื•ืš ืืช ื›ืœ ืฉืืจ ื”ื’ื“ืจื•ืช ื”ืžืฉืชืžืฉ ื‘ื›ืœ ืื—ืช ืžื”ืžื›ื•ื ื•ืช ื”ื•ื•ื™ืจื˜ื•ืืœื™ื•ืช; ื”ืŸ ื™ืžืฉื›ื• ืœืื—ืจื•ืช.

ืœื”ืœืŸ ืชืจืฉื™ื ืฉืœ ืชืฉืชื™ืช ื”ืืคืœื™ืงืฆื™ื” ื”ืกื•ืคื™ืช:

ืคืจื™ืกืช ืฉื™ืจื•ืชื™ื ืžื‘ื•ื–ืจื™ื ื‘-Yandex.Cloud ื‘ืืžืฆืขื•ืช Grafana ื›ื“ื•ื’ืžื”

ื‘ื•ืื• ื ืœืžื“ ืœื”ืจื™ื ืขื ื”ื™ื“ื™ื™ื

MySQL ื•- ClickHouse

ืœืคื ื™ ืคืจื™ืกืช ืืคืœื™ืงืฆื™ื” ื›ื–ื• ื‘ืœื—ื™ืฆืช ื›ืคืชื•ืจ, ื”ื™ื” ืฆื•ืจืš ืœืœืžื•ื“ ื›ื™ืฆื“ ืœื˜ืคืœ ื‘ื›ืœ ืื—ื“ ืžื”ืจื›ื™ื‘ื™ื ืฉืœื• ื•ืœืฉืœื‘ ืื•ืชื ืื—ื“ ืขื ื”ืฉื ื™.

ื›ืืŸ ื™ืขื–ื•ืจ ืœื ื• Yandex.Cloud, ื”ืžืกืคืงืช ืžืื–ื ื™ L3, ClickHouse ื•-MySQL ื›ืฉื™ืจื•ืชื™ื ืžื ื•ื”ืœื™ื. ื”ืžืฉืชืžืฉ ืฆืจื™ืš ืจืง ืœืฆื™ื™ืŸ ืืช ื”ืคืจืžื˜ืจื™ื ื•ืœื—ื›ื•ืช ืขื“ ืฉื”ืคืœื˜ืคื•ืจืžื” ืชื‘ื™ื ืืช ื”ื›ืœ ืœืžืฆื‘ ืชืงื™ืŸ.

ื ืจืฉืžืชื™, ื™ืฆืจืชื™ ืขื ืŸ ื•ื—ืฉื‘ื•ืŸ ืชืฉืœื•ื. ืœืื—ืจ ืžื›ืŸ, ื”ืœื›ืชื™ ืœืขื ืŸ ื•ื”ื’ื“ืจืชื™ ืืฉื›ื•ืœื•ืช MySQL ื•-ClickHouse ืขื ื”ื’ื“ืจื•ืช ืžื™ื ื™ืžืœื™ื•ืช. ื—ื™ื›ื™ืชื™ ืขื“ ืฉื”ื ื™ื”ื™ื• ืคืขื™ืœื™ื.

ืคืจื™ืกืช ืฉื™ืจื•ืชื™ื ืžื‘ื•ื–ืจื™ื ื‘-Yandex.Cloud ื‘ืืžืฆืขื•ืช Grafana ื›ื“ื•ื’ืžื”ืคืจื™ืกืช ืฉื™ืจื•ืชื™ื ืžื‘ื•ื–ืจื™ื ื‘-Yandex.Cloud ื‘ืืžืฆืขื•ืช Grafana ื›ื“ื•ื’ืžื”

ืืชื” ื’ื ืฆืจื™ืš ืœื–ื›ื•ืจ ืœื™ืฆื•ืจ ืžืกื“ ื ืชื•ื ื™ื ื‘ื›ืœ ืืฉื›ื•ืœ ื•ืœื”ื’ื“ื™ืจ ืืช ื”ื’ื™ืฉื” ืืœื™ื• ื‘ืืžืฆืขื•ืช ื›ื ื™ืกื” ื•ืกื™ืกืžื”. ืœื ืื›ื ืก ื›ืืŸ ืœืคืจื˜ื™ื - ื”ื›ืœ ื“ื™ ื‘ืจื•ืจ ื‘ืžืžืฉืง.

ื”ืคืจื˜ ื”ืœื ื‘ืจื•ืจ ื”ื™ื” ืฉืœื‘ืกื™ืกื™ ื”ื ืชื•ื ื™ื ื”ืœืœื• ื™ืฉ ืžืืจื—ื™ื ืจื‘ื™ื, ื”ืžื‘ื˜ื™ื—ื™ื ืืช ืกื•ื‘ืœื ื•ืช ื”ืชืงืœื•ืช ืฉืœื”ื. ืขื ื–ืืช, Grafana ื“ื•ืจืฉ ืžืืจื— ืื—ื“ ื‘ื“ื™ื•ืง ืขื‘ื•ืจ ื›ืœ ืžืกื“ ื ืชื•ื ื™ื ืฉื”ื•ื ืขื•ื‘ื“ ืื™ืชื•. ืงืจื™ืื” ืืจื•ื›ื” ืชื™ืขื•ื“ ื”ืขื ื ื™ื ื”ื‘ื™ืื• ืื•ืชื™ ืœื”ื—ืœื˜ื”. ืžืกืชื‘ืจ ืฉื”ืžืืจื— ืฉืœ ื”ืžื™ืŸ c-<cluster_id>.rw.mdb.yandexcloud.net ืžืžื•ืคื” ืœืžืืจื— ื”ืžืืกื˜ืจ ื”ืคืขื™ืœ ื”ื ื•ื›ื—ื™ ืฉืœ ื”ืืฉื›ื•ืœ ืขื ื”ืžื–ื”ื” ื”ืžืชืื™ื. ื–ื” ืžื” ืฉืื ื—ื ื• ื ื™ืชืŸ ืœื’ืจืคืื ื”.

ืฉืจืช ืื™ื ื˜ืจื ื˜

ืขื›ืฉื™ื• ื–ื” ืชืœื•ื™ ื‘ืฉืจืช ื”ืื™ื ื˜ืจื ื˜. ื‘ื•ืื• ื ืขืœื” ืžื›ื•ื ื” ื•ื™ืจื˜ื•ืืœื™ืช ืจื’ื™ืœื” ืขื ืœื™ื ื•ืงืก ื•ื ืงื‘ืข ืขืœื™ื” ื™ื“ื ื™ืช ืืช Grafana.

ืคืจื™ืกืช ืฉื™ืจื•ืชื™ื ืžื‘ื•ื–ืจื™ื ื‘-Yandex.Cloud ื‘ืืžืฆืขื•ืช Grafana ื›ื“ื•ื’ืžื”

ืคืจื™ืกืช ืฉื™ืจื•ืชื™ื ืžื‘ื•ื–ืจื™ื ื‘-Yandex.Cloud ื‘ืืžืฆืขื•ืช 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.
ืคืจื™ืกืช ืฉื™ืจื•ืชื™ื ืžื‘ื•ื–ืจื™ื ื‘-Yandex.Cloud ื‘ืืžืฆืขื•ืช 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.

ื”ืฆืœื—ืชื™ ืœื”ืฉื™ื’ ืชืฆื•ืจื” ืขื•ื‘ื“ืช ืขื ื”ื”ื’ื“ืจื•ืช ื”ื‘ืื•ืช:

ืคืจื™ืกืช ืฉื™ืจื•ืชื™ื ืžื‘ื•ื–ืจื™ื ื‘-Yandex.Cloud ื‘ืืžืฆืขื•ืช Grafana ื›ื“ื•ื’ืžื”

ืฆื™ื™ื ืชื™ ื›ื›ืชื•ื‘ืช ื”ืืชืจ 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 ืฉืœื‘ื™ื. ื‘ืฉืœื‘ ื”ืจืืฉื•ืŸ ืžื‘ื•ืฆืข ืกืงืจื™ืคื˜ ืคืฉื•ื˜ ืฉื™ื•ืฆืจ ืกืคืจื™ื™ืช ืขื–ืจ.

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.

ืคืจื™ืกืช ืฉื™ืจื•ืชื™ื ืžื‘ื•ื–ืจื™ื ื‘-Yandex.Cloud ื‘ืืžืฆืขื•ืช Grafana ื›ื“ื•ื’ืžื”
ืคืจื™ืกืช ืฉื™ืจื•ืชื™ื ืžื‘ื•ื–ืจื™ื ื‘-Yandex.Cloud ื‘ืืžืฆืขื•ืช Grafana ื›ื“ื•ื’ืžื”

ืงื‘ื•ืฆืช ืžื•ืคืข ื•ืžืื–ืŸ

ื‘ืจื’ืข ืฉื™ืฉ ืœื ื• ืชืžื•ื ืช ื“ื™ืกืง ื”ืžืืคืฉืจืช ืœื ื• ืœื™ืฆื•ืจ ืฉืจืชื™ ืื™ื ื˜ืจื ื˜ ื–ื”ื™ื ืจื‘ื™ื ืฉืœ Grafana, ื ื•ื›ืœ ืœื™ืฆื•ืจ ืงื‘ื•ืฆืช ืžื•ืคืขื™ื. ื‘ืคืœื˜ืคื•ืจืžืช Yandex.Cloud, ืžื•ื ื— ื–ื” ืžืชื™ื™ื—ืก ืœืื™ื—ื•ื“ ืฉืœ ืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช ื‘ืขืœื•ืช ืื•ืชื ืžืืคื™ื™ื ื™ื. ื‘ืขืช ื™ืฆื™ืจืช ืงื‘ื•ืฆืช ืžื•ืคืขื™ื, ืื‘ ื”ื˜ื™ืคื•ืก ืฉืœ ื›ืœ ื”ืžื›ื•ื ื•ืช ื‘ืงื‘ื•ืฆื” ื–ื• ืžื•ื’ื“ืจ, ื•ืœืื—ืจ ืžื›ืŸ ื”ืžืืคื™ื™ื ื™ื ืฉืœ ื”ืงื‘ื•ืฆื” ืขืฆืžื” (ืœื“ื•ื’ืžื”, ื”ืžืกืคืจ ื”ืžื™ื ื™ืžืœื™ ื•ื”ืžืงืกื™ืžืœื™ ืฉืœ ืžื›ื•ื ื•ืช ืคืขื™ืœื•ืช). ืื ื”ืžืกืคืจ ื”ื ื•ื›ื—ื™ ืื™ื ื• ืขื•ืžื“ ื‘ืงืจื™ื˜ืจื™ื•ื ื™ื ืืœื”, ืงื‘ื•ืฆืช ื”ืžื•ืคืขื™ื ืขืฆืžื” ืชืกื™ืจ ืžื›ื•ื ื•ืช ืžื™ื•ืชืจื•ืช ืื• ืชื™ืฆื•ืจ ืžื›ื•ื ื•ืช ื—ื“ืฉื•ืช ื‘ืชืžื•ื ื” ืžืฉืœื”.

ื›ื—ืœืง ืžื”ืžืฉื™ืžื” ืฉืœื ื•, ื ื™ืฆื•ืจ ืงื‘ื•ืฆืช ืžื•ืคืขื™ื ืฉืœ ืฉืจืชื™ ืื™ื ื˜ืจื ื˜ ืฉืชื™ื•ื•ืฆืจ ืžืชืžื•ื ืช ื”ื“ื™ืกืง ืฉื ื•ืฆืจื” ืงื•ื“ื ืœื›ืŸ.

ืคืจื™ืกืช ืฉื™ืจื•ืชื™ื ืžื‘ื•ื–ืจื™ื ื‘-Yandex.Cloud ื‘ืืžืฆืขื•ืช Grafana ื›ื“ื•ื’ืžื”

ืคืจื™ืกืช ืฉื™ืจื•ืชื™ื ืžื‘ื•ื–ืจื™ื ื‘-Yandex.Cloud ื‘ืืžืฆืขื•ืช Grafana ื›ื“ื•ื’ืžื”

ืžื” ืฉื‘ืืžืช ื™ื•ืฆื ื“ื•ืคืŸ ื”ื•ื ื”ื’ื“ืจืช ืงื‘ื•ืฆืช ื”ืžื•ืคืข ื”ืื—ืจื•ืŸ. ืงื‘ื•ืฆืช ื”ื™ืขื“ ื‘ืื™ื ื˜ื’ืจืฆื™ื” ืขื Load Balancer ืชืขื–ื•ืจ ืœืš ืœื”ื’ื“ื™ืจ ืžืื–ืŸ L3 ืขืœ ื’ื‘ื™ ื”ืžื›ื•ื ื•ืช ื”ื•ื™ืจื˜ื•ืืœื™ื•ืช ืฉืœ ืงื‘ื•ืฆื” ื–ื• ืขืœ ื™ื“ื™ ืœื—ื™ืฆื” ืขืœ ื›ืžื” ื›ืคืชื•ืจื™ื.

ืคืจื™ืกืช ืฉื™ืจื•ืชื™ื ืžื‘ื•ื–ืจื™ื ื‘-Yandex.Cloud ื‘ืืžืฆืขื•ืช Grafana ื›ื“ื•ื’ืžื”

ื‘ืขืช ื”ื’ื“ืจืช ื”ืื™ื–ื•ืŸ, ื™ื™ืฉืžืชื™ ืฉืชื™ ื ืงื•ื“ื•ืช ื—ืฉื•ื‘ื•ืช:

  1. ื’ืจืžืชื™ ืœืžืื–ืŸ ืœืงื‘ืœ ืชืขื‘ื•ืจืช ืžืฉืชืžืฉื™ื ื‘ื™ืฆื™ืื” 80 ื•ืœื ืชื‘ ืื•ืชื” ืœื™ืฆื™ืื” 3000 ืฉืœ ื”ืžื›ื•ื ื•ืช ื”ื•ื•ื™ืจื˜ื•ืืœื™ื•ืช, ื‘ื“ื™ื•ืง ื”ื™ื›ืŸ ืฉื’ืจืคืื ื” ื’ืจ.
  2. ื”ื’ื“ืจืชื™ ื‘ื“ื™ืงืช ื›ื“ืื™ื•ืช ืฉืœ ืžื›ื•ื ื•ืช ืขืœ ื™ื“ื™ ืคื™ื ื’ ืื•ืชืŸ ืœื™ืฆื™ืื” 3000.

ืคืจื™ืกืช ืฉื™ืจื•ืชื™ื ืžื‘ื•ื–ืจื™ื ื‘-Yandex.Cloud ื‘ืืžืฆืขื•ืช Grafana ื›ื“ื•ื’ืžื”

ืกื™ื›ื•ื ืžื™ื ื™

ืœื‘ืกื•ืฃ, ื”ืฆืœื—ื ื• ืœืคืจื•ืก ื‘ืื•ืคืŸ ื™ื“ื ื™ ืืช ืชืฉืชื™ืช ื”ื™ื™ืฉื•ืžื™ื ื”ืจืฆื•ื™ื”, ื•ืขื›ืฉื™ื• ื™ืฉ ืœื ื• ืฉื™ืจื•ืช ื’ืจืืคื ื” ื‘ืขืœ ื’ืžื™ืฉื•ืช ื’ื‘ื•ื”ื”. ืืชื” ืจืง ืฆืจื™ืš ืœื“ืขืช ืืช ื›ืชื•ื‘ืช ื”-IP ืฉืœ ื”ืžืื–ืŸ ื›ื ืงื•ื“ืช ื”ื›ื ื™ืกื” ืœืืคืœื™ืงืฆื™ื” ื•ืืช ื”ืžืืจื— ืฉืœ ืืฉื›ื•ืœ ClickHouse ื›ื“ื™ ืœื˜ืขื•ืŸ ืืช ืžืขืจืš ื”ื ืชื•ื ื™ื ืœืชื•ื›ื•.

ื–ื” ื™ื™ืจืื” ื›ืžื• ื ื™ืฆื—ื•ืŸ? ื›ืŸ, ื ื™ืฆื—ื•ืŸ. ืื‘ืœ ืžืฉื”ื• ืขื“ื™ื™ืŸ ืžื‘ืœื‘ืœ ืื•ืชื™. ื›ืœ ื”ืชื”ืœื™ืš ืฉืœืžืขืœื” ื“ื•ืจืฉ ื”ืจื‘ื” ืฉืœื‘ื™ื ื™ื“ื ื™ื™ื ื•ืื™ื ื• ื ื™ืชืŸ ืœื”ืจื—ื‘ื” ื›ืœืœ; ื‘ืจืฆื•ื ื™ ืœื”ืคื•ืš ืื•ืชื• ืœืื•ื˜ื•ืžื˜ื™ ื‘ืžื™ื“ืช ื”ืืคืฉืจ. ืœื–ื” ื™ื•ืงื“ืฉ ื”ื—ืœืง ื”ื‘ื.

ืื™ื ื˜ื’ืจืฆื™ื” ืฉืœ Terraform

ื ืฉืชืžืฉ ืฉื•ื‘ ื‘ื›ืœื™ ืžื‘ื™ืช HashiCorp ืฉื ืงืจื Terraform. ื–ื” ื™ืขื–ื•ืจ ืœื›ื ืœืคืจื•ืก ืืช ื›ืœ ืชืฉืชื™ืช ื”ืืคืœื™ืงืฆื™ื” ื‘ืœื—ื™ืฆืช ื›ืคืชื•ืจ, ื‘ื”ืชื‘ืกืก ืขืœ ืžืกืคืจ ืžืฉืชื ื™ื ืฉืขื‘ืจื• ืขืœ ื™ื“ื™ ื”ืžืฉืชืžืฉ. ื‘ื•ืื• ื ื›ืชื•ื‘ ืžืชื›ื•ืŸ ืฉื ื™ืชืŸ ืœื”ืคืขื™ืœ ืžืกืคืจ ืคืขืžื™ื ื‘ืงื˜ืขื™ื ืฉื•ื ื™ื ืฉืœ ืžืฉืชืžืฉื™ื ืฉื•ื ื™ื.

ื›ืœ ืขื‘ื•ื“ื” ืขื 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

ื•ื‘ืขื ืŸ, ืืœืžื ื˜ื™ื ืฉืœ ื”ืชืฉืชื™ืช ื”ืžื•ื’ื‘ื”ืช ื™ื”ื™ื• ื’ืœื•ื™ื™ื:

ืคืจื™ืกืช ืฉื™ืจื•ืชื™ื ืžื‘ื•ื–ืจื™ื ื‘-Yandex.Cloud ื‘ืืžืฆืขื•ืช Grafana ื›ื“ื•ื’ืžื”

ืœืกื›ื

ื›ืขืช, ื‘ืืžืฆืขื•ืช Grafana ื›ื“ื•ื’ืžื”, ื›ืœ ืื—ื“ ืžื›ื ื™ื›ื•ืœ ืœืคืจื•ืก ื™ื™ืฉื•ืžื™ื ืขื ืืจื›ื™ื˜ืงื˜ื•ืจืช ืขื ืŸ ืจื—ื‘ืช ื™ื“ื™ื™ื ื‘ืคืœื˜ืคื•ืจืžืช Yandex.Cloud. ื›ืœื™ื ืžื•ืขื™ืœื™ื ืžื‘ื™ืช HashiCorp ื›ืžื• Packer ื•- Terraform ื™ื›ื•ืœื™ื ืœืขื–ื•ืจ ืœืš ื‘ื›ืš. ืื ื™ ืžืงื•ื•ื” ืฉืžื™ืฉื”ื• ื™ืžืฆื ืืช ื”ืžืืžืจ ื”ื–ื” ืฉื™ืžื•ืฉื™ :)

ื .ื‘. ืœืžื˜ื” ืืฆืจืฃ ืงื™ืฉื•ืจ ืœืžืื’ืจ ื‘ื• ืชื•ื›ืœื• ืœืžืฆื•ื ืžืชื›ื•ื ื™ื ืžื•ื›ื ื™ื ืœ-Packer ื•- Terraform, ืฉืงื˜ืขื™ื ืžื”ื ืกื™ืคืงืชื™ ื‘ืžืืžืจ ื–ื”.

ืžืื’ืจ

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”