Fametrahana tolotra zaraina ao amin'ny Yandex.Cloud mampiasa Grafana ho ohatra

Salama daholo! Ao anatin'ny asa fianarana ataoko, dia nikaroka ny fahaizan'ny sehatra rahona an-trano toy izany aho Yandex.Cloud. Ny sehatra dia manolotra tolotra isan-karazany amin'ny famahana olana azo ampiharina. Na izany aza, indraindray mila manangana ny rindranasa rahonao manokana ianao miaraka amin'ny fotodrafitrasa midadasika miorina amin'ireo serivisy ireo. Amin'ity lahatsoratra ity dia te hizara ny traikefako amin'ny fametrahana fampiharana toy izany aho.

Fametrahana tolotra zaraina ao amin'ny Yandex.Cloud mampiasa Grafana ho ohatra

Inona no tianao horaisina?

grafana - fitaovana mahery vaika amin'ny famahana olana amin'ny famakafakana na fanaraha-maso ny olan'ny rafitra rehetra. Amin'ny endriny fototra, milina virtoaly misy mpizara tranonkala Grafana izy io, ary koa angon-drakitra (ClickHouse, InfluxDB, sns.) miaraka amin'ny angona izay hiorenan'ny analytics.

Aorian'ny fandefasana milina virtoaly miaraka amin'ny mpizara tranonkala dia afaka mandeha any amin'ny mpampiantrano azy ianao ary mahazo UI tsara tarehy, mamaritra ny angon-drakitra ho loharanon'ny asa fanampiny, mamorona dashboard sy grafika.

Fametrahana tolotra zaraina ao amin'ny Yandex.Cloud mampiasa Grafana ho ohatra

Ny dikan-teny fototra dia manana lesoka lehibe iray - tsy mahazaka fahadisoana mihitsy. Izany hoe, ny fiasan'ny fampiharana manontolo dia miankina amin'ny fahafahan'ny milina virtoaly iray. Raha mandà na olona 10 no manokatra ny UI miaraka amin'ny fotoana iray, dia hisy olana.

Afaka voavaha tsotra izao izy ireo: mila ... mametraka milina virtoaly maro mitovy amin'ny mpizara tranonkala ianao ary mametraka azy ireo eo ambanin'ny mpandrindra L3. Tsy mazava loatra anefa ny zava-drehetra eto. Grafana dia mitahiry ny firafitry ny mpampiasa (lalana mankany amin'ny angon-drakitra, dashboard, grafika, sns.) mivantana ao amin'ny kapila misy ny milina virtoaly. Noho izany, raha manova ny toe-javatra sasany ao amin'ny UI isika, ireo fiovana ireo dia tsy ho hita afa-tsy amin'ny milina virtoaly izay nandefasan'ny mpandrindra antsika. Hiteraka fika tsy mifanaraka amin'ny fampiharanay izany, ka miteraka olana amin'ny fandefasana sy fampiasana.

Eto dia hisy tahiry hafa ho tonga hamonjy, ohatra, MySQL na ny mitovy aminy. Nolazainay tamin'i Grafana fa tokony hitahiry ny firafitry ny mpampiasa ao amin'ity angona “mitsitsy” ity izy. Aorian'izay dia ampy ny mamaritra ny lalana mankany amin'ity tahiry ity indray mandeha amin'ny milina tsirairay, ary manitsy ny firafitry ny mpampiasa hafa rehetra amin'ny milina virtoaly; hiitatra amin'ny hafa izy ireo.

Ity ny kisary momba ny fotodrafitrasa fampiharana farany:

Fametrahana tolotra zaraina ao amin'ny Yandex.Cloud mampiasa Grafana ho ohatra

Andeha isika hianatra hanandratra amin’ny tanana

MySQL sy ClickHouse

Alohan'ny handefasana fampiharana toy izany amin'ny fipihana bokotra iray dia ilaina ny mianatra ny fomba fitantanana ny singa tsirairay ao aminy ary mampifandray azy ireo amin'ny tsirairay.

Eto Yandex.Cloud dia hanampy antsika, izay manome L3 balancers, ClickHouse ary MySQL ho tolotra fitantanana. Ny mpampiasa ihany no mila mamaritra ny mari-pamantarana ary miandry mandra-pahatongan'ny sehatra hitondra ny zava-drehetra amin'ny filaminana miasa.

Nisoratra anarana aho, namorona rahona sy kaonty fandoavam-bola. Taorian'izay dia nandeha tany amin'ny rahona aho ary nanangana cluster MySQL sy ClickHouse miaraka amin'ny filaharana kely indrindra. Niandry aho mandra-pahavitan'izy ireo.

Fametrahana tolotra zaraina ao amin'ny Yandex.Cloud mampiasa Grafana ho ohatraFametrahana tolotra zaraina ao amin'ny Yandex.Cloud mampiasa Grafana ho ohatra

Mila tadidinao ihany koa ny mamorona angon-drakitra isaky ny cluster ary manamboatra ny fidirana amin'izany amin'ny alàlan'ny fidirana sy tenimiafina. Tsy hiditra amin'ny antsipiriany eto aho - mazava be ny zava-drehetra ao amin'ny interface.

Ny antsipiriany tsy mazava dia ny hoe manana mpampiantrano maro ireo angon-drakitra ireo, izay miantoka ny fandeferana amin'ny fahadisoana. Na izany aza, mila mpampiantrano iray i Grafana ho an'ny angon-drakitra tsirairay iasany. Vakiteny lava tahirin-kevitra Nanapa-kevitra ny rahona aho. Hita fa ny mpampiantrano ny karazana c-<cluster_id>.rw.mdb.yandexcloud.net sarintany amin'ny mpampiantrano tompon'andraikitra mavitrika amin'izao fotoana izao miaraka amin'ny ID mifanaraka aminy. Ity no homentsika an'i Grafana.

Mpizara tranonkala

Anjaran'ny mpizara tranonkala izao. Andao hanangana milina virtoaly mahazatra miaraka amin'ny Linux ary amboary amin'ny tanana ny Grafana eo aminy.

Fametrahana tolotra zaraina ao amin'ny Yandex.Cloud mampiasa Grafana ho ohatra

Fametrahana tolotra zaraina ao amin'ny Yandex.Cloud mampiasa Grafana ho ohatra

Andao hifandray amin'ny ssh ary hametraka ny fonosana ilaina.

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 

Aorian'izay, andao hampandeha ny Grafana eo ambanin'ny systemctl ary hametraka ny plugin hiasa amin'ny ClickHouse (eny, tsy omena ao amin'ny fonosana fototra izany).

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

Izay ihany, rehefa avy eo dia misy baiko tsotra

sudo service grafana-server start

hatombotsika ny mpizara tranonkala. Azonao atao izao ny miditra ny adiresy IP ivelany an'ny milina virtoaly ao amin'ny navigateur, mamaritra ny seranan-tsambo 3000 ary jereo ny UI Grafana tsara tarehy.
Fametrahana tolotra zaraina ao amin'ny Yandex.Cloud mampiasa Grafana ho ohatra

Fa aza maika, alohan'ny hananganana Grafana, dia tsy maintsy tadidinao ny milaza azy ny lalana mankany MySQL mba hitahiry ny toe-javatra ao.

Ao amin'ny rakitra ny fandrindrana manontolo an'ny mpizara tranonkala Grafana /etc/grafana/grafana.ini. Toy izao ny tsipika ilaina:

;url =

Napetrakay amin'ny cluster MySQL ny mpampiantrano. Io rakitra io ihany no misy ny fidirana sy ny tenimiafina hidirana amin'ny Grafana amin'ny sary etsy ambony, izay samy mitovy avokoa admin.

Azonao atao ny mampiasa baiko 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

Fotoana hanombohana indray ny mpizara tranonkala!

sudo service grafana-server restart

Ankehitriny ao amin'ny UI Grafana dia hamaritra ny ClickHouse ho DataSource izahay.

Afaka nanao fanitsiana miasa miaraka amin'ireto toe-javatra manaraka ireto aho:

Fametrahana tolotra zaraina ao amin'ny Yandex.Cloud mampiasa Grafana ho ohatra

Nofaritako ho URL https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443

Rehetra! Manana milina virtoaly iray miasa miaraka amin'ny mpizara tranonkala mifandray amin'ny CH sy MySQL izahay. Afaka mampakatra ny angona ao amin'ny ClickHouse ianao ary manangana dashboard. Na izany aza, tsy mbola tratra ny tanjonay ary tsy mbola nametraka fotodrafitrasa feno.

packers

Yandex.Cloud dia ahafahanao mamorona sary kapila amin'ny milina virtoaly efa misy, ary amin'ny fotony - misy milina mitovy amin'ny tsirairay. Izany indrindra no hampiasaintsika. Mba hanambatra mora foana ny sary, raiso ny fitaovana packers avy amin'ny HashiCorp. Mitaky rakitra json miaraka amin'ny torolàlana amin'ny fanangonana ny sary.

Ny rakitra json anay dia ahitana sakana roa: mpanorina sy mpamatsy. Ny sakana voalohany dia mamaritra ny mari-pamantarana amin'ny sary ho toy ny singa iray, ary ny sakana faharoa dia mamaritra ny torolàlana hamenoana azy amin'ny atiny ilaina.

mpanao trano

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

Amin'ity môdely ity dia mila mametraka ny famantarana ny fizarana ao amin'ny rahona izay tianao hamoronana sary ianao, ary koa ny lalana mankany amin'ny rakitra miaraka amin'ny fanalahidy avy amin'ny kaonty serivisy noforonina teo aloha tao amin'ity fizarana ity. Azonao atao ny mamaky bebe kokoa momba ny famoronana kaonty serivisy sy fanalahidy amin'ny endrika rakitra ao amin'ny fizarana mifanaraka amin'izany tahirin-kevitra.

Ity fanamafisana ity dia milaza fa ny sary kapila dia hatsangana mifototra amin'ny sehatra ubuntu-1804-lts, napetraka ao amin'ny fizarana mpampiasa mety ao amin'ny fianakaviana sary GRAFANA ambanin'ny anarana grafana-{{timestamp}}.

Mpanome

Tonga izao ny ampahany mahaliana kokoa amin'ny fanamafisana. Izy io dia hamaritra ny filaharan'ny hetsika tokony hatao amin'ny milina virtoaly alohan'ny hanamaivanana ny toerany ho sary kapila.

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

Eto dia mizara ho dingana 3 ny hetsika rehetra. Amin'ny dingana voalohany, misy script tsotra dia tanterahina izay mamorona lahatahiry fanampiny.

prepare-ctg.sh:

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

Amin'ny dingana manaraka dia mametraka script ao amin'ity lahatahiry ity isika, izay mila atomboka avy hatrany rehefa manomboka ny milina virtoaly. Ity script ity dia hametraka ny fari-piainan'ny mpampiasa izay mila misoratra anarana ao amin'ny config Grafana ary hamerina ny mpizara tranonkala.

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

Aorian'izany dia misy zavatra 3 sisa tavela:
1) mametraka fonosana
2) mihazakazaka Grafana eo ambanin'ny systemctl ary apetraho ny plugin ClickHouse
3) apetraho eo amin'ny filaharana fanombohana avy hatrany ny script setup.sh rehefa avy namelona ny milina virtoaly.

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;

Ny hany sisa tavela dia ny fampandehanana Packer ary apetraka ao amin'ny fizarana voatondro ny sary mivoaka. Rehefa mamorona milina virtoaly dia azonao atao ny misafidy azy io ho kapila boot ary aorian'ny fandefasana dia hahazo mpizara tranonkala Grafana efa vonona ianao.

Fametrahana tolotra zaraina ao amin'ny Yandex.Cloud mampiasa Grafana ho ohatra
Fametrahana tolotra zaraina ao amin'ny Yandex.Cloud mampiasa Grafana ho ohatra

Vondrona instance sy balancer

Raha vantany vao manana sary kapila izay ahafahantsika mamorona mpizara tranonkala Grafana mitovy, dia afaka mamorona vondrona ohatra. Ao amin'ny sehatra Yandex.Cloud, ity teny ity dia manondro ny fikambanan'ny milina virtoaly izay manana toetra mitovy. Rehefa mamorona vondrona ohatra dia amboarina ny prototype an'ny milina rehetra ao amin'ity vondrona ity, ary avy eo ny toetran'ilay vondrona mihitsy (ohatra, ny isa kely indrindra sy ambony indrindra amin'ny milina mavitrika). Raha tsy mahafeno ireo fepetra ireo ny isa amin'izao fotoana izao, dia ny vondrona instance mihitsy no hanala milina tsy ilaina na hamorona vaovao amin'ny sariny manokana.

Amin'ny maha-asantsika dia hamorona vondrona mpizara tranonkala iray izay ho vokarina avy amin'ny sary kapila noforonina teo aloha.

Fametrahana tolotra zaraina ao amin'ny Yandex.Cloud mampiasa Grafana ho ohatra

Fametrahana tolotra zaraina ao amin'ny Yandex.Cloud mampiasa Grafana ho ohatra

Ny tena mahavariana dia ny fananganana vondrona instance farany. Ny vondrona kendrena amin'ny fampidirana amin'ny Load Balancer dia hanampy anao hanitsy ny mpandrindra L3 eo an-tampon'ny milina virtoaly amin'ity vondrona ity amin'ny fipihana bokotra roa.

Fametrahana tolotra zaraina ao amin'ny Yandex.Cloud mampiasa Grafana ho ohatra

Rehefa nametraka ny balancer aho dia nampihatra teboka roa lehibe:

  1. Nataoko hanaiky ny fifamoivoizan'ny mpampiasa amin'ny seranan-tsambo 80 ny balancer ary alefako any amin'ny seranan-tsambo 3000 amin'ireo milina virtoaly, izay tena misy an'i Grafana.
  2. Nametraka fanamarinana ny fahafahan'ny milina aho amin'ny alàlan'ny ping azy ireo amin'ny port 3000.

Fametrahana tolotra zaraina ao amin'ny Yandex.Cloud mampiasa Grafana ho ohatra

Mini famintinana

Farany, afaka nametraka an-tanana ny fotodrafitrasa fampiharana tiana izahay, ary manana serivisy Grafana tena mateza. Mila mahafantatra fotsiny ny adiresy IP an'ny balancer ianao ho toy ny fidirana amin'ny fampiharana sy ny mpampiantrano ny kluster ClickHouse mba hampidirana ny daty ao anatiny.

Toa fandresena ve izany? Eny, fandresena. Saingy mbola misy zavatra mampisafotofoto ahy. Ny dingana manontolo etsy ambony dia mitaky dingana maro ary tsy azo esorina mihitsy; Te-hanao ho azy aho raha azo atao. Izany no hatokana ho an'ny fizarana manaraka.

Fampidirana Terraform

Hampiasa fitaovana avy amin'ny HashiCorp antsoina indray izahay Terraform. Hanampy anao hametraka ny fotodrafitrasa fampiharana manontolo amin'ny fipihana bokotra iray izany, mifototra amin'ny fari-pahalalana maro nolalovan'ny mpampiasa. Andao hanoratra fomba fanamboarana izay azo atao im-betsaka amin'ny fizarana samihafa amin'ny mpampiasa samihafa.

Ny asa rehetra miaraka amin'ny Terraform dia tonga amin'ny fanoratana rakitra fikirakirana (*.tf) ary ny fananganana fotodrafitrasa mifototra amin’izany.

hiovaova

Eo am-piandohan'ny rakitra dia hampiditra fari-pitsipika izay mamaritra ny toerana sy ny fomba hametrahana ny fotodrafitrasa ho avy.

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

Ny fizotry ny fametrahana fampiharana manontolo dia hidina amin'ny fananganana sary kapila sy fametrahana ireo fari-piainana ireo. Mamelà ahy hanazava ny andraikiny:

oauth_token - famantarana ny fidirana amin'ny rahona. Afaka mahazo amin'ny rohy.
cloud_id - famantarana rahona izay hametrahantsika ny fampiharana
folder_id - famantarana fizarana izay hametrahantsika ny fampiharana
service_account_id - famantarana kaonty serivisy ao amin'ny fizarana mifanaraka amin'ny rahona.
image_id - famantarana ny sary kapila azo tamin'ny fampiasana Packer
Anaran'ny mpampiasa и tenimiafina — solonanarana sy tenimiafina mba hidirana amin'ny angon-drakitra sy ny mpizara tranonkala Grafana
dbname - anaran'ny angon-drakitra ao anaty cluster CH sy MySQL
public_key_path - lalana mankany amin'ny rakitra miaraka amin'ny fanalahidin'ny ssh public anao, izay azonao ampiasaina hampifandraisana amin'ny anarana ubuntu amin'ny milina virtoaly misy mpizara tranonkala

Fametrahana mpamatsy

Ankehitriny dia mila manamboatra ny mpamatsy Terraform ianao - amin'ity tranga ity, Yandex:

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

Ho hitanao fa eto isika dia mampiasa ny fari-piainana voafaritra etsy ambony.

Tambajotra sy cluster

Ankehitriny dia hamorona tambajotra iray izay hifandraisan'ireo singa ao amin'ny fotodrafitrasantsika, zana-tambajotra telo (iray isaky ny faritra) ary hanangana cluster CH sy 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
  }
}

Araka ny hitanao, ny tsirairay amin'ireo kluster roa dia noforonina tsy dia misy dikany loatra amin'ny fametrahana azy amin'ny faritra telo misy.

Mpizara tranonkala

Toa afaka nitohy tamin’ny toe-tsaina iray ihany izahay, nefa sahirana aho. Talohan'izay, nanangana cluster MySQL aloha aho ary taorian'izay, raha nahalala ny ID azy, dia nanangona sary disk miaraka amin'ny fanamafisana ilaina aho, izay nanondro ny mpampiantrano ny cluster. Saingy ankehitriny dia tsy fantatsika ny ID cluster alohan'ny hanombohan'ny Terraform, ao anatin'izany ny fotoana hananganana ny sary. Noho izany dia tsy maintsy nampiasa ireto manaraka ireto aho fitaka.

Amin'ny fampiasana ny serivisy metadata Amazon dia handefasana masontsivana sasany amin'ny milina virtoaly, izay hanaiky sy hokarakarainy. Mila ny milina handehanana amin'ny metadata ao ambadiky ny MySQL cluster host sy ny solonanarana-password, izay nofaritan'ny mpampiasa ao amin'ny rakitra Terraform, rehefa nanomboka. Andao hanova kely ny votoatin'ny rakitra setup.sh, izay mandeha rehefa mandeha ny milina virtoaly.

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

Groupe intance sy balancer

Rehefa avy nanamboatra sary kapila vaovao izahay dia afaka manampy ny rakitra ho an'ny Terraform amin'ny farany.

Andeha hasehontsika fa te hampiasa sary kapila efa misy isika:

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

Andeha isika hamorona vondrona ohatra:

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

Ilaina ny mandinika ny fomba nampitainay azy tao amin'ny metadata cluster_uri, username и password. Ireo no havoakan'ny milina virtoaly amin'ny fanombohana ary apetraka ao amin'ny config Grafana.

Anjaran’ny mpifandanja izany.

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

Siramamy kely

Kely sisa tavela. Aorian'ny fametrahana ny fotodrafitrasa dia tsy maintsy mandeha any amin'ny Grafana UI ianao ary ampio amin'ny tanana ny cluster CH (ny ID izay mbola tokony horaisina) ho Loharano angona. Saingy fantatry ny Terraform ny ID cluster. Ndeha ankinina aminy ny fanatanterahana ny raharaha.

Andeha isika hanampy mpanome vaovao - Grafana, ary omeo azy ny adiresy IP an'ny mpandrindra ho mpampiantrano. Ny fanovana rehetra ataon'i Terraform amin'ny milina izay nofaritan'ny mpandrindra azy dia hitombo ao amin'ny MySQL, ary noho izany amin'ny milina hafa rehetra.

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

Andao hibango volo

Andao hasehontsika ny adiresy IP mpandrindra sy ny mpampiantrano ny kluster 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"
}

Afaka mihazakazaka

Rehetra! Efa vonona ny fisie fandrindrana anay ary afaka, amin'ny alàlan'ny fametrahana ireo variables izahay, dia miteny amin'ny Terraform mba hampiakatra izay rehetra voalazanay etsy ambony. Naharitra 15 minitra teo ho eo ny dingana manontolo.
Amin'ny farany dia afaka mahita hafatra mahafinaritra ianao:

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

Ary ao amin'ny rahona dia ho hita ny singa amin'ny fotodrafitrasa natsangana:

Fametrahana tolotra zaraina ao amin'ny Yandex.Cloud mampiasa Grafana ho ohatra

Andao hojerentsika ny vokatra

Ankehitriny, amin'ny fampiasana an'i Grafana ho ohatra, ny tsirairay aminareo dia afaka mametraka rindranasa misy rafitra rahona mivelatra eo amin'ny sehatra Yandex.Cloud. Ny fitaovana mahasoa avy amin'ny HashiCorp toa an'i Packer sy Terraform dia afaka manampy anao amin'izany. Manantena aho fa misy olona mahita ity lahatsoratra ity ho mahasoa :)

PS Eto ambany aho dia hametraka rohy mankany amin'ny tahiry izay ahitanao ny fomba fanamboarana efa vita ho an'ny Packer sy Terraform, ny sombiny nomeko ato amin'ity lahatsoratra ity.

repository

Source: www.habr.com

Add a comment