1. ๊ฐ์
๋ก๊ทธ ์์ง์ ํ๊ธฐ ์ํ ์๋ฃจ์ ์ด๋ผ๊ณ ํ๋ฉด ๋น์ฐํ ELK(Elasticsearch, Logstash, Kibana)๋ฅผ ๋ ์ฌ๋ฆด ์ ์๋ค. ํ์ง๋ง ๋ฌด๊ฑฐ์ด ELK๋ฅผ ๊ฐ๋นํ๊ธฐ์ ์๋ฒ ์คํ์ด ๋ฎ์๊ณ , ๋น๊ต์ ๊ฐ๋ณ๊ฒ ์คํํ ์ ์๋ PromTail, Loki, Grafana๋ฅผ ๋์ ํ๊ฒ ๋์๋ค.
๋ํ ๋ฉํธ๋ฆญ ์์ง์ Prometheus, Grafana๋ก ์ด๋ฏธ ์งํํ๊ณ ์์๊ธฐ ๋๋ฌธ์ ๋์ ์ ๊ทผ๊ฑฐ๋ ๋์ฑ ๋ช ํํ๋ค.
์ด์ฉ๋ค๋ณด๋ ๋ก๊ทธ ์์ง ํ๊ฒฝ ๊ตฌ์ถ๋ง 3๋ฒ์งธ์ด๋ค. Cloud Watch, ELK, Loki..
2. Grafana & Promtail & Loki ์ค์น
Grafana๋ ์คํ ์์ค๋ก ์ ๊ณต๋๋ ๋์๋ณด๋ ๋ฐ ์๊ฐํ ํ๋ซํผ์ด๋ค. ๊ทธ๋ผํ๋๋ ๋ค์ํ ๋ฐ์ดํฐ์์ค๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ๋์๋ณด๋์ ๊ทธ๋ํ ๋ฑ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์๊ฐํํ ์ ์์ผ๋ฉฐ ํ๋ก๋ฉํ ์ฐ์ค(Prometheus), ๋กํค(Loki), ์๋ผ์คํฑ์์น ๋ฑ๊ณผ ํตํฉ์ด ์ ๋์ด ์๋ค.
Promtail์ ๋ก๊ทธ ํ์ผ์ ์ค์๊ฐ์ผ๋ก ๊ฐ์ํ๊ณ ์๋ก์ด ๋ก๊ทธ ๋ฉ์์ง๊ฐ ์ถ๊ฐ๋ ๋๋ง๋ค ๋ก๊ทธ๋ฅผ ์ฝ์ด์ ๋กํค๋ก ์ ์กํ๋ค. ํ๋กฌํ ์ผ์ ๋ก๊ทธ ํ์ผ์ ์ง์ ์ฝ์ด์ ๋กํค์ ์ ์กํ๋ ๊ฒ์ด ์๋ tailing์ ์ฌ์ฉํ์ฌ ์ค์๊ฐ์ผ๋ก ๋ก๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋๋ค. ์ด๋ ๋ก๊ทธ ํ์ผ์ ์ฝ๋ ๊ณผ์ ์์ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ํฅ์ ๋ฏธ์น์ง ์์ผ๋ฉฐ ๋์ ์ฒ๋ฆฌ๋์ ์ ๊ณตํ๋ค. ๋ฐ๋ผ์, ๋๊ท๋ชจ ๋ถ์ฐ ์์คํ ์์ ๋ฐ์ํ๋ ๋ก๊ทธ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์์งํ๊ณ ๋ถ์ํ ์ ์๋ค.
Loki๋ ํ๋ก๋ฉํ ์ฐ์ค์ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ทธ๋ผํ๋ ๋ฉ์ค(Grafana Labs)์์ ๊ฐ๋ฐํ๊ณ ์๋ค. ํ๋ก๋ฉํ ์ฐ์ค๋ ์์ง๋ ๋ฉํธ๋ฆญ์ ์ ์ฅํ๊ณ ๊ทธ๋ํ๋ก ์๊ฐํํ ์ ์๋๋ก ์ง์ํ๋ ์์คํ ์ด๋ค. ํ์ง๋ง, ๋ก๊ทธ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ ๊ฒ์ํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์๋๋ค. ์ด์ ๋ฐํด ๋กํค๋ ํ๋ก๋ฉํ ์ฐ์ค์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์์ธ ํ ์คํธ ๊ธฐ๋ฐ ๋ก๊ทธ ํฌ๋งท์ ์ฌ์ฉํ์ฌ ๋ก๊ทธ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ ์ ์ฅํ๋ค.
๋๋ ๋์ปค๋ฅผ ์ฌ์ฉํด ์ปจํ ์ด๋ ํ๊ฒฝ์์ ์ค์นํ๋ค.
- Grafana ์ค์น
docker run -d --name=grafana -p 3000:3000 grafana/grafana
- Loki ์ค์น
docker run -d --name=loki -p 3100:3100 grafana/loki
- Promtail ์ค์น
docker run -d --name=promtail -v /home/ubuntu/log:/logs grafana/promtail
promtail์ ์ธ๋ถ์์ ์ ์ํ ๊ฒ ์๋๊ธฐ ๋๋ฌธ์ port๋ ๋ฐ๋ก ์ค์ ํ์ง ์์๋๋๋ค.
๋์ , ๋ณผ๋ฅจ์ ๊ฐ์์ ๋ง๊ฒ ์ ์ค์ ํด์ฃผ์. ๋์ ๊ฒฝ์ฐ /home/ubuntu/log ๊ฒฝ๋ก์ Spring Boot log๋ฅผ ํ์ผ๋ก ๊ธฐ๋กํด๋๊ณ ์์๊ธฐ ๋๋ฌธ์ ์์ ๊ฐ์ด ์์ฑํ๋ค.
3. ์ค์ ํ์ผ ์์
์ด์ Loki, Promtail์ ymlํ์ผ์ ์์ ํด์ค์ผ ํ๋ค.
๋จผ์ Promtail์ด๋ค.
docker exec -it promtail /bin/bash // ์ปจํ
์ด๋ ๋ด๋ถ ์ ์
cd /etc/promtail // confํ์ผ ์์น
- config.yml (Promtail)
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://[ip์ฃผ์]:3100/loki/api/v1/push
scrape_configs:
- job_name: [job name]
static_configs:
- targets:
- localhost
labels:
job: [label name]
__path__: [log ํ์ผ ๊ฒฝ๋ก]
Clients์ url์ Promtail์ด ๋ก๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ Loki ์๋ฒ์ ์ฃผ์์ด๋ค.
๋๋ ํ๋์ job๋ง ๋ฑ๋ก์์ผฐ์ง๋ง ๋ง์ฝ ์๋ฌ ๋ก๊ทธ ๋ ๋ฒจ ๋ณ๋ก ๋ก๊ทธ๋ฐฑ์ ํ๊ณ ์๋ค๋ฉด ์ฌ๋ฌ ๊ฐ ์ค์ ๊ฐ๋ฅํ๋ค.
๋ค์์ Promtail์ ์ค์ ํ์ผ์ ์์ ํด์ฃผ์.
docker exec -it promtail /bin/bash // ์ปจํ
์ด๋ ๋ด๋ถ ์ ์
cd /etc/loki // confํ์ผ ์์น
- local-config.yaml (Loki)
auth_enabled: false
server:
http_listen_port: 3100 // ์๋ฒ ๋ฆฌ์ค๋ ํฌํธ ์ค์
common:
path_prefix: /loki
storage:
filesystem:
chunks_directory: /loki/chunks
rules_directory: /loki/rules
replication_factor: 1
ring:
kvstore:
store: inmemory
schema_config:
configs:
- from: 2020-10-24
store: boltdb-shipper // ์ธ๋ฑ์ค ์ ์ฅ์ ์ ํ
object_store: filesystem // ๊ฐ์ฒด ์ ์ฅ์ ์ ํ
schema: v11
index:
prefix: index_
period: 24h // ์ธ๋ฑ์ค ํ์ผ ์์ฑ ์ฃผ๊ธฐ
ruler:
alertmanager_url: http://localhost:9093
4. Grafana์์ ๋ก๊ทธ ํ์ธ
prometheus์ ๋ง์ฐฌ๊ฐ์ง๋ก Loki๋ Data sources๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ , Dashboard์ ์ฐ๊ฒฐํ๋ฉด ๋ก๊ทธ๋ฅผ ํ์ธํ ์ ์๋ค.