[자료 다운로드] OpenTelemetry 활용하기
OpenTelemetry는 쿠버네티스·MSA 환경에서 로그·메트릭·트레이스를 표준화해 제로코드 계측과 SLO 운영을 지원하는 관측성 표준입니다.
2025년 09월 17일

OpenTelemetry 활용하기
이 자료의 핵심은 현대적 분산 시스템(MSA·쿠버네티스)에서 OpenTelemetry(Otel)를 표준 관측성 계층으로 삼아, ‘코드 수정 없이(제로 코드)’ 빠르게 계측을 시작하고, 운영 단계에서 신뢰도 지표(SLO)를 체계적으로 관리하는 방법을 실제 구성요소와 운영 시나리오로 풀어내는 데 있습니다.
왜 이 자료를 꼭 참고 해야 할까요?
쿠버네티스 위에서 마이크로서비스를 운영하면, 장애 원인 탐색의 복잡도는 지수적으로 늘어납니다. 벤더에 종속되지 않는 공용 표준으로 로그·메트릭·트레이스를 한 번에 수집·상관·전송하는 Otel을 채택하면, 백엔드(Tempo·Jaeger·Elastic·Datadog·Cloud 등)가 바뀌더라도 OTLP라는 표준 프로토콜을 통해 파이프라인을 손쉽게 이식할 수 있습니다. OTLP는 트레이스·메트릭·로그 신호에 대해 안정(Stable) 상태로 명시되어 있어, 공공·엔터프라이즈처럼 변경 비용이 큰 환경에서도 장기간의 운용을 담보합니다. 이를 통해 조직은 관측 데이터를 SLO 모니터링 체계로 승격시켜, 운영을 ‘사후 대응’에서 ‘사전 예방’으로 전환하게 됩니다.
이 자료는 클라우드 네이티브 환경으로의 전환을 계획하거나 이미 전환하여 운영 중인 조직에서 ‘관측성’이라는 핵심 역량을 효과적으로 구축하고 강화하기 위한 매우 귀중한 로드맵이자 실용적인 가이드라인을 제시합니다. OpenTelemetry를 통해 시스템의 불확실성을 제거하고, 안정적이고 효율적인 서비스 운영을 달성하고자 하는 모든 분께 이 자료를 강력히 추천합니다.
이 발표 자료의 핵심 주제
OpenTelemetry의 등장 배경 및 필요성
분산 시스템 환경에서 서비스의 복잡성이 증가함에 따라 시스템의 동작을 이해하고 문제를 진단하는 것이 어려워졌습니다. 기존의 모니터링 도구만으로는 한계가 있었고, 표준화된 데이터 수집 방식의 부재로 인해 특정 벤더에 종속되는 문제가 발생했습니다. OpenTelemetry는 이러한 문제를 해결하기 위해 등장했으며, 분산 시스템의 ‘관측성’을 확보하는 데 필수적인 요소임을 강조합니다.
OpenTelemetry의 역할과 CNCF Graduated 프로젝트로서의 위상
OpenTelemetry는 클라우드 네이티브 컴퓨팅 파운데이션(CNCF)의 최고 등급인 Graduated 프로젝트로, 쿠버네티스나 프로메테우스와 같은 핵심 클라우드 네이티브 기술들과 어깨를 나란히 하고 있습니다. 이는 OpenTelemetry가 단순한 도구를 넘어 클라우드 네이티브 환경에서 데이터 수집 및 관측성을 위한 공식적인 표준으로 인정받았음을 의미합니다. 안정성, 성숙도, 벤더 중립성, 활발한 커뮤니티, 그리고 기존 생태계와의 통합성을 통해 신뢰할 수 있는 솔루션임을 강조합니다.
서비스 수준 모니터링의 중요성
시스템 레벨의 모니터링(CPU 사용률, 메모리 등)만으로는 실제 사용자가 체감하는 서비스 품질 저하의 원인을 파악하기 어렵습니다. 예를 들어, 응답 시간이 느려지는 현상이 발생했을 때, 단순히 서버의 CPU 사용률이 정상이라고 해서 문제가 없는 것은 아닙니다. OpenTelemetry는 애플리케이션 내부의 동작을 계측하여 요청 응답 시간, 오류율 등 ‘서비스 수준’에서의 문제를 정확히 식별할 수 있도록 돕습니다.
Kubernetes Observability 생태계에서의 OpenTelemetry
OpenTelemetry는 다양한 로깅, 메트릭, 트레이싱, 대시보드 오픈소스 솔루션들과 긴밀하게 연동됩니다. 특히 Grafana와의 연계성이 뛰어나며, Jaeger, Prometheus, Loki 등과의 통합을 통해 클라우드 네이티브 환경에서 포괄적인 관측성 대시보드를 구축할 수 있음을 보여줍니다.
Zero Code Instrumentation을 통한 손쉬운 적용
OpenTelemetry는 애플리케이션의 소스 코드를 직접 수정하지 않고도 관측 데이터를 수집할 수 있는 ‘제로 코드 계측(Zero Code Instrumentation)’ 방식을 제공합니다. 이는 기존 애플리케이션에 쉽게 적용할 수 있어 개발 및 운영 효율성을 높여줍니다.
OpenTelemetry Protocol (OTLP) with Apache Arrow
대규모 텔레메트리 데이터 전송의 효율성을 극대화하기 위해 기존 OTLP의 행 지향 방식이 Apache Arrow 기반의 열 지향 방식으로 개선되었습니다. 이는 데이터 처리량 증가와 비용 절감이라는 이점을 제공하여 대규모 분산 시스템 환경에서 OpenTelemetry의 적용 가능성을 더욱 확장합니다.
발표 자료 주요 내용
OpenTelemetry와 CNCF (Cloud Native Computing Foundation)
![OpenTelemetry_Use Case_V2_Pub-3 [자료 다운로드] OpenTelemetry 활용하기](https://www.cncf.co.kr/wp-content/uploads/2025/09/OpenTelemetry_Use-Case_V2_Pub-3-scaled.webp)
OpenTelemetry가 클라우드 네이티브 생태계에서 가지는 중요성은 CNCF에서의 위상을 통해 더욱 명확히 드러납니다. CNCF는 클라우드 네이티브 기술의 발전을 촉진하는 비영리 단체로, 쿠버네티스, 프로메테우스와 같은 핵심 프로젝트들을 관리하고 있습니다. CNCF 프로젝트는 그 성숙도에 따라 Sandbox, Incubating, Graduated의 세 가지 등급으로 나뉩니다.
- Sandbox: 아이디어 단계의 초기 프로젝트
- Incubating: 더 많은 사용 사례와 기여자가 있으며, 점차 안정화되고 있는 프로젝트
- Graduated: 광범위하게 채택되고 있으며, 안정성과 성숙도, 견고한 거버넌스 모델을 갖춘 프로젝트
발표 자료에 따르면 OpenTelemetry는 2016년에 Sandbox로 시작하여 2021년에 Incubating을 거쳐 현재는 Graduated 등급에 도달했습니다. 이는 OpenTelemetry가 클라우드 네이티브 커뮤니티에서 가장 신뢰받고 널리 사용되는 프로젝트 중 하나로 인정받고 있음을 의미합니다. 쿠버네티스가 컨테이너 오케스트레이션의 사실상의 표준이 되었듯이, OpenTelemetry는 클라우드 네이티브 환경에서 관측성의 표준으로 자리 잡았습니다.
Graduated 등급을 획득했다는 것은 다음과 같은 중요한 의미를 가집니다.
- 안정성과 성숙도:
다양한 기업 환경의 핵심 프로덕션 시스템에서 안정적으로 운영되며 그 신뢰성이 검증되었습니다. 이는 기업이 OpenTelemetry를 도입할 때 발생할 수 있는 잠재적 위험을 크게 줄여줍니다.
- 벤더 중립성:
특정 기업에 종속되지 않는 중립적인 개발 및 의사결정 구조를 갖추고 있습니다. 이는 OpenTelemetry가 어떤 특정 벤더의 이해관계에 따라 좌우되지 않고, 광범위한 사용자 커뮤니티의 요구사항을 반영하여 발전할 것임을 보장합니다.
- 활발한 커뮤니티:
전 세계 개발자와 기업이 참여하는 강력한 커뮤니티 지원과 빠른 대응 체계를 갖추고 있습니다. 이는 문제 발생 시 신속한 해결을 돕고, 지속적인 기능 개선과 혁신을 가능하게 합니다.
- 생태계 통합:
쿠버네티스, 프로메테우스, gRPC 등 다른 CNCF 프로젝트와의 원활한 통합을 지원합니다. 이는 기존에 구축된 클라우드 네이티브 인프라에 OpenTelemetry를 쉽게 추가하고, 상호 보완적인 관측성 솔루션을 구축할 수 있음을 의미합니다.
이러한 특성들은 IT 의사결정자들에게 OpenTelemetry가 단순한 기술 도입을 넘어, 장기적인 관점에서 안정적이고 확장 가능한 관측성 전략을 위한 현명한 투자임을 확신시켜 줍니다.
서비스 수준 모니터링 (Service Level Monitoring)
![OpenTelemetry_Use Case_V2_Pub-4 [자료 다운로드] OpenTelemetry 활용하기](https://www.cncf.co.kr/wp-content/uploads/2025/09/OpenTelemetry_Use-Case_V2_Pub-4-scaled.webp)
시스템을 운영함에 있어 가장 중요한 목표 중 하나는 사용자에게 안정적이고 빠른 서비스를 제공하는 것입니다. 하지만 기존의 모니터링 방식, 즉 ‘시스템 레벨 모니터링’만으로는 이 목표를 달성하기 어렵습니다. 시스템 레벨 모니터링은 CPU 사용률, 메모리 사용량, 디스크 I/O, 네트워크 트래픽과 같은 하드웨어 및 인프라 지표를 주로 다룹니다. 이러한 지표들이 정상 범위 내에 있다고 해서 서비스가 사용자에게 문제없이 제공되고 있다고 단정할 수는 없습니다.
발표 자료에서 제시된 예시처럼, 사용자가 “응답이 느림”을 경험할 때, 운영자가 시스템 레벨에서 CPU 사용률이 정상이고 로그에 특별한 문제가 없다고 판단할 수 있습니다. 이는 “원인 파악이 안 됨”으로 이어지며, 결국 실제 사용자 경험의 저하를 인지하지 못하거나 해결할 수 없는 상황을 초래합니다.
이러한 간극을 메우는 것이 바로 ‘서비스 수준 모니터링(Service Level Monitoring)’입니다. 서비스 수준 모니터링은 사용자 관점에서 서비스의 품질을 직접적으로 나타내는 지표, 즉 ‘서비스 품질의 지표’에 집중합니다. 대표적인 서비스 수준 지표는 다음과 같습니다.
- 요청 응답 시간 (Latency):
사용자가 요청을 보낸 시점부터 응답을 받기까지 걸리는 시간입니다. 서비스가 느리다는 사용자 불만의 가장 직접적인 원인입니다. - 오류율 (Error Rate):
특정 시간 동안 발생한 요청 중 실패한 요청의 비율입니다. 서비스의 안정성과 가용성을 나타냅니다. - 처리량 (Throughput):
특정 시간 동안 처리된 요청의 수입니다. 서비스의 용량과 성능을 나타냅니다. - 가용성 (Availability):
서비스가 정상적으로 작동하는 시간의 비율입니다.
OpenTelemetry는 이러한 서비스 수준 지표를 수집하고 분석하는 데 최적화되어 있습니다. 애플리케이션 코드 내부에 계측(Instrumentation)을 추가하여 특정 비즈니스 로직이나 함수 호출의 시작과 끝, 데이터베이스 쿼리 시간, 외부 API 호출 시간 등을 정확하게 측정할 수 있습니다. 이렇게 수집된 데이터를 통해 운영자는 다음과 같은 이점을 얻을 수 있습니다.
- 진정한 원인 파악:
시스템 리소스는 정상임에도 불구하고, 특정 비즈니스 로직이나 데이터베이스 쿼리, 외부 서비스 호출 등 애플리케이션 내부의 병목 현상으로 인해 서비스 응답 시간이 느려지는 경우를 정확하게 식별할 수 있습니다.
- 사용자 경험 중심의 문제 해결:
단순히 서버가 다운되지 않았다는 것을 넘어, 사용자가 실제로 불편함을 겪는 지점(느린 응답, 잦은 오류)을 찾아 해결함으로써 고객 만족도를 높일 수 있습니다.
- SLO (Service Level Objective) 관리:
응답 시간 99%는 200ms 이하여야 한다는 등 서비스 수준 목표를 설정하고, OpenTelemetry를 통해 수집된 데이터로 이를 지속적으로 모니터링하며 관리할 수 있습니다.
결론적으로, OpenTelemetry를 통한 서비스 수준 모니터링은 클라우드 네이티브 환경에서 단순히 시스템의 ‘생존 여부’를 확인하는 것을 넘어, 서비스의 ‘품질’을 보장하고 사용자에게 최상의 경험을 제공하기 위한 필수적인 요소입니다. 이는 복잡한 분산 시스템에서 발생하는 미묘한 성능 저하의 원인을 파악하고 선제적으로 대응하는 데 결정적인 역할을 합니다.
Kubernetes Observability 상호 연계
![OpenTelemetry_Use Case_V2_Pub-6 [자료 다운로드] OpenTelemetry 활용하기](https://www.cncf.co.kr/wp-content/uploads/2025/09/OpenTelemetry_Use-Case_V2_Pub-6-scaled.webp)
쿠버네티스 환경에서 OpenTelemetry를 효율적으로 배포하고 관리하기 위한 핵심 구성 요소 중 하나가 바로 OpenTelemetry Operator for Kubernetes입니다. 쿠버네티스 오퍼레이터(Operator)는 특정 애플리케이션의 운영 지식(Operational Knowledge)을 코드로 캡슐화하여, 복잡한 애플리케이션의 배포, 확장, 업데이트, 백업 등을 자동화하는 소프트웨어 익스텐션입니다.
OpenTelemetry Operator는 쿠버네티스 클러스터 내에서 OpenTelemetry의 두 가지 주요 기능을 자동화하는 데 중점을 둡니다.
1. OpenTelemetry Collector 배포 및 관리:
- OpenTelemetryCollector라는 Custom Resource(CR)를 정의하여 쿠버네티스 위에 OpenTelemetry Collector를 손쉽게 배포할 수 있습니다. Collector는 애플리케이션에서 수집된 텔레메트리 데이터를 받아 필터링, 변환, 집계한 후 원하는 백엔드(예: Prometheus, Jaeger, Loki)로 전송하는 역할을 합니다. Operator는 이 Collector의 스케일링, 업데이트, 설정 변경 등을 자동으로 관리합니다.
2. 워크로드의 자동 계측 (Zero-code Instrumentation):
- Instrumentation이라는 CR을 정의하여 쿠버네티스 워크로드(애플리케이션 파드)에 대해 자동 계측을 지원하는 라이브러리/에이전트를 주입할 수 있습니다. 이는 애플리케이션 코드를 수정하지 않고도 관측성 데이터를 수집할 수 있게 해주는 ‘제로 코드 계측’의 핵심입니다.
- Operator는 Mutation Admission Webhook을 활용하여 파드가 생성될 때 자동으로 필요한 환경 변수와 볼륨 마운트, Init Container 등을 주입합니다.
Kubernetes Operator의 작동 방식 (제로 코드 계측 중심):
![OpenTelemetry_Use Case_V2_Pub-12 [자료 다운로드] OpenTelemetry 활용하기](https://www.cncf.co.kr/wp-content/uploads/2025/09/OpenTelemetry_Use-Case_V2_Pub-12-scaled.webp)
발표 자료의 다이어그램과 설명은 오퍼레이터가 어떻게 워크로드에 자동 계측을 적용하는지 명확히 보여줍니다.
- 환경 변수 자동 추가:
Instrumentation CR에 정의된 설정에 따라, 파드가 생성될 때 OpenTelemetry 계측에 필요한 OTEL_EXPORTER_OTLP_ENDPOINT, JAVA_TOOL_OPTIONS (Java의 경우), OTEL_SERVICE_NAME 등 다양한 환경 변수가 자동으로 파드 컨테이너에 삽입됩니다. 이 환경 변수들은 OpenTelemetry Collector의 주소나 서비스 이름 등을 지정하여 계측된 데이터가 올바르게 전송되도록 합니다.
- 에이전트 볼륨 마운트:
OpenTelemetry 에이전트(예: javaagent.jar for Java)가 파드의 메인 컨테이너에서 참조할 수 있도록 EmptyDir와 같은 임시 볼륨이 마운트됩니다.
- Init Container 실행:
파드가 시작되기 전에 Init Container가 실행됩니다. 이 컨테이너는 경량화된(busybox 기반) 이미지로 구성되며, OpenTelemetry Operator가 관리하는 에이전트 이미지에서 javaagent.jar 파일과 같은 계측 라이브러리를 복사하여 EmptyDir 볼륨에 저장합니다.
- 경량 컨테이너 활용:
Init Container가 busybox와 같은 최소한의 컨테이너를 사용하여 에이전트 복사 작업을 수행함으로써, 전체 파드 시작 시간이나 리소스 사용량을 최소화합니다.
- EmptyDir 볼륨 생성 및 공유:
제로 코드 계측을 위해 생성된 임시 EmptyDir 볼륨은 Init Container가 에이전트를 저장하고, 메인 애플리케이션 컨테이너가 이 에이전트를 로드하여 사용하도록 컨테이너 간에 공유됩니다.
이러한 과정을 통해 개발자는 복잡한 설정이나 코드 수정 없이도 쿠버네티스 워크로드에 OpenTelemetry 계측을 적용할 수 있습니다. 이는 개발 생산성을 높이고, 관측성 도입 장벽을 낮추며, 운영의 자동화를 통해 관리 효율성을 극대화하는 데 크게 기여합니다. OpenTelemetry Operator는 쿠버네티스 환경에서 OpenTelemetry를 ‘Easy-to-use’ 솔루션으로 만드는 핵심적인 요소라고 할 수 있습니다.