Observability

MSA ν™˜κ²½μ—μ„œ λͺ¨λ‹ˆν„°λ§

ν”„λ‘œκ·Έλž˜λ¨Έ μ˜€μ›” 2024. 11. 14.

λͺ¨λ†€λ¦¬μ‹ μ•„ν‚€ν…μ²˜μ—μ„œ MSA 둜 λ³€ν™˜λ˜λ©΄μ„œ 달라진 것듀이 λ§Žμ€ 데 κ·Έ 쀑 ν•˜λ‚˜κ°€ 톡신 방법이닀. λͺ¨λ†€λ¦¬μ‹μ—μ„œ κ·Έμ € ν•¨μˆ˜ ν˜ΈμΆœμ„ ν•˜λ©΄ 데이터λ₯Ό μ£Όκ³  받을 수 μžˆμ§€λ§Œ, MSA μ—μ„œ μ„œλΉ„μŠ€κ°€ 뢄리 λ˜μ—ˆκΈ° λ•Œλ¬Έμ— μ„œλΉ„μŠ€ 즉 ν”„λ‘œμ„ΈμŠ€ κ°„ 톡신을 ν•˜κ²Œ λœλ‹€. λͺ¨λ†€λ¦¬μ‹μ—μ„  μ„œλ²„μ™€ DB의 μƒνƒœλ§Œ ν™•μΈν•˜λ©΄ λλŠ”λ° μ„œλΉ„μŠ€κ°€ 뢄리 λ˜λ©΄μ„œ IPC 톡신에 λŒ€ν•œ μ§€μ—°μœ¨μ΄λ‚˜ Call 증감 확인, λΆ„λ¦¬λœ μ„œλΉ„μŠ€μ˜ μƒνƒœ 확인, λ―Έλ“€ 웨어 μƒνƒœ λ“± λ§Žμ€ λΆ€λΆ„ μ‹ κ²½ 써야할 게 λ§Žμ•„μ‘Œλ‹€.

Hop 이 λŠ˜μ–΄λ‚¨μ— 따라 μ–΄λ””μ„œ μ–΄λ–€ μš”μ²­μ— λŒ€ν•œ λ¬Έμ œκ°€ λ°œμƒν–ˆλŠ”μ§€ 디버깅이 μ–΄λ €μ›Œμ‘Œκ³ , 둜그 μˆ˜μ§‘μ„ μœ„ν•œ λ³„λ„μ˜ 인프라가 ν•„μš”ν•΄μ§€κ²Œ 됐닀.또 μ–΄λŠ μ„œλ²„μ—μ„œ μ–΄λŠ μ„œλΉ„μŠ€λ‘œ 호좜이 λ˜μ–΄μ•Ό ν•˜λŠ”μ§€ μ„œλΉ„μŠ€κ°„ 호좜 μƒνƒœκ°€ 정산인지도 νŒŒμ•…ν•΄μ•Ό ν•œλ‹€.

MSA ν™˜κ²½μ—μ„œ 이런 문제λ₯Ό κ·Ήλ³΅ν•˜κΈ° μœ„ν•΄ λ‹€μ•Όν•œ λ°©λ²•μœΌλ‘œ λͺ¨λ‹ˆν„°λ§μ„ ν•΄μ•Ό ν•œλ‹€.

 

일반적인 λͺ¨λ‹ˆν„°λ§ 흐름

λŒ€κ·œλͺ¨ νŠΈλž˜ν”½μ„ 감당할 수 μžˆλŠ” MSA ν™˜κ²½μ—μ„œ λͺ¨λ‹ˆν„°λ§ 흐름은 λ‹€μŒκ³Ό 같이 일어날 수 μžˆλ‹€. 

 

1. νŠΉμ • Metric 에 사전 μ •μ˜λœ Alert을 ν†΅ν•΄μ„œ 문제λ₯Ό κ°μ§€ν•œλ‹€.

2. μ–΄λ–€ Metric에 λŒ€ν•œ λ¬Έμ œμΈμ§€λ₯Ό νŒŒμ•…ν•˜κ³ , μ–΄λ–€ 행동을 ν•΄μ•Όν•  μ§€ νŒλ‹¨ν•œλ‹€.

     2-1. Metric 수치λ₯Ό 보고 μ˜€νŒλ‹¨, ν˜Ήμ€ λ‹Ήμž₯ 이슈의 정도가 λ―Έλ―Έν•˜λ‹€λ©΄ Alert 쑰건 등을 μˆ˜μ •ν•˜κ±°λ‚˜ μ½”λ“œλ₯Ό μˆ˜μ •ν•œλ‹€.

     2-2. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 레벨의 문제라고 νŒλ‹¨ μ‹œ Log λ₯Ό ν™•μΈν•œλ‹€.

             2-2-1. λ‹¨μˆœ 둜그둜 확인이 μ–΄λ €μšΈ μ‹œ ν•΄λ‹Ή νŠΈλžœμž­μ…˜μ— λŒ€ν•œ Tracing을 ν™•μΈν•œλ‹€.

     2-3. 인프라 레벨의 문제라면 μ •ν™•ν•œ 원인 νŒŒμ•…μ΄ ν•„μš”ν•˜λ‹€.(e.g. CICD κ³Όμ •μ—μ„œ 문제, OOM)

     2-4. λ„€νŠΈμ›Œν¬ 레벨(λΌμš°νŒ…, νŠΈλž˜ν”½) λ“±μ˜ 문제라면 Service-Mesh λ₯Ό 톡해 ν˜„μž¬ μ„œλΉ„μŠ€ κ°„ νŠΈλž˜ν”½ λͺ¨λ‹ˆν„°λ§ μƒνƒœλ₯Ό ν™•μΈν•œλ‹€.

3. 회고λ₯Ό 톡해 같은 λ¬Έμ œκ°€ λ°œμƒν•˜μ§€ μ•Šλ„λ‘ μ‘°μΉ˜ν•˜κ³ , μ •λ¦¬ν•˜μ—¬ λ¬Έμ„œν™” ν•œλ‹€.

 

λ‘œκΉ…

μˆ˜λ§Žμ€ μ„œλ²„λ‚΄μ˜, μ„œλΉ„μŠ€λ“€μ˜ λ‘œκ·Έμ„μ„ 적절히 ν•„ν„°λ§ν•˜μ—¬ λˆ„λ½ 없이 둜그λ₯Ό μ €μž₯μ†ŒκΉŒμ§€ 전솑해야 ν•œλ‹€.

수 λ§Žμ€ λ‘œκ·Έλ“€μ„ 적절히 μΈλ±μ‹±ν•˜μ—¬, ν•„μš” μ‹œ λΉ λ₯΄κ²Œ λ‹€μ–‘ν•œ 쑰건으둜 검색이 κ°€λŠ₯ν•΄μ•Όν•œλ‹€.

좜처: https://www.elastic.co/kr/logstash

λŒ€ν‘œμ μΈ 기술 μŠ€νƒ

ELK : ElasticSearch, Logstash, Kibana

EFK : ElasticSearch, fluentbit, fluentd , Kibana

Logstash, fluentbit, fluentd : μ„œλ²„μ˜ λ””μŠ€ν¬μ— 1차적으둜 μŒ“μΈ λ‘œκ·Έλ“€μ„ μ›ν•˜λŠ” 필터링 쑰건에 맞게 μˆ˜μ§‘

ElasticSearch: λ‘œκ·Έλ“€μ„ μΈλ±μ‹±ν•˜μ—¬ μ €μž₯

Kibana: λ‘œκ·Έλ“€μ„ μ‹œκ°ν™”

 

λ©”νŠΈλ¦­ & μ–ΌλŸΏ

μˆ˜λ§Žμ€ μ„œλ²„λ‚΄μ˜ μˆ˜λ§Žμ€ μ„œλΉ„μŠ€ λ‚΄μ˜ λ©”νŠΈλ¦­λ“€μ„ μ•ˆμ •μ μœΌλ‘œ μˆ˜μ§‘ν•˜κ³ , μ‹œκ³„μ—΄ λ°©μ‹μœΌλ‘œ μ €μž₯ ν•œλ‹€.

λ‹€μ–‘ν•œ μ˜€ν”ˆ μ†ŒμŠ€μ˜ λ©”νŠΈλ¦­μ„ μ§€μ›ν•˜λŠ” λŒ€μ‹œλ³΄λ“œλ₯Ό μ‚¬μš©ν•΄μ•Όν•œλ‹€.

μ›ν•˜λŠ” λ³΅μž‘ν•œ ν˜•νƒœμ˜ λΉ„μ¦ˆλ‹ˆμŠ€ λ©”νŠΈλ¦­ Queryλ₯Ό μž‘μ„±ν•˜κ³ , 이λ₯Ό 기반으둜 μ μ ˆν•˜κ²Œ Alert 쑰건을 μ„€μ •ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€.

 

λŒ€ν‘œμ μΈ 기술 μŠ€νƒ

Prometheus + Grafana

Prometheus : μ‹œκ³„μ—΄ DB - 기본적으둜 Polling Pull λ°©μ‹μœΌλ‘œ μ„œλ²„μ˜ λ©”νŠΈλ¦­μ„ μˆ˜μ§‘

Grafana : λ©”νŠΈλ¦­ 정보λ₯Ό λŒ€μ‹œλ³΄λ“œν™” μ‹œμΌœμ€Œ.

 

 

νŠΈλ ˆμ΄μ‹±

ν•˜λ‚˜μ˜ μ†ŒμŠ€(νŠΈλžœμž­μ…˜)에 λŒ€ν•΄μ„œ, μ—¬λŸ¬κ°œμ˜ μ„œλΉ„μŠ€μ—μ„œ μ–΄λ–€ 과정을 거쳐 μˆ˜ν–‰λ˜μ—ˆλŠ”μ§€ ν™•μΈν•œλ‹€.

λͺ¨λ“  기둝을 νŠΈλ ˆμ΄μ‹± ν•˜κΈ° 보닀 μ μ ˆν•œ μƒ˜ν”Œλ§μ„ 톡해 νŠΈλ ˆμ΄μ‹± ν•œλ‹€.

좜처: Jaeger 곡식 ν™ˆνŽ˜μ΄μ§€

 

λŒ€ν‘œμ μΈ 기술 μŠ€νƒ

Jaeger, Zipkin, Tempo

Span 을 ν™œμš©ν•˜μ—¬ ν•˜λ‚˜μ˜ μš”μ²­μ— λŒ€ν•΄ μ–΄λ–€ λΆ„κΈ°λ₯Ό 타고 μ–΄λ–€ λ‘œμ§μ„ κ±°μΉ˜λŠ”μ§€ νŠΈλ ˆμ΄μ‹±ν•¨.

 

 

μ„œλΉ„μŠ€ λ©”μ‹œ

μ–΄λŠ μ„œλΉ„μŠ€κ°€ μ–΄λŠ μ„œλΉ„μŠ€λ₯Ό ν˜ΈμΆœν•˜κ³  μžˆλŠ”μ§€, μ–΄λ””λ‘œ νŠΈλž˜ν”½μ΄ μ–΄λŠ μ •λ„λ‘œ λ°œμƒν•˜κ³  μžˆλŠ”μ§€ 등을 λͺ¨λ‹ˆν„°λ§ ν•  수 μžˆμ–΄μ•Όν•œλ‹€.

좜처 : https://developers.redhat.com/blog/2018/09/20/istio-mesh-visibility-with-kiali#visualizing_issues
좜처: https://istio.io/latest/docs/examples/virtual-machines

λŒ€ν‘œμ μΈ 기술 μŠ€νƒ

Istio

 

λŒ“κΈ€