์ ๋ฐ ๋์ฐ์ฌ ์ข ๊ทธ๋งํด
์ต๊ทผ ํ๋ก์ ํธ์์ ์๊พธ ์๋ฒ๊ฐ ๋์ฐ์ฌ๋ฅผ ํ๋ค.
'๋ฒ ๋ด์ผ... ์๋ฒ๊ฐ ํฐ์ก์ด' ๋ผ๋ฉด์ ๋ ๋ผ์ค๋ ์นดํก์ ๋ณด๋ฉฐ ์ด์ฉ ์ค ๋ชฐ๋ผ ํ๋ ๋ด ์์ ์ ๋ฐ๊ฒฌํ๋ค.
์ด์ ์๋ ์๋ฒ ๋ค์ด์, ์์๋ฌด์ฑ
์ธ ๋๋ AWS CloudWatch๋ก ๊ฐ์ ์ด๋ค ๋ฉํธ๋ฆญ์ด ๋ฌธ์ ์ธ์ง ๋ณด์๋ค.
์ญ์ CPU์ ์ ์จ(CPU Utilization)์ด ๋ฌธ์ ์๋ค.
์์ ์ฌ์ง์์ ๋ณผ ์ ์๋ฏ์ด, 99.9% ๋ก ๋๋ฐ๋ ์คํ์ดํฌ ํ์์ ๋ฆฌ์์ค ์ฌ์ฉ๋ฅ ์ด ๋ณด์ธ๋ค.
๋ง์ฝ ํ์์์๋ CPU์ ์ ์จ์ด ๋๋ค๋ฉด, auto scaling์ผ๋ก scale-outํ๋ ๋ฐฉ์์ ํํ ํ
์ง๋ง, ๋ณด๋ฉด ์ ์ ์๋ฏ์ด ํ์์์ ์ ์ ์จ์ 50%๋ ์ฑ ๋์ง ์๋๋ค.
์ง์์ ์ผ๋ก ํ์ธํด์ฃผ๋ ๊ฒ ์ต์ ์ธ๋ฐ, ์ด๊ฑธ ์๋์ผ๋ก ํ์ธํ๋ ๊ฒ ์ฐธ ๋ฒ๊ฑฐ๋กญ๋ค๊ณ ์๊ฐํ๋ค.
์ด๋, health check๊ฐ fail๋ ๋ ๋ฐ๋ก ๋ฉ์ผ๋ก๋ ์ด๋ค ํํ๋ก ์๋์ด ํธ๋ฆฌ๊ฑฐ ๋๋ฉด ASAP์ผ๋ก ๋์ํด์ค ์ ์์ ๊ฒ ๊ฐ์๋ค.
Prometheus
+ Grafana
๋ก ๋ชจ๋ํฐ๋ง ์๋ฒ๋ฅผ ๋์ฐ๊ธฐ๋ก ํ๋ค.
Protmethus
๋ก ๋ฉํธ๋ฆญ๋ค์ ์์งํ๊ณ , Grafana
๋ก ์๊ฐํํ๋ฉฐ ๊ธฐ๋ณธ ๊ตฌ์ฑ์ ํ๋ค.
๊ทธ ๋ค์, AlertManager
๋ก ์๋ฆผ ๋ฃฐ์ ์ค์ ํด์ฃผ๊ฒ ๋ค. CPU์ ์ ์จ์ด 80% ์ด์์ด ๋๋ฉด, ์๋ฆผ์ด ํธ๋ฆฌ๊ฑฐ๋๋ค.
๋๋ต์ ์ธ ์ํคํ
์ฒ๋ ์ด๋ ๊ฒ ์ค๊ณํ๋ค.
'ํ๋กํ ํ์ธ' ์๋ฒ์์ ์์งํ๋ ๋ฉํธ๋ฆญ ์ ๋ณด๋ฅผ Prometheus ์๋ฒ์ ์ ๋ฌํ๋ ค๋ฉด, ํ๊ฒ ์๋ฒ์ ํด๋นํ๋ 'ํ๋กํ ํ์ธ' ์๋ฒ์ Node Exporter์ ์ค์นํ์ฌ์ผ ํ๋ค.
๐ฅ Node Exporter๋?
Prometheus Node Exporter๋ ํ๋์จ์ด์ ์ํ์ ์ปค๋ ๊ด๋ จ ๋ฉํธ๋ฆญ์ ์์งํ๋ ๋ฉํธ๋ฆญ ์์ง๊ธฐ์ด๋ค.
Prometheus๋ Node Exporter์ metrics HTTP endpoint์ ์ ๊ทผํ์ฌ ํด๋น ๋ฉํธ๋ฆญ์ ์์งํ ์ ์๋ค.
Node Exporter๋ก๋ถํฐ ์์งํ ๋ฉํธ๋ฆญ์ Prometheus๋ด์ TSDB์ ์ ์ฅํ์ฌ PromQL๋ก ๋ฉํธ๋ฆญ์ ์ฟผ๋ฆฌํด ์๋ฒ ์ํ๋ฅผ ๋ชจ๋ํฐ๋งํ ์ ์๋ค.
๐๏ธNode Exporter ๋ค์ด๋ก๋ ๋งํฌ ์ ์ ์ํด์, node_exporter
๋์ OS์ ์๋ง๋ ํ์ผ์ tar
ํ์ผ์ ๋ค์ด ๋ฐ๋๋ค.
$ wget [๋งํฌ ์ฃผ์]
$ tar xvfz [์์ถ ํ์ผ]
$ ls
$ cd node_exporter-1.5.0.linux-amd64
$ nohup ./node_exporter &
์ ์์ ์ผ๋ก ํฌํธ 9100
์์ node_exporter
๊ฐ ๋๊ธฐ ์ค์ธ์ง ํ์ธํ๊ธฐ ์ํด์, ๋ค์๊ณผ ๊ฐ์ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํด์ค๋ค.
$ sudo netstat -tuln | grep 9100
ํ๊ฒ ์๋ฒ์ Node Exporter์์ ์์งํ ๋ฉํธ๋ฆญ ๋ฐ์ดํฐ๋ฅผ Prometheus๋ก ๊ฐ์ ธ์ค๋ ค๋ฉด, ๋ชจ๋ํฐ๋ง ์๋ฒ์ Prometheus ์ค์ ์ ๋ณ๊ฒฝํ์ฌ์ผ ํ๋ค.
Prometheus.yml
ํ์ผ ์์ $ sudo vim prometheus.yml
$ sudo systemctl start prometheus
๋ธ๋ผ์ฐ์ ๋ก http://[ํ๊ฒ ์๋ฒ IP]:9100/metrics
์ ์ง์ ์ ์ํ์ฌ, Prometheus ์๋ฒ๊ฐ ๋ฉํธ๋ฆญ๋ค์ ์ ๋๋ก ์ ์์งํ๊ณ ์๋์ง ํ์ธํ๋ค.
์ฌ๊ธฐ๊น์ง ํ์ ๋, Prometheus
๋ ๋ฉํธ๋ฆญ๋ค์ ์์งํด์ฃผ์ง๋ง, '์์๊ฒ' ๋ณด์ฌ์ฃผ์ง๋ ์๋๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
๋ชจ๋ํฐ๋งํ๋ ์
์ฅ์์๋, ์์งํ ๋ฉํธ๋ฆญ๋ค์ ๊ฐ๋
์ฑ ์ข๊ฒ ์๊ฐํ ํ๋ ๊ฒ์ ์๋นํ ์ค์ํ๋ค.
๊ทธ๋์ ๋๋ ๋ฉํธ๋ฆญ ๋ฐ์ดํฐ๋ฅผ ์๊ฐํํ ์ ์๋ Grafana
๋ฅผ ์ด์ฉํ๊ธฐ๋ก ํ๋ค.
Grafana ๋?
๊ทธ๋ผํ๋๋ ๋ฐ์ดํฐ๋ฅผ ์๊ฐํํ์ฌ ๋ถ์ ๋ฐ ๋ชจ๋ํฐ๋ง์ ์ฉ์ดํ๊ฒ ํด์ฃผ๋ ์คํ์์ค ๋ถ์ ํ๋ซํผ์ ๋๋ค. ์ฌ๋ฌ ๋ฐ์ดํฐ ์์ค๋ฅผ ์ฐ๋ํ์ฌ ์ฌ์ฉ ํ ์ ์์ผ๋ฉฐ ์๊ฐํ ๋ ๋ฐ์ดํฐ๋ค์ ๋์๋ณด๋๋ก ๋ง๋ค ์ ์์ต๋๋ค.
Grafana
๋์๋ณด๋ ๊ตฌ์ฑํ๊ธฐGrafana
์ค์นํ๊ธฐ$ sudo apt-get update
$ sudo apt-get install -y software-properties-common
$ sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
$ wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install grafana
Grafana
์๋น์ค ์์$ sudo systemctl start grafana-server
$ sudo systemctl enable grafana-server
Grafana
๊ด๋ จ ์ค์ ์กฐ์ ํ๊ธฐ์ฐ๋ฆฌ 'ํ๋กํ ํ์ธ' ํ๋ก์ ํธ๋ ํ์ฌ ๋์ปค๋ก nginx ์๋ฒ๋ฅผ ๋์์ ์คํ ์ค์ด๊ธฐ ๋๋ฌธ์, nginx ์ค์ ์ ์กฐ์ ํ ๋ docker ๋ด๋ถ ๋คํธ์ํฌ์ ํธ์คํธ ๊ฐ์ ์ฐ๊ฒฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํ๋ค.
$ sudo vim docker-compose-blue.yml
Grafana
์ Nginx ๋์ผํ ๋คํธ์ํฌ์ ์์นubuntu_default
๋คํธ์ํฌ์ Grafana ์ค์ ์ ๋ง์ณค๋ค.์ด์ http://[์๋ฒ IP]:3000/grafana
๋ก ์ ์ํด๋ณด๋ฉด, ์ด๋ฐ ๋ก๊ทธ์ธ ์ฐฝ์ผ๋ก ๋ฆฌ๋ค์ด๋ ์
๋๋ค.
์ต์ด๋ก grafana์ ์ ์ํ๋ฉด, username ๊ณผ password ์
๋ ฅ์ฐฝ์ ๋ชจ๋ admin
์ ์
๋ ฅํ์ฌ ๋ก๊ทธ์ธํ๋ฉด ๋๋ค.
๋์ ๋ณด๋๊ฐ ์ฑ๊ณต์ ์ผ๋ก ๋์์ง ๊ฒ ๋ณด์ธ๋ค๐โโ๏ธ
Grafana
๋ฅผ ํตํด ๋ชจ๋ํฐ๋ง ๋์๋ณด๋ ๊ตฌ์ฑํ๊ธฐ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์๊ฐํํ ์ง ์ ํด์ฃผ๋ ์ค์ ๊ณผ์ ์ ๊ฑฐ์น๊ฒ ๋ค. ์ฐ๋ฆฌ๋ Prometheus ์๋ฒ๋ก ๋ฉํธ๋ฆญ์ ์์งํ๊ธฐ ๋๋ฌธ์ DB๋ก Prometheus๋ฅผ ํด๋ฆญํ๋ค.
http://[Prometheus ์๋ฒ IP]/tragets
UP
์ธ์ง ์๋์ง๋ฅผ ๋ชจ๋ํฐ๋งํ๋ค. node-exporter
๋ก ์ค์ ํ ํ๊ฒ ์๋ฒ์ ๋ฉํธ๋ฆญ์ด ์ ์์ง๋์๋ค๋ ๊ฒ์ ์ ์ ์๋ค.PromQL
์ฟผ๋ฆฌ๋ฅผ ๋ ๋ ค์ค๋ค.rate(node_cpu_seconds_total{mode!="idle"}[1m])
๋ง์ฐฌ๊ฐ์ง๋ก, 5-2์ ์์ฑํ๋ Grafana ๋์๋ณด๋์ ํด๋น ๋ฉํธ๋ฆญ์ ์์งํ ์ ์๋๋ก ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ์ฌ ๋ ๋ ค์ค๋ค.
[Run queries] ๋ฒํผ์ ๋๋ฅด๋ฉด, ์ด๋ ๊ฒ ๋ฉํธ๋ฆญ์ด ์์ง๋๋ ๊ฒ์ ์ ์ ์๋ค.
ํน์, visualization
์ ์ต์
์ผ๋ก ๋ค์ด๊ฐ์ Gauge
๋ฅผ ์ ์ฉํ์ฌ ํ์ํ ๋ฉํธ๋ฆญ ์ ๋ณด๋ฅผ ์ง๊ณํ์ฌ, ํจ๋๋ก ๋ง๋ ํ์ ๋์๋ณด๋๋ฅผ ๊ตฌ์ฑํ ์๋ ์๋ค.
alerts.yml
ํ์ผ ์ค์ ํ๊ธฐ๋ด๊ฐ ์ฃผ์์ ์ผ๋ก ๋๋ CPU ์ ์ ์จ ๋ฉํธ๋ฆญ์ ๋ํด, ํ๊ฒ ์๋ฒ์ CPU ์ ์ ์จ์ด 80% ์ด์์ด ๋๋ฉด ์๋์ด ํธ๋ฆฌ๊ฑฐ๋๋๋ก ์ค์ ํ๊ฒ ํ๋ค.
๋ฐ๋ผ์ ์๋ ์ค์ ์ ํด์ฃผ๋ YAML ํ์ผ์ ๋ง๋ค์ด์ฃผ์๋ค.
alertmanager.yml
๋ก AlertManager ๊ตฌ์ฑ ํ์ผ ์์ฑํ๊ธฐํ๋กํ ํ์ธ ํ๋ก์ ํธ์ ๊ณต์ ์ด๋ฉ์ผ ์ฃผ์๋ Gmail์ด๊ธฐ ๋๋ฌธ์, Google SMTP ๋ฅผ ์ด์ฉํ์๋ค.
prometheus.yml
ํ์ผ ์์ ํ๊ธฐPromtheus๊ฐ ํฐ๋ฏธ๋์ ์ข ๋ฃํด๋ ๊ณ์ ์คํ๋๊ฒ ํ๋ ค๋ฉด, nohup ๋ช ๋ น์ด๋ฅผ ์ด์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ด ์คํํด์ฃผ๋ฉด ๋๋ค.
nohup ./prometheus --config.file=prometheus.yml > prometheus.log 2>&1 &
๋ค์ Prometheus UI์ ์ ์ํ๋ฉด, Alerts ํญ๋ชฉ์์ HighCPUUsage ๊ท์น์ด ํ์ฑํ๋์๋์ง ํ์ธํ๋ค.
active ์ํ๋ก, ํ์ฑํ๋์์์ ํ์ธํ ์ ์๋ค.
์ด์ ๋ค๋ฅธ ํ์์๊ฒ ์๋ฒ๊ฐ ๋ค์ด๋์๋ค๋ ์์์ ์ ๋ฌ๋ฐ์, ๋ค๋ฆ๊ฒ ๋์ํ๋ ์ผ์ด ์๋๋ก ์๋ ์๋ฆผ ํธ๋ฆฌ๊ฑฐ๋ฅผ ๊ตฌ์ถํด๋์๋ค.
์ฌ์ค ์ด๋ ๊ฒ ์ค์ ํด๋์๋ค๋ง, ์๋ฆผ์ด ์ฌ ์ผ์ด ์๊ธฐ๋ฅผโฆ ๋ฐ๋ผ๊ธด ํ๋ค...๐
๋ํ, ec2 ์๋ฒ์ ๋ํด์๋ง ๋ชจ๋ํฐ๋ง์ ํ๊ฒ ์ค์ ํด๋์์ง๋ง, ๋ฐฑ์๋ ์๋ฒ ๋จ๊ณ์์ ๋ชจ๋ํฐ๋งํ๋ Spring Boot Actuator๋ ์ ์ฉํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ ํ๋ค.