เชเซเชฎ เชเซ เชฌเชงเชพ! เชฎเชพเชฐเชพ เช
เชญเซเชฏเชพเชธเชเซเชฐเชฎเชจเชพ เชญเชพเช เชฐเซเชชเซ, เชฎเซเช เชเชตเชพ เชธเซเชฅเชพเชจเชฟเช เชเซเชฒเชพเชเชก เชชเซเชฒเซเชเชซเซเชฐเซเชฎเชจเซ เชเซเชทเชฎเชคเชพเช เชชเชฐ เชธเชเชถเซเชงเชจ เชเชฐเซเชฏเซเช
เชคเชฎเซ เชถเซเช เชชเซเชฐเชพเชชเซเชค เชเชฐเชตเชพ เชฎเชพเชเชเซ เชเซ?
เชตเซเชฌ เชธเชฐเซเชตเชฐ เชธเชพเชฅเซ เชตเชฐเซเชเซเชฏเซเช เชฒ เชฎเชถเซเชจ เชฒเซเชเช เชเชฐเซเชฏเชพ เชชเชเซ, เชคเชฎเซ เชคเซเชจเชพ เชนเซเชธเซเช เชชเชฐ เชเช เชถเชเซ เชเซ เช เชจเซ เชเช เชธเซเชเชฆเชฐ UI เชฎเซเชณเชตเซ เชถเชเซ เชเซ, เชเชเชณเชจเชพ เชเชพเชฎ เชฎเชพเชเซ เชกเซเชเชพเชฌเซเชธเซเชธเชจเซ เชธเซเชคเซเชฐเซเชค เชคเชฐเซเชเซ เชเชฒเซเชฒเซเช เชเชฐเซ เชถเชเซ เชเซ, เชกเซเชถเชฌเซเชฐเซเชก เช เชจเซ เชเซเชฐเชพเชซ เชฌเชจเชพเชตเซ เชถเชเซ เชเซ.
เชฎเซเชณเชญเซเชค เชธเชเชธเซเชเชฐเชฃเชฎเชพเช เชเช เชจเซเชเชงเชชเชพเชคเซเชฐ เชเชพเชฎเซ เชเซ - เชคเซ เชฆเซเชท-เชธเชนเชฟเชทเซเชฃเซ เชฌเชฟเชฒเชเซเชฒ เชจเชฅเซ. เชเชเชฒเซ เชเซ, เชเชชเซเชฒเชฟเชเซเชถเชจเชจเซ เชธเชเชชเซเชฐเซเชฃ เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพ เชเช เชตเชฐเซเชเซเชฏเซเช เชฒ เชฎเชถเซเชจเชจเซ เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพ เชชเชฐ เชเชงเชพเชฐเชฟเชค เชเซ. เชเซ เชคเซ เชเชจเชเชพเชฐ เชเชฐเซ เชเซ เช เชฅเชตเชพ เชเช เช เชธเชฎเชฏเซ 10 เชฒเซเชเซ UI เชเซเชฒเซ เชเซ, เชคเซ เชธเชฎเชธเซเชฏเชพเช เชเชญเซ เชฅเชถเซ.
เชคเซเชเชจเซ เชธเชฐเชณ เชฐเซเชคเซ เชเชเซเชฒเซ เชถเชเชพเชฏ เชเซ: เชคเชฎเชพเชฐเซ เชซเชเซเชค... เชตเซเชฌ เชธเชฐเซเชตเชฐ เชธเชพเชฅเซ เชเชฃเชพ เชธเชฎเชพเชจ เชตเชฐเซเชเซเชฏเซเช เชฒ เชฎเชถเซเชจเซ เชเซเช เชตเชตเชพเชจเซ เช เชจเซ เชคเซเชฎเชจเซ L3 เชฌเซเชฒเซเชจเซเชธเชฐ เชนเซเช เชณ เชฎเซเชเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เชชเชฐเชเชคเซ เช เชนเซเช เชฌเชงเซเช เชเชเชฒเซเช เชธเซเชชเชทเซเช เชจเชฅเซ. เชเซเชฐเชพเชซเชจเชพ เชคเซเชจเชพ เชตเชฐเซเชเซเชฏเซเช เชฒ เชฎเชถเซเชจเชจเซ เชกเชฟเชธเซเช เชชเชฐ เชธเซเชงเชพ เช เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชธเซเชเชฟเชเชเซเชธ (เชกเซเชเชพเชฌเซเชธเซเชธ, เชกเซเชถเชฌเซเชฐเซเชกเซเชธ, เชเซเชฐเชพเชซ, เชตเชเซเชฐเซเชจเชพ เชฎเชพเชฐเซเชเซ) เชธเซเชเซเชฐ เชเชฐเซ เชเซ. เชเชฎ, เชเซ เชเชชเชฃเซ UI เชฎเชพเช เช เชฎเซเช เชธเซเชเชฟเชเชเซเชธ เชฌเชฆเชฒเซเช, เชคเซ เช เชซเซเชฐเชซเชพเชฐเซ เชซเชเซเชค เชตเชฐเซเชเซเชฏเซเช เชฒ เชฎเชถเซเชจ เชชเชฐ เช เชชเซเชฐเชคเชฟเชฌเชฟเชเชฌเชฟเชค เชฅเชถเซ เชเซเชฏเชพเช เชฌเซเชฒเซเชจเซเชธเชฐเซ เช เชฎเชจเซ เชฎเซเชเชฒเซเชฏเชพ เชเซ. เช เช เชฎเชพเชฐเซ เชเชชเซเชฒเชฟเชเซเชถเชจ เชฎเชพเชเซ เช เชธเชเชเชค เชธเซเชเชฟเชเชเซเชธ เชคเชฐเชซ เชฆเซเชฐเซ เชเชถเซ, เชเซเชจเชพ เชเชพเชฐเชฃเซ เชฒเซเชจเซเช เช เชจเซ เชเชชเชฏเซเชเชฎเชพเช เชธเชฎเชธเซเชฏเชพ เชเชญเซ เชฅเชถเซ.
เช เชนเซเช เช เชจเซเชฏ เชกเซเชเชพเชฌเซเช เชฌเชเชพเชตเชฎเชพเช เชเชตเชถเซ, เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, MySQL เช เชฅเชตเชพ เชคเซเชจเชพ เชธเชฎเชเชเซเชท. เช เชฎเซ เชเซเชฐเชพเชซเชจเชพเชจเซ เชเชนเซเช เชเซเช เชเซ เชคเซเชฃเซเช เช "เชซเชพเชเชฒ" เชกเซเชเชพเชฌเซเชเชฎเชพเช เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชธเซเชเชฟเชเชเซเชธ เชธเชเชเซเชฐเชนเชฟเชค เชเชฐเชตเซ เชเซเชเช. เชชเชเซเชฅเซ, เชฆเชฐเซเช เชฎเชถเซเชจ เชชเชฐ เชเชเชตเชพเชฐ เช เชกเซเชเชพเชฌเซเชเชจเซ เชชเชพเชฅ เชธเซเชชเชทเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เชคเซ เชชเซเชฐเชคเซเช เชนเชถเซ, เช เชจเซ เชเซเชเชชเชฃ เชตเชฐเซเชเซเชฏเซเช เชฒ เชฎเชถเซเชจ เชชเชฐ เช เชจเซเชฏ เชคเชฎเชพเชฎ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชธเซเชเชฟเชเชเซเชธเชจเซ เชธเชเชชเชพเชฆเชฟเชค เชเชฐเซ; เชคเซ เช เชจเซเชฏ เชฒเซเชเซ เชธเซเชงเซ เชตเชฟเชธเซเชคเชฐเชถเซ.
เช เชนเซเช เช เชเชคเชฟเชฎ เชเชชเซเชฒเชฟเชเซเชถเชจ เชเชจเซเชซเซเชฐเชพเชธเซเชเซเชฐเชเซเชเชฐเชจเซ เชเชเซเชคเชฟ เชเซ:
เชเชพเชฒเซ เชนเชพเชฅ เชตเชกเซ เชเชชเชพเชกเชคเชพ เชถเซเชเซเช
MySQL เช เชจเซ เชเซเชฒเชฟเชเชนเชพเชเชธ
เชฌเชเชจเชจเชพ เชเซเชฒเชฟเช เชธเชพเชฅเซ เชเชตเซ เชเชชเซเชฒเชฟเชเซเชถเชจเชจเซ เชเชฎเชพเชตเชคเชพ เชชเชนเซเชฒเชพ, เชคเซเชจเชพ เชฆเชฐเซเช เชเชเชเซเชจเซ เชเซเชตเซ เชฐเซเชคเซ เชนเซเชจเซเชกเชฒ เชเชฐเชตเซเช เช เชจเซ เชคเซเชจเซ เชเชเชฌเซเชเชพ เชธเชพเชฅเซ เชเซเชตเซ เชฐเซเชคเซ เชธเชเชเชฒเชฟเชค เชเชฐเชตเซเช เชคเซ เชถเซเชเชตเซเช เชเชฐเซเชฐเซ เชนเชคเซเช.
เช เชนเซเช Yandex.Cloud เช เชฎเชจเซ เชฎเชฆเชฆ เชเชฐเชถเซ, เชเซ L3 เชฌเซเชฒเซเชจเซเชธเชฐเซเชธ, ClickHouse เช เชจเซ MySQL เชจเซ เชธเชเชเชพเชฒเชฟเชค เชธเซเชตเชพเช เชคเชฐเซเชเซ เชชเซเชฐเชฆเชพเชจ เชเชฐเซ เชเซ. เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพเชจเซ เชซเชเซเชค เชชเชฐเชฟเชฎเชพเชฃเซเชจเซ เชเชฒเซเชฒเซเช เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ เช เชจเซ เชชเซเชฒเซเชเชซเซเชฐเซเชฎ เชฌเชงเซเช เชเชพเชฐเซเชฏเชเชพเชฐเซ เชเซเชฐเชฎเชฎเชพเช เชฒเชพเชตเซ เชคเซเชฏเชพเช เชธเซเชงเซ เชฐเชพเชน เชเซเช.
เชฎเซเช เชจเซเชเชงเชฃเซ เชเชฐเซ, เชเซเชฒเชพเชเชก เช เชจเซ เชชเซเชฎเซเชจเซเช เชเชเชพเชเชจเซเช เชฌเชจเชพเชตเซเชฏเซเช. เชคเซ เชชเชเซ, เชนเซเช เชเซเชฒเชพเชเชก เชชเชฐ เชเชฏเซ เช เชจเซ เชจเซเชฏเซเชจเชคเชฎ เชธเซเชเชฟเชเชเซเชธ เชธเชพเชฅเซ MySQL เช เชจเซ ClickHouse เชเซเชฒเชธเซเชเชฐ เชธเซเช เชเชฐเซเชฏเชพ. เชคเซเช เชธเชเซเชฐเชฟเชฏ เชฅเชพเชฏ เชคเซเชฏเชพเช เชธเซเชงเซ เชฎเซเช เชฐเชพเชน เชเซเช.
เชคเชฎเชพเชฐเซ เชฆเชฐเซเช เชเซเชฒเชธเซเชเชฐเชฎเชพเช เชกเซเชเชพเชฌเซเช เชฌเชจเชพเชตเชตเชพเชจเซเช เช เชจเซ เชฒเซเชเชฟเชจ เช เชจเซ เชชเชพเชธเชตเชฐเซเชกเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชคเซเชจเซ เชเชเซเชธเซเชธ เชเซเช เชตเชตเชพเชจเซเช เชชเชฃ เชฏเชพเชฆ เชฐเชพเชเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เชนเซเช เช เชนเซเช เชตเชฟเชเชคเซเชฎเชพเช เชเชเชถ เชจเชนเซเช - เชเชจเซเชเชฐเชซเซเชธเชฎเชพเช เชฌเชงเซเช เชเชเชฆเชฎ เชธเซเชชเชทเซเช เชเซ.
เชฌเชฟเชจ-เชธเซเชชเชทเซเช เชตเชฟเชเชค เช เชนเชคเซ เชเซ เช เชกเซเชเชพเชฌเซเชเชฎเชพเช เชเชฃเชพ เชฏเชเชฎเชพเชจเซ เชเซ, เชเซ เชคเซเชฎเชจเซ เชเชพเชฎเซ เชธเชนเชฟเชทเซเชฃเซเชคเชพเชจเซ เชธเซเชจเชฟเชถเซเชเชฟเชค เชเชฐเซ เชเซ. เชเซ เชเซ, Grafana เชจเซ เชคเซ เชฆเชฐเซเช เชกเซเชเชพเชฌเซเช เชฎเชพเชเซ เชฌเชฐเชพเชฌเชฐ เชเช เชนเซเชธเซเชเชจเซ เชเชฐเซเชฐ เชเซ เชเซเชจเซ เชธเชพเชฅเซ เชคเซ เชเชพเชฎ เชเชฐเซ เชเซ. เชฒเชพเชเชฌเซ เชตเชพเชเชเชจ c-<cluster_id>.rw.mdb.yandexcloud.net
เช
เชจเซเชฐเซเชช ID เชธเชพเชฅเซ เชเซเชฒเชธเซเชเชฐเชจเชพ เชตเชฐเซเชคเชฎเชพเชจ เชธเชเซเชฐเชฟเชฏ เชฎเซเชเซเชฏ เชนเซเชธเซเช เชชเชฐ เชฎเซเชช เชเชฐเซเชฒ เชเซ. เช เชคเซ เชเซ เชเซ เชเชชเชฃเซ เชเซเชฐเชพเชซเชจเชพเชจเซ เชเชชเซเชถเซเช.
เชตเซเชฌ เชธเชฐเซเชตเชฐ
เชนเชตเซ เชคเซ เชตเซเชฌ เชธเชฐเซเชตเชฐ เชชเชฐ เชเซ. เชเชพเชฒเซ Linux เชธเชพเชฅเซ เชจเชฟเชฏเชฎเชฟเชค เชตเชฐเซเชเซเชฏเซเช เชฒ เชฎเชถเซเชจ เชเชญเชพ เชเชฐเซเช เช เชจเซ เชคเซเชจเชพ เชชเชฐ เชเซเชฐเชพเชซเชจเชพเชจเซ เชฎเซเชจเซเชฏเซเช เชฒเซ เชเซเช เชตเซเช.
เชเชพเชฒเซ 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
เชคเซ เชชเชเซ, เชเชพเชฒเซ Grafana เชจเซ systemctl เชนเซเช เชณ เชเชฒเชพเชตเซเช เช เชจเซ 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 เชธเซเช เชเชฐเชคเชพ เชชเชนเซเชฒเชพ, เชคเชฎเชพเชฐเซ เชคเซเชฏเชพเช เชธเซเชเชฟเชเชเซเชธ เชธเซเชเซเชฐ เชเชฐเชตเชพ เชฎเชพเชเซ เชคเซเชจเซ MySQL เชจเซ เชฎเชพเชฐเซเช เชเชฃเชพเชตเชตเชพเชจเซเช เชฏเชพเชฆ เชฐเชพเชเชตเซเช เชเซเชเช.
Grafana เชตเซเชฌ เชธเชฐเซเชตเชฐเชจเซเช เชธเชฎเชเซเชฐ เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชซเชพเชเชฒเชฎเชพเช เชเซ /etc/grafana/grafana.ini
. เชเชตเชถเซเชฏเช เชฐเซเชเชพ เชเชจเชพ เชเซเชตเซ เชฆเซเชเชพเชฏ เชเซ:
;url =
เช
เชฎเซ เชนเซเชธเซเชเชจเซ MySQL เชเซเชฒเชธเซเชเชฐ เชชเชฐ เชธเซเช เชเชฐเซเช เชเซเช. เชธเชฎเชพเชจ เชซเชพเชเชฒเชฎเชพเช เชเชชเชฐเชจเชพ เชเชฟเชคเซเชฐเชฎเชพเช เชเซเชฐเชพเชซเชจเชพเชจเซ เชเชเซเชธเซเชธ เชเชฐเชตเชพ เชฎเชพเชเซ เชฒเซเชเชฟเชจ เช
เชจเซ เชชเชพเชธเชตเชฐเซเชก เชเซ, เชเซ เชฎเซเชณเชญเซเชค เชฐเซเชคเซ เชฌเชเชจเซ เชธเชฎเชพเชจ เชเซ 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 เชจเซ เชเชฒเซเชฒเซเช เชเชฐเซเชถเซเช.
เชนเซเช เชจเซเชเซเชจเซ เชธเซเชเชฟเชเชเซเชธ เชธเชพเชฅเซ เชเชพเชฐเซเชฏเชเชพเชฐเซ เชเซเช เชตเชฃเซ เชชเซเชฐเชพเชชเซเชค เชเชฐเชตเชพเชฎเชพเช เชธเชเซเชทเชฎ เชนเชคเซ:
เชฎเซเช URL เชคเชฐเซเชเซ เชเชฒเซเชฒเซเช เชเชฐเซเชฏเซ เชเซ https://c-<cluster_id>.rw.mdb.yandexcloud.net:8443
เชฌเชงเชพ! เช เชฎเชพเชฐเซ เชชเชพเชธเซ CH เช เชจเซ MySQL เชธเชพเชฅเซ เชเซเชกเชพเชฏเซเชฒ เชตเซเชฌ เชธเชฐเซเชตเชฐ เชธเชพเชฅเซเชจเซเช เชเช เชตเชฐเซเชเซเชฏเซเช เชฒ เชฎเชถเซเชจ เชเซ. เชคเชฎเซ เชชเชนเซเชฒเชพเชฅเซ เช เชเซเชฒเชฟเชเชนเชพเชเชธ เชชเชฐ เชกเซเชเชพเชธเซเช เช เชชเชฒเซเชก เชเชฐเซ เชถเชเซ เชเซ เช เชจเซ เชกเซเชถเชฌเซเชฐเซเชก เชฌเชจเชพเชตเซ เชถเชเซ เชเซ. เชเซ เชเซ, เช เชฎเซ เชนเชเซ เชธเซเชงเซ เช เชฎเชพเชฐเซเช เชฒเชเซเชทเซเชฏ เชนเชพเชเชธเชฒ เชเชฐเซเชฏเซเช เชจเชฅเซ เช เชจเซ เชธเชเชชเซเชฐเซเชฃ เชธเซเชตเชฟเชงเชพเชฏเซเชเซเชค เชเชจเซเชซเซเชฐเชพเชธเซเชเซเชฐเชเซเชเชฐ เชเชฎเชพเชตเซเชฏเซเช เชจเชฅเซ.
เชชเซเชเชฐ
Yandex.Cloud เชคเชฎเชจเซ เช
เชธเซเชคเชฟเชคเซเชตเชฎเชพเชเชจเชพ เชตเชฐเซเชเซเชฏเซเช
เชฒ เชฎเชถเซเชจเชจเซ เชกเชฟเชธเซเช เชเชฎเซเช เชฌเชจเชพเชตเชตเชพ เชฎเชพเชเซ เชชเชฐเชตเชพเชจเชเซ เชเชชเซ เชเซ, เช
เชจเซ เชคเซเชจเชพ เชเชงเชพเชฐเซ - เชเชเชฌเซเชเชพ เชธเชพเชฅเซ เชธเชฎเชพเชจ เชฎเชถเซเชจเซเชจเซ เชธเชเชเซเชฏเชพ. เช เชฌเชฐเชพเชฌเชฐ เชเซ เชเซเชจเซ เชเชชเชฃเซ เชเชชเชฏเซเช เชเชฐเซเชถเซเช. เชเชฌเซเชจเซ เช
เชจเซเชเซเชณ เชฐเซเชคเซ เชเชธเซเชฎเซเชฌเชฒ เชเชฐเชตเชพ เชฎเชพเชเซ, เชธเชพเชงเชจ เชฒเซ
เช เชฎเชพเชฐเซ 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 เชชเซเชฒเซเชเชซเซเชฐเซเชฎ เชชเชฐ, เช เชถเชฌเซเชฆ เชตเชฐเซเชเซเชฏเซเช เชฒ เชฎเชถเซเชจเซเชจเชพ เชฏเซเชจเชฟเชฏเชจเชจเซ เชธเชเชฆเชฐเซเชญ เชเชชเซ เชเซ เชเซ เชธเชฎเชพเชจ เชฒเชพเชเซเชทเชฃเชฟเชเชคเชพเช เชงเชฐเชพเชตเซ เชเซ. เชเชฆเชพเชนเชฐเชฃ เชเซเชฅ เชฌเชจเชพเชตเชคเซ เชตเชเชคเซ, เช เชเซเชฅเชฎเชพเช เชคเชฎเชพเชฎ เชฎเชถเซเชจเซเชจเซ เชชเซเชฐเซเชเซเชเชพเชเชช เชเซเช เชตเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เช เชจเซ เชชเชเซ เชเซเชฅเชจเซ เชฒเชพเชเซเชทเชฃเชฟเชเชคเชพเช (เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เชธเชเซเชฐเชฟเชฏ เชฎเชถเซเชจเซเชจเซ เชจเซเชฏเซเชจเชคเชฎ เช เชจเซ เชฎเชนเชคเซเชคเชฎ เชธเชเชเซเชฏเชพ). เชเซ เชตเชฐเซเชคเชฎเชพเชจ เชธเชเชเซเชฏเชพ เช เชฎเชพเชชเชฆเชเชกเซเชจเซ เชชเซเชฐเซเชฃ เชเชฐเชคเซ เชจเชฅเซ, เชคเซ เชเชฆเชพเชนเชฐเชฃ เชเซเชฅ เชชเซเชคเซ เช เชฌเชฟเชจเชเชฐเซเชฐเซ เชฎเชถเซเชจเซ เชฆเซเชฐ เชเชฐเชถเซ เช เชฅเชตเชพ เชคเซเชจเซ เชชเซเชคเชพเชจเซ เชเชฌเซเชฎเชพเช เชจเชตเซ เชฌเชจเชพเชตเชถเซ.
เช เชฎเชพเชฐเชพ เชเชพเชฐเซเชฏเชจเชพ เชญเชพเช เชฐเซเชชเซ, เช เชฎเซ เชตเซเชฌ เชธเชฐเซเชตเชฐเซเชธเชจเซเช เชเช เชเชฆเชพเชนเชฐเชฃ เชเซเชฅ เชฌเชจเชพเชตเซเชถเซเช เชเซ เช เชเชพเช เชฌเชจเชพเชตเซเชฒ เชกเชฟเชธเซเช เชเชฎเซเชเชฎเชพเชเชฅเซ เชเชจเชฐเซเช เชฅเชถเซ.
เชถเซเช เชเชฐเซเชเชฐ เชจเซเชเชงเชชเชพเชคเซเชฐ เชเซ เชคเซ เชเซเชฒเซเชฒเซเช เชเชฆเชพเชนเชฐเชฃ เชเซเชฅ เชธเซเชเช เชช เชเซ. เชฒเซเชก เชฌเซเชฒเซเชจเซเชธเชฐ เชธเชพเชฅเซเชจเชพ เชเชเซเชเชฐเชฃเชฎเชพเชเชจเซเช เชฒเชเซเชทเซเชฏ เชเซเชฅ เชคเชฎเชจเซ เช เชเซเชฅเชจเชพ เชตเชฐเซเชเซเชฏเซเช เชฒ เชฎเชถเซเชจเซเชจเซ เชเซเช เชชเชฐ เชเซเชเชฒเชพเช เชฌเชเชจเซ เชชเชฐ เชเซเชฒเชฟเช เชเชฐเซเชจเซ L3 เชฌเซเชฒเซเชจเซเชธเชฐเชจเซ เชเซเช เชตเชตเชพเชฎเชพเช เชฎเชฆเชฆ เชเชฐเชถเซ.
เชฌเซเชฒเซเชจเซเชธเชฐ เชธเซเช เชเชฐเชคเซ เชตเชเชคเซ, เชฎเซเช เชฌเซ เชฎเชนเชคเซเชตเชชเซเชฐเซเชฃ เชฎเซเชฆเซเชฆเชพเช เช เชฎเชฒเชฎเชพเช เชฎเซเชเซเชฏเชพ:
- เชฎเซเช เชฌเซเชฒเซเชจเซเชธเชฐเชจเซ เชชเซเชฐเซเช 80 เชชเชฐ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชเซเชฐเชพเชซเชฟเช เชธเซเชตเซเชเชพเชฐเชตเชพ เช เชจเซ เชคเซเชจเซ เชตเชฐเซเชเซเชฏเซเช เชฒ เชฎเชถเซเชจเซเชจเชพ เชชเซเชฐเซเช 3000 เชชเชฐ เชฐเซเชกเชพเชฏเชฐเซเชเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เชฌเชจเชพเชตเซเชฏเซเช, เชฌเชฐเชพเชฌเชฐ เชเซเชฏเชพเช Grafana เชฐเชนเซ เชเซ.
- เชฎเซเช เชฎเชถเซเชจเซเชจเซ เชชเซเชฐเซเช 3000 เชชเชฐ เชชเชฟเชเช เชเชฐเซเชจเซ เชคเซเชจเซ เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพ เชคเชชเชพเชธเชตเชพเชจเซเช เชธเซเชเช เชช เชเชฐเซเชฏเซเช.
เชฎเซเชจเซ เชธเชพเชฐเชพเชเชถ
เช เชเชคเซ, เช เชฎเซ เชเชเซเชเชฟเชค เชเชชเซเชฒเชฟเชเซเชถเชจ เชเชจเซเชซเซเชฐเชพเชธเซเชเซเชฐเชเซเชเชฐเชจเซ เชฎเซเชจเซเชฏเซเช เชฒเซ เชเชฎเชพเชตเชตเชพเชฎเชพเช เชธเชเซเชทเชฎ เชนเชคเชพ, เช เชจเซ เชนเชตเซ เช เชฎเชพเชฐเซ เชชเชพเชธเซ เช เชคเซเชฏเชเชค เชธเซเชฅเชฟเชคเชฟเชธเซเชฅเชพเชชเช เชเซเชฐเชพเชซเชจเชพ เชธเซเชตเชพ เชเซ. เชคเซเชฎเชพเช เชกเซเชเชพเชธเซเช เชฒเซเชก เชเชฐเชตเชพ เชฎเชพเชเซ เชคเชฎเชพเชฐเซ เชซเชเซเชค เชเชชเซเชฒเชฟเชเซเชถเชจเชจเชพ เชเชจเซเชเซเชฐเซ เชชเซเชเชจเซเช เช เชจเซ เชเซเชฒเชฟเชเชนเชพเชเชธ เชเซเชฒเชธเซเชเชฐเชจเชพ เชนเซเชธเซเช เชคเชฐเซเชเซ เชฌเซเชฒเซเชจเซเชธเชฐเชจเซเช IP เชธเชฐเชจเชพเชฎเซเช เชเชพเชฃเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ.
เชคเซ เชตเชฟเชเชฏ เชเซเชตเซเช เชฒเชพเชเชถเซ? เชนเชพ, เชตเชฟเชเชฏ. เชชเชฐเชเชคเซ เชเชเชเช เชนเชเซ เชชเชฃ เชฎเชจเซ เชฎเซเชเชเชตเชฃเชฎเชพเช เชฎเซเชเซ เชเซ. เชเชชเชฐเซเชเซเชค เชธเชฎเชเซเชฐ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชจเซ เชเชฃเชพ เชฌเชงเชพ เชฎเซเชจเซเชฏเซเช เชฒ เชชเชเชฒเชพเชเชจเซ เชเชฐเซเชฐ เชเซ เช เชจเซ เชคเซ เชฌเชฟเชฒเชเซเชฒ เชฎเชพเชชเซ เชถเชเชพเชฏ เชคเซเชตเซเช เชจเชฅเซ; เชเซ เชถเชเซเชฏ เชนเซเชฏ เชคเซ เชนเซเช เชคเซเชจเซ เชธเซเชตเชเชพเชฒเชฟเชค เชเชฐเชตเชพ เชฎเชพเชเชเซ เชเซเช. เช เชคเซ เชเซ เชเซเชจเซ เชเชเชณเชจเซ เชตเชฟเชญเชพเช เชธเชฎเชฐเซเชชเชฟเชค เชเชฐเชตเชพเชฎเชพเช เชเชตเชถเซ.
เชเซเชฐเชพเชซเซเชฐเซเชฎ เชเชเซเชเชฐเชฃ
เช
เชฎเซ เชซเชฐเซเชฅเซ HashiCorp เชจเชพเชฎเชจเชพ เชเซเชฒเชจเซ เชเชชเชฏเซเช เชเชฐเซเชถเซเช
เชเซเชฐเชพเชซเซเชฐเซเชฎ เชธเชพเชฅเซเชจเซเช เชคเชฎเชพเชฎ เชเชพเชฐเซเชฏ เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชซเชพเชเชฒ เชฒเชเชตเชพ เชฎเชพเชเซ เชจเซเชเซ เชเชตเซ เชเซ (*.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>"
}
เชธเชฎเชเซเชฐ เชเชชเซเชฒเชฟเชเซเชถเชจ เชกเชฟเชชเซเชฒเซเชฏเชฎเซเชจเซเช เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชกเชฟเชธเซเช เชเชฎเซเช เชฌเชจเชพเชตเชตเชพ เช เชจเซ เช เชเชฒเซ เชธเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เชจเซเชเซ เชเชตเชถเซ. เชคเซเช เชถเซเช เชฎเชพเชเซ เชเชตเชพเชฌเชฆเชพเชฐ เชเซ เชคเซ เชฎเชจเซ เชธเชฎเชเชพเชตเชตเชพ เชฆเซ:
oauth_token - เชเซเชฒเชพเชเชกเชจเซ เชเชเซเชธเซเชธ เชเชฐเชตเชพ เชฎเชพเชเซเชจเซเช เชเซเชเชจ. เชฆเซเชตเชพเชฐเชพ เชฎเซเชณเชตเซ เชถเชเชพเชฏ เชเซ
cloud_id - เชเซเชฒเชพเชเชก เชเชเชกเซเชจเซเชเชฟเชซเชพเชฏเชฐ เชเซเชฏเชพเช เช
เชฎเซ เชเชชเซเชฒเชฟเชเซเชถเชจเชจเซ เชเชฎเชพเชตเซเชถเซเช
เชซเซเชฒเซเชกเชฐ_เชเชเชกเซ โ เชตเชฟเชญเชพเช เชเชณเชเชเชฐเซเชคเชพ เชเซเชฏเชพเช เช
เชฎเซ เชเชชเซเชฒเชฟเชเซเชถเชจเชจเซ เชเชฎเชพเชตเซเชถเซเช
service_account_id - เชเซเชฒเชพเชเชกเชจเชพ เช
เชจเซเชฐเซเชช เชตเชฟเชญเชพเชเชฎเชพเช เชธเซเชตเชพ เชเชเชพเชเชจเซเช เชเชณเชเชเชฐเซเชคเชพ.
image_id - เชชเซเชเชฐเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชฎเซเชณเชตเซเชฒ เชกเชฟเชธเซเช เชเชฎเซเชเชจเซเช เชเชณเชเชเชฐเซเชคเชพ
เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชจเชพเชฎ ะธ เชชเชพเชธเชตเชฐเซเชก โ เชกเซเชเชพเชฌเซเชธเซเชธ เช
เชจเซ Grafana เชตเซเชฌ เชธเชฐเซเชตเชฐ เชฌเชเชจเซเชจเซ เชเชเซเชธเซเชธ เชเชฐเชตเชพ เชฎเชพเชเซ เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชจเชพเชฎ เช
เชจเซ เชชเชพเชธเชตเชฐเซเชก
dbname - CH เช
เชจเซ MySQL เชเซเชฒเชธเซเชเชฐเซเชจเซ เช
เชเชฆเชฐ เชกเซเชเชพเชฌเซเชเชจเซเช เชจเชพเชฎ
เชธเชพเชฐเซเชตเชเชจเชฟเช_เชเซ_เชชเชฅ โ เชคเชฎเชพเชฐเซ เชธเชพเชฐเซเชตเชเชจเชฟเช ssh เชเซ เชธเชพเชฅเซ เชซเชพเชเชฒเชจเซ เชชเชพเชฅ, เชเซเชจเซ เชเชชเชฏเซเช เชคเชฎเซ เชจเชพเชฎ เชนเซเช เชณ เชเซเชกเชพเชตเชพ เชฎเชพเชเซ เชเชฐเซ เชถเชเซ เชเซ ubuntu
เชตเซเชฌ เชธเชฐเซเชตเชฐ เชธเชพเชฅเซ เชตเชฐเซเชเซเชฏเซเช
เชฒ เชฎเชถเซเชจเซ เชชเชฐ
เชชเซเชฐเชฆเชพเชคเชพ เชธเซเชเช เชช
เชนเชตเซ เชคเชฎเชพเชฐเซ เชเซเชฐเชพเชซเซเชฐเซเชฎ เชชเซเชฐเชฆเชพเชคเชพเชจเซ เชเซเช เชตเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ - เช เชฎเชพเชฐเชพ เชเชฟเชธเซเชธเชพเชฎเชพเช, เชฏเชพเชจเซเชกเซเชเซเชธ:
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 เชเซเชฒเชธเซเชเชฐ เชเชญเซเช เชเชฐเซเชฏเซเช เช
เชจเซ เชคเซ เชชเชเซ เช, เชคเซเชจเซเช ID เชเชพเชฃเซเชจเซ, เชฎเซเช เชเชฐเซเชฐเซ เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชธเชพเชฅเซ เชกเชฟเชธเซเช เชเชฎเซเช เชเชเชคเซเชฐเชฟเชค เชเชฐเซ, เชเซเชฏเชพเช เชฎเซเช เชเซเชฒเชธเซเชเชฐ เชฎเชพเชเซ เชนเซเชธเซเชเชจเซ เชเชฒเซเชฒเซเช เชเชฐเซเชฏเซ. เชชเชฐเชเชคเซ เชนเชตเซ เช
เชฎเซ เชเซเชฐเชพเชซเซเชฐเซเชฎ เชฒเซเชจเซเช เชเชฐเชคเชพ เชชเชนเซเชฒเชพ เชเซเชฒเชธเซเชเชฐ ID เชเชพเชฃเชคเชพ เชจเชฅเซ, เชเซเชฎเชพเช เชเชฎเซเช เชฌเชจเชพเชตเชคเซ เชตเชเชคเซ เชชเชฃ เชธเชพเชฎเซเชฒ เชเซ. เชคเซเชฅเซ, เชฎเชพเชฐเซ เชจเซเชเซเชจเชพเชจเซ เชเชถเชฐเซ เชฒเซเชตเซ เชชเชกเซเชฏเซ
เชเชฎเซเชเซเชจเชจเซ เชฎเซเชเชพเชกเซเชเชพ เชธเซเชตเชพเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ, เช
เชฎเซ เชตเชฐเซเชเซเชฏเซเช
เชฒ เชฎเชถเซเชจเชจเซ เชเซเชเชฒเชพเช เชชเชฐเชฟเชฎเชพเชฃเซ เชชเชธเชพเชฐ เชเชฐเซเชถเซเช, เชเซเชจเซ เชคเซ เชธเซเชตเซเชเชพเชฐเชถเซ เช
เชจเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฐเชถเซ. เช
เชฎเชพเชฐเซ 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
เชเชจเซเชเซเชจเซเชธ เชเซเชฐเซเชช เช เชจเซ เชฌเซเชฒเซเชจเซเชธเชฐ
เชจเชตเซ เชกเชฟเชธเซเช เชเชฎเซเช เชชเซเชจเชเชฌเซเชฒเซเชก เชเชฐเซเชฏเชพ เชชเชเซ, เช เชฎเซ เชเซเชฒเซเชฒเซ เชเซเชฐเชพเชซเซเชฐเซเชฎ เชฎเชพเชเซ เช เชฎเชพเชฐเซ เชซเชพเชเชฒ เชเชฎเซเชฐเซ เชถเชเซเช เชเซเช.
เชเชพเชฒเซ เชธเซเชเชตเซเช เชเซ เช เชฎเซ เชนเชพเชฒเชจเซ เชกเชฟเชธเซเช เชเชฎเซเชเชจเซ เชเชชเชฏเซเช เชเชฐเชตเชพ เชฎเชพเชเชเซเช เชเซเช:
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
. เชคเซ เช เชเซ เชเซ เชตเชฐเซเชเซเชฏเซเช
เชฒ เชฎเชถเซเชจ เชธเซเชเชพเชฐเซเชเช
เชช เชชเชฐ เชฌเชนเชพเชฐ เชเชพเชขเชถเซ เช
เชจเซ Grafana เชฐเซเชชเชฐเซเชเชพเชฎเชพเช เชฎเซเชเชถเซ.
เชคเซ เชฌเซเชฒเซเชจเซเชธเชฐ เชชเชฐ เชเซ.
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 เชเซเชฒเชธเซเชเชฐ (เชเซเชจเซเช ID เชนเชเซ เชชเชฃ เชฎเซเชณเชตเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ) เชกเซเชเชพ เชธเซเชคเซเชฐเซเชค เชคเชฐเซเชเซ เชเชฎเซเชฐเชตเซเช เชชเชกเชถเซ. เชชเชฐเชเชคเซ เชเซเชฐเชพเชซเซเชฐเซเชฎ เชเซเชฒเชธเซเชเชฐ ID เชจเซ เชเชพเชฃเซ เชเซ. เชเชพเชฒเซ เชคเซเชจเซ เช เชฌเชพเชฌเชคเชจเซ เช เชฎเชฒเชฎเชพเช เชฎเซเชเชตเชพเชจเซ เชเชตเชพเชฌเชฆเชพเชฐเซ เชธเซเชเชชเซเช.
เชเชพเชฒเซ เชเช เชจเชตเซ เชชเซเชฐเชฆเชพเชคเชพ เชเชฎเซเชฐเซเช - Grafana, เช เชจเซ เชคเซเชจเซ เชนเซเชธเซเช เชคเชฐเซเชเซ เชฌเซเชฒเซเชจเซเชธเชฐเชจเซเช IP เชธเชฐเชจเชพเชฎเซเช เชเชชเซเช. เชคเชฎเชพเชฎ เชซเซเชฐเชซเชพเชฐเซ เชเซ เชเซ เชเซเชฐเชพเชซเซเชฐเซเชฎ เชฎเชถเซเชจ เชชเชฐ เชเชฐเซ เชเซ เชเซเชฏเชพเช เชคเซเชจเซเช เชฌเซเชฒเซเชจเซเชธเชฐ เชจเชเซเชเซ เชเชฐเซ เชเซ เชคเซ 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 เชเชกเซเชฐเซเชธ เช เชจเซ เชเซเชฒเชฟเชเชนเชพเชเชธ เชเซเชฒเชธเซเชเชฐเชจเชพ เชนเซเชธเซเชเชจเซ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เชเชฐเซเช
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"
}
เชฆเซเชกเซ เชถเชเซ เชเซ
เชฌเชงเชพ! เช
เชฎเชพเชฐเซ เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชซเชพเชเชฒ เชคเซเชฏเชพเชฐ เชเซ เช
เชจเซ เช
เชฎเซ, เชตเซเชฐเซเชเชฌเชฒ เชธเซเช เชเชฐเซเชจเซ, เช
เชฎเซ เชเชชเชฐ เชตเชฐเซเชฃเชตเซเชฒ เชฆเชฐเซเช เชตเชธเซเชคเซเชจเซ เชตเชงเชพเชฐเชตเชพ เชฎเชพเชเซ เชเซเชฐเชพเชซเซเชฐเซเชฎเชจเซ เชเชนเซ เชถเชเซเช เชเซเช. เชเชเซ เชชเซเชฐเชเซเชฐเชฟเชฏเชพเชฎเชพเช เชฎเชจเซ เชฒเชเชญเช 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 เชชเซเชฒเซเชเชซเซเชฐเซเชฎ เชชเชฐ เชเซเชเชพเชเชตเชพเชฏเชพ เชเซเชฒเชพเชเชก เชเชฐเซเชเชฟเชเซเชเซเชเชฐ เชธเชพเชฅเซ เชเชชเซเชฒเชฟเชเซเชถเชจเซ เชเชฎเชพเชตเซ เชถเชเซ เชเซ. HashiCorp เชจเชพ เชฎเชฆเชฆเชฐเซเชช เชธเชพเชงเชจเซ เชเซเชฎ เชเซ Packer เช เชจเซ Terraform เชคเชฎเชจเซ เชเชฎเชพเช เชฎเชฆเชฆ เชเชฐเซ เชถเชเซ เชเซ. เชฎเชจเซ เชเชถเชพ เชเซ เชเซ เชเซเชเชจเซ เช เชฒเซเช เชเชชเชฏเซเชเซ เชฒเชพเชเชถเซ :)
PS เชจเซเชเซ เชนเซเช เชฐเชฟเชชเซเชเซเชเชฐเซเชจเซ เชเช เชฒเชฟเชเช เชเซเชกเซเชถ เชเซเชฏเชพเช เชคเชฎเซ เชชเซเชเชฐ เช เชจเซ เชเซเชฐเชพเชซเซเชฐเซเชฎ เชฎเชพเชเซ เชคเซเชฏเชพเชฐ เชฐเซเชธเชฟเชชเซ เชถเซเชงเซ เชถเชเซ เชเซ, เชเซเชจเชพ เชเซเชเชกเชพ เชฎเซเช เช เชฒเซเชเชฎเชพเช เชเชชเซเชฏเชพ เชเซ.
เชธเซเชฐเซเชธ: www.habr.com