උදාහරණයක් ලෙස Grafana භාවිතා කරමින් Yandex.Cloud හි බෙදා හරින ලද සේවාවන් යෙදවීම

ආයුබෝවන් සියල්ලටම! මගේ පාඨමාලා කාර්යයේ කොටසක් ලෙස, මම එවැනි ගෘහස්ථ වලාකුළු වේදිකාවක හැකියාවන් පිළිබඳව පර්යේෂණ කළෙමි Yandex.Cloud. ප්‍රායෝගික ගැටළු විසඳීම සඳහා වේදිකාව විවිධ සේවාවන් සපයයි. කෙසේ වෙතත්, සමහර විට ඔබට මෙම සේවාවන් මත පදනම්ව තරමක් පුළුල් යටිතල පහසුකම් සහිත ඔබේම වලාකුළු යෙදුමක් සැකසීමට අවශ්‍ය වේ. මෙම ලිපියෙන් මට එවැනි යෙදුමක් යෙදවීමේ මගේ අත්දැකීම් බෙදා ගැනීමට අවශ්‍යයි.

උදාහරණයක් ලෙස Grafana භාවිතා කරමින් Yandex.Cloud හි බෙදා හරින ලද සේවාවන් යෙදවීම

ඔබට ලැබීමට අවශ්‍ය කුමක්ද?

ග්‍රැෆනා - ඕනෑම පද්ධතියක විශ්ලේෂණාත්මක ගැටළු විසඳීමට හෝ අධීක්ෂණ ගැටළු සඳහා ප්‍රබල මෙවලමක්. එහි මූලික වින්‍යාසය තුළ, මෙය Grafana වෙබ් සේවාදායකයක් සහිත අතථ්‍ය යන්ත්‍රයක් මෙන්ම විශ්ලේෂණ පදනම් වන දත්ත කට්ටලයක් සහිත දත්ත සමුදායක් (ClickHouse, InfluxDB, ආදිය) වේ.

වෙබ් සේවාදායකයක් සමඟ අතථ්‍ය යන්ත්‍රයක් දියත් කිරීමෙන් පසු, ඔබට එහි සත්කාරකයට ගොස් ලස්සන UI එකක් ලබා ගත හැකිය, වැඩිදුර වැඩ සඳහා මූලාශ්‍ර ලෙස දත්ත සමුදායන් සඳහන් කරන්න, උපකරණ පුවරු සහ ප්‍රස්ථාර සාදන්න.

උදාහරණයක් ලෙස Grafana භාවිතා කරමින් Yandex.Cloud හි බෙදා හරින ලද සේවාවන් යෙදවීම

මූලික අනුවාදයට එක් සැලකිය යුතු අඩුපාඩුවක් ඇත - එය කිසිසේත්ම වැරදි ඉවසන්නේ නැත. එනම්, යෙදුමේ සම්පූර්ණ ක්රියාකාරිත්වය එක් අථත්ය යන්ත්රයක ශක්යතාව මත රඳා පවතී. එය ප්‍රතික්ෂේප කළහොත් හෝ පුද්ගලයන් 10 දෙනෙකු එකවර UI විවෘත කළහොත් ගැටළු මතු වේ.

ඒවා සරලව විසඳාගත හැක: ඔබට අවශ්‍ය වන්නේ... වෙබ් සේවාදායකයක් සමඟ බොහෝ සමාන අථත්‍ය යන්ත්‍ර යෙදවීමට සහ ඒවා L3 balancer එකක් යටතේ තැබීමයි. නමුත් මෙහි සෑම දෙයක්ම එතරම් පැහැදිලි නැත. ග්‍රැෆනා පරිශීලක සැකසුම් (දත්ත සමුදායන්, උපකරණ පුවරු, ප්‍රස්ථාර ආදිය වෙත යන මාර්ග) සෘජුවම එහි අථත්‍ය යන්ත්‍රයේ තැටියේ ගබඩා කරයි. මේ අනුව, අපි UI හි සමහර සැකසුම් වෙනස් කළහොත්, මෙම වෙනස්කම් පිළිබිඹු වන්නේ සමතුලිතකරු අපට එවූ අතථ්‍ය යන්ත්‍රයේ පමණි. මෙය අපගේ යෙදුම සඳහා නොගැලපෙන සැකසුම් වලට තුඩු දෙනු ඇත, දියත් කිරීම සහ භාවිතය සමඟ ගැටළු ඇති කරයි.

මෙහිදී තවත් දත්ත සමුදායක් ගලවා ගැනීමට පැමිණෙනු ඇත, උදාහරණයක් ලෙස, MySQL හෝ ඊට සමාන. අපි ග්‍රැෆානාට පවසන්නේ ඇය මෙම "අමතර" දත්ත ගබඩාවේ පරිශීලක සැකසුම් ගබඩා කළ යුතු බවයි. පසුව, එක් එක් යන්ත්‍රය මත එක් වරක් මෙම දත්ත සමුදාය වෙත යන මාර්ගය සඳහන් කිරීමට ප්‍රමාණවත් වනු ඇත, සහ ඕනෑම අතථ්‍ය යන්ත්‍රයක අනෙකුත් සියලුම පරිශීලක සැකසුම් සංස්කරණය කරන්න; ඒවා අනෙක් ඒවාට විහිදේ.

අවසාන යෙදුම් යටිතල ව්‍යුහයේ රූප සටහනක් මෙන්න:

උදාහරණයක් ලෙස Grafana භාවිතා කරමින් Yandex.Cloud හි බෙදා හරින ලද සේවාවන් යෙදවීම

අපි අපේ දෑතින් ඔසවන්න ඉගෙන ගනිමු

MySQL සහ ClickHouse

බොත්තමක් ක්ලික් කිරීමෙන් එවැනි යෙදුමක් යෙදවීමට පෙර, එහි එක් එක් සංරචක හැසිරවීමට සහ ඒවා එකිනෙකා සමඟ ඒකාබද්ධ කිරීමට ඉගෙන ගැනීමට අවශ්ය විය.

මෙහිදී Yandex.Cloud අපට උපකාර කරනු ඇත, එය L3 balancers, ClickHouse සහ MySQL කළමනාකරණය කරන ලද සේවාවන් ලෙස සපයයි. පරිශීලකයාට අවශ්‍ය වන්නේ පරාමිතීන් නියම කිරීමට පමණක් වන අතර වේදිකාව සෑම දෙයක්ම ක්‍රියාකාරී පිළිවෙලට ගෙන එන තෙක් රැඳී සිටින්න.

මම ලියාපදිංචි වී, වලාකුළක් සහ ගෙවීම් ගිණුමක් නිර්මාණය කළෙමි. ඊට පස්සේ, මම ක්ලවුඩ් එකට ගිහින් MySQL සහ ClickHouse පොකුරු අවම සැකසුම් සහිතව සකස් කළා. ඔවුන් ක්‍රියාකාරී වන තුරු මම බලා සිටියෙමි.

උදාහරණයක් ලෙස Grafana භාවිතා කරමින් Yandex.Cloud හි බෙදා හරින ලද සේවාවන් යෙදවීමඋදාහරණයක් ලෙස Grafana භාවිතා කරමින් Yandex.Cloud හි බෙදා හරින ලද සේවාවන් යෙදවීම

සෑම පොකුරකම දත්ත සමුදායක් නිර්මාණය කිරීමටත්, පිවිසුම් සහ මුරපදය භාවිතයෙන් එයට ප්‍රවේශය වින්‍යාස කිරීමටත් ඔබ මතක තබා ගත යුතුය. මම මෙහි විස්තර වෙත නොයමි - අතුරු මුහුණතේ සෑම දෙයක්ම ඉතා පැහැදිලිය.

නොපැහැදිලි විස්තරය වූයේ මෙම දත්ත සමුදායන් බොහෝ ධාරක ඇති අතර, ඒවායේ වැරදි ඉවසීම සහතික කිරීමයි. කෙසේ වෙතත්, Grafana හට එය ක්‍රියා කරන සෑම දත්ත සමුදායක් සඳහාම හරියටම එක් ධාරකයක් අවශ්‍ය වේ. දිගු කියවීම ලියකියවිලි වලාකුළු මාව තීරණයකට ගෙනාවා. එය විශේෂයේ සත්කාරක බව හැරෙනවා c-<cluster_id>.rw.mdb.yandexcloud.net අනුරූප ID සමඟ පොකුරේ වත්මන් සක්‍රිය ප්‍රධාන ධාරකයට සිතියම්ගත කර ඇත. අපි ග්‍රැෆානාට දෙන්නේ මෙයයි.

වෙබ් සේවාදායකය

දැන් තියෙන්නේ web server එකට. අපි Linux සමඟ සාමාන්‍ය අතථ්‍ය යන්ත්‍රයක් ඔසවා එය මත Grafana අතින් වින්‍යාස කරමු.

උදාහරණයක් ලෙස Grafana භාවිතා කරමින් Yandex.Cloud හි බෙදා හරින ලද සේවාවන් යෙදවීම

උදාහරණයක් ලෙස Grafana භාවිතා කරමින් Yandex.Cloud හි බෙදා හරින ලද සේවාවන් යෙදවීම

ssh හරහා සම්බන්ධ වී අවශ්‍ය පැකේජ ස්ථාපනය කරමු.

sudo apt-get install -y apt-transport-https software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo add-apt-repository "deb https://packages.grafana.com/enterprise/deb stable main"
sudo apt-get update
sudo apt-get install -y grafana-enterprise 

ඊට පසු, අපි systemctl යටතේ Grafana ධාවනය කර ClickHouse සමඟ වැඩ කිරීම සඳහා ප්ලගිනය ස්ථාපනය කරමු (ඔව්, එය මූලික පැකේජයේ සපයා නැත).

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

එච්චරයි, ඊට පස්සේ සරල විධානයකින්

sudo service grafana-server start

අපි වෙබ් සේවාදායකය ආරම්භ කරමු. දැන් ඔබට බ්‍රවුසරයේ අථත්‍ය යන්ත්‍රයේ බාහිර IP ලිපිනය ඇතුළත් කළ හැකිය, වරාය 3000 සඳහන් කර ලස්සන Grafana UI බලන්න.
උදාහරණයක් ලෙස Grafana භාවිතා කරමින් Yandex.Cloud හි බෙදා හරින ලද සේවාවන් යෙදවීම

නමුත් ඉක්මන් නොවන්න, Grafana පිහිටුවීමට පෙර, එහි සැකසුම් ගබඩා කිරීම සඳහා MySQL වෙත මාර්ගය පැවසීමට ඔබ මතක තබා ගත යුතුය.

Grafana වෙබ් සේවාදායකයේ සම්පූර්ණ වින්‍යාසය ගොනුවේ ඇත /etc/grafana/grafana.ini. අවශ්ය රේඛාව මේ වගේ ය:

;url =

අපි ධාරකය MySQL පොකුරට සකසමු. ඉහත පින්තූරයේ Grafana වෙත පිවිසීම සහ මුරපදය එකම ගොනුවේ අඩංගු වේ, පෙරනිමියෙන් දෙකම සමාන වේ admin.

ඔබට sed විධාන භාවිතා කළ හැකිය:

sudo sed -i "s#.*;url =.*#url = mysql://${MYSQL_USERNAME}:${MYSQL_PASSWORD}@${MYSQL_CLUSTER_URI}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_user =.*#admin_user = ${GRAFANA_USERNAME}#" /etc/grafana/grafana.ini
sudo sed -i "s#.*;admin_password =.*#admin_password = ${GRAFANA_PASSWORD}#" /etc/grafana/grafana.ini

වෙබ් සේවාදායකය නැවත ආරම්භ කිරීමට කාලයයි!

sudo service grafana-server restart

දැන් Grafana UI හි අපි ClickHouse DataSource ලෙස සඳහන් කරමු.

පහත සැකසුම් සමඟ වැඩ කරන වින්‍යාසයක් ලබා ගැනීමට මට හැකි විය:

උදාහරණයක් ලෙස Grafana භාවිතා කරමින් Yandex.Cloud හි බෙදා හරින ලද සේවාවන් යෙදවීම

මම URL ලෙස සඳහන් කළෙමි https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443

සෑම! අප සතුව CH සහ MySQL වෙත සම්බන්ධ වූ වෙබ් සේවාදායකයක් සමඟ වැඩ කරන එක් අතථ්‍ය යන්ත්‍රයක් ඇත. ඔබට දැනටමත් දත්ත කට්ටලය ClickHouse වෙත උඩුගත කර උපකරණ පුවරු සෑදිය හැක. කෙසේ වෙතත්, අපි තවමත් අපගේ ඉලක්කය සපුරා ගෙන නොමැති අතර සම්පූර්ණ යටිතල පහසුකම් යොදවා නැත.

පැකර්

Yandex.Cloud ඔබට පවතින අථත්ය යන්ත්රයක තැටි රූපයක් නිර්මාණය කිරීමට ඉඩ සලසයි, සහ එහි පදනම මත - එකිනෙකට සමාන ඕනෑම යන්ත්ර සංඛ්යාවක්. මෙය හරියටම අපි භාවිතා කරනු ඇත. රූපය පහසුවෙන් එකලස් කිරීමට, මෙවලම ගන්න පැකර් HashiCorp වෙතින්. එය රූපය එකලස් කිරීම සඳහා උපදෙස් සහිත json ගොනුවක් ආදානය ලෙස ගනී.

අපගේ json ගොනුව කොටස් දෙකකින් සමන්විත වනු ඇත: සාදන්නන් සහ ප්‍රතිපාදනකරුවන්. පළමු කොටස රූපයේ පරාමිතීන් වස්තුවක් ලෙස විස්තර කරන අතර දෙවන කොටස අවශ්‍ය අන්තර්ගතයෙන් එය පිරවීම සඳහා උපදෙස් විස්තර කරයි.

ඉදි කරන්නන්

{
"builders": [
    {
      "type": "yandex",
      "endpoint": "{{user `endpoint`}}",
      "folder_id": "<folder_id>",
      "subnet_id": "{{user `subnet_id`}}",
      "zone": "{{user `zone`}}",
      "labels": {},
      "use_ipv4_nat": true,
      "use_internal_ip": false,
      "service_account_key_file": "<service_account_key_file>",
      "image_name": "grafana-{{timestamp}}",
      "image_family": "grafana",
      "image_labels": {},
      "image_description": "GRAFANA",
      "source_image_family": "ubuntu-1804-lts",
      "disk_size_gb": 3,
      "disk_type": "network-hdd",
      "ssh_username": "ubuntu"
    }
  ],
...
}

මෙම අච්චුව තුළ, ඔබට රූපය නිර්මාණය කිරීමට අවශ්‍ය වලාකුළේ කොටසේ හඳුනාගැනීම මෙන්ම මෙම කොටසේ කලින් නිර්මාණය කරන ලද සේවා ගිණුමෙන් යතුරු සමඟ ගොනුව වෙත යන මාර්ගයද සැකසිය යුතුය. ඔබට අදාළ කොටසේ ගොනුවක් ආකාරයෙන් සේවා ගිණුම් සහ යතුරු නිර්මාණය කිරීම පිළිබඳ වැඩිදුර කියවිය හැකිය ලියකියවිලි.

මෙම වින්‍යාසය පවසන්නේ තැටි රූපය වේදිකාව මත පදනම්ව ගොඩනගනු ඇති බවයි ubuntu-1804-lts, රූප පවුල තුළ සුදුසු පරිශීලක අංශයේ තබා ඇත GRAFANA නම යටතේ grafana-{{timestamp}}.

සැපයුම්කරුවන්

දැන් වින්‍යාසයේ වඩාත් සිත්ගන්නා කොටස පැමිණේ. එහි තත්වය තැටි රූපයකට කැටි කිරීමට පෙර අතථ්‍ය යන්ත්‍රය මත සිදු කළ යුතු ක්‍රියා අනුපිළිවෙල එය විස්තර කරයි.

{
...,
"provisioners": [
    {
            "type": "shell",
            "pause_before": "5s",
            "scripts": [
                "prepare-ctg.sh"
            ]
        },
    {
            "type": "file",
            "source": "setup.sh",
            "destination": "/opt/grafana/setup.sh"
        },
        {
            "type": "shell",
        "execute_command": "sudo {{ .Vars }} bash '{{ .Path }}'",
            "pause_before": "5s",
            "scripts": [
                "install-packages.sh",
                "grafana-setup.sh",
                "run-setup-at-reboot.sh"
        ]
        }
  ]
}

මෙහිදී සියලුම ක්රියාවන් අදියර 3 කට බෙදා ඇත. පළමු අදියරේදී, සහායක නාමාවලියක් නිර්මාණය කරන සරල පිටපතක් ක්රියාත්මක වේ.

සූදානම්-ctg.sh:

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

මීලඟ අදියරේදී, අපි මෙම නාමාවලියෙහි ස්ක්‍රිප්ට් එකක් තබමු, එය අථත්‍ය යන්ත්‍රය ආරම්භ කිරීමෙන් පසු වහාම දියත් කිරීමට අවශ්‍ය වේ. මෙම ස්ක්‍රිප්ට් මඟින් ග්‍රැෆනා වින්‍යාසය තුළ ලියාපදිංචි විය යුතු පරිශීලක විචල්‍යයන් දමා වෙබ් සේවාදායකය නැවත ආරම්භ කරනු ඇත.

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

මෙයින් පසු, කිරීමට දේවල් 3 ක් ඉතිරිව ඇත:
1) පැකේජ ස්ථාපනය කරන්න
2) systemctl යටතේ Grafana ධාවනය කර ClickHouse ප්ලගිනය ස්ථාපනය කරන්න
3) අතථ්‍ය යන්ත්‍රය ක්‍රියාත්මක කළ වහාම setup.sh ස්ක්‍රිප්ට් දියත් කිරීමේ පෝලිමේ තබන්න.

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;

දැන් ඉතිරිව ඇත්තේ පැකර් ධාවනය කර නිශ්චිත කොටසේ ප්‍රතිදාන රූපය ලබා ගැනීමයි. අතථ්‍ය යන්ත්‍රයක් නිර්මාණය කිරීමේදී, ඔබට එය ඇරඹුම් තැටියක් ලෙස තෝරා ගත හැකි අතර දියත් කිරීමෙන් පසු ඔබට සූදානම් කළ ග්‍රැෆනා වෙබ් සේවාදායකයක් ලැබෙනු ඇත.

උදාහරණයක් ලෙස Grafana භාවිතා කරමින් Yandex.Cloud හි බෙදා හරින ලද සේවාවන් යෙදවීම
උදාහරණයක් ලෙස Grafana භාවිතා කරමින් Yandex.Cloud හි බෙදා හරින ලද සේවාවන් යෙදවීම

නිදර්ශන කණ්ඩායම සහ සමතුලිතකය

අපට බොහෝ සමාන Grafana වෙබ් සේවාදායකයන් නිර්මාණය කිරීමට ඉඩ සලසන තැටි රූපයක් අපට ලැබුණු පසු, අපට නිදසුන් කණ්ඩායමක් නිර්මාණය කළ හැකිය. Yandex.Cloud වේදිකාවේ, මෙම පදය සමාන ලක්ෂණ ඇති අථත්ය යන්ත්ර එකමුතුවට යොමු කරයි. නිදසුන් කණ්ඩායමක් නිර්මාණය කිරීමේදී, මෙම කණ්ඩායමේ සියලුම යන්ත්‍රවල මූලාකෘතිය වින්‍යාස කර ඇති අතර, පසුව කණ්ඩායමේම ලක්ෂණ (උදාහරණයක් ලෙස, සක්‍රීය යන්ත්‍රවල අවම සහ උපරිම සංඛ්‍යාව). වත්මන් අංකය මෙම නිර්ණායක සපුරාලන්නේ නැතිනම්, නිදසුන් කණ්ඩායම විසින්ම අනවශ්‍ය යන්ත්‍ර ඉවත් කර හෝ තමන්ගේම රූපයේ නව ඒවා නිර්මාණය කරනු ඇත.

අපගේ කර්තව්‍යයේ කොටසක් ලෙස, අපි කලින් සාදන ලද තැටි රූපයෙන් ජනනය වන වෙබ් සේවාදායකයන් සමූහයක් සාදන්නෙමු.

උදාහරණයක් ලෙස Grafana භාවිතා කරමින් Yandex.Cloud හි බෙදා හරින ලද සේවාවන් යෙදවීම

උදාහරණයක් ලෙස Grafana භාවිතා කරමින් Yandex.Cloud හි බෙදා හරින ලද සේවාවන් යෙදවීම

ඇත්ත වශයෙන්ම කැපී පෙනෙන දෙය නම් අවසාන අවස්ථාව කණ්ඩායම් පිහිටුවීමයි. Load Balancer සමඟ ඒකාබද්ධ වූ ඉලක්ක කණ්ඩායම බොත්තම් කිහිපයක් ක්ලික් කිරීමෙන් මෙම සමූහයේ අතථ්‍ය යන්ත්‍ර මත L3 balancer එකක් වින්‍යාස කිරීමට ඔබට උපකාර කරයි.

උදාහරණයක් ලෙස Grafana භාවිතා කරමින් Yandex.Cloud හි බෙදා හරින ලද සේවාවන් යෙදවීම

සමතුලිතකය සැකසීමේදී, මම වැදගත් කරුණු දෙකක් ක්‍රියාත්මක කළෙමි:

  1. මම balancer එක පෝට් 80 හි පරිශීලක ගමනාගමනය පිළිගැනීමට සලස්වා එය හරියටම ග්‍රැෆානා ජීවත් වන අතථ්‍ය යන්ත්‍රවල 3000 වරාය වෙත හරවා යැවීය.
  2. මම යන්ත්‍ර 3000 වරායට ping කිරීමෙන් යන්ත්‍රවල ශක්‍යතාව පරීක්ෂා කිරීමට සැකසුවෙමි.

උදාහරණයක් ලෙස Grafana භාවිතා කරමින් Yandex.Cloud හි බෙදා හරින ලද සේවාවන් යෙදවීම

කුඩා සාරාංශය

අවසාන වශයෙන්, අපට අවශ්‍ය යෙදුම් යටිතල පහසුකම් හස්තීයව යෙදවීමට හැකි වූ අතර, දැන් අපට ඉහළ ඔරොත්තු දෙන ග්‍රැෆානා සේවාවක් ඇත. දත්ත කට්ටලය එයට පූරණය කිරීම සඳහා ඔබ යෙදුමට ඇතුළු වන ස්ථානය සහ ClickHouse පොකුරේ ධාරකය ලෙස balancer හි IP ලිපිනය පමණක් දැන සිටිය යුතුය.

එය ජයග්රහණයක් ලෙස පෙනේද? ඔව් ජය. නමුත් යමක් තවමත් මාව අවුල් කරයි. ඉහත සම්පූර්ණ ක්‍රියාවලියට අතින් පියවර රාශියක් අවශ්‍ය වන අතර එය කිසිසේත් පරිමාණය කළ නොහැක; හැකි නම් එය ස්වයංක්‍රීය කිරීමට මම කැමතියි. ඊළඟ කොටස වෙන් කරනු ලබන්නේ මෙයයි.

ටෙරාෆෝම් ඒකාබද්ධ කිරීම

අපි නැවතත් HashiCorp වෙතින් මෙවලමක් භාවිතා කරන්නෙමු භූමිෂ් .ය. පරිශීලකයා විසින් සම්මත කරන ලද විචල්‍යයන් කිහිපයක් මත පදනම්ව බොත්තමක් ක්ලික් කිරීමෙන් සම්පූර්ණ යෙදුම් යටිතල ව්‍යුහයම යෙදවීමට එය ඔබට උපකාර කරනු ඇත. විවිධ පරිශීලකයින්ගේ විවිධ කොටස්වල කිහිප වතාවක් ධාවනය කළ හැකි වට්ටෝරුවක් ලියන්න.

Terraform සමඟ ඇති සියලුම වැඩ වින්‍යාස ගොනුවක් ලිවීමට පැමිණේ (*.tf) සහ ඒ මත පදනම්ව යටිතල පහසුකම් නිර්මාණය කිරීම.

විචල්යයන්

ගොනුවේ ආරම්භයේදීම, අනාගත යටිතල පහසුකම් යෙදවිය යුත්තේ කොතැනද සහ කෙසේද යන්න තීරණය කරන විචල්‍යයන් අපි ඇතුළත් කරන්නෙමු.

variable "oauth_token" {
    type = string
    default = "<oauth-token>"
}
variable "cloud_id" {
    type = string
    default = "<cloud-id>"
}
variable "folder_id" {
    type = string
    default = "<folder_id>"
}
variable "service_account_id" {
    type = string
    default = "<service_account_id>"
}
variable "image_id" {
    type = string
    default = "<image_id>"
}
variable "username" {
    type = string
    default = "<username>"
}
variable "password" {
    type = string
    default = "<password>"
}
variable "dbname" {
    type = string
    default = "<dbname>"
}
variable "public_key_path" {
    type = string
    default = "<path to ssh public key>"
}

සම්පූර්ණ යෙදුම් යෙදවීමේ ක්‍රියාවලිය තැටි රූපයක් තැනීම සහ මෙම විචල්‍යයන් සැකසීම දක්වා පැමිණේ. ඔවුන් වගකිව යුතු දේ මට පැහැදිලි කිරීමට ඉඩ දෙන්න:

සහතික_ටෝකනය - වලාකුළට ප්‍රවේශ වීම සඳහා සංකේතයක්. මගින් ලබා ගත හැක ලින්ක්.
cloud_id - අපි යෙදුම යොදවන වලාකුළු හඳුනාගැනීම
folder_id - අපි යෙදුම යෙදවිය යුතු කොටස් හඳුනාගැනීම
සේවා_ගිණුම්_id — වලාකුළෙහි අනුරූප කොටසෙහි සේවා ගිණුම් හඳුනාගැනීම.
image_id — පැකර් භාවිතයෙන් ලබාගත් තැටි රූපයේ හඳුනාගැනීම
පරිශීලක නාමය и මුරපදය — දත්ත සමුදායන් සහ Grafana වෙබ් සේවාදායකය යන දෙකටම පිවිසීමට පරිශීලක නාමය සහ මුරපදය
dbname — CH සහ MySQL පොකුරු තුළ දත්ත සමුදා නාමය
පොදු_යතුරු_මාර්ගය — ඔබේ පොදු ssh යතුර සමඟ ගොනුව වෙත යන මාර්ගය, ඔබට නම යටතේ සම්බන්ධ වීමට භාවිතා කළ හැකිය ubuntu වෙබ් සර්වර් සහිත අතථ්‍ය යන්ත්‍ර වෙත

සැපයුම්කරු පිහිටුවීම

දැන් ඔබට Terraform සපයන්නා වින්‍යාසගත කළ යුතුය - අපගේ නඩුවේදී, Yandex:

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

මෙහිදී අපි ඉහත අර්ථ දක්වා ඇති විචල්‍යයන් භාවිතා කරන බව ඔබට පෙනෙනු ඇත.

ජාලය සහ පොකුරු

දැන් අපි අපගේ යටිතල ව්‍යුහයේ මූලද්‍රව්‍ය සන්නිවේදනය කරන ජාලයක් නිර්මාණය කරන්නෙමු, උපජාල තුනක් (එක් එක් කලාපයෙන් එකක්) සහ CH සහ MySQL පොකුරු මතු කරයි.


resource "yandex_vpc_network" "grafana_network" {}

resource "yandex_vpc_subnet" "subnet_a" {
  zone           = "ru-central1-a"
  network_id     = yandex_vpc_network.grafana_network.id
  v4_cidr_blocks = ["10.1.0.0/24"]
}

resource "yandex_vpc_subnet" "subnet_b" {
  zone           = "ru-central1-b"
  network_id     = yandex_vpc_network.grafana_network.id
  v4_cidr_blocks = ["10.2.0.0/24"]
}

resource "yandex_vpc_subnet" "subnet_c" {
  zone           = "ru-central1-c"
  network_id     = yandex_vpc_network.grafana_network.id
  v4_cidr_blocks = ["10.3.0.0/24"]
}

resource "yandex_mdb_clickhouse_cluster" "ch_cluster" {
  name        = "grafana-clickhouse"
  environment = "PRODUCTION"
  network_id  = yandex_vpc_network.grafana_network.id

  clickhouse {
    resources {
      resource_preset_id = "s2.micro"
      disk_type_id       = "network-ssd"
      disk_size          = 16
    }
  }

  zookeeper {
    resources {
      resource_preset_id = "s2.micro"
      disk_type_id       = "network-ssd"
      disk_size          = 10
    }
  }

  database {
    name = var.dbname
  }

  user {
    name     = var.username
    password = var.password
    permission {
      database_name = var.dbname
    }
  }

  host {
    type      = "CLICKHOUSE"
    zone      = "ru-central1-a"
    subnet_id = yandex_vpc_subnet.subnet_a.id
  }

  host {
    type      = "CLICKHOUSE"
    zone      = "ru-central1-b"
    subnet_id = yandex_vpc_subnet.subnet_b.id
  }

  host {
    type      = "CLICKHOUSE"
    zone      = "ru-central1-c"
    subnet_id = yandex_vpc_subnet.subnet_c.id
  }

  host {
    type      = "ZOOKEEPER"
    zone      = "ru-central1-a"
    subnet_id = yandex_vpc_subnet.subnet_a.id
  }

  host {
    type      = "ZOOKEEPER"
    zone      = "ru-central1-b"
    subnet_id = yandex_vpc_subnet.subnet_b.id
  }

  host {
    type      = "ZOOKEEPER"
    zone      = "ru-central1-c"
    subnet_id = yandex_vpc_subnet.subnet_c.id
  }
}

resource "yandex_mdb_mysql_cluster" "mysql_cluster" {
  name        = "grafana_mysql"
  environment = "PRODUCTION"
  network_id  = yandex_vpc_network.grafana_network.id
  version     = "8.0"

  resources {
    resource_preset_id = "s2.micro"
    disk_type_id       = "network-ssd"
    disk_size          = 16
  }

  database {
    name = var.dbname
  }

  user {
    name     = var.username
    password = var.password
    permission {
      database_name = var.dbname
      roles         = ["ALL"]
    }
  }

  host {
    zone      = "ru-central1-a"
    subnet_id = yandex_vpc_subnet.subnet_a.id
  }
  host {
    zone      = "ru-central1-b"
    subnet_id = yandex_vpc_subnet.subnet_b.id
  }
  host {
    zone      = "ru-central1-c"
    subnet_id = yandex_vpc_subnet.subnet_c.id
  }
}

ඔබට පෙනෙන පරිදි, එක් එක් පොකුරු දෙක ලබා ගත හැකි කලාප තුනක තැබීමෙන් තරමක් දෝෂ ඉවසා දරා ඇත.

වෙබ් සේවාදායකයන්

අපට එකම ආත්මයෙන් ඉදිරියට යා හැකි බව පෙනේ, නමුත් මම දුෂ්කරතාවයකට පත් විය. මෙයට පෙර, මම මුලින්ම MySQL පොකුරක් මතු කළ අතර ඉන් පසුව පමණක්, එහි හැඳුනුම්පත දැනගෙන, මම අවශ්‍ය වින්‍යාසය සහිත තැටි රූපයක් එකතු කළෙමි, එහිදී මම පොකුරට ධාරකය නියම කළෙමි. නමුත් දැන් අපි ටෙරාෆෝම් දියත් කිරීමට පෙර පොකුරු හැඳුනුම්පත නොදනිමු, රූපය ගොඩනඟන අවස්ථාව ඇතුළුව. එබැවින්, මට පහත සඳහන් දේ වෙත යොමු වීමට සිදු විය උපක්රමය.

Amazon හි පාර-දත්ත සේවාව භාවිතා කරමින්, අපි අථත්‍ය යන්ත්‍රයට පරාමිති කිහිපයක් ලබා දෙන්නෙමු, එය එය පිළිගෙන ක්‍රියා කරයි. ආරම්භ කිරීමෙන් පසු පරිශීලකයා Terraform ගොනුවේ සඳහන් කර ඇති MySQL පොකුරු ධාරකය සහ පරිශීලක නාමය-මුරපදය පිටුපස ඇති පාර-දත්ත වෙත යාමට අපට යන්ත්‍රය අවශ්‍ය වේ. අපි ගොනුවේ අන්තර්ගතය තරමක් වෙනස් කරමු setup.sh, අතථ්‍ය යන්ත්‍රය සක්‍රිය කළ විට ක්‍රියාත්මක වන.

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

ඉන්ටන්ස් කණ්ඩායම සහ සමතුලිතකය

නව තැටි රූපයක් නැවත ගොඩනඟා ඇති අතර, අවසානයේ අපගේ ගොනුව Terraform සඳහා එක් කළ හැක.

පවතින තැටි රූපයක් භාවිතා කිරීමට අපට අවශ්‍ය බව සඳහන් කරමු:

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

දැන් අපි උදාහරණ කණ්ඩායමක් නිර්මාණය කරමු:

resource "yandex_compute_instance_group" "grafana_group" {
  name               = "grafana-group"
  folder_id          = var.folder_id
  service_account_id = var.service_account_id
  instance_template {
    platform_id = "standard-v1"
    resources {
      memory = 1
      cores  = 1
    }
    boot_disk {
      mode = "READ_WRITE"
      initialize_params {
        image_id = data.yandex_compute_image.grafana_image.id
        size     = 4
      }
    }
    network_interface {
      network_id = yandex_vpc_network.grafana_network.id
      subnet_ids = [yandex_vpc_subnet.subnet_a.id, yandex_vpc_subnet.subnet_b.id, yandex_vpc_subnet.subnet_c.id]
      nat = "true"
    }
    metadata = {
      mysql_cluster_uri = "c-${yandex_mdb_mysql_cluster.mysql_cluster.id}.rw.mdb.yandexcloud.net:3306/${var.dbname}"
      username = var.username
      password = var.password
      ssh-keys = "ubuntu:${file("${var.public_key_path}")}"
    }
    network_settings {
      type = "STANDARD"
    }
  }

  scale_policy {
    fixed_scale {
      size = 6
    }
  }

  allocation_policy {
    zones = ["ru-central1-a", "ru-central1-b", "ru-central1-c"]
  }

  deploy_policy {
    max_unavailable = 2
    max_creating    = 2
    max_expansion   = 2
    max_deleting    = 2
  }

  load_balancer {
    target_group_name = "grafana-target-group"
  }
}

අපි එය පාර-දත්ත තුළට ගිය ආකාරය ගැන අවධානය යොමු කිරීම වටී cluster_uri, username и password. අථත්‍ය යන්ත්‍රය ආරම්භයේදීම පිටතට ගෙන ග්‍රැෆනා වින්‍යාසයට දමන්නේ මේවාය.

ඒක බැලන්සර්ට බාරයි.

resource "yandex_lb_network_load_balancer" "grafana_balancer" {
  name = "grafana-balancer"

  listener {
    name = "grafana-listener"
    port = 80
    target_port = 3000
    external_address_spec {
      ip_version = "ipv4"
    }
  }

  attached_target_group {
    target_group_id = yandex_compute_instance_group.grafana_group.load_balancer.0.target_group_id

    healthcheck {
      name = "healthcheck"
      tcp_options {
        port = 3000
      }
    }
  }
}

සීනි ටිකක්

ඉතිරිව ඇත්තේ ස්වල්පයක් පමණි. යටිතල පහසුකම් යෙදවීමෙන් පසුව, ඔබට Grafana UI වෙත ගොස් දත්ත මූලාශ්‍රයක් ලෙස CH පොකුර (තවමත් ලබා ගත යුතු හැඳුනුම්පත) අතින් එකතු කිරීමට සිදුවේ. නමුත් ටෙරාෆෝම් පොකුරු හැඳුනුම්පත දන්නවා. කාරණය සාර්ථක කර ගැනීම ඔහුට භාර දෙමු.

අපි නව සැපයුම්කරුවෙකු එකතු කරමු - Grafana, සහ ඇයට සමතුලිතයාගේ IP ලිපිනය සත්කාරකයකු ලෙස ලබා දෙන්න. Terraform එහි සමතුලිතකය තීරණය කරන යන්ත්‍රය මත සිදු කරන සියලුම වෙනස්කම් MySQL හි වර්ධනය වනු ඇත, එබැවින් අනෙකුත් සියලුම යන්ත්‍රවල.

provider "grafana" {
  url  = "http://${[for s in yandex_lb_network_load_balancer.grafana_balancer.listener: s.external_address_spec.0.address].0}"
  auth = "${var.username}:${var.password}"
}

resource "grafana_data_source" "ch_data_source" {
  type          = "vertamedia-clickhouse-datasource"
  name          = "grafana"
  url           = "https://c-${yandex_mdb_clickhouse_cluster.ch_cluster.id}.rw.mdb.yandexcloud.net:8443"
  basic_auth_enabled = "true"
  basic_auth_username = var.username
  basic_auth_password = var.password
  is_default = "true"
  access_mode = "proxy"
}

අපි කොණ්ඩය පීරමු

සමතුලිත IP ලිපිනය සහ ClickHouse පොකුරේ ධාරකය පෙන්වමු

output "grafana_balancer_ip_address" {
  value = [for s in yandex_lb_network_load_balancer.grafana_balancer.listener: s.external_address_spec.0.address].0
}

output "clickhouse_cluster_host" {
  value = "https://c-${yandex_mdb_clickhouse_cluster.ch_cluster.id}.rw.mdb.yandexcloud.net:8443"
}

දුවන්න පුළුවන්

සෑම! අපගේ වින්‍යාස ගොනුව සුදානම් වන අතර, විචල්‍යයන් සැකසීමෙන්, අප ඉහත විස්තර කළ සියල්ල ඉහළ නැංවීමට Terraform හට පැවසිය හැක. සම්පූර්ණ ක්‍රියාවලියට මට විනාඩි 15ක් පමණ ගත විය.
අවසානයේ ඔබට ලස්සන පණිවිඩයක් දැකිය හැකිය:

Apply complete! Resources: 9 added, 0 changed, 0 destroyed.
Outputs:

clickhouse_cluster_host = https://c-c9q14ipa2ngadqsbp2iq.rw.mdb.yandexcloud.net:8443
grafana_balancer_ip_address = 130.193.50.25

වලාකුළෙහි, ඉහළ යටිතල පහසුකම්වල අංග දෘශ්‍යමාන වනු ඇත:

උදාහරණයක් ලෙස Grafana භාවිතා කරමින් Yandex.Cloud හි බෙදා හරින ලද සේවාවන් යෙදවීම

ප්රතිඵල සාරාංශ කරමු

දැන්, උදාහරණයක් ලෙස Grafana භාවිතා කරමින්, ඔබ සෑම කෙනෙකුටම Yandex.Cloud වේදිකාවේ පුළුල් වලාකුළු ගෘහ නිර්මාණ ශිල්පයක් සමඟ යෙදුම් යෙදවිය හැකිය. HashiCorp වෙතින් Packer සහ Terraform වැනි ප්‍රයෝජනවත් මෙවලම් ඔබට මේ සඳහා උදවු කළ හැක. යමෙකුට මෙම ලිපිය ප්‍රයෝජනවත් වේ යැයි මම බලාපොරොත්තු වෙමි :)

PS පහතින් මම මෙම ලිපියේ මා විසින් සපයන ලද පැකර් සහ ටෙරාෆෝම් සඳහා සූදානම් කළ වට්ටෝරු සොයා ගත හැකි ගබඩාවට සබැඳියක් අමුණන්නෙමි.

ගබඩාව

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න