Aiwatar da ayyukan da aka rarraba a cikin Yandex.Cloud ta amfani da Grafana a matsayin misali

Sannu duka! A matsayin wani ɓangare na aikin kwas na, na bincika iyawar irin wannan dandamalin girgije na cikin gida kamar Yandex.Cloud. Dandalin yana ba da ayyuka daban-daban don magance matsalolin aiki. Koyaya, wani lokacin kuna buƙatar saita aikace-aikacen girgijen ku tare da ingantaccen kayan aikin da ya danganci waɗannan ayyukan. A cikin wannan labarin ina so in raba gwaninta a cikin tura irin wannan aikace-aikacen.

Aiwatar da ayyukan da aka rarraba a cikin Yandex.Cloud ta amfani da Grafana a matsayin misali

Me kuke son karba?

Grafana - kayan aiki mai ƙarfi don magance matsalolin nazari ko sa ido kan matsalolin kowane tsarin. A cikin tsarin sa na asali, wannan na'ura ce ta kama-da-wane tare da sabar gidan yanar gizo na Grafana, da kuma bayanan bayanai (ClickHouse, InfluxDB, da dai sauransu) tare da saitin bayanai wanda za a dogara da shi.

Bayan ƙaddamar da na'ura mai mahimmanci tare da sabar yanar gizo, za ku iya zuwa wurin mai masaukin ku kuma ku sami kyakkyawan UI, saka bayanai a matsayin tushen don ƙarin aiki, ƙirƙirar dashboards da jadawalai.

Aiwatar da ayyukan da aka rarraba a cikin Yandex.Cloud ta amfani da Grafana a matsayin misali

Sigar asali tana da babban koma baya - ba laifi ba ne ko kaɗan. Wato gaba dayan aikin aikace-aikacen ya dogara ne da yuwuwar injin kama-da-wane ɗaya. Idan ya ƙi ko kuma mutane 10 sun buɗe UI a lokaci guda, to matsaloli zasu taso.

Ana iya magance su cikin sauƙi: kawai kuna buƙatar ... tura injiniyoyi iri ɗaya tare da sabar gidan yanar gizo kuma sanya su ƙarƙashin ma'auni na L3. Amma ba komai ya fito fili a nan ba. Grafana yana adana saitunan mai amfani (hanyoyin zuwa bayanan bayanai, dashboards, jadawalai, da sauransu) kai tsaye a kan faifan na'urar sa. Don haka, idan muka canza wasu saituna a cikin UI, waɗannan canje-canjen za su bayyana akan injin kama-da-wane ne kawai inda mai daidaitawa ya aiko mu. Wannan zai haifar da saituna marasa daidaituwa don aikace-aikacen mu, yana haifar da matsala tare da ƙaddamarwa da amfani.

Anan wani bayanan bayanai zai zo don ceto, misali, MySQL ko makamancinsa. Mun gaya wa Grafana cewa ya kamata ta adana saitunan mai amfani a cikin wannan bayanan “sare”. Bayan haka, zai isa a ƙididdige hanyar zuwa wannan bayanan sau ɗaya akan kowace na'ura, sannan a gyara duk sauran saitunan masu amfani akan kowane injin kama-da-wane; za su ƙara zuwa sauran.

Anan ga zane na kayan aikin ƙarshe na aikace-aikacen:

Aiwatar da ayyukan da aka rarraba a cikin Yandex.Cloud ta amfani da Grafana a matsayin misali

Mu koyi ɗagawa da hannuwanmu

MySQL da ClickHouse

Kafin tura irin wannan aikace-aikacen tare da danna maballin, ya zama dole a koyi yadda ake sarrafa kowane kayan aikin da kuma haɗa su da juna.

Anan Yandex.Cloud zai taimaka mana, wanda ke ba da ma'auni na L3, ClickHouse da MySQL azaman ayyukan gudanarwa. Mai amfani kawai yana buƙatar ƙayyade sigogi kuma jira har sai dandamali ya kawo komai cikin tsari na aiki.

Na yi rajista, na ƙirƙiri girgije da asusun biyan kuɗi. Bayan haka, na je ga gajimare na kafa MySQL da ClickHouse clusters tare da ƙananan saitunan. Na jira har suka fara aiki.

Aiwatar da ayyukan da aka rarraba a cikin Yandex.Cloud ta amfani da Grafana a matsayin misaliAiwatar da ayyukan da aka rarraba a cikin Yandex.Cloud ta amfani da Grafana a matsayin misali

Hakanan kuna buƙatar tunawa don ƙirƙirar bayanai a cikin kowane gungu kuma saita hanyar shiga ta ta amfani da shiga da kalmar wucewa. Ba zan shiga cikin cikakkun bayanai a nan ba - komai a bayyane yake a fili.

Bayanan da ba a bayyane ba shine cewa waɗannan ma'ajin bayanai suna da runduna da yawa, waɗanda ke tabbatar da haƙurin kuskurensu. Koyaya, Grafana yana buƙatar madaidaicin runduna ɗaya ga kowane rumbun adana bayanai da yake aiki da su. Dogon karatu takardun Gizagizai sun kawo ni ga yanke shawara. Sai dai itace cewa rundunar nau'in c-<cluster_id>.rw.mdb.yandexcloud.net wanda aka yi taswira zuwa ga babban runduna mai aiki na yanzu tare da ID ɗin daidai. Wannan shi ne abin da za mu ba Grafana.

uwar garken yanar gizo

Yanzu ya rage ga uwar garken yanar gizo. Bari mu ɗaga injin kama-da-wane na yau da kullun tare da Linux kuma mu saita Grafana da hannu akan sa.

Aiwatar da ayyukan da aka rarraba a cikin Yandex.Cloud ta amfani da Grafana a matsayin misali

Aiwatar da ayyukan da aka rarraba a cikin Yandex.Cloud ta amfani da Grafana a matsayin misali

Bari mu haɗa ta ssh kuma shigar da fakitin da suka dace.

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 

Bayan haka, bari mu gudanar da Grafana a ƙarƙashin systemctl kuma mu shigar da plugin ɗin don aiki tare da ClickHouse (eh, ba a kawo shi a cikin ainihin kunshin ba).

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

Shi ke nan, bayan haka tare da umarni mai sauƙi

sudo service grafana-server start

za mu fara uwar garken gidan yanar gizo. Yanzu zaku iya shigar da adireshin IP na waje na injin kama-da-wane a cikin mai binciken, saka tashar jiragen ruwa 3000 kuma ku ga kyakkyawan Grafana UI.
Aiwatar da ayyukan da aka rarraba a cikin Yandex.Cloud ta amfani da Grafana a matsayin misali

Amma kada ku yi sauri, kafin kafa Grafana, dole ne ku tuna gaya masa hanyar zuwa MySQL don adana saitunan a can.

Dukkanin tsarin sabar yanar gizo na Grafana yana cikin fayil ɗin /etc/grafana/grafana.ini. Layin da ake buƙata yayi kama da haka:

;url =

Mun saita mai masaukin zuwa gungu na MySQL. Fayil ɗaya ya ƙunshi login da kalmar sirri don shiga Grafana a cikin hoton da ke sama, waɗanda ta tsohuwa duk daidai suke admin.

Kuna iya amfani da umarnin 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

Lokaci yayi don sake kunna sabar gidan yanar gizo!

sudo service grafana-server restart

Yanzu a cikin Grafana UI za mu ƙayyade ClickHouse azaman DataSource.

Na sami damar cimma tsarin aiki tare da saitunan masu zuwa:

Aiwatar da ayyukan da aka rarraba a cikin Yandex.Cloud ta amfani da Grafana a matsayin misali

Na ayyana azaman URL https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443

Duka! Muna da injin kama-da-wane guda ɗaya mai aiki tare da sabar gidan yanar gizo da aka haɗa da CH da MySQL. Kuna iya riga kun loda saitin bayanai zuwa ClickHouse kuma ku gina dashboards. Duk da haka, har yanzu ba mu cim ma burinmu ba kuma ba mu ba da cikakken kayan aikin ba.

Packer

Yandex.Cloud yana ba ku damar ƙirƙirar hoton faifai na injin kama-da-wane da ke akwai, kuma a kan tushensa - kowane adadin na'urori masu kama da juna. Wannan shi ne ainihin abin da za mu yi amfani da shi. Don haɗa hoton da kyau, ɗauki kayan aiki Packer daga HashiCorp. Yana ɗauka azaman shigar da fayil json tare da umarni don haɗa hoton.

Fayil ɗin mu na json zai ƙunshi tubalan guda biyu: magina da masu samarwa. Toshe na farko yana bayyana sigogin hoton da kansa a matsayin mahallin, kuma katanga na biyu yana bayyana umarnin cika shi da abubuwan da suka dace.

magina

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

A cikin wannan samfuri, kuna buƙatar saita mai gano sashin a cikin gajimare inda kuke son ƙirƙirar hoton, da kuma hanyar zuwa fayil ɗin tare da maɓallan daga asusun sabis ɗin da aka ƙirƙira a baya a wannan sashe. Kuna iya karanta ƙarin game da ƙirƙirar asusun sabis da maɓallai a cikin hanyar fayil a cikin sashin da ya dace takardun.

Wannan tsari ya ce za a gina hoton diski a kan dandamali ubuntu-1804-lts, an sanya shi a cikin sashin mai amfani da ya dace a cikin dangin hoton GRAFANA a karkashin suna grafana-{{timestamp}}.

Masu bayarwa

Yanzu ya zo mafi ban sha'awa na daidaitawa. Zai bayyana jerin ayyukan da za a buƙaci a yi akan na'urar kama-da-wane kafin ta daskare yanayinta zuwa hoton diski.

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

Anan an raba duk ayyuka zuwa matakai 3. A mataki na farko, ana aiwatar da rubutun sassauƙa wanda ke ƙirƙirar jagorar taimako.

shirya-ctg.sh:

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

A mataki na gaba, muna sanya rubutun a cikin wannan kundin adireshi, wanda zai buƙaci kaddamar da shi nan da nan bayan fara na'ura mai mahimmanci. Wannan rubutun zai sanya masu canjin masu amfani waɗanda ke buƙatar rajista a cikin tsarin Grafana kuma a sake kunna sabar gidan yanar gizo.

saitin.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

Bayan haka akwai sauran abubuwa guda 3 da za a yi:
1) shigar da kunshin
2) Gudun Grafana a ƙarƙashin systemctl kuma shigar da plugin ClickHouse
3) sanya rubutun setup.sh a cikin layin ƙaddamarwa nan da nan bayan kunna na'ura mai mahimmanci.

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;

Yanzu abin da ya rage shine gudanar da Packer kuma sami hoton fitarwa da aka sanya a cikin ƙayyadadden sashe. Lokacin ƙirƙirar injin kama-da-wane, zaku iya zaɓar ta azaman faifan taya kuma bayan ƙaddamarwa zaku karɓi sabar gidan yanar gizo na Grafana da aka shirya.

Aiwatar da ayyukan da aka rarraba a cikin Yandex.Cloud ta amfani da Grafana a matsayin misali
Aiwatar da ayyukan da aka rarraba a cikin Yandex.Cloud ta amfani da Grafana a matsayin misali

Ƙungiyar misali da ma'auni

Da zarar muna da hoton diski wanda ke ba mu damar ƙirƙirar sabar yanar gizo iri ɗaya ta Grafana, za mu iya ƙirƙirar rukunin misali. A kan dandalin Yandex.Cloud, wannan kalma tana nufin haɗin gwiwar injiniyoyi masu kama da juna waɗanda ke da halaye iri ɗaya. Lokacin ƙirƙirar ƙungiyar misali, ana saita samfurin duk injuna a cikin wannan rukunin, sannan halayen ƙungiyar da kanta (misali, ƙarami da matsakaicin adadin injunan aiki). Idan lambar yanzu ba ta cika waɗannan sharuɗɗan ba, to ƙungiyar misali da kanta za ta cire injunan da ba dole ba ko kuma su ƙirƙira sababbi a cikin hotonta.

A matsayin wani ɓangare na aikinmu, za mu ƙirƙiri ƙungiyar misali na sabar gidan yanar gizo waɗanda za a ƙirƙira daga hoton diski da aka ƙirƙira a baya.

Aiwatar da ayyukan da aka rarraba a cikin Yandex.Cloud ta amfani da Grafana a matsayin misali

Aiwatar da ayyukan da aka rarraba a cikin Yandex.Cloud ta amfani da Grafana a matsayin misali

Abin da ke da ban mamaki shi ne saitin rukuni na ƙarshe. Ƙungiyar da aka yi niyya a cikin haɗin kai tare da Load Balancer zai taimake ka ka saita ma'auni na L3 a saman injuna na wannan rukunin ta danna maɓalli biyu.

Aiwatar da ayyukan da aka rarraba a cikin Yandex.Cloud ta amfani da Grafana a matsayin misali

Lokacin kafa ma'auni, na aiwatar da mahimman abubuwa guda biyu:

  1. Na sanya ma'auni ya karɓi zirga-zirgar mai amfani akan tashar jiragen ruwa 80 kuma in tura shi zuwa tashar jiragen ruwa 3000 na injunan kama-da-wane, daidai inda Grafana ke zaune.
  2. Na kafa duba yiwuwar injina ta hanyar sanya su zuwa tashar jiragen ruwa 3000.

Aiwatar da ayyukan da aka rarraba a cikin Yandex.Cloud ta amfani da Grafana a matsayin misali

Mini taƙaitaccen bayani

A ƙarshe, mun sami damar tura kayan aikin da ake so da hannu, kuma yanzu muna da sabis na Grafana mai juriya sosai. Kuna buƙatar sanin adireshin IP na ma'auni a matsayin wurin shigarwa zuwa aikace-aikacen da kuma mai masaukin rukunin ClickHouse don loda saitin bayanai a ciki.

Zai zama kamar nasara? I, nasara. Amma har yanzu wani abu ya dame ni. Gabaɗayan tsarin da ke sama yana buƙatar matakai da yawa na hannu kuma ba shi da ƙima ko kaɗan; Ina so in sarrafa shi ta atomatik idan zai yiwu. Wannan shi ne abin da sashe na gaba za a sadaukar dashi.

Haɗin kai na Terraform

Za mu sake amfani da kayan aiki daga HashiCorp da ake kira Terraform. Zai taimaka maka ƙaddamar da duk kayan aikin aikace-aikacen tare da danna maɓalli, dangane da yawancin masu canji da mai amfani ya wuce. Bari mu rubuta girke-girke wanda za a iya gudanar da shi sau da yawa a sassa daban-daban na masu amfani daban-daban.

Duk aiki tare da Terraform ya sauko don rubuta fayil ɗin daidaitawa (*.tf) da kuma samar da ababen more rayuwa a bisa shi.

Bambanci

A farkon farkon fayil ɗin, za mu haɗa da masu canji waɗanda ke ƙayyade inda da kuma yadda za a tura abubuwan more rayuwa na gaba.

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

Duk tsarin tura aikace-aikacen zai sauko don gina hoton diski da saita waɗannan masu canji. Bari in bayyana abin da suke da alhakin:

oauth_token - alama don samun damar gajimare. Ana iya samun ta mahada.
girgije_id - mai gano gajimare inda za mu tura aikace-aikacen
folder_id - mai gano yanki inda za mu tura aikace-aikacen
sabis_account_id - mai gano asusun sabis a cikin sashin da ya dace na gajimare.
image_id - mai gano hoton diski da aka samu ta amfani da Packer
sunan mai amfani и password - sunan mai amfani da kalmar sirri don samun damar duka bayanan bayanai da sabar yanar gizo na Grafana
db suna - Sunan bayanai a cikin gungu na CH da MySQL
hanyar_key_jama'a - hanyar zuwa fayil ɗin tare da maɓallin ssh na jama'a, wanda zaku iya amfani dashi don haɗawa ƙarƙashin sunan ubuntu zuwa injunan kama-da-wane tare da sabar yanar gizo

Saitin mai bayarwa

Yanzu kuna buƙatar saita mai ba da sabis na Terraform - a cikin yanayinmu, Yandex:

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

Za ku lura cewa a nan muna amfani da masu canji da aka ayyana a sama.

Cibiyar sadarwa da tari

Yanzu za mu ƙirƙiri hanyar sadarwa wacce abubuwan abubuwan more rayuwarmu za su sadarwa, rukunoni uku (ɗaya a kowane yanki) da haɓaka gungun CH da 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
  }
}

Kamar yadda kuke gani, kowane gungu biyu an ƙirƙira shi da kuskure ta hanyar kasancewa a yankuna uku na samuwa.

Sabar yanar gizo

Da alama za mu iya ci gaba da ruhu ɗaya, amma na shiga cikin wahala. Kafin wannan, na fara tayar da MySQL cluster kuma bayan haka, sanin ID ɗin sa, na tattara hoton diski tare da tsarin da ake buƙata, inda na ayyana mai watsa shiri zuwa gungu. Amma yanzu ba mu san cluster ID ba kafin ƙaddamar da Terraform, gami da lokacin gina hoton. Don haka, dole ne in yi amfani da waɗannan abubuwan dabara.

Yin amfani da sabis na metadata na Amazon, za mu wuce wasu sigogi zuwa na'ura mai mahimmanci, wanda zai karɓa da sarrafawa. Muna buƙatar injin ɗin don zuwa metadata a bayan uwar garken MySQL da kalmar sirri, wanda mai amfani ya ƙayyade a cikin fayil ɗin Terraform, bayan farawa. Bari mu canza abubuwan da ke cikin fayil ɗin kaɗan setup.sh, wanda ke gudana lokacin da injin kama-da-wane ya kunna.

saitin.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

Ƙungiyar Intance da ma'auni

Bayan sake gina sabon hoton diski, a ƙarshe zamu iya ƙara fayil ɗin mu don Terraform.

Bari mu nuna cewa muna son yin amfani da hoton faifai na yanzu:

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

Yanzu bari mu ƙirƙiri ƙungiyar misali:

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

Yana da kyau a kula da yadda muka shige shi cikin metadata cluster_uri, username и password. Waɗannan na'ura mai kama da gaske za ta fito a farawa kuma ta sanya a cikin tsarin Grafana.

Ya kai ga mai daidaitawa.

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

Sugar kadan

Ya rage kadan. Bayan an tura kayan aikin, dole ne ku je Grafana UI kuma ku ƙara gungun CH da hannu (ID ɗin wanda har yanzu yana buƙatar samunsa) azaman Tushen Bayanai. Amma Terraform ya san gungun ID. Mu damka masa amanar kawo lamarin.

Bari mu ƙara sabon mai bayarwa - Grafana, kuma mu ba ta adireshin IP na mai daidaitawa a matsayin mai masaukin baki. Duk canje-canjen da Terraform ke yi akan injin inda ma'aunin sa ya ƙaddara zai girma a cikin MySQL, don haka akan duk sauran injina.

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

Mu tsefe gashin kanmu

Bari mu nuna adreshin IP mai daidaitawa da mai masaukin gunkin 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"
}

Kuna iya gudu

Duka! Fayil ɗin daidaitawar mu yana shirye kuma za mu iya, ta hanyar saita masu canji, gaya wa Terraform ya ɗaga duk abin da muka bayyana a sama. Duk aikin ya ɗauki ni kusan mintuna 15.
A ƙarshe kuna iya ganin kyakkyawan saƙo:

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

Kuma a cikin gajimare, za a iya ganin abubuwan abubuwan da aka tashe:

Aiwatar da ayyukan da aka rarraba a cikin Yandex.Cloud ta amfani da Grafana a matsayin misali

Bari mu ƙayyade sakamakon

Yanzu, ta amfani da Grafana a matsayin misali, kowane ɗayanku zai iya tura aikace-aikace tare da shimfidar gine-ginen girgije akan dandalin Yandex.Cloud. Kayan aiki masu taimako daga HashiCorp kamar Packer da Terraform na iya taimaka muku da wannan. Ina fata wani ya sami wannan labarin yana da amfani :)

PS A ƙasa zan haɗa hanyar haɗi zuwa ma'ajin inda za ku iya samun shirye-shiryen girke-girke na Packer da Terraform, guntuwar da na bayar a cikin wannan labarin.

wurin ajiya

source: www.habr.com

Add a comment