๐น ๊ฐ์
์ด๋ฒ ๊ธ์์๋ Istio์์ Jaeger์ Zipkin์ ํ์ฉํ์ฌ ๋ถ์ฐ ํธ๋ ์ด์ฑ์ ์ค์ ํ๊ณ ์ฑ๋ฅ์ ๋ถ์ํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋ง์ดํฌ๋ก์๋น์ค ํ๊ฒฝ์์๋ ์ฌ๋ฌ ์๋น์ค๊ฐ ์๋ก ํธ์ถํ๋ฉด์ ํธ๋์ญ์
์ด ๋ณต์กํด์ง๊ธฐ ๋๋ฌธ์, ํธ๋ ์ด์ฑ์ด ํ์์ ์
๋๋ค.
Istio๋ Jaeger ๋ฐ Zipkin๊ณผ ํตํฉํ์ฌ ์๋น์ค ๊ฐ ํธ๋์ญ์
ํ๋ฆ์ ์ถ์ ํ๊ณ ์ฑ๋ฅ์ ๋ถ์ํ ์ ์์ต๋๋ค.
์ด ๊ธ์์๋ ๋ถ์ฐ ํธ๋ ์ด์ฑ ๊ฐ๋ , Istio์์ Jaeger ๋ฐ Zipkin ์ค์น ๋ฐฉ๋ฒ, ํธ๋์ญ์ ๋ถ์ ์์ ๋ฅผ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
๐น 1. ๋ถ์ฐ ํธ๋ ์ด์ฑ(Distributed Tracing)์ด๋?
โ 1.1 ๋ถ์ฐ ํธ๋ ์ด์ฑ ๊ฐ๋
๋ถ์ฐ ํธ๋ ์ด์ฑ(Distributed Tracing)์ ๋ง์ดํฌ๋ก์๋น์ค ๊ฐ ์์ฒญ ํ๋ฆ์ ์ถ์ ํ๋ ๊ธฐ๋ฒ์
๋๋ค.
๋ง์ดํฌ๋ก์๋น์ค ํ๊ฒฝ์์๋ ์ฌ๋ฌ ๊ฐ์ ์๋น์ค๊ฐ ํ๋ ฅํ์ฌ ํ๋์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์,
์ด๋ค ์๋น์ค์์ ๋ณ๋ชฉ์ด ๋ฐ์ํ๋์ง ํ์ธํ๋ ค๋ฉด ์์ฒญ์ ์ ์ฒด ํ๋ฆ์ ์ถ์ ํ ํ์๊ฐ ์์ต๋๋ค.
๋ถ์ฐ ํธ๋ ์ด์ฑ์ ์ฃผ์ ๊ธฐ๋ฅ
- ์๋น์ค ๊ฐ ์์ฒญ ํ๋ฆ ์ถ์ ๊ฐ๋ฅ
- ์ฑ๋ฅ ๋ณ๋ชฉ ์ง์ ํ์ ๋ฐ ์ต์ ํ ๊ฐ๋ฅ
- ์ ํ๋ฆฌ์ผ์ด์ ์ฅ์ ๋ฐ์ ์ ์์ธ ๋ถ์ ๊ฐ๋ฅ
- ํธ๋์ญ์ ๋ณ ์๋ต ์๊ฐ ๋ถ์ ๋ฐ ์๋น์ค ๊ฐ ํธ์ถ ๊ด๊ณ ์๊ฐํ ๊ฐ๋ฅ
๐ก Istio๋ ๊ธฐ๋ณธ์ ์ผ๋ก Envoy ํ๋ก์๋ฅผ ํตํด ํธ๋ ์ด์ฑ ๋ฐ์ดํฐ๋ฅผ ์์งํ๋ฉฐ, Jaeger ๋๋ Zipkin์ ์ฌ์ฉํ์ฌ ๋ถ์ํ ์ ์์ต๋๋ค.
๐น 2. Istio์์ Jaeger ์ค์น ๋ฐ ์ค์
โ 2.1 Istio์์ Jaeger๋ฅผ ์ฌ์ฉํ๋ ์ด์
Jaeger๋ CNCF(Cloud Native Computing Foundation)์์ ๊ด๋ฆฌํ๋ ์คํ์์ค ๋ถ์ฐ ํธ๋ ์ด์ฑ ์์คํ
์
๋๋ค.
Istio๋ ๊ธฐ๋ณธ์ ์ผ๋ก Jaeger์ ํตํฉ๋์ด ์์ผ๋ฉฐ, Envoy ํ๋ก์์์ ํธ๋ ์ด์ฑ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ์์งํฉ๋๋ค.
Jaeger์ ์ฃผ์ ๊ธฐ๋ฅ
- ์๋น์ค ๊ฐ ํธ๋์ญ์ ์ถ์
- ๊ฐ ์์ฒญ๋ณ ์๋ต ์๊ฐ ๋ถ์
- ์๋น์ค ํธ์ถ ๊ด๊ณ ์๊ฐํ
- ์ฑ๋ฅ ๋ฌธ์ ๋ฐ ๋ณ๋ชฉ ํ์ ๋ถ์
โ 2.2 Istio์์ Jaeger ์ค์นํ๊ธฐ (Helm ์ฌ์ฉ)
Istio์์ Jaeger๋ฅผ ์ค์นํ๋ ค๋ฉด Helm์ ์ฌ์ฉํ์ฌ ๊ฐ๋จํ๊ฒ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
helm install istio-jaeger istio/jaeger -n istio-system
์ค์น ํ Jaeger๊ฐ ์ ์์ ์ผ๋ก ์คํ๋๊ณ ์๋์ง ํ์ธํฉ๋๋ค.
kubectl get pods -n istio-system | grep jaeger
์ถ๋ ฅ ์์ :
istio-jaeger-6b798fbdc8-txz8m 1/1 Running 0 5m
โ 2.3 Jaeger ์น UI ์ ์ํ๊ธฐ
Jaeger์ ์น UI์ ์ ์ํ๋ ค๋ฉด ํฌํธ๋ฅผ ํฌ์๋ฉํฉ๋๋ค.
kubectl port-forward -n istio-system svc/jaeger-query 16686:16686
์น ๋ธ๋ผ์ฐ์ ์์ http://localhost:16686 ์ ์ ์ํ๋ฉด Jaeger UI๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
๐น 3. Istio์์ Zipkin ์ค์น ๋ฐ ์ค์
โ 3.1 Istio์์ Zipkin์ ์ฌ์ฉํ๋ ์ด์
Zipkin์ Twitter์์ ๊ฐ๋ฐํ ์คํ์์ค ๋ถ์ฐ ํธ๋ ์ด์ฑ ์์คํ
์ผ๋ก,
Jaeger์ ์ ์ฌํ๊ฒ ์๋น์ค ๊ฐ ํธ๋์ญ์
์ ์ถ์ ํ๊ณ ์ฑ๋ฅ์ ๋ถ์ํ ์ ์์ต๋๋ค.
Zipkin์ ์ฃผ์ ๊ธฐ๋ฅ
- ์๋น์ค ํธ์ถ ๊ด๊ณ ์ถ์ ๋ฐ ์๊ฐํ
- ํธ๋์ญ์ ์ง์ฐ ์๊ฐ ๋ถ์
- API ์์ฒญ ํ๋ฆ ๋ชจ๋ํฐ๋ง
โ 3.2 Istio์์ Zipkin ์ค์นํ๊ธฐ (Helm ์ฌ์ฉ)
Istio์์ Zipkin์ ์ค์นํ๋ ค๋ฉด Helm์ ์ฌ์ฉํ์ฌ ๋ฐฐํฌํ ์ ์์ต๋๋ค.
helm install istio-zipkin istio/zipkin -n istio-system
์ค์น ํ Zipkin์ด ์ ์์ ์ผ๋ก ์คํ๋๊ณ ์๋์ง ํ์ธํฉ๋๋ค.
kubectl get pods -n istio-system | grep zipkin
์ถ๋ ฅ ์์ :
istio-zipkin-5f7d8f74d7-cx7ms 1/1 Running 0 3m
โ 3.3 Zipkin ์น UI ์ ์ํ๊ธฐ
Zipkin์ ์น UI์ ์ ์ํ๋ ค๋ฉด ํฌํธ๋ฅผ ํฌ์๋ฉํฉ๋๋ค.
kubectl port-forward -n istio-system svc/zipkin 9411:9411
์น ๋ธ๋ผ์ฐ์ ์์ http://localhost:9411 ์ ์ ์ํ๋ฉด Zipkin UI๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
๐น 4. Istio์์ ํธ๋ ์ด์ฑ ๋ฐ์ดํฐ ํ์ธํ๊ธฐ
โ 4.1 Istio์์ ํธ๋ ์ด์ฑ ํ์ฑํ ํ์ธ
Istio๊ฐ ํธ๋ ์ด์ฑ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ ์๋์ง ํ์ธํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํฉ๋๋ค.
kubectl get cm -n istio-system istio
์ถ๋ ฅ ์์ :
data:
tracing:
sampling: "100"
๐ก sampling: "100"์ด๋ฉด, Istio๊ฐ ๋ชจ๋ ์์ฒญ์ ํธ๋ ์ด์ฑ ๋ฐ์ดํฐ๋ฅผ ์์งํ๊ณ ์์์ ์๋ฏธํฉ๋๋ค.
โ 4.2 Jaeger์์ ์๋น์ค ํธ๋์ญ์ ์กฐํ
Jaeger ์น UI์์ ํธ๋์ญ์ ์ ์กฐํํ๋ ๋ฐฉ๋ฒ:
1๏ธโฃ Jaeger UI ์ ์ (http://localhost:16686)
2๏ธโฃ ์๋น์ค ์ ํ (my-service.default.svc.cluster.local)
3๏ธโฃ ํธ๋์ญ์
ID(Trace ID) ๊ฒ์ ๋ฐ ๋ถ์
โ 4.3 Zipkin์์ ์๋น์ค ํธ์ถ ํ๋ฆ ์กฐํ
Zipkin ์น UI์์ ์๋น์ค ํธ์ถ ํ๋ฆ์ ํ์ธํ๋ ๋ฐฉ๋ฒ:
1๏ธโฃ Zipkin UI ์ ์ (http://localhost:9411)
2๏ธโฃ ์๋น์ค๋ณ ํธ๋์ญ์
ํ์ธ (my-service.default.svc.cluster.local)
3๏ธโฃ ์ง์ฐ ์๊ฐ ๋์ ํธ๋์ญ์
ํ์ ๋ฐ ์ฑ๋ฅ ๋ถ์
๐ ๊ฒฐ๋ก
- Istio๋ ๊ธฐ๋ณธ์ ์ผ๋ก Jaeger ๋ฐ Zipkin์ ์ง์ํ์ฌ ์๋น์ค ๊ฐ ํธ๋์ญ์ ์ ์ถ์ ํ ์ ์์ต๋๋ค.
- Jaeger์ Zipkin์ ์๋น์ค ํธ์ถ ํ๋ฆ์ ์๊ฐํํ๊ณ , ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ๋ถ์ํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
- ํธ๋์ญ์ ์ ์ถ์ ํ๋ฉด ๋ง์ดํฌ๋ก์๋น์ค ํ๊ฒฝ์์ ๋ฐ์ํ๋ ์ฑ๋ฅ ๋ณ๋ชฉ์ ์ฝ๊ฒ ์๋ณํ ์ ์์ต๋๋ค.
- Istio์์ ์ ๊ณตํ๋ ํธ๋ ์ด์ฑ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ๋ฉด ์ฅ์ ์์ธ์ ์ ์ํ๊ฒ ํ์ ํ๊ณ ๋์ํ ์ ์์ต๋๋ค.