λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
  • μž₯원읡 κΈ°μˆ λΈ”λ‘œκ·Έ
πŸ”¬web application/- distributed system

[Distributed Tracing] λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ˜ λΆ„μ‚° μΆ”μ μ΄λž€ 무엇인가

by Wonit 2022. 5. 1.

[Distributed Tracing] λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ˜ λΆ„μ‚° μΆ”μ μ΄λž€ 무엇인가

λ³Έ 글은 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ˜ λΆ„μ‚° 좔적 μ‹œλ¦¬μ¦ˆλ‘œ 이둠과 μ‹€μŠ΅μ΄ ν•¨κ»˜ ν¬ν•¨λœ μ‹œλ¦¬μ¦ˆμž…λ‹ˆλ‹€. μ•„λž˜ λͺ©μ°¨μ— ν‘œμ‹œλœ 글을 λͺ¨λ‘ μ°Έκ³ ν•˜λ©΄ μ’‹μŠ΅λ‹ˆλ‹€.

 

λͺ©μ°¨

 
μ‹€μŠ΅μ— λŒ€ν•œ μ†ŒμŠ€μ½”λ“œλ₯Ό ν™•μΈν•˜μ‹œκ³  μ‹Άλ‹€λ©΄ μ‹€μŠ΅ githubμ—μ„œ ν™•μΈν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.

 


λΆ„μ‚° 좔적이 μ™œ ν•„μš”ν•œκ°€?

 

μ΄μ „μ˜ μ›Ή μ„œλΉ„μŠ€λŠ” 3-tier μ•„ν‚€ν…μ²˜μ™€ 2-tier μ•„ν‚€ν…μ²˜κ°€ μ£Όλ₯Ό μ΄λ£¨μ—ˆμ—ˆλ‹€.

 

 

ν•˜μ§€λ§Œ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜κ°€ 세상에 λ‚˜μ˜€κ³  이λ₯Ό μ‹œλ„ν•˜κ³  μ„±κ³΅ν•˜λŠ” κΈ°μ—…μ˜ 사둀가 λŠ˜μ–΄λ‚¨μ— λ”°λΌμ„œ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ ν™˜κ²½μ— λŒ€ν•œ 관심도도 그에 걸맞게 μ¦κ°€ν•˜κ³  μžˆλ‹€.

 

λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜μ™€ λ³„κ°œλ‘œ μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜ λ‚΄μ—μ„œ λ°œμƒν•˜λŠ” issue 듀을 νƒμ§€ν•˜λŠ” 것은 κ½€λ‚˜ μ€‘μš”ν•œ μΌμ΄μ—ˆλ‹€.

 

κ·Έλž˜μ„œ λ‹€μ–‘ν•œ APM (Application Performance Management) 도ꡬ듀을 μ‚¬μš©ν•˜λŠ” 기업듀이 많이 λ“±μž₯ν•œλ‹€.

 

ν•˜μ§€λ§Œ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λ‘œ μΈν•΄μ„œ n κ³„μΈ΅μ˜ μ•„ν‚€ν…μ²˜μ—μ„œλŠ” μ»΄ν¬λ„ŒνŠΈμ˜ Topologyκ°€ λ³΅μž‘ν•΄μ§μ— λ”°λΌμ„œ issue λ₯Ό νƒμ§€ν•˜λŠ” 것 μ‘°μ°¨ 쉽지 μ•Šμ€ 일이 λ˜μ–΄λ²„λ Έλ‹€.

 

즉, λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ ν™˜κ²½μ—μ„œμ˜ λΆ„μ‚°λœ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ©”μ‹œμ§€λ₯Ό μΆ”μ ν•˜λŠ” 것이 μ–΄λ ΅λ‹€.

 

ν•˜μ§€λ§Œ λΆ„μ‚° 좔적에 λŒ€ν•΄μ„œ ν•™μŠ΅ν•˜κ²Œ λœλ‹€λ©΄ n-tier 의 μ•„ν‚€ν…μ²˜μ—μ„œλ„ μ‰½κ²Œ λΆ„μ‚° 좔적이 κ°€λŠ₯ν•˜λ‹€.

 

Distributed Tracing

 

Distributed Tracing, λΆ„μ‚° 좔적은 μ–΄λ–»κ²Œ ν• κΉŒ?

 

λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λ₯Ό node 둜 κ΅¬λΆ„ν•˜κ³  각각의 node 1κ³Ό node 2 μ—μ„œ μ„œλ‘œ 톡신을 ν•œλ‹€κ³  κ°€μ •ν•΄λ³΄μž.

 

그럼 node 1 μ—μ„œλΆ€ν„° 좔적이 μ‹œμž‘λ˜κ³  좔적 트리, distributed tracing treeκ°€ μƒκ²¨λ‚œλ‹€.

 

 

그리고 node 1 μ—μ„œ λ‹€λ₯Έ node 둜 μš”μ²­μ„ 보낼 경우 ν•΄λ‹Ή 좔적 νŠΈλ¦¬μ— μžμ‹ node κ°€ append λ˜λŠ” ν˜•νƒœλ‘œ tracing tree λ₯Ό μ™„μ„±μ‹œν‚€λŠ” 방법이닀.

 

μ΄λŸ¬ν•œ Tracing Data λŠ” 일반적으둜 Timing Data κ°€ ν•¨κ»˜ ν¬ν•¨λ˜λŠ”λ°, Timing 데이터λ₯Ό ν†΅ν•΄μ„œ ν† ν΄λ‘œμ§€κ°„μ˜ Latency λ₯Ό 탐지할 수 있게 λ˜λŠ” 것이닀.

 

즉, κ°œλ°œμžλŠ” 각각의 μš”μ²­λ“€μ— λŒ€ν•΄μ„œ μ–Όλ§ˆλ‚˜ μ‹œκ°„μ΄ κ±Έλ Έκ³ , μ–΄λ–€ λ¬Έμ œκ°€ λ°œμƒν–ˆλŠ”μ§€ λ”μš± λΉ λ₯΄κ³  효과적으둜 νŒŒμ•…ν•  수 있게 λœλ‹€.

 

이 λ•Œ, 이λ₯Ό μ‹€ν˜„ν•  수 μžˆλŠ” 방법은 μ—¬λŸ¬κ°€μ§€κ°€ μžˆμ§€λ§Œ κ°€μž₯ 유λͺ…ν•œ Dapper 에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μž

 

Google's Dapper

 

λΆ„μ‚° 좔적 ν™˜κ²½μ—μ„œ μ•žμ„œ μ„€λͺ…ν•˜κΈ°λ‘œλŠ” 좔적 트리λ₯Ό μ΄μš©ν•΄μ„œ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ λ…Έλ“œκ°„μ˜ 상관관계λ₯Ό λΆ„μ„ν•œλ‹€κ³  ν–ˆλ‹€.

 

그럼 이 상관관계λ₯Ό μ–΄λ–»κ²Œ κ·œμ •ν• κΉŒ?

 

ꡬ글은 이 Dapper λ₯Ό μ΄μš©ν•΄ 상관관계λ₯Ό μ•„μ£Ό κ°„λ‹¨ν•œ μƒκ°μœΌλ‘œ ν•΄κ²°ν–ˆλ‹€.

 

Dapper κ°€ κΆκΈˆν•˜λ‹€λ©΄ Google Dapper 의 Paper μ—μ„œ 확인할 수 μžˆλ‹€

 

HTTP μš”μ²­μ΄ μ‘΄μž¬ν•˜λŠ” 상황이라고 κ°€μ •ν•œλ‹€λ©΄, HTTP Header 에 메타 데이터λ₯Ό μΆ”κ°€ν•˜λŠ” λ°©λ²•μœΌλ‘œ ν•΄κ²°ν•˜μ˜€λ‹€.

 

HTTP Header μ—λŠ” λΆ„μ‚° ν™˜κ²½μ— λŒ€ν•œ 기본적인 정보와 각각 μš”μ²­μ˜ 상관관계λ₯Ό 뢄석할 수 μžˆλ„λ‘ ν•˜λŠ” μ΅œμ†Œν•œμ˜ 정보λ₯Ό μΆ”κ°€ν•œλ‹€.

 

Node 1 μ—μ„œ μš”μ²­μ΄ μ‹œμž‘λ˜μ—ˆμœΌλ©΄ μ‹œμž‘ : Node 1, μ‹œκ°„, Endpoint 와 같은 데이터λ₯Ό 헀더에 μΆ”κ°€ν•˜κ³  Node 2둜 μ „λ‹¬ν•œλ‹€


그리고 Node 2 μ—μ„œλ„ Node 2 의 정보λ₯Ό μΆ”κ°€ν•˜κ³  λ‹€μŒ λ…Έλ“œλ‘œ λ„˜κ°„λ‹€.

 

 

μœ„λ₯Ό λ³Έλ‹€λ©΄ TxId λŠ” 1둜 λͺ¨λ‘ 고정이 λ˜μ–΄μžˆλ‹€.

 

κ·Έλ ‡λ‹€λ©΄ TxId κ°€ 1둜 λͺ…μ‹œλœ λͺ¨λ“  λ©”μ‹œμ§€λŠ” ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜μ— ν¬ν•¨μ‹œν‚¨λ‹€.


그리고 ν•΄λ‹Ή λ©”μ‹œμ§€μ˜ κ³ μœ ν•œ Id 격인 SpanId λŠ” νŠΈλžœμž­μ…˜ λ‚΄μ˜ μˆœμ„œλ₯Ό νŒŒμ•…ν•  수 μžˆλ„λ‘ 도움을 μ€€λ‹€.

 

SpanId 와 ParentId λ₯Ό ν†΅ν•΄μ„œ μ—°κ²° λ¦¬μŠ€νŠΈμ™€ λΉ„μŠ·ν•œ ν˜•νƒœλ‘œ λ©”μ‹œμ§€λ₯Ό μ—°κ²°μ‹œν‚€λŠ” 것이닀.

 

이런 방식을 ν†΅ν•΄μ„œ 헀더에 ν¬ν•¨λ˜μ–΄μžˆλŠ” λ©”νƒ€λ°μ΄ν„°μ˜ μ •λ³΄λ‘œ 각각 λ©”μ‹œμ§€κ°„μ˜ 상관관계λ₯Ό λΆ„μ„ν•˜μ—¬ 좔적할 수 μžˆλ„λ‘ ν•œλ‹€.

 

λΆ„μ‚° 좔적을 ν•  수 μžˆλ„λ‘ λ„μ™€μ£ΌλŠ” 것듀

 

Distributed Tracing 을 ν•  수 μžˆλ„λ‘ λ„μ™€μ£ΌλŠ” μ†Œν”„νŠΈμ›¨μ–΄λ“€μ΄ κ½€λ‚˜ 많이 μ‘΄μž¬ν•œλ‹€.

 

μš°μ„  Naver μ—μ„œ 2012년도뢀터 κ°œλ°œν•˜κ³  2015년도 μ˜€ν”ˆμ†ŒμŠ€λ‘œ κ³΅κ°œν•œ Pinpoint λ‚˜ 유λͺ…ν•œ Zipkin, Jaeger λ“±λ“±

 

  • Pinpoint
    • λ„€μ΄λ²„μ—μ„œ μ˜€ν”ˆμ†ŒμŠ€λ‘œ κ°œλ°œν•˜κ³  μ‚¬μš©λ˜μ—ˆλ‹€.
    • Dapper 방식을 μ΄μš©ν•œλ‹€
  • Zipkin
    • μ˜€ν”ˆ μ†ŒμŠ€ APM 으둜 νŠΈμœ„ν„°μ—μ„œ 개발되고 μ‚¬μš©λ˜μ—ˆλ‹€.
    • Google 의 Dapper 방식을 μ΄μš©ν•œλ‹€
  • Jaeger
    • μ—­μ‹œ μ˜€ν”ˆ μ†ŒμŠ€ APM 으둜 μš°λ²„μ—μ„œ 개발되고 CNCF 에 μ’…μ†λ˜μ—ˆλ‹€.
    • Zipkin κ³Ό 같이 Dapper 방식을 μ΄μš©ν•œλ‹€
  • DataDog
    • κΈ°μ—…μš© APM 툴둜 인프라에 λŒ€ν•œ λͺ¨λ‹ˆν„°λ§μ„ μ œκ³΅ν•œλ‹€
    • λΆ„μ‚° 좔적 이외에도 인프라 전체에 λŒ€ν•œ λͺ¨λ‹ˆν„°λ§μ΄ κ°€λŠ₯ν•œ μž₯점이 μžˆλ‹€.

 

이외에도 μ—¬λŸ¬ 도ꡬ듀이 μ‘΄μž¬ν•œλ‹€ 이와 κ΄€λ ¨ν•΄μ„œλŠ” Latest top 11 distributed tracing tools λ₯Ό μ°Έκ³ ν•  수 μžˆλ‹€

 

이 μ€‘μ—μ„œλ„ μš°λ¦¬λŠ” Zipkin 을 μ΄μš©ν•΄μ„œ λΆ„μ‚° 좔적을 μ‹€μŠ΅ν•  것이닀.

 

 

Spring μ§„μ˜μ—μ„œ Zipkin κ³Ό μ‰½κ²Œ 연동할 수 μžˆλ„λ‘ Spring Cloud Sleuth λ₯Ό μ œκ³΅ν•˜λŠ”λ°, λ‹€μŒ μ‹œκ°„λΆ€ν„° μ•Œμ•„λ³΄κ³  μ‹€μŠ΅ν•΄λ³΄μž

 

λŒ“κΈ€