π μ±μ μ μ μλνμ§λ§ λ΄λΆμμ λ¬΄μ¨ μΌμ΄ μΌμ΄λλμ§ λͺ¨λ₯΄μλμ?
Source: Dev.to
μ ν리μΌμ΄μ
μ΄ λλ¦¬κ² μλ΅νλλ° μ νν μ΄λκ° λ¬Έμ μΈμ§ λͺ¨λ₯Έ μ μλμ?
컨νΈλ‘€λ¬λ μλ΅νμ§λ§ μλΉμ€κ° μΌλ§λ κ±Έλ Έλμ§ λͺ¨λ₯Ό λ?
λ°μ΄ν°λ² μ΄μ€κ° λλ¦° κ±΄μ§ λ‘μ§μ΄ μμΈμΈμ§?
λͺ¨λ κ²μ΄ λ‘컬μμλ μ λμνμ§λ§ λ΄λΆμ μΌλ‘ λ¬΄μ¨ μΌμ΄ μΌμ΄λκ³ μλμ§ μ΄ν΄νμ§ λͺ»ν λ?
λ°λ‘ μ¬κΈ°μ νλμ μΈ κ΄μΈ‘μ±(observability)μ΄ λ±μ₯ν©λλ€.
μ΄ κΈμμλ μ€μ©μ μ΄κ³ κΉμ΄ μκ² λ€μμ μ΄ν΄νκ² λ©λλ€:
- κ΄μΈ‘μ±μ΄ μ€μ λ‘ λ¬΄μμΈμ§
- λΆμ° νΈλ μ΄μ€κ° μ΄λ»κ² λμνλμ§
- OpenTelemetryκ° λ΄λΆμ μΌλ‘ 무μμ νλμ§
- Collectorκ° μ΄λ€ μ©λλ‘ μ°μ΄λμ§
- Jaegerκ° μ 체λ₯Ό μ΄λ»κ² μκ°ννλμ§
- Spring Boot μ ν리μΌμ΄μ μ μλμΌλ‘ κ³μΈ‘νλ λ°©λ²
λͺ¨λ μ ν΅μ μ΄κ³ κ°λ¨ν μ€μ μ ν리μΌμ΄μ
μ μ μ©λ©λλ€.
κ·Έλ¦¬κ³ κ°μ₯ μ’μ μ : μ΄ μ μ₯μμμ μ§μ μ€νν΄ λ³Ό μ μλ€λ κ²!
π
π§ 1. κ΄μΈ‘μ±
κ΄μΈ‘μ±μ μΈ κ°μ§ ν΅μ¬ κΈ°λ₯μ κΈ°λ°ν©λλ€:
- Logs β λ¬΄μ¨ μΌμ΄ μΌμ΄λ¬λμ§
- Metrics β μΌλ§λ μΌμ΄λ¬λμ§
- Traces β μ΄λ»κ² μΌμ΄λ¬λμ§
νΈλ μ΄μ€λ μ ν리μΌμ΄μ λ΄ μμ²μ μ 체 κ²½λ‘λ₯Ό μ¬κ΅¬μ±ν μ μκ² ν΄μ€λλ€. μ±μ΄ μλ€κ³ ν΄μ νΈλ μ΄μ€κ° νμ μμ§λ μμ΅λλ€; λ΄λΆ λμμ μ΄ν΄νλ €λ©΄ νΈλ μ΄μ€κ° νμν©λλ€.
π 2. νΈλ μ΄μ€λ?
νΈλ μ΄μ€λ μμ²μ μ 체 νλ¦μ λνλ λλ€:
ν΄λΌμ΄μΈνΈ β 컨νΈλ‘€λ¬ β μλΉμ€ β λ ν¬μ§ν 리 β λ°μ΄ν°λ² μ΄μ€
κ° λΆλΆμ Span μ λλ€. νΈλ μ΄μ€μλ λ€μμ΄ ν¬ν¨λ©λλ€:
- Trace ID
- Span ID
- λΆλͺ¨βμμ κ΄κ³
- μμ±(attribute)
- μ΄λ²€νΈ(event)
- μ§μ μκ°(duration)
π 3. ꡬνλ μν€ν μ²
Spring Boot
β
OpenTelemetry Java Agent
β
OTLP
β
OpenTelemetry Collector
β
Jaeger
β
Jaeger UI
π³ 4. μΈνλΌμ€νΈλμ²
Docker Composeλ₯Ό μ¬μ©ν΄ λ€μμ λμλλ€:
- Jaeger AllβinβOne
- OpenTelemetry Collector
Jaeger UIλ λ€μμμ νμΈν μ μμ΅λλ€:
βοΈ 5. Collector μ€μ
Collectorλ:
- OTLP μμ
- λ°μ΄ν° μ²λ¦¬(resource + batch)
- Jaegerλ‘ λ΄λ³΄λ΄κΈ°
resource νλ‘μΈμλ λ€μμ μΆκ°ν©λλ€:
service.namedeployment.environment
β 6. μ ν리μΌμ΄μ
μ ν리μΌμ΄μ μλ λ€μμ΄ ν¬ν¨λ©λλ€:
- REST 컨νΈλ‘€λ¬
- μλΉμ€
- JPA λ ν¬μ§ν 리
- μΈλ©λͺ¨λ¦¬ H2 λ°μ΄ν°λ² μ΄μ€
μλν¬μΈνΈ:
POST /userGET /user
π― 7. μλ κ³μΈ‘
νκ²½ λ³μ:
export OTEL_PROTOCOL="grpc"
export OTEL_EXPORTER_OTLP_ENDPOINT="http://127.0.0.1:4318"
export OTEL_METRICS_EXPORTER=none
μ€ν λ°©λ²:
java -javaagent:opentelemetry-javaagent.jar -jar demo-0.0.1-SNAPSHOT.jar
π 8. λ΄λΆ νλ¦
- HTTP μμ²μ΄ κ°λ‘μ±μ§λλ€.
- λ£¨νΈ μ€ν¬μ΄ μμ±λ©λλ€.
- 컨νΈλ‘€λ¬, μλΉμ€, JDBCκ° κ³μΈ‘λ©λλ€.
- OTLPλ₯Ό ν΅ν΄ λ΄λ³΄λ΄μ§λλ€.
- Collectorκ° μ²λ¦¬ν©λλ€.
- Jaegerκ° μκ°νν©λλ€.
π 9. νν
- λ³λͺ© νμ κ°μ§
- μ νν μ§μ° μκ° νμ
- μ€μ μ€ν νλ¦ μ΄ν΄
- νμ€ κ΄μΈ‘μ± ν보
- λ²€λ μ’ μμ±(vendor lockβin) λ°©μ§
μ΄ λͺ¨λ κ²μ΄ κ°λ¨ν μ ν리μΌμ΄μ μμλ κ°λ₯ν©λλ€. 20κ°μ λ§μ΄ν¬λ‘μλΉμ€κ° μμ΄λ κ΄μΈ‘μ±μ΄ νμν©λλ€.
π κ²°λ‘
κ΄μΈ‘μ±μ 볡μ‘ν μν€ν μ²μλ§ νμν κ²μ΄ μλλλ€. μ ν΅μ μΈ μ ν리μΌμ΄μ μ΄λΌλ λ΄λΆμμ λ¬΄μ¨ μΌμ΄ μΌμ΄λκ³ μλμ§ μ΄ν΄νλ©΄ ν° μ΄μ μ μ»μ μ μμ΅λλ€. OpenTelemetryμ Jaegerλ₯Ό μ¬μ©νλ©΄ βλ¬΄μ¨ μΌμ΄ μΌμ΄λκ³ μλμ§ λͺ¨λ₯Έλ€βλ μνμμ λͺ λΆ μμ μ ν리μΌμ΄μ μ 체λ₯Ό μμ ν κ°μνν μ μμ΅λλ€.
ν λ² λ΄λΆ νλ¦μ μ΄ν΄νλ©΄ λ€μλ λμκ°κ³ μΆμ§ μμ κ²λλ€.
μ§κΈ λ°λ‘ μνν΄ λ³΄κ³ μΆλ€λ©΄:
π