ããã«ã¡ã¯ãã¿ããªïŒææ¥ã®äžç°ãšããŠãç§ã¯åœå ã®ã¯ã©ãŠããã©ãããã©ãŒã ã®æ©èœã«ã€ããŠç ç©¶ããŠããŸããã ããã®ãã©ãããã©ãŒã ã¯ãå®çšçãªåé¡ã解決ããããã®ããŸããŸãªãµãŒãã¹ãæäŸããŸãããã ããå Žåã«ãã£ãŠã¯ããããã®ãµãŒãã¹ã«åºã¥ããŠãããªãå€§èŠæš¡ãªã€ã³ãã©ã¹ãã©ã¯ãã£ãåããç¬èªã®ã¯ã©ãŠã ã¢ããªã±ãŒã·ã§ã³ãã»ããã¢ããããå¿ èŠããããŸãããã®èšäºã§ã¯ããã®ãããªã¢ããªã±ãŒã·ã§ã³ãå±éããç§ã®çµéšãå ±æããããšæããŸãã

äœã欲ããã§ããïŒ
â ããããã·ã¹ãã ã®åæäžã®åé¡ã解決ããããåé¡ãç£èŠãããããããã®åŒ·åãªããŒã«ã§ããåºæ¬çãªæ§æã§ã¯ããã㯠Grafana Web ãµãŒããŒãšãåæãæ§ç¯ãããããŒã¿ã»ãããå«ãããŒã¿ããŒã¹ (ClickHouseãInfluxDB ãªã©) ãåããä»®æ³ãã·ã³ã§ãã
Web ãµãŒããŒã§ä»®æ³ãã·ã³ãèµ·åããåŸããã®ãã¹ãã«ã¢ã¯ã»ã¹ããŠäŸ¿å©ãª UI ãååŸããããŒã¿ããŒã¹ã以éã®äœæ¥ã®ãœãŒã¹ãšããŠæå®ããããã·ã¥ããŒããšã°ã©ããäœæã§ããŸãã

åºæ¬ããŒãžã§ã³ã«ã¯ 10 ã€ã®éå€§ãªæ¬ ç¹ããããŸããããã¯ããã©ãŒã«ã ãã¬ã©ã³ã¹ããŸã£ãããªãããšã§ããã€ãŸããã¢ããªã±ãŒã·ã§ã³ã®æ©èœå šäœã XNUMX å°ã®ä»®æ³ãã·ã³ã®å®è¡å¯èœæ§ã«äŸåããŸãã倱æããããXNUMX 人ãåæã« UI ãéããããããšãåé¡ãçºçããŸãã
è§£æ±ºæ¹æ³ã¯ç°¡åã§ããWeb ãµãŒããŒã䜿çšããŠå€æ°ã®åäžã®ä»®æ³ãã·ã³ãå±éãããããã L3 ãã©ã³ãµãŒã®äžã«é 眮ããã ãã§ããããããããã§ã¯ãã¹ãŠãããã»ã©æç¢ºãšããããã§ã¯ãããŸããã Grafana ã¯ããŠãŒã¶ãŒèšå® (ããŒã¿ããŒã¹ãããã·ã¥ããŒããã°ã©ããžã®ãã¹ãªã©) ãä»®æ³ãã·ã³ã®ãã£ã¹ã¯ã«çŽæ¥ä¿åããŸãããããã£ãŠãUI ã§èšå®ã倿Žããå Žåããããã®å€æŽã¯ãã©ã³ãµãŒãéä¿¡ããä»®æ³ãã·ã³ã«ã®ã¿è¡šç€ºãããŸããããã«ãããã¢ããªã±ãŒã·ã§ã³ã®èšå®ã«äžè²«æ§ããªããªããèµ·åã䜿çšã«åé¡ãçºçããŸãã
ããã§ãMySQL ããããšåçã®ãã®ãªã©ãå¥ã®ããŒã¿ããŒã¹ã圹ã«ç«ã¡ãŸãã Grafana ã«ããŠãŒã¶ãŒèšå®ããã®ãäºåãããŒã¿ããŒã¹ã«ä¿åããããã«æç€ºããŸãããã®åŸã¯ãåãã·ã³ã§ãã®ããŒã¿ããŒã¹ãžã®ãã¹ã 1 åæå®ããä»»æã®ä»®æ³ãã·ã³äžã®ä»ã®ãã¹ãŠã®ãŠãŒã¶ãŒèšå®ãç·šéããã ãã§ååã§ããä»ã®äººã«ãåºããã§ãããã
æçµçãªã¢ããªã±ãŒã·ã§ã³ ã€ã³ãã©ã¹ãã©ã¯ãã£ã®å³ã以äžã«ç€ºããŸãã

æã§æã¡äžããæ¹æ³ãåŠã³ãŸããã
MySQLãšClickHouse
ãã¿ã³ãæŒãã ãã§ãã®ãããªã¢ããªã±ãŒã·ã§ã³ãå±éããåã«ããã³ãã«ã䜿çšããŠåã³ã³ããŒãã³ããæã¡äžããŠçžäºã«çµ±åããæ¹æ³ãç¿åŸããå¿ èŠããããŸããã
ããã§ã¯ãL3 ãã©ã³ãµãŒãClickHouseãMySQL ã管çãµãŒãã¹ãšããŠæäŸãã Yandex.Cloud ã圹ç«ã¡ãŸãããŠãŒã¶ãŒã¯ãã©ã¡ãŒã¿ãæå®ããŠããã©ãããã©ãŒã ããã¹ãŠãæ£åžžã«åäœããããŸã§åŸ ã€ã ãã§ãã
ç»é²ããã¯ã©ãŠããšæ¯æãã¢ã«ãŠã³ããäœæããŸããããã®åŸãã¯ã©ãŠãã«ã¢ã¯ã»ã¹ããæå°éã®èšå®ã§ MySQL ãš ClickHouse ã¯ã©ã¹ã¿ãŒãã»ããã¢ããããŸããã圌ããæŽ»åçã«ãªããŸã§åŸ ã¡ãŸããã


ãŸããåã¯ã©ã¹ã¿ãŒã«ããŒã¿ããŒã¹ãäœæãããã°ã€ã³ãšãã¹ã¯ãŒãã䜿çšããŠã¢ã¯ã»ã¹ãèšå®ããããšãå¿ããªãããã«ããŠãã ãããããã§ã¯è©³çްã«ã¯è§ŠããŸããããã€ã³ã¿ãŒãã§ãŒã¹ã§ãã¹ãŠãæããã«ãªããŸãã
ããŸãç¥ãããŠããªã詳现ã¯ããããã®ããŒã¿ããŒã¹ã«ã¯è€æ°ã®ãã¹ããããããã©ãŒã«ã ãã¬ã©ã³ã¹ã確ä¿ãããŠããããšã§ãããã ããGrafana ã§ã¯ãæäœããããŒã¿ããŒã¹ããšã« 1 ã€ã®ãã¹ããå¿
èŠã§ããé·æèšäº é²ãç§ã解決çãžãšå°ããŠãããŸããã宿䞻ã¯çš®ã§ããããšãåãããŸãã c-<cluster_id>.rw.mdb.yandexcloud.net 察å¿ãã ID ãæã€çŸåšã¢ã¯ãã£ããªã¯ã©ã¹ã¿ãŒ ãã¹ã¿ãŒ ãã¹ãã«ããããããŸããããããŸãã« Grafana ã«æäŸãããã®ã§ãã
ãŠã§ããµãŒããŒ
次ã¯ãŠã§ããµãŒããŒã§ããéåžžã®ä»®æ³ãã·ã³ãã»ããã¢ããããŸãããã 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
ãã®åŸãsystemctl ã§ Grafana ãèµ·åããClickHouse ãæäœããããã®ãã©ã°ã€ã³ãã€ã³ã¹ããŒã«ããŸã (ã¯ããåºæ¬ããã±ãŒãžã«ã¯å«ãŸããŠããŸãã)ã
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasourceãã®ç°¡åãªã³ãã³ããå®è¡ããã ãã§
sudo service grafana-server startWebãµãŒããŒãèµ·åããŸããããã§ããã©ãŠã¶ã«ä»®æ³ãã·ã³ã®å€éš 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 ã«æ¥ç¶ããã Web ãµãŒããŒãåãã皌åäžã® VM ã 1 ã€ãããŸãããã§ã«ããŒã¿ã»ããã ClickHouse ã«ã¢ããããŒãããŠããã·ã¥ããŒããæ§ç¯ã§ããŸããããããç§ãã¡ã¯ãŸã ç®æšãéæããŠããããæ¬æ Œçãªã€ã³ãã©ãå±éããŠããŸããã
ããã«ãŒ
Yandex.Cloud ã䜿çšãããšãæ¢åã®ä»®æ³ãã·ã³ã®ãã£ã¹ã¯ ã€ã¡ãŒãžãäœæããããã«åºã¥ããŠä»»æã®æ°ã®åäžãã·ã³ãäœæã§ããŸãããŸãã«ãããããç§ãã¡ã掻çšãããã®ã§ããç»åã䟿å©ã«çµã¿ç«ãŠãããã«ãããŒã«ã䜿ããŸããã HashiCorp ãããã€ã¡ãŒãžãçµã¿ç«ãŠãããã®æç€ºãå«ã json ãã¡ã€ã«ãå ¥åãšããŠåãåããŸãã
json ãã¡ã€ã«ã¯ãbuilders ãš provisioners ã® 2 ã€ã®ãããã¯ã§æ§æãããŸããæåã®ãããã¯ã§ã¯ãç»åèªäœã®ãã©ã¡ãŒã¿ããšã³ãã£ãã£ãšããŠèšè¿°ãã2 çªç®ã®ãããã¯ã§ã¯ãå¿ èŠãªã³ã³ãã³ããå ¥åããæé ãèšè¿°ããŸãã
ãã«ããŒ
{
"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 æ§æã«é 眮ããWeb ãµãŒããŒãåèµ·åããŸãã
ã»ããã¢ãã.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ã§Grafanaãå®è¡ããClickHouseãã©ã°ã€ã³ãã€ã³ã¹ããŒã«ãã
3) ä»®æ³ãã·ã³ã®é»æºãå
¥ããçŽåŸã«ãsetup.sh ã¹ã¯ãªãããå®è¡ãã¥ãŒã«å
¥ããŸãã
ã€ã³ã¹ããŒã«ããã±ãŒãž.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å®è¡ã»ããã¢ãã 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 Web ãµãŒããŒãååŸãããŸãã


ã€ã³ã¹ã¿ã³ã¹ã°ã«ãŒããšãã©ã³ãµ
è€æ°ã®åäžã® Grafana Web ãµãŒããŒãäœæã§ãããã£ã¹ã¯ ã€ã¡ãŒãžãã§ããããã€ã³ã¹ã¿ã³ã¹ ã°ã«ãŒããäœæã§ããŸãã Yandex.Cloud ãã©ãããã©ãŒã ã§ã¯ããã®çšèªã¯åäžã®ç¹æ§ãæã€ä»®æ³ãã·ã³ã®çµã¿åãããæããŸããã€ã³ã¹ã¿ã³ã¹ ã°ã«ãŒããäœæããããšãã°ã«ãŒãå ã®ãã¹ãŠã®ãã·ã³ã®ãããã¿ã€ããæ§æãããæ¬¡ã«ã°ã«ãŒãèªäœã®ç¹æ§ (ã¢ã¯ãã£ããªãã·ã³ã®æå°æ°ãšæå€§æ°ãªã©) ãæ§æãããŸããçŸåšã®æ°ããããã®åºæºãæºãããŠããªãå Žåãã€ã³ã¹ã¿ã³ã¹ ã°ã«ãŒãã¯äžèŠãªãã·ã³ãåé€ããããåãã€ã¡ãŒãžãšé¡äŒŒæ§ãæã€æ°ãããã·ã³ãäœæããŸãã
ã¿ã¹ã¯ã®äžç°ãšããŠã以åã«äœæãããã£ã¹ã¯ ã€ã¡ãŒãžããçæããã Web ãµãŒããŒã®ã€ã³ã¹ã¿ã³ã¹ ã°ã«ãŒããäœæããŸãã


æåŸã®ã€ã³ã¹ã¿ã³ã¹ ã°ã«ãŒãèšå®ã¯æ¬åœã«æ³šç®ã«å€ããŸããããŒã ãã©ã³ãµãŒãšçµ±åãããã¿ãŒã²ãã ã°ã«ãŒãã䜿çšãããšãæ°åã¯ãªãã¯ããã ãã§ããã®ã°ã«ãŒãã®ä»®æ³ãã·ã³äžã« L3 ãã©ã³ãµãŒãæ§æã§ããŸãã

ãã©ã³ãµãŒãèšå®ããéã«ã次㮠2 ã€ã®éèŠãªãã€ã³ããå®è£ ããŸããã
- ãã©ã³ãµãŒãããŒã 80 ã§ãŠãŒã¶ãŒ ãã©ãã£ãã¯ãåä¿¡ããããã Grafana ãååšããä»®æ³ãã·ã³ã®ããŒã 3000 ã«ãªãã€ã¬ã¯ãããããã«ããŸããã
- ããŒã 3000 ã§ ping ãå®è¡ããŠãã·ã³ã®ãã«ã¹ ãã§ãã¯ãæ§æããŸããã

ãããµããªãŒ
æåŸã«ãå¿ èŠãªã¢ããªã±ãŒã·ã§ã³ ã€ã³ãã©ã¹ãã©ã¯ãã£ãæåã§ãããã€ã§ããããã«ãªããéåžžã«å®å®ãã Grafana ãµãŒãã¹ãå®çŸããŸãããããŒã¿ã»ãããããŒãããã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãžã®ãšã³ã㪠ãã€ã³ããšããŠãã©ã³ãµãŒã® IP ã¢ãã¬ã¹ãš ClickHouse ã¯ã©ã¹ã¿ãŒ ãã¹ããç¥ãã ãã§ååã§ãã
ããã¯åå©ã®ããã«æããŸããïŒã¯ããåå©ã§ãããããããŸã æ°ã«ãªãããšããããŸããäžèšã®ããã»ã¹å šäœã«ã¯å€ãã®æåã¢ã¯ã·ã§ã³ãå¿ èŠã§ããããŸã£ããã¹ã±ãŒã©ãã«ã§ã¯ãªããããå¯èœã§ããã°èªååããããšèããŠããŸããæ¬¡ã®ã»ã¯ã·ã§ã³ã§ã¯ããã«ã€ããŠèª¬æããŸãã
Terraformçµ±å
ããã§ãHashiCorpã®ããŒã«ã䜿çšããŸãã ããŠãŒã¶ãŒãæž¡ããããã€ãã®å€æ°ã«åºã¥ããŠããã¿ã³ãã¯ãªãã¯ããã ãã§ã¢ããªã±ãŒã·ã§ã³ ã€ã³ãã©ã¹ãã©ã¯ãã£å šäœãå±éã§ããããã«ãªããŸããç°ãªããŠãŒã¶ãŒã«å¯ŸããŠãç°ãªãã»ã¯ã·ã§ã³ã§è€æ°åå®è¡ã§ããã¬ã·ããäœæããŸãããã
Terraform ã§ã®ãã¹ãŠã®äœæ¥ã¯ãèšå®ãã¡ã€ã«ã®äœæã«éçŽãããŸã (*.tfïŒãšããã«åºã¥ããã€ã³ãã©ã®æ§ç¯ã§ãã
倿°
ãã¡ã€ã«ã®å é ã«ãå°æ¥ã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãã©ãã«ã©ã®ããã«å±éããããã«äŸåãã倿°ãé 眮ããŸãã
variable "oauth_token" {
type = string
default = "<oauth-token>"
}
variable "cloud_id" {
type = string
default = "<cloud-id>"
}
variable "folder_id" {
type = string
default = "<folder_id>"
}
variable "service_account_id" {
type = string
default = "<service_account_id>"
}
variable "image_id" {
type = string
default = "<image_id>"
}
variable "username" {
type = string
default = "<username>"
}
variable "password" {
type = string
default = "<password>"
}
variable "dbname" {
type = string
default = "<dbname>"
}
variable "public_key_path" {
type = string
default = "<path to ssh public key>"
}ã¢ããªã±ãŒã·ã§ã³ãå±éããããã»ã¹å šäœã¯ããã£ã¹ã¯ ã€ã¡ãŒãžã®çµã¿ç«ãŠãšãããã®å€æ°ã®èšå®ã«ãŸã§ç°¡çŽ åãããŸãã圌ããäœã®è²¬ä»»ãè² ã£ãŠããã®ã説æããŸãããã
oauth_ããŒã¯ã³ â ã¯ã©ãŠãã«ã¢ã¯ã»ã¹ããããã®ããŒã¯ã³ãå
¥æããã«ã¯ .
ã¯ã©ãŠãID â ã¢ããªã±ãŒã·ã§ã³ããããã€ããã¯ã©ãŠãã®èå¥å
ãã©ã«ãID â ã¢ããªã±ãŒã·ã§ã³ããããã€ããã»ã¯ã·ã§ã³ã®èå¥å
ãµãŒãã¹ã¢ã«ãŠã³ãID â ã¯ã©ãŠãã®å¯Ÿå¿ããã»ã¯ã·ã§ã³å
ã®ãµãŒãã¹ ã¢ã«ãŠã³ãã®èå¥åã
ç»åID â Packerã䜿çšããŠååŸãããã£ã¹ã¯ã€ã¡ãŒãžã®èå¥å
ãŠãŒã¶å О password â ããŒã¿ããŒã¹ãšGrafanaãŠã§ããµãŒããŒã®äž¡æ¹ã«ã¢ã¯ã»ã¹ããããã®ãŠãŒã¶ãŒåãšãã¹ã¯ãŒã
ããŒã¿ããŒã¹å â 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"
}
ããã§ã¯äžèšã§å®çŸ©ãã倿°ã䜿çšããŠããããšãããããŸãã
ãããã¯ãŒã¯ãšã¯ã©ã¹ã¿ãŒ
ããã§ãã€ã³ãã©ã¹ãã©ã¯ãã£ã®èŠçŽ ãéä¿¡ãããããã¯ãŒã¯ã3 ã€ã®ãµãããã (åãªãŒãžã§ã³ã« 1 ã€) ãäœæãã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
}
}ã芧ã®ãšããã2 ã€ã®ã¯ã©ã¹ã¿ãŒã¯ãããã 3 ã€ã®ã¢ãã€ã©ããªãã£ãŒãŸãŒã³ã«é 眮ãããŠãããããããªãèé害æ§ãé«ãŸã£ãŠããŸãã
ãŠã§ããµãŒããŒ
åã粟ç¥ã§ç¶ããããšãã§ããããã«æããŸããããå°é£ã«çŽé¢ããŸããããã®åã«ããŸã MySQL ã¯ã©ã¹ã¿ãŒãã»ããã¢ãããããã®åŸããã® ID ãç¥ã£ãŠãã¯ã©ã¹ã¿ãŒã®ãã¹ããæå®ããå¿ èŠãªæ§æã§ãã£ã¹ã¯ ã€ã¡ãŒãžãçµã¿ç«ãŠãŸãããããããçŸæç¹ã§ã¯ãã€ã¡ãŒãžã®ã¢ã»ã³ããªæãå«ããTerraform ãèµ·åãããåã®ã¯ã©ã¹ã¿ãŒ ID ã¯ããããŸããããã®ãããç§ãã¡ã¯æ¬¡ã®ãããªææ®µã«é ŒããããåŸãŸããã§ããã .
Amazon ã®ã¡ã¿ããŒã¿ ãµãŒãã¹ã䜿çšããŠãä»®æ³ãã·ã³ã«ããã€ãã®ãã©ã¡ãŒã¿ãæž¡ããä»®æ³ãã·ã³ããããåãå
¥ããŠåŠçããŸããèµ·ååŸã«ãŠãŒã¶ãŒã Terraform ãã¡ã€ã«ã§æå®ãããŠãŒã¶ãŒåãšãã¹ã¯ãŒããšãMySQL ã¯ã©ã¹ã¿ãŒ ãã¹ãã®ã¡ã¿ããŒã¿ã«ã¢ã¯ã»ã¹ã§ãããã·ã³ãå¿
èŠã§ãããã¡ã€ã«ã®å
容ãå°ã倿ŽããŠã¿ãŸããã setup.shä»®æ³ãã·ã³ã®é»æºããªã³ã«ãªããšèµ·åããŸãã
ã»ããã¢ãã.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 ãã©ãããã©ãŒã äžã«åºå€§ãªã¯ã©ãŠã ã¢ãŒããã¯ãã£ãåããã¢ããªã±ãŒã·ã§ã³ãå±éã§ããŸãã Packer ã Terraform ãªã©ã® HashiCorp ã®äŸ¿å©ãªããŒã«ã圹ç«ã¡ãŸãããã®èšäºã誰ãã®åœ¹ã«ç«ã€ããšãé¡ã£ãŠããŸãð
远䌞以äžã«ããã®èšäºã§æäŸãã Packer ãš Terraform ã®æ¢æã¬ã·ããèŠã€ãããªããžããªãžã®ãªã³ã¯ãæ·»ä»ããŸãã
åºæïŒ habr.com
