Ka hoʻohana ʻana i nā lawelawe i hāʻawi ʻia ma Yandex.Cloud me ka hoʻohana ʻana iā Grafana ma ke ʻano he laʻana

Aloha kākou! Ma ke ʻano he ʻāpana o kaʻu hana papa, ua noiʻi au i nā hiki o kēlā ʻano paepae ao ʻāina e like me Yandex.Cloud. Hāʻawi ka paepae i nā lawelawe like ʻole no ka hoʻoponopono ʻana i nā pilikia kūpono. Eia nō naʻe, i kekahi manawa pono ʻoe e hoʻonohonoho i kāu noi kapuaʻi ponoʻī me kahi ʻōnaehana ākea ākea e pili ana i kēia mau lawelawe. Ma kēia ʻatikala makemake wau e kaʻana like i koʻu ʻike i ka hoʻohana ʻana i kahi noi.

Ka hoʻohana ʻana i nā lawelawe i hāʻawi ʻia ma Yandex.Cloud me ka hoʻohana ʻana iā Grafana ma ke ʻano he laʻana

He aha kāu makemake e loaʻa?

grafana - he mea hana ikaika no ka hoʻoponopono ʻana i nā pilikia analytical a i ʻole ka nānā ʻana i nā pilikia o kekahi ʻōnaehana. Ma kāna hoʻonohonoho maʻamau, he mīkini maʻemaʻe kēia me kahi kikowaena pūnaewele Grafana, a me kahi waihona (ClickHouse, InfluxDB, a me nā mea ʻē aʻe) me kahi ʻikepili kahi e hoʻokumu ʻia ai nā analytics.

Ma hope o ka hoʻokuʻu ʻana i kahi mīkini virtual me kahi kikowaena pūnaewele, hiki iā ʻoe ke hele i kāna mea hoʻokipa a kiʻi i kahi UI nani, e kuhikuhi i nā ʻikepili i kumu no ka hana hou aku, hana i nā dashboards a me nā kiʻi.

Ka hoʻohana ʻana i nā lawelawe i hāʻawi ʻia ma Yandex.Cloud me ka hoʻohana ʻana iā Grafana ma ke ʻano he laʻana

He hoʻokahi drawback koʻikoʻi ka mana kumu - ʻaʻole ia e hoʻomanawanui i ka hewa. ʻO ia hoʻi, ʻo ka hana holoʻokoʻa o ka noi e pili ana i ka viability o hoʻokahi mīkini virtual. Inā hōʻole a i ʻole 10 poʻe e wehe i ka UI i ka manawa like, a laila e kū mai nā pilikia.

Hiki iā lākou ke hoʻoholo maʻalahi: pono ʻoe e ... hoʻopololei i nā mīkini virtual like me kahi kikowaena pūnaewele a waiho iā lākou ma lalo o kahi mea kaulike L3. Akā ʻaʻole maopopo loa nā mea a pau ma ʻaneʻi. Mālama ʻo Grafana i nā hoʻonohonoho mea hoʻohana (nā ala i ka ʻikepili, nā dashboards, nā kiʻi, a me nā mea ʻē aʻe) pololei ma ka disk o kāna mīkini virtual. No laila, inā hoʻololi mākou i kekahi mau hoʻonohonoho i ka UI, e ʻike ʻia kēia mau hoʻololi ma ka mīkini virtual kahi i hoʻouna ʻia ai ka mea kaulike iā mākou. E alakaʻi kēia i nā hoʻonohonoho like ʻole no kā mākou noi, e hoʻopilikia ai i ka hoʻomaka ʻana a me ka hoʻohana ʻana.

Ma ʻaneʻi e hele mai kahi waihona ʻikepili e hoʻopakele, no ka laʻana, MySQL a i ʻole ka mea like. Haʻi mākou iā Grafana e mālama ʻo ia i nā hoʻonohonoho mea hoʻohana ma kēia waihona "hoʻokoe". Ma hope iho, lawa ka wehewehe ʻana i ke ala i kēia waihona i hoʻokahi manawa ma kēlā me kēia mīkini, a hoʻoponopono i nā hoʻonohonoho mea hoʻohana ʻē aʻe ma kekahi o nā mīkini virtual; e hoʻonui lākou i nā mea ʻē aʻe.

Eia ke kiʻikuhi o ka ʻōnaehana noi hope loa:

Ka hoʻohana ʻana i nā lawelawe i hāʻawi ʻia ma Yandex.Cloud me ka hoʻohana ʻana iā Grafana ma ke ʻano he laʻana

E aʻo kākou i ka hāpai ʻana me nā lima

MySQL a me ClickHouse

Ma mua o ka hoʻohana ʻana i ia palapala noi me ke kaomi ʻana i kahi pihi, pono e aʻo pehea e mālama ai i kēlā me kēia ʻāpana a hoʻohui pū kekahi me kekahi.

Eia ʻo Yandex.Cloud e kōkua iā mākou, e hāʻawi ana i nā mea kaulike L3, ClickHouse a me MySQL e like me nā lawelawe i hoʻokele ʻia. Pono ka mea hoʻohana e kuhikuhi i nā ʻāpana a kali a hiki i ka paena e lawe i nā mea āpau i ka hana hana.

Ua hoʻopaʻa inoa wau, hana i kahi ao a me kahi moʻokāki uku. Ma hope o kēlā, hele au i ke ao a hoʻonohonoho i nā pūʻulu MySQL a me ClickHouse me nā hoʻonohonoho liʻiliʻi. Ua kali au a hiki i ko lakou ikaika.

Ka hoʻohana ʻana i nā lawelawe i hāʻawi ʻia ma Yandex.Cloud me ka hoʻohana ʻana iā Grafana ma ke ʻano he laʻanaKa hoʻohana ʻana i nā lawelawe i hāʻawi ʻia ma Yandex.Cloud me ka hoʻohana ʻana iā Grafana ma ke ʻano he laʻana

Pono ʻoe e hoʻomanaʻo e hana i kahi waihona i kēlā me kēia puʻupuʻu a hoʻonohonoho i ke komo ʻana iā ia me ka hoʻohana ʻana i ka inoa inoa a me ka ʻōlelo huna. ʻAʻole wau e hele i nā kikoʻī ma aneʻi - maopopo loa nā mea āpau i ka interface.

ʻO nā kikoʻī i ʻike ʻole ʻia ʻo ia ka nui o kēia mau waihona, e hōʻoiaʻiʻo ana i ko lākou hoʻomanawanui hewa. Eia nō naʻe, pono ʻo Grafana i hoʻokahi host no kēlā me kēia waihona e hana pū me ia. Heluhelu lōʻihi palapala Ua hoʻoholo nā ao iaʻu. ʻIke ʻia ka pūʻali o nā ʻano c-<cluster_id>.rw.mdb.yandexcloud.net palapala ʻia i ka pūʻali haku hana o kēia manawa me ka ID pili. ʻO kēia kā mākou e hāʻawi aku iā Grafana.

kikowaena pūnaewele

I kēia manawa aia i ka pūnaewele pūnaewele. E hoʻokiʻekiʻe mākou i kahi mīkini virtual maʻamau me Linux a hoʻonohonoho lima iā Grafana ma luna.

Ka hoʻohana ʻana i nā lawelawe i hāʻawi ʻia ma Yandex.Cloud me ka hoʻohana ʻana iā Grafana ma ke ʻano he laʻana

Ka hoʻohana ʻana i nā lawelawe i hāʻawi ʻia ma Yandex.Cloud me ka hoʻohana ʻana iā Grafana ma ke ʻano he laʻana

E hoʻopili kākou ma o ssh a hoʻokomo i nā pūʻolo pono.

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 

Ma hope o kēlā, e holo kāua Grafana ma lalo o systemctl a hoʻokomo i ka plugin no ka hana ʻana me ClickHouse (ʻae, ʻaʻole ia i hoʻolako ʻia i ka waihona kumu).

sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo grafana-cli plugins install vertamedia-clickhouse-datasource

ʻO ia, ma hope o kēlā me ke kauoha maʻalahi

sudo service grafana-server start

e hoʻomaka mākou i ka pūnaewele pūnaewele. I kēia manawa hiki iā ʻoe ke hoʻokomo i ka IP address waho o ka mīkini virtual i ka polokalamu kele pūnaewele, e kuhikuhi i ke awa 3000 a ʻike i ka nani Grafana UI.
Ka hoʻohana ʻana i nā lawelawe i hāʻawi ʻia ma Yandex.Cloud me ka hoʻohana ʻana iā Grafana ma ke ʻano he laʻana

Akā, mai wikiwiki, ma mua o ka hoʻonohonoho ʻana iā Grafana, pono ʻoe e hoʻomanaʻo e haʻi iā ia i ke ala i MySQL i mea e mālama ai i nā hoʻonohonoho ma laila.

Aia ka hoʻonohonoho holoʻokoʻa o ka pūnaewele pūnaewele Grafana i ka faila /etc/grafana/grafana.ini. ʻO ka laina i makemake ʻia e like me kēia:

;url =

Hoʻonoho mākou i ka mea hoʻokipa i ka pūʻulu MySQL. Aia ka waihona hoʻokahi i ka inoa inoa a me ka ʻōlelo huna no ke komo ʻana iā Grafana ma ke kiʻi ma luna, a ma ke ʻano maʻamau, ua like nā mea ʻelua admin.

Hiki iā ʻoe ke hoʻohana i nā kauoha 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

ʻO ka manawa kēia e hoʻomaka hou ai i ke kikowaena pūnaewele!

sudo service grafana-server restart

I kēia manawa ma ka Grafana UI e kuhikuhi mākou iā ClickHouse ma kahi DataSource.

Ua hiki iaʻu ke hoʻokō i kahi hoʻonohonoho hana me kēia mau hoʻonohonoho:

Ka hoʻohana ʻana i nā lawelawe i hāʻawi ʻia ma Yandex.Cloud me ka hoʻohana ʻana iā Grafana ma ke ʻano he laʻana

Ua wehewehe au i ka URL https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443

ʻO nā mea a pau! Loaʻa iā mākou kahi mīkini virtual hana me kahi kikowaena pūnaewele i pili iā CH a me MySQL. Hiki iā ʻoe ke hoʻouka i ka ʻikepili i ClickHouse a kūkulu i nā dashboards. Akā naʻe, ʻaʻole mākou i hoʻokō i kā mākou pahuhopu a ʻaʻole i hoʻokau i kahi ʻōnaehana piha.

nā mea hoʻopuka

ʻAe ʻo Yandex.Cloud iā ʻoe e hana i kahi kiʻi disk o kahi mīkini virtual e kū nei, a ma luna o kāna kumu - kekahi helu o nā mīkini e like me kekahi. ʻO kēia ka mea a mākou e hoʻohana ai. No ka hōʻuluʻulu maʻalahi i ke kiʻi, e lawe i ka mea hana nā mea hoʻopuka mai HashiCorp. Lawe ʻo ia i kahi faila json me nā ʻōlelo kuhikuhi no ka hoʻohui ʻana i ke kiʻi.

ʻO kā mākou faila json he ʻelua poloka: nā mea kūkulu hale a me nā mea hoʻolako. Hōʻike ka poloka mua i nā ʻāpana o ke kiʻi ponoʻī ma ke ʻano he hui, a ʻo ka poloka ʻelua e wehewehe i nā ʻōlelo kuhikuhi no ka hoʻopiha ʻana me nā mea e pono ai.

e uhau ana

{
"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"
    }
  ],
...
}

I loko o kēia hiʻohiʻona, pono ʻoe e hoʻonohonoho i ka ʻike o ka ʻāpana i ke ao kahi āu e makemake ai e hana i ke kiʻi, a me ke ala i ka faila me nā kī mai ka moʻokāki lawelawe i hana mua ʻia ma kēia ʻāpana. Hiki iā ʻoe ke heluhelu hou aʻe e pili ana i ka hana ʻana i nā moʻokāki lawelawe a me nā kī ma ke ʻano o kahi faila ma ka ʻāpana pili palapala.

'Ōlelo kēia hoʻonohonoho e kūkulu ʻia ke kiʻi disk ma muli o ka paepae ubuntu-1804-lts, waiho ʻia ma ka ʻāpana mea hoʻohana kūpono i ka ʻohana kiʻi GRAFANA malalo o ka inoa grafana-{{timestamp}}.

Nā mea hoʻolako

Ke hele mai nei ka ʻāpana hoihoi o ka hoʻonohonoho. E wehewehe ia i ke kaʻina o nā hana e pono ai ke hana ʻia ma ka mīkini virtual ma mua o ka hoʻokuʻu ʻana i kona kūlana i kahi kiʻi disk.

{
...,
"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"
        ]
        }
  ]
}

Eia nā hana a pau i māhele ʻia i 3 pae. I ka pae mua, hoʻokō ʻia kahi palapala maʻalahi e hana i kahi papa kuhikuhi kōkua.

prepare-ctg.sh:

#!/bin/bash
sudo mkdir -p /opt/grafana
sudo chown -R ubuntu:ubuntu /opt/grafana

I ka pae aʻe, kau mākou i kahi palapala i kēia papa kuhikuhi, pono e hoʻomaka koke ʻia ma hope o ka hoʻomaka ʻana i ka mīkini virtual. E hoʻokomo kēia palapala i nā mea hoʻohana e pono e hoʻopaʻa inoa ʻia ma ka config Grafana a hoʻomaka hou i ka kikowaena pūnaewele.

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

Ma hope o kēia, he 3 mau mea i koe e hana ai:
1) hoʻokomo i nā pūʻolo
2) holo iā Grafana ma lalo o systemctl a hoʻokomo i ka plugin ClickHouse
3) hoʻokomo i ka setup.sh script i ka laina hoʻomaka ma hope koke o ka hoʻohuli ʻana i ka mīkini virtual.

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;

I kēia manawa, ʻo ka holo ʻana iā Packer a hoʻokomo i ke kiʻi puka i loko o ka ʻāpana i kuhikuhi ʻia. I ka hana ʻana i kahi mīkini virtual, hiki iā ʻoe ke koho iā ia ma ke ʻano he boot disk a ma hope o ka hoʻomaka ʻana e loaʻa iā ʻoe kahi kikowaena pūnaewele ʻo Grafana i mākaukau.

Ka hoʻohana ʻana i nā lawelawe i hāʻawi ʻia ma Yandex.Cloud me ka hoʻohana ʻana iā Grafana ma ke ʻano he laʻana
Ka hoʻohana ʻana i nā lawelawe i hāʻawi ʻia ma Yandex.Cloud me ka hoʻohana ʻana iā Grafana ma ke ʻano he laʻana

ʻO ka hui a me ka mea kaulike

Ke loaʻa iā mākou kahi kiʻi disk e hiki ai iā mākou ke hana i nā kikowaena pūnaewele Grafana like ʻole, hiki iā mākou ke hana i kahi hui kumu. Ma ka Yandex.Cloud platform, pili kēia huaʻōlelo i ka hui ʻana o nā mīkini virtual i loaʻa nā ʻano like. I ka hana ʻana i kahi hui hoʻohālikelike, hoʻonohonoho ʻia ka prototype o nā mīkini āpau i kēia pūʻulu, a laila nā hiʻohiʻona o ka hui ponoʻī (no ka laʻana, ka helu liʻiliʻi a me ka nui o nā mīkini hana). Inā ʻaʻole i hoʻokō ka helu o kēia manawa i kēia mau koina, a laila e wehe ka hui i nā mīkini pono ʻole a hana paha i nā mea hou i kona kiʻi ponoʻī.

Ma ke ʻano o kā mākou hana, e hana mākou i kahi hui o nā kikowaena pūnaewele e hana ʻia mai ke kiʻi disk i hana mua ʻia.

Ka hoʻohana ʻana i nā lawelawe i hāʻawi ʻia ma Yandex.Cloud me ka hoʻohana ʻana iā Grafana ma ke ʻano he laʻana

Ka hoʻohana ʻana i nā lawelawe i hāʻawi ʻia ma Yandex.Cloud me ka hoʻohana ʻana iā Grafana ma ke ʻano he laʻana

ʻO ka mea kupaianaha maoli ka hoʻonohonoho hui hope loa. E kōkua ka pūʻulu i hoʻohui ʻia me Load Balancer iā ʻoe e hoʻonohonoho i kahi mea kaulike L3 ma luna o nā mīkini virtual o kēia pūʻulu ma ke kaomi ʻana i ʻelua mau pihi.

Ka hoʻohana ʻana i nā lawelawe i hāʻawi ʻia ma Yandex.Cloud me ka hoʻohana ʻana iā Grafana ma ke ʻano he laʻana

I ka hoʻonohonoho ʻana i ka mea kaulike, ua hoʻokō au i ʻelua mau mea nui:

  1. Ua hana au i ka mea kaulike e ʻae i ka hele ʻana o nā mea hoʻohana ma ke awa 80 a hoʻihoʻi hou iā ia i ke awa 3000 o nā mīkini virtual, kahi e noho ai ʻo Grafana.
  2. Hoʻonohonoho au i ka nānā ʻana i ka hiki ʻana o nā mīkini ma ke kaomi ʻana iā lākou i ke awa 3000.

Ka hoʻohana ʻana i nā lawelawe i hāʻawi ʻia ma Yandex.Cloud me ka hoʻohana ʻana iā Grafana ma ke ʻano he laʻana

Hōʻuluʻulu liʻiliʻi

ʻO ka mea hope loa, ua hiki iā mākou ke hoʻokau lima lima i ka ʻōnaehana noi i makemake ʻia, a i kēia manawa ua loaʻa iā mākou kahi lawelawe Grafana ikaika loa. Pono ʻoe e ʻike i ka IP address o ka mea kaulike ma ke ʻano he wahi komo i ka noi a me ka pūʻali o ka hui ClickHouse i mea e hoʻouka ai i ka dataset i loko.

Me he mea lā he lanakila? ʻAe, lanakila. Akā, ua huikau kekahi mea iaʻu. ʻO ke kaʻina holoʻokoʻa ma luna nei e koi i ka nui o nā ʻanuʻu manual a ʻaʻole hiki ke hoʻonui ʻia; Makemake wau e hoʻokaʻawale iā ia inā hiki. ʻO kēia ka mea e hoʻolaʻa ʻia ai ka pauku aʻe.

Hoʻohui Terraform

E hoʻohana hou mākou i kahi mea hana mai HashiCorp i kapa ʻia ʻOhana hoʻoponopono. E kōkua ia iā ʻoe e hoʻolālā i ka ʻōnaehana noi holoʻokoʻa me ke kaomi ʻana i kahi pihi, e pili ana i nā ʻano like ʻole i hala e ka mea hoʻohana. E kākau kāua i mea ʻai hiki ke holo i nā manawa he nui ma nā ʻāpana like ʻole o nā mea hoʻohana like ʻole.

ʻO nā hana āpau me Terraform e iho i lalo i ke kākau ʻana i kahi faila hoʻonohonoho (*.tf) a me ka hoʻokumu ʻana i nā ʻōnaehana ma muli o ia.

Nā Loli

I ka hoʻomaka ʻana o ka faila, e hoʻokomo mākou i nā mea hoʻololi e hoʻoholo ai i hea a pehea e hoʻonohonoho ʻia ai ka ʻōnaehana e hiki mai ana.

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>"
}

E iho mai ke kaʻina hana holoʻokoʻa no ke kūkulu ʻana i kahi kiʻi disk a hoʻonohonoho i kēia mau ʻano. E wehewehe au i ke kuleana o lākou:

oauth_token - he hōʻailona no ke komo ʻana i ke ao. Hiki ke loaʻa ma loulou.
cloud_id - ka ʻike kapua kahi e kau ai mākou i ka noi
waihona_id - ʻāpana ʻāpana kahi e kau ai mākou i ka noi
service_account_id - ʻike moʻokāki lawelawe ma ka ʻāpana pili o ke ao.
kiʻi_id - ka mea hōʻike o ke kiʻi disk i loaʻa me ka hoʻohana ʻana iā Packer
inoa mea hoʻohana и hua huna — inoa inoa a me ka ʻōlelo huna no ke komo ʻana i nā ʻikepili ʻelua a me ke kikowaena pūnaewele ʻo Grafana
dbname - inoa waihona i loko o nā pūʻulu CH a me MySQL
public_key_path - ala i ka faila me kāu kī ssh lehulehu, hiki iā ʻoe ke hoʻohana e hoʻopili ma lalo o ka inoa ubuntu i nā mīkini uila me nā kikowaena pūnaewele

Hoʻonohonoho mea hoʻolako

I kēia manawa pono ʻoe e hoʻonohonoho i ka mea hoʻolako Terraform - i kā mākou hihia, Yandex:

provider "yandex" {
  token     = var.oauth_token
  cloud_id  = var.cloud_id
  folder_id = var.folder_id
  zone      = "ru-central1-a"
}

E ʻike ʻoe ma ʻaneʻi ke hoʻohana nei mākou i nā mea hoʻololi i wehewehe ʻia ma luna.

Pūnaewele a me nā pūʻulu

I kēia manawa, e hana mākou i kahi pūnaewele kahi e kamaʻilio ai nā mea o kā mākou ʻoihana, ʻekolu subnets (hoʻokahi ma kēlā me kēia māhele) a hoʻonui i nā pūʻulu CH a me 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
  }
}

E like me kāu e ʻike ai, ua hana ʻia kēlā me kēia o nā puʻupuʻu ʻelua me ka hoʻomanawanui hewa ʻole ma o ka waiho ʻia ʻana i ʻekolu mau wahi i loaʻa.

Nā kikowaena pūnaewele

Me he mea lā hiki iā mākou ke hoʻomau i ka manaʻo hoʻokahi, akā ua holo wau i loko o ka pilikia. Ma mua o kēia, ua hoʻāla mua wau i kahi hui MySQL a ma hope wale nō, me ka ʻike ʻana i kāna ID, ua hōʻiliʻili wau i kahi kiʻi disk me ka hoʻonohonoho pono, kahi aʻu i kuhikuhi ai i ka mea hoʻokipa i ka hui. Akā i kēia manawa ʻaʻole mākou ʻike i ka cluster ID ma mua o ka hoʻokuʻu ʻana iā Terraform, me ka manawa o ke kūkulu ʻana i ke kiʻi. No laila, pono wau e hoʻohana i kēia mau mea hoʻopunipuni.

Ke hoʻohana nei i ka lawelawe metadata a Amazon, e hāʻawi mākou i kekahi mau ʻāpana i ka mīkini virtual, nāna e ʻae a hana. Pono mākou i ka mīkini e hele i ka metadata ma hope o ka MySQL cluster host a me ka inoa inoa-password, i ʻōlelo ʻia e ka mea hoʻohana i ka faila Terraform, ma hope o ka hoʻomaka. E hoʻololi iki i nā mea o ka faila setup.sh, e holo ana i ka wā e ho'ā ai ka mīkini virtual.

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

ʻO ka hui intance a me ke kaulike

Ke kūkulu hou ʻana i kahi kiʻi disk hou, hiki iā mākou ke hoʻohui hope i kā mākou faila no Terraform.

E hōʻike mākou makemake mākou e hoʻohana i kahi kiʻi disk i loaʻa:

data "yandex_compute_image" "grafana_image" {
  image_id = var.image_id
}

I kēia manawa, e hana mākou i hui pūʻulu:

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"
  }
}

Pono e hoʻolohe i ke ʻano o kā mākou hoʻoili ʻana i ka metadata cluster_uri, username и password. ʻO kēia ka mea e lawe ai ka mīkini virtual i ka hoʻomaka ʻana a hoʻokomo i ka config Grafana.

Aia i ka mea kaulike.

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
      }
    }
  }
}

He wahi kō

He wahi koe i koe. Ma hope o ka hoʻoili ʻia ʻana o ka ʻōnaehana, pono ʻoe e hele i ka UI Grafana a hoʻohui lima i ka pūʻulu CH (ʻo ia ka ID e pono e loaʻa) ma ke ʻano he ʻikepili. Akā ʻike ʻo Terraform i ka cluster ID. E hāʻawi aku iā ia i ka hoʻokō ʻana i ka mea.

E hoʻohui i kahi mea hoʻolako hou - Grafana, a hāʻawi iā ia i ka helu IP o ka mea kaulike ma ke ʻano he mea hoʻokipa. ʻO nā hoʻololi āpau a Terraform e hana ai ma ka mīkini kahi e hoʻoholo ai kāna mea kaulike e ulu i MySQL, a no laila ma nā mīkini ʻē aʻe.

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"
}

E pulu i ko kakou lauoho

E hōʻike i ka helu IP kaulike a me ka pūʻali o ka hui 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"
}

Hiki iā ʻoe ke holo

ʻO nā mea a pau! Ua mākaukau kā mākou faila hoʻonohonoho a hiki iā mākou, ma ka hoʻonohonoho ʻana i nā mea hoʻololi, e haʻi iā Terraform e hoʻāla i nā mea āpau a mākou i wehewehe ai ma luna. ʻO ka hana holoʻokoʻa i lawe iaʻu ma kahi o 15 mau minuke.
I ka hopena hiki iā ʻoe ke ʻike i kahi leka nani:

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

A i loko o ke ao, e ʻike ʻia nā mea o ka ʻoihana hoʻokiʻekiʻe:

Ka hoʻohana ʻana i nā lawelawe i hāʻawi ʻia ma Yandex.Cloud me ka hoʻohana ʻana iā Grafana ma ke ʻano he laʻana

E hōʻuluʻulu i nā hualoaʻa

I kēia manawa, me ka hoʻohana ʻana iā Grafana ma ke ʻano he laʻana, hiki i kēlā me kēia o ʻoukou ke kau i nā noi me kahi hoʻolālā ao ākea ma ka paepae Yandex.Cloud. Hiki i nā mea kōkua kōkua mai HashiCorp e like me Packer a me Terraform ke kōkua iā ʻoe me kēia. Manaʻo wau e ʻike kekahi i kēia ʻatikala he mea pono :)

PS Ma lalo wau e hoʻopili i kahi loulou i ka waihona kahi e loaʻa ai iā ʻoe nā meaʻai mākaukau no Packer a me Terraform, nā ʻāpana aʻu i hāʻawi ai i kēia ʻatikala.

waihona waihona

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka