๐ ๊ฐ๋ฐ ๊ณผ์ ์์๋ ์๋ฒ์ ์ ์ํด ๋ก๊ทธ๋ฅผ ํ์ธํ์ฌ ์๋ฒ๋ฅผ ๋ชจ๋ํฐ๋งํ์์ง๋ง, ์ค์ ๋ก ์๋น์ค๋ฅผ ์ด์ํ ๋์๋ ๋งค๋ฒ ์๋ฒ์ ์ ์ํด ๋ก๊ทธ๋ฅผ ์ง์ ํ์ธํ๋ ๋ฐฉ๋ฒ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์ฆ์ ๋์ํ๊ธฐ ์ด๋ ต๋ค๊ณ ํ๋จ๋์๋ค. ๊ทธ๋์ Actuator, Prometheus, Grafana์ ๋์ ํ์ฌ ์๋ฒ ๋ชจ๋ํฐ๋ง ์์คํ ์ ๊ตฌ์ถํด๋ณด๊ธฐ๋ก ํ์๋ค.
Actuator๋ก ์๋ฒ์ ์ํ๋ฅผ ํ์ธํ๊ณ , Actuator์์ ์์งํ ๋ฉํธ๋ฆญ ๋ฐ์ดํฐ๋ฅผ Prometheus์ ์ ์ฅํ๋ค. ๊ทธ๋ฆฌ๊ณ Grafana์์ Prometheus์ ๋ชจ์์ง ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ธฐ ์ฝ๊ฒ ์๊ฐํํ ๊ฒ์ด๋ค. ์ด ์ธ ๊ฐ์ง ๊ธฐ๋ฅ์ ํฉ์น๋ฉด, ์๋ฒ์ ์ํ๋ฅผ ์ค์๊ฐ์ผ๋ก ์ฒดํฌํ ์ ์๋ค !
1๏ธโฃ Actuator
spring boot์๋ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ํ๋ฅผ ์ข ํฉ์ ์ผ๋ก ์ ๋ฆฌํ์ฌ ์ ๊ณตํด์ฃผ๋ ๊ธฐ๋ฅ์ธ actuator ๊ฐ ์๋ค.
actuator ๊ณต์๋ฌธ์ ๋ฅผ ๋ณด๊ณ ์ฐจ๊ทผ์ฐจ๊ทผ ๋ฐ๋ผํด๋ณด์.
์ฐ์ spring boot ํ๋ก์ ํธ์ actuator ์์กด์ฑ์ ์ถ๊ฐํด์ค๋ค.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-actuator'
}
๋์ ๊ฐ์ ๊ฒฝ์ฐ๋ prometheus์ metrics ๋ฅผ ์์งํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์๋ํฌ์ธํธ๋ก prometheus๋ง ์ฌ์ฉํด์ค๋ค. ๊ฐ์์ ์ํฉ์ ๋ฐ๋ผ ์๋ง์ ์๋ํฌ์ธํธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
dependencies {
implementation 'io.micrometer:micrometer-registry-prometheus'
}
ํด๋น ์๋ํฌ์ธํธ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด prometheus์ ์์กด์ฑ๋ ์ถ๊ฐํด์ค๋ค.
application.yml์ ๋ค์๊ณผ ๊ฐ์ ์ค์ ์ ์ถ๊ฐํด์คฌ๋ค.
management:
endpoints:
web:
exposure:
include:
- prometheus # HTTP๋ฅผ ํตํด ์๋ํฌ์ธํธ๋ฅผ ๋
ธ์ถ์ํค๊ฒ ๋ค๋ ๊ฒ
endpoint:
prometheus:
enabled: true # ์๋ํฌ์ธํธ ํ์ฑํ
์๋ํฌ์ธํธ์๋ ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ํฌํจ๋ ์ ์์ผ๋ฏ๋ก HTTP๋ฅผ ํตํด ๋ ธ์ถ์ํค๋ ๊ฒ์ ์ ์คํ๊ฒ ์๊ฐํด์ผํ ๊ฒ ๊ฐ๋ค.
ํด๋น ์๋ํฌ์ธํธ์ spring security์์ ์ผ๋จ ๊ถํ์ด ์์ด๋ ๋ชจ๋ ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ์ค์ ํด์ฃผ์๋ค. ( ํ์ง๋ง ์๋ฒ์ ์ํ๋ฅผ ํ์ธํ ์ ์๋ ์๋ํฌ์ธํธ์ ์๋ฌด๋ ์ ๊ทผํ ์ ์๋ ๊ฒ์ ๋ถ์ ์ ํ๊ธฐ ๋๋ฌธ์ ๋ค์ ๊ธ์์ ๊ฐ์ ํด๋ณด๋ ค๊ณ ํ๋ค ! )
@Bean
public SecurityFilterChain configure(HttpSecurity http) throws Exception {
http.authorizeRequests(requests -> requests
.antMatchers("/auth/**", "/members/kakao", "/members/apple", "/members/google", "/actuator/**").permitAll()
.anyRequest()
.authenticated())
}
{server ip ์ฃผ์}/actuator/prometheus์ ์ ์ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
2๏ธโฃ Prometheus
actuator์์ ์์งํ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋๋ก ์๊ฐํํ๋ฉด ์๋๋?
์๋๋ค. actuator๋ ์ค์๊ฐ ์ ๋ณด๋ง ์กฐํ ๊ฐ๋ฅํ ๋ฟ, ๊ณผ๊ฑฐ์ ์ ๋ณด๋ ํ์ธํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ ๋ฉํธ๋ฆญ์ ์ง์์ ์ผ๋ก ์์งํ๊ณ ๋ณด๊ดํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ญํ ์ ํด์ฃผ๋ prometheus๊ฐ ํ์ํ๋ค.
prometheus๋ 9090ํฌํธ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ EC2์ ์ ์ํด ๋ณด์ ๊ทธ๋ฃน ์ค์ ์ ํด์ค์ผํ๋ค.
๊ทธ๋ฆฌ๊ณ EC2์ prometheus๋ฅผ ์ค์นํด์ค๋ค.
sudo apt-get update
sudo apt-get install -y prometheus prometheus-node-exporter prometheus-pushgateway prometheus-alertmanager
์ค์น๊ฐ ์๋ฃ๋์๋ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ก ์คํํ๊ณ , ์ํ๋ฅผ ํ์ธํด๋ณด์.
sudo systemctl start prometheus
sudo systemctl enable prometheus
sudo systemctl status prometheus
actuator์์ ์์งํ ๋ฉํธ๋ฆญ์ ๊ฐ์ ธ์ค๊ธฐ ์ํด prometheus.yml ํ์ผ์ ๋ฐ๋ก ์ค์ ์ ํด์ผํ๋ค.
prometheus.yml์ ์์น๋ ๋ค์๊ณผ ๊ฐ๋ค.
sudo vi prometheus.yml # prometheus.yml ํธ์ง
์์ ๊ฐ์ ๋ธ๋ญ์ ์ถ๊ฐํด์ฃผ๊ณ ์ฌ์คํํ๋ค.
sudo systemctl restart prometheus # ์ฌ์คํ
๊ทธ๋ฆฌ๊ณ ์๋ฒ์ 9090 ํฌํธ๋ก ์ ๊ทผํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ฐ๋์ด ์ ๋ ๊ฒ์ ํ์ธํด๋ณผ ์ ์๋ค !
3๏ธโฃ Grafana
์ด์ ๋ง์ง๋ง์ผ๋ก ์๊ฐํ๋ฅผ ํด๋ณด์ !
๋ค์ ๋ช ๋ น์ด๋ก ์๋ฒ์ ๊ทธ๋ผํ๋๋ฅผ ์ค์นํด์ค ๊ฒ ์ด๋ค.
sudo apt-get update
sudo apt-get install wget curl gnupg2 apt-transport-https software-properties-common -y
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install grafana -y
๊ทธ๋ผํ๋๋ฅผ ์คํํ๊ณ ์ํ๋ฅผ ํ์ธํด ๋ณด์.
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo systemctl status grafana-server
์๋ฒ IP์ 3000ํฌํธ๋ก ์ ์ํ๊ฒ ๋๋ฉด ๊ทธ๋ผํ๋์ ์ ์์ด ๊ฐ๋ฅํ๋ค. ์ด๊ธฐ username, password๋ ๋ชจ๋ admin์ด๋ค.
prometheus์ ์๋ ๋ฐ์ดํฐ๋ค์ ๊ฐ์ ธ์ค๊ธฐ ์ํด ์ฐ๋ํด๋ณด๊ฒ ๋ค.
prometheus server url์ ๋ด IP์ฃผ์:9090 ๋ฅผ ์ ์ด์ฃผ๋ฉด ๋๋ค.
์๋๋ก ๋ด๋ ค์ ์ญ save & test ๋๋ฅด๊ณ success ๋จ๋ฉด ๋์๋ณด๋๋ฅผ ๋ง๋ค๋ฌ ๊ฐ๋ฉด ๋๋ค.
๐ฅฒ ์ฝ๊ฐ์ ํธ๋ฌ๋ธ ์ํ
EC2์์ 9090ํฌํธ๋ฅผ ๋ด IP์์ ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ์ค์ ํ๋๋ ์ ๊ทผ์ด ์๋์์๋ค ! ๋ชจ๋ ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ์์ ํ๋๊น ์ ๋จ
๋์๋ณด๋๋ฅผ ์์ฑํด๋ณด๊ฒ ๋ค.
๋๋ ๋ค๋ฅธ ๋์๋ณด๋ ํ ํ๋ฆฟ์ ์ฌ์ฉํ ๊ฒ์ด๋ค. ๋ณธ์ธ์ด ์ง์ ์ปค์คํ ํ ๊ฒ ์ด๋ผ๋ฉด new dashboard๋ฅผ ๋๋ฅด๋ฉด ๋๋ค.
๋์๋ณด๋ ํ ํ๋ฆฟ์ ์ฌ๊ธฐ์ ํ์ธํ ์ ์๋ค.
๊ฐ์ ธ์ฌ ๋์๋ณด๋์ ๋ฒํธ๋ฅผ ์ ์ด์ฃผ๊ณ load
๋์๋ณด๋์ ์ด๋ฆ๊ณผ prometheus๋ฅผ ์ ๋ถ๋ฌ์ค๊ณ import ํ๋ฉด ๋์ด๋ค.
๊ทธ๋ผ ์ด๋ ๊ฒ ๋ค์ํ ๊ฒ๋ค์ ๋ชจ๋ํฐ๋ง ํ ์ ์์ต๋๋ค. ๋!
๊ธด ๊ธ ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค :)
๋ค์ ๊ธ๋ก๋ alert ์ค์ ํ๋ ๋ฐฉ๋ฒ๊ณผ actuator๋ฅผ ์์ ํ๊ฒ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ํด ์์ฑํด๋ณด๊ฒ ์ต๋๋ค.
๐ ์ฐธ๊ณ
'Server' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ฐ์ ํ๊ฒฝ(Windows)์์ Oracle Database์ ์๊ฒฉ ์ ์ํ๊ธฐ (0) | 2024.01.18 |
---|---|
Linux iptables๋ก ํน์ ํฌํธ๋ง ํ์ฉํ๊ธฐ (0) | 2024.01.16 |
๋ถํ ํ ์คํธ๋ฅผ ํด๋ณด์ ! - jMeter ์ค์น๋ถํฐ ํ ์คํธ๊น์ง (1) | 2023.09.13 |
๋ถํ ํ ์คํธ๋ฅผ ํด๋ณด์ ! - nGrinder (0) | 2023.09.12 |
๋ฐฐํฌ ๋์ ๊ธฐ - Spring boot + Docker + EC2 (0) | 2023.06.30 |