“또 오류가 발생했다.. 정확한 원인이 뭐지?” “잠재적인 오류도 미리 알 수 있을까?”
이 질문들의 답은 관찰 가능성에 있다!
*OpenTelemetry 설치 및 사용법 수록
마이크로서비스와 클라우드가 보편화된 지금, ‘관찰 가능성’은 시스템이 어떻게 작동하고 어디서 문제가 생기는지 실시간으로 알 수 있게 해주는 놀라운 개념입니다. 이 책은 익숙한 모니터링 개념을 시작으로 왜 관찰 가능성이 필요한지, 어떻게 적용할 수 있는지 심도 있게 설명하며, 실무에 바로 활용 가능한 실용적인 팁도 제공합니다.
이 책에서는 식료품 주문 웹 애플리케이션을 예시로 사용합니다. 따라서 애플리케이션의 구조 분석부터 관찰 가능성의 다양한 요소들을 적용해보는 것까지 오픈 소스를 활용해 차근차근 따라 해볼 수 있습니다. 특히 이 책에서 중점적으로 설명하는 OpenTelemetry를 사용하면 단 한 번의 계측만으로 유의미한 데이터를 얻고 활용해볼 수 있습니다. 또한 도커, 쿠버네티스와 같은 필수 클라우드 컴퓨팅 도구를 비롯하여 여러 계측 라이브러리에 익숙해질 수 있습니다. 설계, 코딩, 테스트, 배포, 운영 등 소프트웨어 개발 주기 내에서 다양한 역할을 수행하는 개발자, 엔지니어, 시스템 운영자라면 이 책을 통해 소프트웨어를 계측하고, 분석하고, 오류를 해결해보세요!
Contents
[PART 1 기초]
Chapter 1 관찰 가능성의 역사와 개념
1.1 클라우드 네이티브 애플리케이션
1.2 데브옵스로의 전환
1.3 관찰 가능성의 역사
_중앙 집중식 로깅
_메트릭과 대시보드
_추적과 분석
1.4 OpenTelemetry의 역사
_OpenTracing
_OpenCensus
_클라우드 네이티브 소프트웨어를 위한 관찰 가능성
1.5 OpenTelemetry의 개념
_시그널
__규격
__데이터 모델
__API
__SDK
__시맨틱 표기법
__계측 라이브러리
_파이프라인
__프로바이더
__원격 측정 생성기
__처리기
__익스포터
_리소스
_컨텍스트 전파
정리하기
Chapter 2 OpenTelemetry 시그널 - 분산 추적, 메트릭, 로그
2.1 환경 설정
2.2 분산 추적
_추적 심층 분석
_스팬의 상세 정보
_추가 고려 사항
2.3 메트릭
_메트릭 심층 분석
_데이터 포인트 타입
_모범 사례
_추가 고려 사항
2.4 로그
_로그 심층 분석
_로그의 상관관계
_추가 고려 사항
__시맨틱 표기법
__시맨틱 표기법의 적용
__스키마 URL
정리하기
Chapter 3 자동 계측
3.1 환경 설정
3.2 자동 계측
_수동 계측의 과제
_자동 계측 컴포넌트
_자동 계측의 한계
3.3 바이트코드 조작
_OpenTelemetry 자바 에이전트
3.4 런타임 훅과 몽키 패칭
_계측 라이브러리
_계측기 인터페이스
_래퍼 스크립트
정리하기
[PART 2 애플리케이션 계측]
Chapter 4 분산 추적 - 코드 실행 추적
4.1 환경 설정
4.2 추적 파이프라인 설정
_추적기 확보
4.3 추적 데이터 생성
4.4 컨텍스트 API
_스팬 처리기
4.5 데이터 보완
_ResourceDetector
_스팬 속성
_SpanKind
4.6 컨텍스트 전파
_추가 전파기 형식
_복합 전파기
4.7 이벤트, 예외, 상태 기록
_이벤트
_예외
_상태
정리하기
Chapter 5 메트릭 - 측정값 기록
5.1 환경 설정
5.2 메트릭 파이프라인 설정
_미터 생성
_푸시 기반 메트릭 추출과 풀 기반 메트릭 추출
5.3 올바른 메트릭 계측기 선택
_카운터
_비동기 카운터
_업/다운 카운터
_비동기 업/다운 카운터
_히스토그램
_비동기 게이지
_중복 메트릭 유형
5.4 뷰를 이용한 메트릭 출력 커스터마이징
_필터링
_디멘션
_집계
5.5 grocery-store 서비스
_요청 수
_요청 지속 시간
_동시 요청
_리소스 사용
정리하기
Chapter 6 로그 - 이벤트 포착
6.1 환경 설정
6.2 OpenTelemetry 로깅 설정
6.3 로그 생성
_Logger
_표준 로깅 라이브러리
6.4 실전 시그널 로깅
_분산 추적과 로그
_Flask를 이용한 OpenTelemetry 로깅
_WSGI 미들웨어를 이용한 로깅
_리소스 상관관계
정리하기
Chapter 7 계측 라이브러리
7.1 환경 설정
7.2 자동 계측 설정
_OpenTelemetry 배포판
_OpenTelemetry 설정기
_환경 변수
_커맨드라인 옵션
7.3 requests 라이브러리 계측기
_추가 설정 옵션
_계측기의 수동 호출
_이중 계측
7.4 자동 설정
_리소스 속성 설정
_추적 설정
_메트릭 설정
_로그 설정
_전파 설정
7.5 grocery-store 애플리케이션 다시 보기
_legacy-inventory 애플리케이션
_grocery-store 애플리케이션
_shopper 애플리케이션
7.6 Flask 라이브러리 계측기
_추가 설정 옵션
7.7 계측기 라이브러리 찾기
_OpenTelemetry 레지스트리
_opentelemetry-bootstrap
정리하기
[PART 3 원격 측정 데이터 활용]
Chapter 8 OpenTelemetry 컬렉터
8.1 환경 설정
8.2 OpenTelemetry 컬렉터의 목적
8.3 OpenTelemetry 컬렉터 컴포넌트의 이해
_수신기
__호스트 메트릭 수신기
_처리기
__속성 처리기
__필터 처리기
__확률 기반 샘플링 처리기
__리소스 처리기
__스팬 처리기
__배치 처리기
__메모리 제한 처리기
_익스포터
_확장
_추가 컴포넌트
8.4 OTLP를 이용한 원격 측정 데이터 전송
_인코딩과 프로토콜
_기타 설계 고려 사항
8.5 OpenTelemetry 컬렉터의 활용
_익스포터 설정
_컬렉터 설정
_스팬 수정
_메트릭 필터링
정리하기
Chapter 9 컬렉터 배포
9.1 환경 설정
9.2 애플리케이션의 원격 측정 데이터 수집
_사이드카 배포
9.3 시스템 수준의 원격 측정 데이터 수집
_에이전트의 배포
_사이드카와 에이전트 연결
_리소스 속성 추가
9.4 게이트웨이로서의 컬렉터
_오토스케일링
_OpenTelemetry 오퍼레이터
정리하기
Chapter 10 백엔드 시스템 설정
10.1 환경 설정
10.2 원격 측정 데이터 분석을 위한 백엔드 시스템 옵션
_추적
_집킨
_예거
_메트릭
__프로메테우스
_로깅
__로키
__그라파나
10.3 운영 환경에서의 실행
_고가용성
_확장성
_데이터 보존
_개인 정보 보호 규정
정리하기
Chapter 11 문제점 분석
11.1 환경 설정
11.2 카오스 엔지니어링
_[실험 1] 지연 시간 증가
__개요
__가설
__검증
_[실험 2] 리소스 압박
__개요
__가설
__검증
_[실험 3] 예기치 못한 중단
__개요
__가설
__검증
11.3 원격 측정을 이용한 사전 감지
정리하기
Chapter 12 샘플링
12.1 환경 설정
12.2 시그널 샘플링
_추적
_메트릭
_로그
_샘플링 전략
__헤드 샘플링
__테일 샘플링
__확률 샘플링
_여러 가지 샘플러
12.3 SDK를 이용한 애플리케이션 수준의 샘플링
12.4 OpenTelemetry 컬렉터를 이용한 데이터 샘플링
_테일 샘플링 처리기
정리하기
Author
알렉스 보텐,노승헌
Lightstep의 수석 소프트웨어 엔지니어. 10년 동안 여러 조직이 클라우드 네이티브 환경에 적응할 수 있도록 돕는 일을 해왔습니다. 또한 핵심 네트워크 인프라부터 모바일 클라이언트 애플리케이션까지 분산 애플리케이션에 대한 복잡한 트러블슈팅을 어떻게 수행해야 하는지 직접 경험하며 지식을 쌓고 있습니다. 그리고 이러한 경험을 통해 관찰 가능성 분야에 관심을 갖게 되어 여러 오픈 소스 프로젝트에 기여하고 있습니다. 2019년부터 OpenTelemetry 프로젝트의 기여자, 승인자, 유지 보수 담당자로서 프로젝트를 발전시키는 데 주도적으로 참여하고 있으며 오늘날 대규모 OpenTelemetry 커뮤니티가 만들어지는 과정에 크게 기여했습니다. 무엇보다 우리 주변의 기술을 이해하고 지식을 공유하는 것을 좋아합니다.
Lightstep의 수석 소프트웨어 엔지니어. 10년 동안 여러 조직이 클라우드 네이티브 환경에 적응할 수 있도록 돕는 일을 해왔습니다. 또한 핵심 네트워크 인프라부터 모바일 클라이언트 애플리케이션까지 분산 애플리케이션에 대한 복잡한 트러블슈팅을 어떻게 수행해야 하는지 직접 경험하며 지식을 쌓고 있습니다. 그리고 이러한 경험을 통해 관찰 가능성 분야에 관심을 갖게 되어 여러 오픈 소스 프로젝트에 기여하고 있습니다. 2019년부터 OpenTelemetry 프로젝트의 기여자, 승인자, 유지 보수 담당자로서 프로젝트를 발전시키는 데 주도적으로 참여하고 있으며 오늘날 대규모 OpenTelemetry 커뮤니티가 만들어지는 과정에 크게 기여했습니다. 무엇보다 우리 주변의 기술을 이해하고 지식을 공유하는 것을 좋아합니다.