ΠΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π΅Ρ! Π ΡΠ°ΠΌΠΊΠ°Ρ
ΠΊΡΡΡΠΎΠ²ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ Π·Π°Π½ΠΈΠΌΠ°Π»ΡΡ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΡΠ°ΠΊΠΎΠΉ ΠΎΡΠ΅ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΠ½ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ, ΠΊΠ°ΠΊ
Π§ΡΠΎ Ρ ΠΎΡΠ΅ΡΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ?
ΠΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ Ρ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΉΡΠΈ Π½Π° Π΅Π³ΠΎ Ρ ΠΎΡΡ ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΊΡΠ°ΡΠΈΠ²ΡΠΉ UI, ΡΠΊΠ°Π·Π°ΡΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² Π΄Π»Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ, ΡΠΎΠ·Π΄Π°ΡΡ Π΄Π°ΡΠ±ΠΎΡΠ΄Ρ ΠΈ Π³ΡΠ°ΡΠΈΠΊΠΈ.
Π£ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Π΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΉ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ β ΠΎΠ½Π° ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π½Π΅ ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²Π°. Π’ΠΎ Π΅ΡΡΡ Π²ΡΡ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΆΠΈΠ·Π½Π΅ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΎΠ΄Π½ΠΎΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ. ΠΡΠ»ΠΈ ΠΎΠ½Π° ΠΎΡΠΊΠ°ΠΆΠ΅Ρ ΠΈΠ»ΠΈ ΠΆΠ΅ 10 ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡΠΊΡΠΎΡΡ UI, ΡΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ.
Π Π΅ΡΠ°ΡΡΡΡ ΠΎΠ½ΠΈ ΠΏΡΠΎΡΡΠΎ: Π½ΡΠΆΠ½ΠΎ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡβ¦ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½ Ρ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΈ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ ΠΈΡ ΠΏΠΎΠ΄ L3-Π±Π°Π»Π°Π½ΡΠ΅Ρ. ΠΠΎ Π½Π΅ Π·Π΄Π΅ΡΡ Π½Π΅ Π²ΡΠ΅ ΡΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎ. ΠΡΠ°ΡΠ°Π½Π° Ρ ΡΠ°Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ (ΠΏΡΡΠΈ ΠΊ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½ΡΡ , Π΄Π°ΡΠ±ΠΎΡΠ΄Ρ, Π³ΡΠ°ΡΠΈΠΊΠΈ ΠΈ Ρ.Π΄.) ΠΏΡΡΠΌΠΎ Π½Π° Π΄ΠΈΡΠΊΠ΅ ΡΠ²ΠΎΠ΅ΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΅ΡΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π² UI, ΡΠΎ ΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΎΡΠΎΠ±ΡΠ°Π·ΡΡΡΡ Π»ΠΈΡΡ Π½Π° ΡΠΎΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅, ΠΊΡΠ΄Π° ΠΎΡΠΏΡΠ°Π²ΠΈΠ» Π½Π°Ρ Π±Π°Π»Π°Π½ΡΠ΅Ρ. ΠΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ Π½Π΅ΠΊΠΎΠ½ΡΠΈΡΡΠ΅Π½ΡΠ½ΡΠΌ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ Π·Π°ΠΏΡΡΠΊΠΎΠΌ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ.
ΠΠ΄Π΅ΡΡ Π½Π° ΠΏΠΎΠΌΠΎΡΡ ΠΏΡΠΈΠ΄Π΅Ρ Π΅ΡΠ΅ ΠΎΠ΄Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ , Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, MySQL ΠΈΠ»ΠΈ Π΅Π΅ Π°Π½Π°Π»ΠΎΠ³. ΠΠΎΠ²ΠΎΡΠΈΠΌ ΠΡΠ°ΡΠ°Π½Π΅, ΡΡΠΎ ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Ρ ΡΠ°Π½ΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² ΡΡΠΎΠΉ "Π·Π°ΠΏΠ°ΡΠ½ΠΎΠΉ" Π±Π°Π·Π΅. ΠΠΎΡΠ»Π΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΡΠΊΠ°Π·Π°ΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅ ΠΏΡΡΡ ΠΊ ΡΡΠΎΠΉ ΠΠ, Π° Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π° Π»ΡΠ±ΠΎΠΉ ΠΈΠ· Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½, ΠΎΠ½ΠΈ Π±ΡΠ΄ΡΡ ΠΏΡΠΎΡΠ°ΡΡΠ°ΡΡ Π½Π° ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅.
ΠΠΎΡ ΡΡ Π΅ΠΌΠ° ΠΈΡΠΎΠ³ΠΎΠ²ΠΎΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ:
ΠΠ°ΡΡΠΈΠΌΡΡ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°ΡΡ ΡΡΠΊΠ°ΠΌΠΈ
MySQL ΠΈ ClickHouse
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡ ΡΠ°ΠΊΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π°ΠΆΠ°ΡΠΈΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ, Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π½Π°ΡΡΠΈΡΡΡΡ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°ΡΡ ΡΡΡΠΊΠ°ΠΌΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ.
ΠΠ΄Π΅ΡΡ Π½Π°ΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π―Π½Π΄Π΅ΠΊΡ.ΠΠ±Π»Π°ΠΊΠΎ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ L3-Π±Π°Π»Π°Π½ΡΠ΅ΡΡ, ClickHouse ΠΈ MySQL Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ managed-ΡΠ΅ΡΠ²ΠΈΡΠΎΠ². ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΈ ΠΏΠΎΠ΄ΠΎΠΆΠ΄Π°ΡΡ, ΠΏΠΎΠΊΠ° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ Π²ΡΠ΅ Π² ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅.
Π― Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π»ΡΡ, ΡΠΎΠ·Π΄Π°Π» ΡΠ΅Π±Π΅ ΠΎΠ±Π»Π°ΠΊΠΎ ΠΈ ΠΏΠ»Π°ΡΠ΅ΠΆΠ½ΡΠΉ Π°ΠΊΠΊΠ°ΡΠ½Ρ. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π·Π°ΡΠ΅Π» Π² ΠΎΠ±Π»Π°ΠΊΠΎ ΠΈ ΠΏΠΎΠ΄Π½ΡΠ» ΠΊΠ»Π°ΡΡΠ΅ΡΡ MySQL ΠΈ ClickHouse Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ. ΠΠΎΠΆΠ΄Π°Π»ΡΡ, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ ΡΡΠ°Π½ΡΡ Π°ΠΊΡΠΈΠ²Π½Ρ.
Π’Π°ΠΊΠΆΠ΅ Π½Π°Π΄ΠΎ Π½Π΅ Π·Π°Π±ΡΡΡ ΡΠΎΠ·Π΄Π°ΡΡ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈ Π½Π°ΡΡΡΠΎΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ Π½Π΅ΠΉ ΠΏΠΎ Π»ΠΎΠ³ΠΈΠ½Ρ ΠΈ ΠΏΠ°ΡΠΎΠ»Ρ. ΠΠ΄Π°Π²Π°ΡΡΡΡ Π·Π΄Π΅ΡΡ Π² Π΄Π΅ΡΠ°Π»ΠΈ Π½Π΅ Π±ΡΠ΄Ρ β Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ Π²ΡΠ΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΠΎ.
ΠΠ΅ΠΎΡΠ΅Π²ΠΈΠ΄Π½Π°Ρ Π΄Π΅ΡΠ°Π»Ρ Π±ΡΠ»Π° Π² ΡΠΎΠΌ, ΡΡΠΎ Ρ ΡΡΠΈΡ
ΠΠ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Ρ
ΠΎΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ ΠΈΡ
ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΡ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΡΠ°ΡΠ°Π½Π° ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ Ρ
ΠΎΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΠ, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ½Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΡΠ΅Π½ΠΈΠ΅ c-<cluster_id>.rw.mdb.yandexcloud.net
ΠΌΠ°ΠΏΠΏΠΈΡΡΡ Π² ΡΠ΅ΠΊΡΡΠΈΠΉ Π°ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΌΠ°ΡΡΠ΅Ρ-Ρ
ΠΎΡΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ Π°ΠΉΠ΄ΠΈΡΠ½ΠΈΠΊΠΎΠΌ. ΠΠΌΠ΅Π½Π½ΠΎ Π΅Π³ΠΎ ΠΌΡ ΠΈ ΠΎΡΠ΄Π°Π΄ΠΈΠΌ ΠΡΠ°ΡΠ°Π½Π΅.
ΠΠ΅Π±-ΡΠ΅ΡΠ²Π΅Ρ
Π’Π΅ΠΏΠ΅ΡΡ Π΄Π΅Π»ΠΎ Π·Π° Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ. ΠΠΎΠ΄Π½ΠΈΠΌΠ΅ΠΌ ΠΎΠ±ΡΡΠ½ΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ Ρ Linux ΠΈ ΡΡΠΊΠ°ΠΌΠΈ Π½Π°ΡΡΡΠΎΠΈΠΌ Π½Π° Π½Π΅ΠΉ ΠΡΠ°ΡΠ°Π½Ρ.
ΠΠΎΠ΄Π»ΡΡΠΈΠΌΡΡ ΠΏΠΎ 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
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π·Π°Π²Π΅Π΄Π΅ΠΌ ΠΡΠ°ΡΠ°Π½Ρ ΠΏΠΎΠ΄ systemctl ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΠΏΠ»Π°Π³ΠΈΠ½ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ClickHouse (Π΄Π°, Π² Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ°ΡΠΈΠΈ ΠΎΠ½ Π½Π΅ ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ).
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasource
ΠΡΠ΅, ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ
sudo service grafana-server start
ΠΌΡ Π·Π°ΠΏΡΡΡΠΈΠΌ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅Ρ. Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅ Π²Π±ΠΈΡΡ Π²Π½Π΅ΡΠ½ΠΈΠΉ Π°ΠΉΠΏΠΈΡΠ½ΠΈΠΊ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ, ΡΠΊΠ°Π·Π°ΡΡ ΠΏΠΎΡΡ 3000 ΠΈ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΊΡΠ°ΡΠΈΠ²ΡΠΉ UI Π³ΡΠ°ΡΠ°Π½Ρ.
ΠΠΎ Π½Π΅ ΡΡΠΎΠΈΡ ΡΠΏΠ΅ΡΠΈΡΡ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΠΡΠ°ΡΠ°Π½Ρ, Π½Π°Π΄ΠΎ Π½Π΅ Π·Π°Π±ΡΡΡ ΡΠΊΠ°Π·Π°ΡΡ Π΅ΠΉ ΠΏΡΡΡ ΠΊ MySQL, ΡΡΠΎΠ±Ρ Ρ ΡΠ°Π½ΠΈΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠ°ΠΌ.
ΠΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΡΠ°ΡΠ°Π½Ρ Π»Π΅ΠΆΠΈΡ Π² ΡΠ°ΠΉΠ»Π΅ /etc/grafana/grafana.ini
. ΠΡΠΆΠ½Π°Ρ ΡΡΡΠΎΠΊΠ° Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
;url =
ΠΡΡΡΠ°Π²Π»ΡΠ΅ΠΌ Ρ
ΠΎΡΡ ΠΊ ΠΊΠ»Π°ΡΡΠ΅ΡΡ MySQL. Π ΡΡΠΎΠΌ ΠΆΠ΅ ΡΠ°ΠΉΠ»Π΅ Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π»ΠΎΠ³ΠΈΠ½ ΠΈ ΠΏΠ°ΡΠΎΠ»Ρ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΡΠ°ΡΠ°Π½Π΅ Π½Π° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅ Π²ΡΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΎΠ±Π° ΡΠ°Π²Π½Ρ admin
.
ΠΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ sed-ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ:
sudo sed -i "s#.*;url =.*#url = mysql://${MYSQL_USERNAME}:${MYSQL_PASSWORD}@${MYSQL_CLUSTER_URI}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_user =.*#admin_user = ${GRAFANA_USERNAME}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_password =.*#admin_password = ${GRAFANA_PASSWORD}#" /etc/grafana/grafana.ini
Π‘Π°ΠΌΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡΡ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅Ρ!
sudo service grafana-server restart
Π’Π΅ΠΏΠ΅ΡΡ Π² UI ΠΡΠ°ΡΠ°Π½Ρ ΡΠΊΠ°ΠΆΠ΅ΠΌ ClickHouse Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ DataSource.
ΠΠΎΠ±ΠΈΡΡΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅ΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Ρ ΠΌΠ΅Π½Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ ΠΏΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ :
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ URL Ρ ΡΠΊΠ°Π·Π°Π» https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443
ΠΡΡ! Π£ Π½Π°Ρ Π΅ΡΡΡ ΠΎΠ΄Π½Π° ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½Π°Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½ΠΊΠ° Ρ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ, ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Π½ΡΠΌ ΠΊ CH ΠΈ MySQL. Π£ΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π³ΡΡΠΆΠ°ΡΡ Π΄Π°ΡΠ°ΡΠ΅Ρ Π² ClickHouse ΠΈ ΡΡΡΠΎΠΈΡΡ Π΄Π°ΡΠ±ΠΎΡΠ΄Ρ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΌΡ Π΅ΡΠ΅ Π½Π΅ Π΄ΠΎΡΡΠΈΠ³Π»ΠΈ Π½Π°ΡΠ΅ΠΉ ΡΠ΅Π»ΠΈ ΠΈ Π½Π΅ ΡΠ°Π·Π²Π΅ΡΠ½ΡΠ»ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ.
Packer
Π―Π½Π΄Π΅ΠΊΡ.ΠΠ±Π»Π°ΠΊΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ°Π· Π΄ΠΈΡΠΊΠ° ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅ΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ, Π° Π½Π° Π΅Π³ΠΎ ΠΎΡΠ½ΠΎΠ²Π΅ β ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ³ΠΎΠ΄Π½ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΡΡ
Π΄ΡΡΠ³ Π΄ΡΡΠ³Ρ ΠΌΠ°ΡΠΈΠ½. ΠΠΌΠ΅Π½Π½ΠΎ ΡΡΠΈΠΌ ΠΌΡ ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ. Π§ΡΠΎΠ±Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ ΡΠΎΠ±ΡΠ°ΡΡ ΠΎΠ±ΡΠ°Π·, Π²ΠΎΠ·ΡΠΌΠ΅ΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ
ΠΠ°Ρ json-ΡΠ°ΠΉΠ» Π±ΡΠ΄Π΅Ρ ΡΠΎΡΡΠΎΡΡΡ ΠΈΠ· Π΄Π²ΡΡ Π±Π»ΠΎΠΊΠΎΠ²: builders ΠΈ provisioners. ΠΠ΅ΡΠ²ΡΠΉ Π±Π»ΠΎΠΊ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π·Π° ΠΊΠ°ΠΊ ΡΡΡΠ½ΠΎΡΡΠΈ, Π° Π²ΡΠΎΡΠΎΠΉ β ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΠΎ Π½Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π½ΡΠΆΠ½ΡΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ.
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
Π’Π΅ΠΏΠ΅ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π°Ρ ΡΠ°ΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. Π Π½Π΅ΠΉ Π±ΡΠ΄Π΅Ρ ΠΎΠΏΠΈΡΠ°Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Π΄ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ²Π΅ΡΡΠΈΡΡ Π½Π° Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Π·Π°ΠΌΠΎΡΠΎΠ·ΠΈΡΡ Π΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π² ΠΎΠ±ΡΠ°Π· Π΄ΠΈΡΠΊΠ°.
{
...,
"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
ΠΠ° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΡΠ°ΠΏΠ΅ Π² ΡΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΠΊΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Π΄ΠΎ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ. ΠΡΠΎΡ ΡΠΊΡΠΈΠΏΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Π΄ΠΎ ΠΏΡΠΎΠΏΠΈΡΠ°ΡΡ, Π² ΠΊΠΎΠ½ΡΠΈΠ³ ΠΡΠ°ΡΠ°Π½Ρ ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΡΠΈΡ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅Ρ.
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) Π·Π°Π²Π΅ΡΡΠΈ ΠΡΠ°ΡΠ°Π½Ρ ΠΏΠΎΠ΄ 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 ΠΈ Π½Π° Π²ΡΡ ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΠ±ΡΠ°Π·, ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π½ΡΠΉ Π² ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅. ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ±ΡΠ°ΡΡ Π΅Π³ΠΎ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π°Π³ΡΡΠ·ΠΎΡΠ½ΠΎΠ³ΠΎ Π΄ΠΈΡΠΊΠ° ΠΈ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΠΎΠ»ΡΡΠΈΡΡ Π³ΠΎΡΠΎΠ²ΡΠΉ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅Ρ ΠΡΠ°ΡΠ°Π½Ρ.
ΠΠ½ΡΡΠ°Π½Ρ-Π³ΡΡΠΏΠΏΠ° ΠΈ Π±Π°Π»Π°Π½ΡΠ΅Ρ
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ ΠΎΠ±ΡΠ°Π· Π΄ΠΈΡΠΊΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² ΠΡΠ°ΡΠ°Π½Ρ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΠ½ΡΡΠ°Π½Ρ-Π³ΡΡΠΏΠΏΡ. ΠΠ° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ Π―Π½Π΄Π΅ΠΊΡ.ΠΠ±Π»Π°ΠΊΠΎ ΡΡΠΈΠΌ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠΌ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½, ΠΈΠΌΠ΅ΡΡΠΈΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ. ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΈΠ½ΡΡΠ°Π½Ρ-Π³ΡΡΠΏΠΏΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΡΠ΅ΡΡΡ ΠΏΡΠΎΡΠΎΡΠΈΠΏ Π²ΡΠ΅Ρ ΠΌΠ°ΡΠΈΠ½ Π² ΡΡΠΎΠΉ Π³ΡΡΠΏΠΏΠ΅, Π° ΠΏΠΎΡΠΎΠΌ ΠΈ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ ΡΠ°ΠΌΠΎΠΉ Π³ΡΡΠΏΠΏΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π°ΠΊΡΠΈΠ²Π½ΡΡ ΠΌΠ°ΡΠΈΠ½). ΠΡΠ»ΠΈ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±ΡΠ΄Π΅Ρ Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΡΠΈΠΌ ΠΊΡΠΈΡΠ΅ΡΠΈΠ΅ΠΌ, ΡΠΎ ΠΈΠ½ΡΡΠ°Π½Ρ-Π³ΡΡΠΏΠΏΠ° ΡΠ°ΠΌΠ° ΡΠ΄Π°Π»ΠΈΡ Π½Π΅Π½ΡΠΆΠ½ΡΠ΅ ΠΌΠ°ΡΠΈΠ½Ρ ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΏΠΎ ΠΎΠ±ΡΠ°Π·Ρ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΠΈΡ.
Π ΡΠ°ΠΌΠΊΠ°Ρ Π½Π°ΡΠ΅ΠΉ Π·Π°Π΄Π°ΡΠΈ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΈΠ½ΡΡΠ°Π½Ρ-Π³ΡΡΠΏΠΏΡ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΏΠΎΡΠΎΠΆΠ΄Π°ΡΡΡΡ ΠΈΠ· ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π½Π΅Π΅ ΠΎΠ±ΡΠ°Π·Π° Π΄ΠΈΡΠΊΠ°.
ΠΠΎ-Π½Π°ΡΡΠΎΡΡΠ΅ΠΌΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΈΠ½ΡΡΠ°Π½Ρ-Π³ΡΡΠΏΠΏΡ. Π¦Π΅Π»Π΅Π²Π°Ρ Π³ΡΡΠΏΠΏΠ° Π² ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Ρ Load Balancer ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΆΠ°ΡΠΈΠ΅ΠΌ ΠΏΠ°ΡΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ Π½Π°ΡΡΡΠΎΠΈΡΡ L3-Π±Π°Π»Π°Π½ΡΠ΅Ρ ΠΏΠΎΠ²Π΅ΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½ ΡΡΠΎΠΉ Π³ΡΡΠΏΠΏΡ.
ΠΡΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ Π±Π°Π»Π°Π½ΡΠ΅ΡΠ° Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π» Π΄Π²Π° Π²Π°ΠΆΠ½ΡΡ ΠΌΠΎΠΌΠ΅Π½ΡΠ°:
- Π‘Π΄Π΅Π»Π°Π» ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π±Π°Π»Π°Π½ΡΠ΅Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π» ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΡΡΠ°ΡΠΈΠΊ Π½Π° 80 ΠΏΠΎΡΡΠ΅, Π° ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»ΡΠ» Π΅Π³ΠΎ Π½Π° 3000 ΠΏΠΎΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½, ΠΊΠ°ΠΊ ΡΠ°Π· ΡΡΠ΄Π°, Π³Π΄Π΅ ΠΆΠΈΠ²Π΅Ρ ΠΡΠ°ΡΠ°Π½Π°.
- ΠΠ°ΡΡΡΠΎΠΈΠ» ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΠΆΠΈΠ·Π½Π΅ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΌΠ°ΡΠΈΠ½, ΠΏΠΈΠ½Π³ΡΡ ΠΈΡ Π² 3000 ΠΏΠΎΡΡ.
ΠΠΈΠ½ΠΈ-ΠΈΡΠΎΠ³
ΠΠ°ΠΊΠΎΠ½Π΅Ρ ΠΌΡ ΡΠΌΠΎΠ³Π»ΠΈ ΡΡΠΊΠ°ΠΌΠΈ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ ΠΆΠ΅Π»Π°Π΅ΠΌΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈ ΡΠ΅ΠΏΠ΅ΡΡ Ρ Π½Π°Ρ Π΅ΡΡΡ Π²ΡΡΠΎΠΊΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΡΠΉ ΡΠ΅ΡΠ²ΠΈΡ Grafana. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π»ΠΈΡΡ Π·Π½Π°ΡΡ IP-Π°Π΄ΡΠ΅Ρ Π±Π°Π»Π°Π½ΡΠ΅ΡΠ° ΠΊΠ°ΠΊ ΡΠΎΡΠΊΡ Π²Ρ ΠΎΠ΄Π° Π² ΠΏΡΠΈΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Ρ ΠΎΡΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° ClickHouse, ΡΡΠΎΠ±Ρ Π·Π°Π³ΡΡΠ·ΠΈΡΡ Π² Π½Π΅Π³ΠΎ Π΄Π°ΡΠ°ΡΠ΅Ρ.
ΠΠ°Π·Π°Π»ΠΎΡΡ Π±Ρ, ΠΏΠΎΠ±Π΅Π΄Π°? ΠΠ°, ΠΏΠΎΠ±Π΅Π΄Π°. ΠΠΎ ΡΡΠΎ-ΡΠΎ Π²ΡΠ΅-ΡΠ°ΠΊΠΈ ΡΠΌΡΡΠ°Π΅Ρ. ΠΠ΅ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ Π²ΡΡΠ΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΡΠ½ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ ΠΈ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π½Π΅ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΡΡΡ, Ρ ΠΎΡΠ΅ΡΡΡ Π΅Π³ΠΎ ΠΏΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ. ΠΡΠΎΠΌΡ ΠΈ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡΠ²ΡΡΠ΅Π½ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π·Π΄Π΅Π».
ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ Terraform
ΠΡ ΡΠ½ΠΎΠ²Π° Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ ΠΎΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ HashiCorp ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ
ΠΡΡ ΡΠ°Π±ΠΎΡΠ° Ρ Π’Π΅ΡΡΠ°ΡΠΎΡΠΌΠΎΠΌ ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° (*.tf
) ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ Π½Π° Π΅Π³ΠΎ ΠΎΡΠ½ΠΎΠ²Π΅.
ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅
Π ΡΠ°ΠΌΠΎΠ΅ Π½Π°ΡΠ°Π»Π° ΡΠ°ΠΉΠ»Π° Π²ΡΠ½Π΅ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΎΡ ΠΊΠΎΡΠΎΡΡΡ Π·Π°Π²ΠΈΡΠΈΡ, Π³Π΄Π΅ ΠΈ ΠΊΠ°ΠΊ Π±ΡΠ΄Π΅Ρ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΠ° Π±ΡΠ΄ΡΡΠ°Ρ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°.
variable "oauth_token" {
type = string
default = "<oauth-token>"
}
variable "cloud_id" {
type = string
default = "<cloud-id>"
}
variable "folder_id" {
type = string
default = "<folder_id>"
}
variable "service_account_id" {
type = string
default = "<service_account_id>"
}
variable "image_id" {
type = string
default = "<image_id>"
}
variable "username" {
type = string
default = "<username>"
}
variable "password" {
type = string
default = "<password>"
}
variable "dbname" {
type = string
default = "<dbname>"
}
variable "public_key_path" {
type = string
default = "<path to ssh public key>"
}
ΠΠ΅ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ°Π·Π²ΡΡΡΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ²Π΅Π΄Π΅ΡΡΡ ΠΊ ΡΠ±ΠΎΡΠΊΠ΅ ΠΎΠ±ΡΠ°Π·Π° Π΄ΠΈΡΠΊΠ° ΠΈ Π²ΡΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ . ΠΠΎΡΡΠ½Ρ, Π·Π° ΡΡΠΎ ΠΎΠ½ΠΈ ΠΎΡΠ²Π΅ΡΠ°ΡΡ:
oauth_token β ΡΠΎΠΊΠ΅Π½ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΎΠ±Π»Π°ΠΊΡ. ΠΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΠΎ
cloud_id β ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΎΠ±Π»Π°ΠΊΠ°, Π³Π΄Π΅ Π±ΡΠ΄Π΅ΠΌ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
folder_id β ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠ°Π·Π΄Π΅Π»Π°, Π³Π΄Π΅ Π±ΡΠ΄Π΅ΠΌ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅
service_account_id β ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ Π°ΠΊΠΊΠ°ΡΠ½ΡΠ° Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΠ²ΡΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΎΠ±Π»Π°ΠΊΠ°.
image_id β ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΎΠ±ΡΠ°Π·Π° Π΄ΠΈΡΠΊΠ°, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Packer
username ΠΈ password β ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ ΠΏΠ°ΡΠΎΠ»Ρ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΠΎΠ±Π΅ΠΈΠΌ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½ΡΡ
ΠΈ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΡ ΠΡΠ°ΡΠ°Π½Ρ
dbname β ΠΈΠΌΡ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
Π²Π½ΡΡΡΠΈ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠ² CH ΠΈ MySQL
public_key_path β ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ Ρ Π²Π°ΡΠΈΠΌ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΌ ssh-ΠΊΠ»ΡΡΠΎΠΌ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ ubuntu
ΠΊ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠΌ ΠΌΠ°ΡΠΈΠ½Π°ΠΌ Ρ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠ°ΠΌΠΈ
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ°
Π’Π΅ΠΏΠ΅ΡΡ Π½ΡΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅Ρ Π’Π΅ΡΡΠ°ΡΠΎΡΠΌΠ° β Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π―Π½Π΄Π΅ΠΊΡ:
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 ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Π΄ΠΎ Π·Π°ΠΏΡΡΠΊΠ° Π’Π΅ΡΡΠ°ΡΠΎΡΠΌΠ°, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΈ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΎΠ±ΡΠ°Π·Π°. ΠΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΏΡΠΈΠ±Π΅Π³Π½ΡΡΡ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ
ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ΅ΡΠ²ΠΈΡ ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΡ
ΠΎΡ Amazon, ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΄ΠΈΠΌ Π² Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½Π° ΠΏΡΠΈΠΌΠ΅Ρ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΠ°ΠΌ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΠΌΠ°ΡΠΈΠ½Π° ΡΡ
ΠΎΠ΄ΠΈΠ»Π° Π² ΠΌΠ΅ΡΠ°Π΄Π°Π½Π½ΡΠ΅ Π·Π° Ρ
ΠΎΡΡΠΎΠΌ MySQL ΠΊΠ»Π°ΡΡΠ΅ΡΠ° ΠΈ Π·Π° username-password, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠΊΠ°Π·ΡΠ²Π°Π» Π² ΡΠ°ΠΉΠ»Π΅ 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
ΠΠ½ΡΠ°Π½Ρ-Π³ΡΡΠΏΠΏΠ° ΠΈ Π±Π°Π»Π°Π½ΡΠ΅Ρ
ΠΠ΅ΡΠ΅ΡΠΎΠ±ΡΠ°Π² Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ°Π· Π΄ΠΈΡΠΊΠ°, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΊΠΎΠ½Π΅Ρ Π΄ΠΎΠΏΠΈΡΠ°ΡΡ Π½Π°Ρ ΡΠ°ΠΉΠ» Π΄Π»Ρ Π’Π΅ΡΡΠ°ΡΠΎΡΠΌΠ°.
Π£ΠΊΠ°ΠΆΠ΅ΠΌ, ΡΡΠΎ ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ°Π· Π΄ΠΈΡΠΊΠ°:
data "yandex_compute_image" "grafana_image" {
image_id = var.image_id
}
Π’Π΅ΠΏΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΈΠ½ΡΡΠ°Π½Ρ-Π³ΡΡΠΏΠΏΡ:
resource "yandex_compute_instance_group" "grafana_group" {
name = "grafana-group"
folder_id = var.folder_id
service_account_id = var.service_account_id
instance_template {
platform_id = "standard-v1"
resources {
memory = 1
cores = 1
}
boot_disk {
mode = "READ_WRITE"
initialize_params {
image_id = data.yandex_compute_image.grafana_image.id
size = 4
}
}
network_interface {
network_id = yandex_vpc_network.grafana_network.id
subnet_ids = [yandex_vpc_subnet.subnet_a.id, yandex_vpc_subnet.subnet_b.id, yandex_vpc_subnet.subnet_c.id]
nat = "true"
}
metadata = {
mysql_cluster_uri = "c-${yandex_mdb_mysql_cluster.mysql_cluster.id}.rw.mdb.yandexcloud.net:3306/${var.dbname}"
username = var.username
password = var.password
ssh-keys = "ubuntu:${file("${var.public_key_path}")}"
}
network_settings {
type = "STANDARD"
}
}
scale_policy {
fixed_scale {
size = 6
}
}
allocation_policy {
zones = ["ru-central1-a", "ru-central1-b", "ru-central1-c"]
}
deploy_policy {
max_unavailable = 2
max_creating = 2
max_expansion = 2
max_deleting = 2
}
load_balancer {
target_group_name = "grafana-target-group"
}
}
Π‘ΡΠΎΠΈΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π»ΠΈ Π² ΠΌΠ΅ΡΠ°Π΄Π°ΡΡ cluster_uri
, username
ΠΈ password
. ΠΠΌΠ΅Π½Π½ΠΎ ΠΈΡ
Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π΄ΠΎΡΡΠ°Π½Π΅Ρ ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ Π² ΠΊΠΎΠ½ΡΠΈΠ³ ΠΡΠ°ΡΠ°Π½Ρ.
ΠΠ΅Π»ΠΎ Π·Π° Π±Π°Π»Π°Π½ΡΠ΅ΡΠΎΠΌ.
resource "yandex_lb_network_load_balancer" "grafana_balancer" {
name = "grafana-balancer"
listener {
name = "grafana-listener"
port = 80
target_port = 3000
external_address_spec {
ip_version = "ipv4"
}
}
attached_target_group {
target_group_id = yandex_compute_instance_group.grafana_group.load_balancer.0.target_group_id
healthcheck {
name = "healthcheck"
tcp_options {
port = 3000
}
}
}
}
ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Ρ Π°ΡΠ°
ΠΡΡΠ°Π»Π°ΡΡ ΡΠ°ΠΌΠ°Ρ ΠΌΠ°Π»ΠΎΡΡΡ. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° ΡΠ°Π·Π²Π΅ΡΠ½Π΅ΡΡΡ, ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΡ ΠΎΠ΄ΠΈΡΡ Π² UI ΠΡΠ°ΡΠ°Π½Ρ ΠΈ ΡΡΠΊΠ°ΠΌΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠ»Π°ΡΡΠ΅Ρ CH (ID ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ Π΅ΡΠ΅ Π΄ΠΎΠ±ΡΡΡ) ΠΊΠ°ΠΊ Data Source. ΠΠΎ Π²Π΅Π΄Ρ ID ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Π·Π½Π°Π΅Ρ Π’Π΅ΡΡΠ°ΡΠΎΡΠΌ. ΠΠΎΡΡΡΠΈΠΌ Π΅ΠΌΡ Π΄ΠΎΠ²Π΅ΡΡΠΈ Π΄Π΅Π»ΠΎ Π΄ΠΎ ΡΠΌΠ°.
ΠΠΎΠ±Π°Π²ΠΈΠΌ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΠ° β ΠΡΠ°ΡΠ°Π½Ρ, Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Ρ ΠΎΡΡΠ° ΠΏΠΎΠ΄ΡΡΠ½Π΅ΠΌ Π΅ΠΉ Π°ΠΉΠΏΠΈΡΠ½ΠΈΠΊ Π±Π°Π»Π°Π½ΡΠ΅ΡΠ°. ΠΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΄Π΅Π»Π°Π΅Ρ Π’Π΅ΡΡΠ°ΡΠΎΡΠΌ Π½Π° ΠΌΠ°ΡΠΈΠ½Π΅, ΠΊΡΠ΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡ Π΅Π³ΠΎ Π±Π°Π»Π°Π½ΡΠ΅Ρ, ΠΏΡΠΎΡΠ°ΡΡΡΡ Π² MySQL, Π° Π·Π½Π°ΡΠΈΡ ΠΈ Π½Π° Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ°ΡΠΈΠ½Ρ.
provider "grafana" {
url = "http://${[for s in yandex_lb_network_load_balancer.grafana_balancer.listener: s.external_address_spec.0.address].0}"
auth = "${var.username}:${var.password}"
}
resource "grafana_data_source" "ch_data_source" {
type = "vertamedia-clickhouse-datasource"
name = "grafana"
url = "https://c-${yandex_mdb_clickhouse_cluster.ch_cluster.id}.rw.mdb.yandexcloud.net:8443"
basic_auth_enabled = "true"
basic_auth_username = var.username
basic_auth_password = var.password
is_default = "true"
access_mode = "proxy"
}
ΠΡΠΈΡΠ΅ΡΠ΅ΠΌ
ΠΡΠ²Π΅Π΄Π΅ΠΌ Π°ΠΉΠΏΠΈΡΠ½ΠΈΠΊ Π±Π°Π»Π°Π½ΡΠ΅ΡΠ° ΠΈ Ρ ΠΎΡΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° ClickHouse
output "grafana_balancer_ip_address" {
value = [for s in yandex_lb_network_load_balancer.grafana_balancer.listener: s.external_address_spec.0.address].0
}
output "clickhouse_cluster_host" {
value = "https://c-${yandex_mdb_clickhouse_cluster.ch_cluster.id}.rw.mdb.yandexcloud.net:8443"
}
ΠΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ
ΠΡΡ! ΠΠ°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΡΠ°ΠΉΠ» Π³ΠΎΡΠΎΠ² ΠΈ ΠΌΠΎΠΆΠ½ΠΎ, Π²ΡΡΡΠ°Π²ΠΈΠ² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΡΠΊΠ°Π·Π°ΡΡ Π’Π΅ΡΡΠ°ΡΠΎΡΠΌΡ ΠΏΠΎΠ΄Π½ΡΡΡ Π²ΡΠ΅, ΡΡΠΎ ΠΌΡ ΠΎΠΏΠΈΡΠ°Π»ΠΈ Π²ΡΡΠ΅. ΠΠ΅ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ Ρ ΠΌΠ΅Π½Ρ Π·Π°Π½ΡΠ» ΠΎΠΊΠΎΠ»ΠΎ 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
Π Π² ΠΎΠ±Π»Π°ΠΊΠ΅ Π±ΡΠ΄ΡΡ Π²ΠΈΠ΄Π½Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΏΠΎΠ΄Π½ΡΡΠΎΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ:
ΠΠΎΠ΄Π²Π΅Π΄Π΅ΠΌ ΠΈΡΠΎΠ³ΠΈ
Π’Π΅ΠΏΠ΅ΡΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΡΠ°ΡΠ°Π½Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· Π²Π°Ρ ΡΠΌΠ΅Π΅Ρ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΡΠ°Π·Π²Π΅ΡΠΈΡΡΠΎΠΉ ΠΎΠ±Π»Π°ΡΠ½ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΎΠΉ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅ Π―Π½Π΄Π΅ΠΊΡ.ΠΠ±Π»Π°ΠΊΠΎ. Π ΡΡΠΎΠΌ Π²Π°ΠΌ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠΌΠΎΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΠΎΡ HashiCorp, ΠΊΠ°ΠΊ Packer ΠΈ Terraform. ΠΠ°Π΄Π΅ΡΡΡ, ΠΊΠΎΠΌΡ-Π½ΠΈΠ±ΡΠ΄Ρ ΡΡΠ° ΡΡΠ°ΡΡΡ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ π
P.S. ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΡ ΡΡΡΠ»ΠΎΡΠΊΡ Π½Π° ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π³ΠΎΡΠΎΠ²ΡΠ΅ ΡΠ΅ΡΠ΅ΠΏΡΡ Π΄Π»Ρ ΠΠ°ΠΊΠ΅ΡΠ° ΠΈ Π’Π΅ΡΡΠ°ΡΠΎΡΠΌΠ°, ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ ΠΊΠΎΡΠΎΡΡΡ Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠ» Π² ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com