Cleachdadh sheirbheisean sgaoilte ann an Yandex.Cloud a’ cleachdadh Grafana mar eisimpleir

Hi uile! Mar phàirt den obair cùrsa agam, rinn mi sgrùdadh air comasan àrd-ùrlar sgòthan dachaigheil mar Yandex.Cloud. Tha an àrd-ùrlar a’ tabhann diofar sheirbheisean airson fuasgladh fhaighinn air duilgheadasan practaigeach. Ach, uaireannan feumaidh tu an tagradh sgòthan agad fhèin a stèidheachadh le bun-structar meadhanach farsaing stèidhichte air na seirbheisean sin. San artaigil seo tha mi airson an eòlas agam ann a bhith a’ cleachdadh tagradh mar seo a cho-roinn.

Cleachdadh sheirbheisean sgaoilte ann an Yandex.Cloud a’ cleachdadh Grafana mar eisimpleir

Dè tha thu airson fhaighinn?

grafana - inneal cumhachdach airson fuasgladh fhaighinn air duilgheadasan anailis no sùil a chumail air duilgheadasan siostaman sam bith. Anns an rèiteachadh bunaiteach aige, is e inneal brìgheil a tha seo le frithealaiche lìn Grafana, a bharrachd air stòr-dàta (ClickHouse, InfluxDB, msaa) le stòr-dàta air am bi mion-sgrùdaidhean stèidhichte.

Às deidh dhut inneal brìgheil a chuir air bhog le frithealaiche lìn, faodaidh tu a dhol chun aoigh aige agus UI brèagha fhaighinn, stòran-dàta a shònrachadh mar stòran airson tuilleadh obrach, deas-bhòrdan agus grafaichean a chruthachadh.

Cleachdadh sheirbheisean sgaoilte ann an Yandex.Cloud a’ cleachdadh Grafana mar eisimpleir

Tha aon eas-bhuannachd chudromach aig an dreach bunaiteach - chan eil e fulangach le lochdan idir. Is e sin, tha gnìomhachd iomlan an tagraidh an urra ri comasachd aon inneal brìgheil. Ma dhiùltas e no ma dh’ fhosglas 10 neach an UI aig an aon àm, èiridh duilgheadasan.

Faodaidh iad a bhith air am fuasgladh gu sìmplidh: chan fheum thu ach ... mòran innealan brìgheil co-ionann a chleachdadh le frithealaiche lìn agus an cur fo chothromachadh L3. Ach chan eil a h-uile dad cho soilleir an seo. Bidh Grafana a’ stòradh shuidheachaidhean luchd-cleachdaidh (slighean gu stòran-dàta, clàran-dash, grafaichean, msaa) gu dìreach air diosc an inneal brìgheil aige. Mar sin, ma dh’ atharraicheas sinn cuid de shuidheachaidhean san UI, cha bhi na h-atharrachaidhean sin rim faicinn ach air an inneal brìgheil far an do chuir an cothromaiche thugainn. Leanaidh seo gu suidheachaidhean neo-chunbhalach airson an tagraidh againn, ag adhbhrachadh dhuilgheadasan le cur air bhog agus cleachdadh.

An seo thig stòr-dàta eile gu teasairginn, mar eisimpleir, MySQL no a leithid. Tha sinn ag innse do Grafana gum bu chòir dhi roghainnean luchd-cleachdaidh a stòradh san stòr-dàta “a bharrachd” seo. Às deidh sin, bidh e gu leòr an t-slighe chun stòr-dàta seo a shònrachadh aon uair air gach inneal, agus a h-uile suidheachadh cleachdaiche eile air gin de na h-innealan brìgheil a dheasachadh; leudaichidh iad chun fheadhainn eile.

Seo diagram den bhun-structar tagraidh deireannach:

Cleachdadh sheirbheisean sgaoilte ann an Yandex.Cloud a’ cleachdadh Grafana mar eisimpleir

Ionnsaichidh sinn togail le ar làmhan

MySQL agus ClickHouse

Mus deach an leithid de thagradh a chleachdadh le cliogadh putan, bha e riatanach ionnsachadh mar a làimhsicheas tu gach aon de na pàirtean aige agus an aonachadh ri chèile.

An seo cuidichidh Yandex.Cloud sinn, a bheir seachad luchd-cothromachaidh L3, ClickHouse agus MySQL mar sheirbheisean stiùirichte. Chan fheum an neach-cleachdaidh ach na paramadairean a shònrachadh agus feitheamh gus an toir an àrd-ùrlar a h-uile dad gu òrdugh obrach.

Chlàraich mi, chruthaich mi sgòth agus cunntas pàighidh. Às deidh sin, chaidh mi chun sgòth agus stèidhich mi cruinneachaidhean MySQL agus ClickHouse le glè bheag de shuidheachaidhean. Dh'fhuirich mi gus an do dh'fhàs iad gnìomhach.

Cleachdadh sheirbheisean sgaoilte ann an Yandex.Cloud a’ cleachdadh Grafana mar eisimpleirCleachdadh sheirbheisean sgaoilte ann an Yandex.Cloud a’ cleachdadh Grafana mar eisimpleir

Feumaidh tu cuideachd cuimhne a bhith agad air stòr-dàta a chruthachadh anns gach buidheann agus cothrom a chuir air dòigh le bhith a’ cleachdadh logadh a-steach agus facal-faire. Cha tèid mi a-steach gu mion-fhiosrachadh an seo - tha a h-uile dad gu math follaiseach san eadar-aghaidh.

Is e am mion-fhiosrachadh neo-fhollaiseach gu bheil mòran luchd-aoigheachd aig na stòran-dàta sin, a nì cinnteach gu bheil iad fo fhulangas lochdan. Ach, feumaidh Grafana dìreach aon aoigh airson gach stòr-dàta leis am bi e ag obair. Leughadh fada sgrìobhainnean Thug na sgòthan mi gu co-dhùnadh. Tha e a 'tionndadh a-mach gu bheil an aoigh den ghnè c-<cluster_id>.rw.mdb.yandexcloud.net air a mhapadh don phrìomh aoigh gnìomhach den bhuidheann leis an ID co-fhreagarrach. Is e seo a bheir sinn do Grafana.

frithealaiche lìn

A-nis tha e an urra ris an fhrithealaiche lìn. Nach tog sinn inneal brìgheil cunbhalach le Linux agus rèitich sinn Grafana le làimh.

Cleachdadh sheirbheisean sgaoilte ann an Yandex.Cloud a’ cleachdadh Grafana mar eisimpleir

Cleachdadh sheirbheisean sgaoilte ann an Yandex.Cloud a’ cleachdadh Grafana mar eisimpleir

Dèanamaid ceangal tro ssh agus stàlaich sinn na pacaidean riatanach.

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 

Às deidh sin, ruithidh sinn Grafana fo systemctl agus stàlaich am plugan airson a bhith ag obair le ClickHouse (tha, chan eil e air a thoirt seachad sa phasgan bunaiteach).

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

Sin e, às deidh sin le òrdugh sìmplidh

sudo service grafana-server start

tòisichidh sinn am frithealaiche lìn. A-nis faodaidh tu seòladh IP taobh a-muigh an inneal brìgheil a chuir a-steach sa bhrobhsair, sònraich port 3000 agus faic an Grafana UI brèagha.
Cleachdadh sheirbheisean sgaoilte ann an Yandex.Cloud a’ cleachdadh Grafana mar eisimpleir

Ach na bi cabhag, mus cuir thu air dòigh Grafana, feumaidh tu cuimhneachadh gun innis thu dha an t-slighe gu MySQL gus na roghainnean a stòradh an sin.

Tha rèiteachadh iomlan frithealaiche lìn Grafana san fhaidhle /etc/grafana/grafana.ini. Tha an loidhne riatanach a’ coimhead mar seo:

;url =

Shuidhich sinn an aoigheachd don bhuidheann MySQL. Anns an aon fhaidhle tha an logadh a-steach agus am facal-faire airson faighinn gu Grafana san dealbh gu h-àrd, a tha le chèile co-ionnan admin.

Faodaidh tu òrdughan sed a chleachdadh:

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

Tha an t-àm ann am frithealaiche lìn ath-thòiseachadh!

sudo service grafana-server restart

A-nis anns an Grafana UI sònraichidh sinn ClickHouse mar Stòr Dàta.

Bha e comasach dhomh rèiteachadh obrach a choileanadh leis na roghainnean a leanas:

Cleachdadh sheirbheisean sgaoilte ann an Yandex.Cloud a’ cleachdadh Grafana mar eisimpleir

Shònraich mi mar an URL https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443

Uile! Tha aon inneal brìgheil againn ag obair le frithealaiche lìn ceangailte ri CH agus MySQL. Faodaidh tu an dàta a luchdachadh suas gu ClickHouse mu thràth agus deas-bhòrdan a thogail. Ach, chan eil sinn air ar n-amas a choileanadh fhathast agus chan eil sinn air bun-structar làn-chuimseach a chleachdadh.

Pacair

Leigidh Yandex.Cloud leat ìomhaigh diosc a chruthachadh de inneal brìgheil a tha ann mar-thà, agus air a bhunait - àireamh sam bith de dh’ innealan co-ionann ri chèile. Is e seo dìreach a bhios sinn a’ cleachdadh. Gus an ìomhaigh a cho-chruinneachadh gu h-iomchaidh, gabh an inneal Pacair bho HashiCorp. Bidh e a’ toirt a-steach faidhle json le stiùireadh airson an ìomhaigh a cho-chruinneachadh.

Bidh dà bhloca anns an fhaidhle json againn: luchd-togail agus luchd-solair. Tha a 'chiad bhloc a' toirt cunntas air crìochan an ìomhaigh fhèin mar eintiteas, agus tha an dàrna bloc a 'toirt cunntas air stiùireadh airson a lìonadh leis an t-susbaint riatanach.

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

Anns an teamplaid seo, feumaidh tu aithnichear na h-earrainn a shuidheachadh san sgòth far a bheil thu airson an ìomhaigh a chruthachadh, a bharrachd air an t-slighe chun fhaidhle leis na h-iuchraichean bhon chunntas seirbheis a chaidh a chruthachadh roimhe san roinn seo. Faodaidh tu barrachd a leughadh mu bhith a’ cruthachadh chunntasan seirbheis agus iuchraichean ann an cruth faidhle anns an earrainn iomchaidh sgrìobhainnean.

Tha an rèiteachadh seo ag ràdh gun tèid an ìomhaigh diosc a thogail stèidhichte air an àrd-ùrlar ubuntu-1804-lts, air a chuir anns an roinn cleachdaiche iomchaidh anns an teaghlach ìomhaigh GRAFANA fon ainm grafana-{{timestamp}}.

Luchd-solair

A-nis thig am pàirt as inntinniche den rèiteachadh. Bheir e cunntas air an t-sreath de ghnìomhan a dh’ fheumar a dhèanamh air an inneal brìgheil mus reothadh e a staid gu ìomhaigh diosc.

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

An seo tha a h-uile gnìomh air a roinn ann an 3 ìrean. Aig a 'chiad ìre, thèid sgriobt sìmplidh a chur gu bàs a chruthaicheas eòlaire cuideachail.

ullachadh-ctg.sh:

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

Aig an ath ìre, bidh sinn a’ cur sgriobt san eòlaire seo, a dh’ fheumar a chuir air bhog sa bhad às deidh tòiseachadh air an inneal brìgheil. Cuiridh an sgriobt seo na caochladairean cleachdaiche a dh’ fheumar a chlàradh ann an config Grafana agus ath-thòisich am frithealaiche lìn.

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

Às deidh seo tha 3 rudan air fhàgail ri dhèanamh:
1) stàlaich pacaidean
2) ruith Grafana fo systemctl agus stàlaich am plugan ClickHouse
3) cuir an sgriobt setup.sh anns a’ chiudha cur air bhog dìreach às deidh dhut an inneal brìgheil a thionndadh.

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;

A-nis chan eil air fhàgail ach Packer a ruith agus an ìomhaigh toraidh a chuir anns an roinn ainmichte. Nuair a chruthaicheas tu inneal brìgheil, faodaidh tu a thaghadh mar dhiosca bròg agus às deidh dhut a chuir air bhog gheibh thu frithealaiche lìn Grafana deiseil.

Cleachdadh sheirbheisean sgaoilte ann an Yandex.Cloud a’ cleachdadh Grafana mar eisimpleir
Cleachdadh sheirbheisean sgaoilte ann an Yandex.Cloud a’ cleachdadh Grafana mar eisimpleir

Mar eisimpleir, buidheann agus balancer

Aon uair ‘s gu bheil ìomhaigh diosc againn a leigeas leinn iomadh seirbheisiche lìn Grafana co-ionann a chruthachadh, is urrainn dhuinn buidheann eisimpleir a chruthachadh. Air àrd-ùrlar Yandex.Cloud, tha an teirm seo a’ toirt iomradh air aonadh innealan brìgheil aig a bheil na h-aon fheartan. Nuair a bhios tu a 'cruthachadh buidheann eisimpleir, tha prototype a h-uile inneal sa bhuidheann seo air a rèiteachadh, agus an uairsin feartan na buidhne fhèin (mar eisimpleir, an àireamh as lugha agus as àirde de innealan gnìomhach). Mura h-eil an àireamh làithreach a’ coinneachadh ris na slatan-tomhais sin, bheir a’ bhuidheann eisimpleirean fhèin air falbh innealan neo-riatanach no cruthaichidh iad feadhainn ùra na ìomhaigh fhèin.

Mar phàirt den obair againn, cruthaichidh sinn buidheann eisimpleir de luchd-frithealaidh lìn a thèid a chruthachadh bhon ìomhaigh diosc a chaidh a chruthachadh roimhe seo.

Cleachdadh sheirbheisean sgaoilte ann an Yandex.Cloud a’ cleachdadh Grafana mar eisimpleir

Cleachdadh sheirbheisean sgaoilte ann an Yandex.Cloud a’ cleachdadh Grafana mar eisimpleir

Is e an rud a tha gu math iongantach an suidheachadh buidheann eisimpleir mu dheireadh. Cuidichidh am buidheann targaid ann an amalachadh le Load Balancer thu gus cothromachadh L3 a rèiteachadh air mullach innealan brìgheil na buidhne seo le bhith a’ briogadh air putan no dhà.

Cleachdadh sheirbheisean sgaoilte ann an Yandex.Cloud a’ cleachdadh Grafana mar eisimpleir

Nuair a bha mi a’ stèidheachadh an balancer, chuir mi an gnìomh dà phuing chudromach:

  1. Thug mi air an neach-cothromachaidh gabhail ri trafaic luchd-cleachdaidh air port 80 agus ath-stiùireadh gu port 3000 de na h-innealan brìgheil, dìreach far a bheil Grafana a’ fuireach.
  2. Chuir mi air dòigh sgrùdadh ion-dhèantachd innealan le bhith gan putadh gu port 3000.

Cleachdadh sheirbheisean sgaoilte ann an Yandex.Cloud a’ cleachdadh Grafana mar eisimpleir

Geàrr-chunntas beag

Mu dheireadh, bha e comasach dhuinn am bun-structar tagraidh a bha sinn ag iarraidh a chleachdadh le làimh, agus a-nis tha seirbheis Grafana a tha gu math tapaidh againn. Chan fheum thu ach fios a bhith agad air seòladh IP an neach-cothromachaidh mar an t-àite inntrigidh don tagradh agus aoigheachd brabhsair ClickHouse gus an dàta a luchdachadh a-steach ann.

Bhiodh e coltach ri buaidh? Tha, buaidh. Ach tha rudeigin fhathast a’ cur dragh orm. Feumaidh am pròiseas gu lèir gu h-àrd tòrr cheumannan làimhe agus chan eil e scalable idir; bu mhath leam a dhèanamh fèin-ghluasadach ma ghabhas e dèanamh. Is e seo a bhios anns an ath earrann.

Amalachadh terraform

Cleachdaidh sinn a-rithist inneal bho HashiCorp ris an canar Terraform. Cuidichidh e thu gus bun-structar iomlan an tagraidh a chleachdadh le cliogadh putan, stèidhichte air grunn chaochladairean a chuir an neach-cleachdaidh seachad. Nach sgrìobh sinn reasabaidh a dh'fhaodar a ruith iomadh uair ann an diofar roinnean de luchd-cleachdaidh eadar-dhealaichte.

Tha a h-uile obair le Terraform an urra ri bhith a’ sgrìobhadh faidhle rèiteachaidh (*.tf) agus cruthachadh bun-structair stèidhichte air.

Caochlaidhean

Aig fìor thoiseach an fhaidhle, bheir sinn a-steach caochladairean a bhios a’ dearbhadh càite agus ciamar a thèid am bun-structar a chleachdadh san àm ri teachd.

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

Thig am pròiseas cleachdadh tagraidh gu lèir sìos gu bhith a’ togail ìomhaigh diosc agus a’ suidheachadh nan caochladairean sin. Leig leam mìneachadh carson a tha iad an urra:

outh_token - comharra airson faighinn chun sgòth. Faodar fhaighinn le cheangal.
sgòth_id - aithnichear sgòthan far an cleachd sinn an tagradh
pasgan_id - aithnichear earrann far an cleachd sinn an tagradh
seirbheis_cunntais_id - aithnichear cunntas seirbheis anns an roinn fhreagarrach den sgòth.
dealbh_id - aithnichear ìomhaigh an diosc a fhuaireadh a’ cleachdadh Packer
ainm-cleachdaidh и facal-faire - ainm neach-cleachdaidh agus facal-faire gus faighinn gu gach stòr-dàta agus frithealaiche lìn Grafana
db ainm - ainm stòr-dàta taobh a-staigh cruinneachaidhean CH agus MySQL
slighe_iuchrach_poblach - slighe chun fhaidhle leis an iuchair ssh poblach agad, as urrainn dhut a chleachdadh gus ceangal fon ainm ubuntu gu innealan mas-fhìor le frithealaichean lìn

Suidheachadh solaraiche

A-nis feumaidh tu an solaraiche Terraform a rèiteachadh - nar cùis, Yandex:

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

Mothaichidh tu gu bheil sinn an seo a’ cleachdadh nan caochladairean a tha air am mìneachadh gu h-àrd.

Lìonra agus cruinneachaidhean

A-nis cruthaichidh sinn lìonra anns am bi eileamaidean den bhun-structar againn a’ conaltradh, trì subnets (aon anns gach sgìre) agus a’ togail cruinneachaidhean CH agus 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
  }
}

Mar a chì thu, tha gach aon den dà chlàr air a chruthachadh gu math fulangach le bhith gan cur ann an trì sònaichean ruigsinneachd.

Frithealaichean lìn

Tha e coltach gum b 'urrainn dhuinn cumail oirnn anns an aon spiorad, ach ruith mi ann an duilgheadas. Ron àm seo, thog mi cruinneachadh MySQL an-toiseach agus dìreach às deidh sin, le eòlas air an ID aige, chruinnich mi ìomhaigh diosc leis an rèiteachadh riatanach, far an do shònraich mi an aoigh don bhuidheann. Ach a-nis chan eil fios againn air an ID brabhsair mus cuir sinn Terraform air bhog, a’ toirt a-steach aig àm togail na h-ìomhaigh. Mar sin, bha agam ri dhol gu na leanas cleas.

A’ cleachdadh seirbheis meata-dàta Amazon, bheir sinn seachad cuid de pharamadairean chun inneal brìgheil, a ghabhas e ris agus a phròiseas. Feumaidh sinn an inneal a dhol chun mheata-dàta air cùl an aoigheachd brabhsair MySQL agus facal-faire ainm-cleachdaidh, a shònraich an neach-cleachdaidh ann am faidhle Terraform, às deidh tòiseachadh. Nach atharraich sinn susbaint an fhaidhle beagan setup.sh, a bhios a’ ruith nuair a thèid an inneal brìgheil a thionndadh air.

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

Buidheann intance agus balancer

Às deidh dhuinn ìomhaigh diosc ùr ath-thogail, is urrainn dhuinn mu dheireadh ar faidhle airson Terraform a chuir ris.

Canaidh sinn gu bheil sinn airson ìomhaigh diosc gnàthaichte a chleachdadh:

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

A-nis cruthaichidh sinn buidheann eisimpleir:

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

Is fhiach aire a thoirt do mar a chuir sinn a-steach e don mheata-dàta cluster_uri, username и password. Is iad sin a bheir an inneal brìgheil a-mach aig àm tòiseachaidh agus cuiridh e a-steach an rèiteachadh Grafana.

Tha e an urra ris an neach-cothromachaidh.

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

Beagan siùcair

Chan eil ach beagan air fhàgail. Às deidh don bhun-structar a bhith air a chleachdadh, feumaidh tu a dhol gu Grafana UI agus cuir ris a’ bhuidheann CH le làimh (feumar an ID fhathast fhaighinn) mar Stòr Dàta. Ach tha fios aig Terraform air an ID brabhsair. Bheir sinn earbsa dha a’ chùis a thoirt gu buil.

Nach cuir sinn solaraiche ùr ris - Grafana, agus bheir sinn dhi seòladh IP an neach-cothromachaidh mar aoigh. Bidh a h-uile atharrachadh a nì Terraform air an inneal far a bheil a chothromachadh a’ dearbhadh fàs ann am MySQL, agus mar sin air a h-uile inneal eile.

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

Cìridh sinn ar falt

Nach seall sinn an seòladh IP cothromachaidh agus aoigheachd brabhsair 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"
}

Faodaidh ruith

Uile! Tha am faidhle rèiteachaidh againn deiseil agus is urrainn dhuinn, le bhith a’ suidheachadh nan caochladairean, innse do Terraform a h-uile dad a tha sinn air a mhìneachadh gu h-àrd a thogail. Thug am pròiseas gu lèir timcheall air 15 mionaidean dhomh.
Aig an deireadh chì thu teachdaireachd bhrèagha:

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

Agus anns an sgòth, bidh eileamaidean den bhun-structar àrdaichte rim faicinn:

Cleachdadh sheirbheisean sgaoilte ann an Yandex.Cloud a’ cleachdadh Grafana mar eisimpleir

Leigamaid a-steach na toraidhean

A-nis, a’ cleachdadh Grafana mar eisimpleir, faodaidh gach fear agaibh tagraidhean a chleachdadh le ailtireachd sgòthan sprawling air àrd-ùrlar Yandex.Cloud. Faodaidh innealan feumail bho HashiCorp leithid Packer and Terraform do chuideachadh le seo. Tha mi an dòchas gum bi an artaigil seo feumail do chuideigin :)

PS Gu h-ìosal cuiridh mi ceangal ris an stòr far am faigh thu reasabaidhean deiseil airson Packer and Terraform, a thug mi seachad san artaigil seo.

tasgaidh

Source: www.habr.com

Cuir beachd ann