ํํ MVP๋ฅผ ๋ชจ๋ ๊ตฌํ ์๋ฃํ ์์ ์์ ํด์ผํ ๊ฒ์ ๋ช ํํ๋ค.
์ผ๋จ ๋ฆฌํฉํ ๋ง์ผ๋ก ๊ผด๋ณด๊ธฐ ์ซ์ ์ฝ๋๋ฅผ ๋ชจ๋ ์๋ก ๋ง์ถฐ๋๊ณ , ์ฑ๋ฅ ๊ฐ์ ์ ํ๊ธฐ๋ก ํ๋ค.
์ฑ๋ฅ ๊ฐ์ ์ ์ํด์ ์ ๋ ์งํ๋ฅผ ์ป์ด ๋น๊ตํ๋ ๊ณผ์ ์ด ํ์ํ๋ค.
๋ง๋งํ๋ ์ฐจ์ ๊ทธ๋ผํ๋, ํ๋ก๋ฉํ ์ฐ์ค๋ผ๋ ์ข์ ๋ชจ๋ํฐ๋ง ๋๊ตฌ๋ฅผ ์๊ฒ ๋์๋ค.
์ด ๊ธ์ ํตํด ๋ชจ๋ํฐ๋ง ์๋ฒ๋ฅผ ๋ง๋ค๊ณ , ์ฑ๋ฅ์ ๋น๊ตํ ์ ์๋ ํ๊ฒฝ์ ๋ง๋ จํ๋ ค๊ณ ํ๋ค.
๋ง์ง๋ง์ docker compose ๋ก ์ฝ๊ฒ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ๋ ์ถ๊ฐํด๋จ๋ค.
ในใ
๊ฐ๋จํจ
๋ชจ๋ํฐ๋ง ๋์์ด ์์ด์ผ ํ๋ค.
๋ ธํ์ฌ์ ๋งํ๋๋ฐ, ๋ชจ๋ํฐ๋ง ์๋ฒ๋ ๋ฐ๋ก ๊ตฌ์ถํ๋ ๊ฒ์ด ์ข๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด ์๋น์ค์ ํ์ํ ์์๊ณผ ํธ๋ํฝ์ด ๋ชจ๋ํฐ๋ง์ ์ํด์ ์ค์ด๋ค ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ผ๋จ ์๋ง์กด EC2๋ฅผ ํ์ฉํด์ ์๋น์ค ์๋ฒ๋ฅผ ๋ง๋ค์๋ค๋ฉด ์ธ์คํด์ค๊ฐ ๋ฐ๋ก ์์ฑ๋์ด ์์ ๊ฒ์ด๋ค.
์ฐ๋ฆฐ ์ด ์๋ฒ์ Spring FrameWork ์์ ์ ๊ณตํ๋ Actuator ๋ฅผ ํ์ฉํด์ ๋ชจ๋ํฐ๋ง ์งํ๋ฅผ ์์งํ ๊ฑฐ๋ค.
Loki
, Node Exporter
, Spring Actuator
๋ฑ ์ฌ๋ฌ ์งํ๊ฐ ์์ผ๋ ๋๋ Spring Actuator ๋ฅผ ์ผ๋ค.
์ผ๋จ ๋ค๋ฅธ ๊ฒ๋ณด๋ค ์ ์ฉํ๊ธฐ ํจ์ฌ ์ฝ๊ณ ๋น ๋ฅด๋ค.
์ผ๋จ ๋์ค์ ๋ ๋น๊ตํด๋ณด๊ธฐ๋ก ํจ.
์๋ฒ์ ์ ์ฉํ๋ฌ ๊ฐ๋ณด์ฆ์.
# build.gradle
dependencies {
// Spring Actuator
implementation 'org.springframework.boot:spring-boot-starter-actuator'
// Prometheus
runtimeOnly 'io.micrometer:micrometer-registry-prometheus'
}
monitoring ํ๋กํ์ผ๋ก ์ค์ ํ ๋ด์ฉ์ด๋ค.
ํฌํธ๋ฒํธ๋ฅผ 9292
๋ก ํ๋ค.
Spring Actuator ๊ธฐ๋ณธ ํฌํธ๋ 9090
์ด๋ค.
ํฌํธ ๋ฒํธ๋ฅผ ๋ฐ๊พผ ์ด์ ๋ ๋ณด์ ๋๋ฌธ.
ํฌํธ๋ฅผ ์์๋ก ๋ณ๊ฒฝํ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์ฌ๋์ ์ฝ๊ฒ ์์ธก์ด ๋ถ๊ฐ๋ฅํ๋ค๊ณ ํ๋ค.
๋ค๋ฅธ ๋ถ๋ถ์ Spring Actuator ๋ฅผ ํตํด์ ์ ๊ทผ ๊ฐ๋ฅํ Endpoint ๋ฅผ ์ค์ ํ๋ค.
include ๋ฅผ ํตํด ์ค์ ํ๋ค.
์ด๋ ๊ฒ ์ํ๋ ์๋ ํฌ์ธํธ๋ฅผ ์ด์ด๋ ์๋ ์๊ณ , include: โ*โ
์ ๊ฐ์ด ๋ชจ๋ ์๋ํฌ์ธํธ๋ฅผ ์ด์ด๋ ์๋ ์๋ค.
# application-monitoring.yml
management:
server:
port: 9292
endpoint:
metrics:
enabled: true
prometheus:
enabled: true
endpoints:
web:
exposure:
include: health, info, metrics, prometheus
EC2 ์ธ์คํด์ค > ๋ณด์ ๊ทธ๋ฃน > ์ธ๋ฐ์ด๋ ๊ท์น
์ด๊ฑธ ์ค์ ํด์ผ ํ๋ค.
๋ณด๋ ๋ฐ์ ๊ฐ์ด 9292 ํฌํธ๋ก ์ด์ด๋ ์ธ๋ฐ์ด๋ ๊ท์น์ ์ค์ ํ๋ฉด ๋๋ค.
์๋ณธ CM์ 0.0.0.0/0
์ผ๋ก ๋ชจ๋ ์ธ๋ฐ์ด๋๋ฅผ ํ์ฉํ๋ค.
http://{IP์ฃผ์}:ํฌํธ๋ฒํธ/actuator
๋ก ์ ๊ทผํ์๋
์ด๋ ๊ฒ ์ค์ ์ ์ถ๊ฐํ ์๋ํฌ์ธํธ๊ฐ ๋ณด์ด๋ฉด ๋๊ฑฐ๋ค.
์์์ ์ค๋ช ํ๋ค. ์๋น์ค์ฉ ์๋ฒ์ ํธ๋ํฝ, ์์์ ๋๋ ์ฐ์ง ์๋๋ก ๋ชจ๋ํฐ๋ง ์๋ฒ๋ฅผ ๋ฐ๋ก ๊ตฌ์ถํด์ผ ํ๋ค.
๋ฐ๋ผ์ EC2 ์ธ์คํด์ค๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด์ผ ํ๋ค.
์ด๋ ๊ฒ ๋ง๋ค์๋ค.
๋ค๋ฅธ EC2 ์ ๋ณ๋ค๋ฅธ ์ฐจ์ด์ ์ ์๋ค.
์์ง ์คํธ๋ ์ค ํ
์คํธ๋ฅผ ์์ ํ์ง๋ ์์์ ํ๋ฆฌํฐ์ด micro ์ธ์คํด์ค
๋ก ๋ง๋ค์๋ค.
๋น์ธ๊ธด ํ์ง๋ง, ํ๋ ฅ์ IP๋ฅผ ๋ง๋ค์ด์ ๋งค๋ฒ ํผ๋ธ๋ฆญ IP ์ฃผ์๋ก ์ ๊ทผํ์ง ์๋๋ก ํ๋ค.
์ฐธ๊ณ ๋ก, Amazon Linux ๋ก ๋ง๋ค์๋ค.
๋ฐฉ๊ธ ๋ง๋ EC2 ์ธ์คํด์ค ํ๋ก๋ฉํ ์ฐ์ค๋ฅผ ์ค์นํ ๊ฑฐ๋ค.
์ต์ ๋ฒ์ ์ค์น ใฑใฑ
wget https://github.com/prometheus/prometheus/releases/download/v2.45.1/prometheus-2.45.1.linux-amd64.tar.gz
tar xzvf prometheus-2.45.1.linux-amd64.tar.gz
๋จผ์ ์์ถ ํด์ ํ ํด๋๋ก ์ด๋ํด์ ์ค์ ํ์ผ์ ์์ ํ๋ฉด ๋๋ค.
-- yml ํ์ผ์ด ์๋ ๊ฒฝ๋ก๋ก ์ด๋
cd prometheus-2.45.1.linux-amd64/
-- prometheus yml ํ์ผ ์ค์
sudo vim prometheus.yml
ํ๋ก๋ฉํ ์ฐ์ค๋ฅผ ์ค์นํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์ธํ ๋๋ yml ํ์ผ์ด๋ค.
์ฌ๊ธฐ์ ์ฃผ๋ชฉํ ๊ฒ์ ์๋ ์ฝ๋๋ก ๋นผ๋จ๋ค.
์๋๋๋ก ์ค์ ํ ํ์ ESC
+ :wq
๋ก yaml ํ์ผ์ ์ ์ฅํด์ผ ํ๋ค.
scrape_configs:
-- ์์
์ด๋ฆ (์๊ฑฐ๋ ๊ฐ๋ฅ)
- job_name: "prometheus"
-- ์งํ๋ฅผ ๊ฐ์ ธ์ค๋ ์ฃผ๊ธฐ
scrape_interval: 3s
-- ํ๋ก๋ฉํ
์ฐ์ค ์ ๊ทผํ๋ endpoint ๊ฒฝ๋ก
metrics_path: '/actuator/prometheus'
-- ํ๋ก๋ฉํ
์ฐ์ค ๊ฐ์ ธ์ค๋ ๋์ ์๋ฒ ๋๋ฉ์ธ
static_configs:
- targets: ["{๋ชจ๋ํฐ๋ง ๋์ IP์ฃผ์}:{๋ชจ๋ํฐ๋ง ๋์ ํฌํธ๋ฒํธ}"]
๋ชจ๋ํฐ๋ง EC2 ์ธ์คํด์ค๊ฐ ์คํ๋๋ฉด ๋ฐ๋ก ๋ชจ๋ํฐ๋ง ์๋น์ค๊ฐ ์คํ๋๋๋ก ํ๊ณ ์ถ๋ค.
๊ทธ๋ฌ๋ฉด ์๋น์ค๋ฅผ ๋ฑ๋กํด์ผ ํ๋ค.
-- system ์ผ๋ก ์ด๋
cd /etc/systemd/system
-- prometheus ์๋น์ค ํ์ผ ์์ฑ
sudo vim prometheus.service
์ด ๋ด์ฉ์ ๋ณต๋ถํด์ฃผ๋ฉด ๋๋ค.
๊ทผ๋ฐ ์๋ ๋ง๋ค์ด์ ธ ์๋ ๋ด์ฉ๊ณผ ๋ณ ์ฐจ์ด ์์๊ฑฐ์.
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
restart=on-failure
ExecStart=/etc/prometheus/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus \
--web.console.templates=/etc/prometheus/console \
--web.console.libraries=/etc/prometheus/console_libraries \
--web.listen-address=0.0.0.0:9090 \
--web.external-url=
[Install]
WantedBy=multi-user.target
-- ์๋น์ค ์ข
๋ฃ (์ํด๋ ๋จ)
-- ๊ทผ๋ฐ ๋ง์ฝ ์ค์ ์ ๋ณ๊ฒฝํ๊ณ ์ถ์ผ๋ฉด ๋จผ์ ๋ฉ์ถฐ์ผ ํจ.
sudo systemctl stop prometheus.service
-- ๋ฐ๋ชฌ ๋ค์๋ก๋ฉ
sudo systemctl daemon-reload
-- ์๋น์ค ์ฌ์์
sudo systemctl restart prometheus.service
-- ์๋น์ค ์ํ ํ์ธ
sudo systemctl status prometheus.service
์ด๋ ๊ฒ active(running)
์ด๋ฉด, ์ฑ๊ณต์ด๋ค.
๊ทธ ์ ์ ๋ณด์ ๊ทธ๋ฃน์ผ๋ก ํด๋น ํฌํธ๋ฅผ ์ด์ด๋์.
9090
ํฌํธ๋ฅผ ์ด์ด์ผ ํ๋ค.
์์ ๋ง์ฐฌ๊ฐ์ง๋ค.
http://{๋ชจ๋ํฐ๋ง์๋ฒIP}:9090
ํ๋ก๋ฉํ
์ฐ์ค๋ ๊ธฐ๋ณธ ํฌํธ๊ฐ 9090
์ด๋ค.
ํด๋น ๊ฒฝ๋ก๋ก ์์ฒญํ๋ฉด ์ด ํ์ด์ง๊ฐ ๋์จ๋ค.
์ ๋์ค๋ฉด ์ ๋ฐฐ๋์์ status > targets
์ฌ๊ธฐ๊น์ง ๋์์ผ๋ฉด ์ ๋ ๊ฑฐ๋ค.
์ด์ ์งํ๋ฅผ ์ป์ ์๋ ์๊ณ , ์ค์ ๋ก ์ป๊ธฐ๋ ํ๋ค.
์ฐ๋ฆฌ๋ ์ด๊ฑธ ํตํด์ ๊ทธ๋ผํ๋๋ผ๋ UI ๋ฅผ ํตํด ํ๋ฉด์ ๋์, ์ฐ๋ฆฌํ ์ ์ฒด๊ฐ ํ์ธํ ์ ์๋๋ก ํ๋ฉด ๋๋ค.
์ต์ ๋ฒ์ ใฑใฑ
์ฐธ๊ณ ๋ก ์ฐ๋ฆฌ๋ ์๋ง์กด ๋ฆฌ๋
์ค ๋ฒ์
์ผ๋ก ์ค์นํด์ผ ํ๋ค.
Download Grafana | Grafana Labs
-- ์ค์น
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-10.2.2.linux-amd64.tar.gz
-- ์์ถ ํด์
tar -zxvf grafana-enterprise-10.2.2.linux-amd64.tar.gz
sudo systemctl enable grafana-server.service
sudo systemctl start grafana-server.service
sudo systemctl status grafana-server.service
์ค์น ๋ค ํ์ผ๋ฉด ๋ณด์ ๊ทธ๋ฃน ์ค์ ํ๋ฉด ๋๋ค.
๊ทธ๋ผํ๋ ๊ธฐ๋ณธ ํฌํธ๋ 3000
์ด๋ค.
์ด๊ฑธ ์ด์ด์ฃผ๋ฉด ๋๋ค.
http://{๋ชจ๋ํฐ๋งIP}:3000
ํด๋น ๊ฒฝ๋ก๋ก ์ด๋ํ๋ฉด ๊ทธ๋ผํ๋ ๋ก๊ทธ์ธ ์ฐฝ์ด ๋ฌ๋ค.
์ด๊ธฐ ID / PassWord
๋ admin / admin
์ด๋ค.
์ด๋ ๊ฒ ๋๋๋ก ์ค์ ํด์ฃผ๋ฉด ๋๋ค.
๋ณ๊ฑฐ ์๋ค.
ํ๋ก๋ฉํ
์ฐ์ค ์ค์ ํ๊ณ , ๋ชจ๋ํฐ๋ง ์๋ฒ IP:ํฌํธ๋ฒํธ
๋ฅผ ์ค์ ํด์ฃผ๋ฉด ๋๋ค.
์ฌ๋ฌ ๋ฐฉ๋ฒ์ด ์๋ค.
๋๋ Spring Boot 2.1 System Monitor
๋ฅผ import ํด์ ๋์๋ณด๋๋ก ์ฌ์ฉํ๋ค.
์ด์ ์ด ํ๋ฉด์ผ๋ก ์ฐ๋ฆฌํ์ ์ฑ๋ฅ ๊ฐ์ ์ ํ ์ ์๊ฒ ๋๊ฑฐ๋ค.
services:
prometheus:
image: prom/prometheus:main
container_name: prometheus
restart: always
ports:
- '{ํ๋ก๋ฉํ
์ฐ์ค ํฌํธ๋ฒํธ}:{ํ๋ก๋ฉํ
์ฐ์ค ํฌํธ๋ฒํธ}'
volumes:
- ./prometheus.yaml:/etc/prometheus/prometheus.yml
grafana:
image: grafana/grafana:main
container_name: grafana
restart: always
ports:
- '{๊ทธ๋ผํ๋ ํฌํธ๋ฒํธ}:{๊ทธ๋ผํ๋ ํฌํธ๋ฒํธ}'
์ฑ๋ฅ ๊ฐ์ ์ ๋ํ ์ ๋ ์งํ๋ฅผ ๋ฐ๋ก ์์งํ ์ ์๋ ํ๊ฒฝ์ ๋ง๋ จํ๋ค.
์ด์ ๋ ๊ฐ์ด๋, ํ ์คํธ๋ก๋ง ํ์ธํ๋ ๊ฒ์ด ์๋๋ผ, ์ค์ ๋ก ํ๋ก ํธ์์ ์์ฒญ์ ๋ ๋ ค๋ณด๊ณ ์ด๋ค ์์ ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋์ง ํ์ธํ ์ ์๊ฒ ๋์๋ค.
์ผ๋ฐ ์ ์ ์๊ฒ๋ ๋ฐฐํฌํด์ ํ์ธํ๊ฒ ํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ ๋ค.
์ข์ ๊ธ ๊ฐ์ฌํฉ๋๋ค.
์ฝ์ผ๋ฉด์ ๋ชจ๋ํฐ๋ง ์๋ฒ ๊ตฌ์กฐ์ ๋ํด์ ํ์ ํ ์ ์์์ด์ ๐โโ๏ธ