관심있는 것들 정리

[리뷰] 관찰 가능성 엔지니어링 본문

카테고리 없음

[리뷰] 관찰 가능성 엔지니어링

내공강화 2023. 8. 27. 11:21

간단한 프로그램을 작성하는 일에서부터, 여러 복잡한 프로그램들을 한데 묶어 시스템을 구성하는 것까지, 프로그램들이 어떻게 동작하는 지 아는 것은 가장 중요한 일이 아닐 수 없다 생각한다. 하나의 프로그램의 경우라면 문제점 발생 시, 그나마 로그 파일을 로컬에서 분석하는 것으로 어느정도 문제점의 실마리를 파악할 수 있겠지만, 요즘같은 복잡한 분산 시스템 환경에서 동작하는 규모가 아주 큰 시스템의 경우라면, 복잡성은 차원이 다른 문제일 것이다. 문제점의 트리거링 포인트가 어떠한 메시지나 이벤트인지 확인하는 것도 쉽지 않으며, 해당 이벤트가 바로 영향을 주는 것이 아니라 여러가지 메시지 전송 단계를 거쳐 최종적으로 현재 문제를 만든 것인지 확인하는 것은 더더욱 쉽지 않다. 그래서 이러한 문제점이 발생하는 것을 대비하여, 특히 규모가 큰 프로그램들의 경우, 각 구성 프로그램별로 로그 메시지를 저장하는 것은 물론, 이벤트나 메시지의 흐름을 구분가능한 정보(메시지 ID 또는 5 tuple정보 등)을 이용하여 기록하는 것은 물론, 상세한 통계 및 에러 시 알람, 폴트 등 많은 추적가능한 방법들을 고민해 시스템 설치 및 테스트 그리고 운용 중 언제라도 파악할 수 있도록 하려고 많은 노력을 하고 있다.

관찰 가능성 엔지니어링은 이러한 복잡한 문제점 파악을 위한 노력들에 대한 결과를 좀 더 쉽게 이용할 수 있도록 만들어 놓은 OpenTelemetry를 어떻게 기존 시스템에서 이용할 수 있을 지, 특히 CNF 환경에서 잘 이용할 수 있을 지에 대해 기본 개념부터 시작해, 어떻게 사용하는 지 하나하나 설명하고, 실제 k8s 현장 배포 및 분석 방법에 대해서 설명해 주는 책이다. 책의 표지에 그려진 그림이 사실 위에서 기술한 내용 모두를 설명하고 있다고 생각한다. 우리가 단순히 눈으로 보는(monitoring) 내용은 정말 일부분에 불과한 현상으로 그 아래에서 돌아가는 복잡하고 거대한 시스템의 흔적에 대한 확인(observability)는 가려져 있다. 

 

이 책은 총 3부에 걸쳐, OpenTelemetry가 무엇인지, 어떻게 사용하고 응용할 지에 대해 단계별로 설명을 하고 있다. 1부에서a는 기존 레거시 시스템들에서 사용했던 툴들 및 연동 시 문제 등에 대해 간략하게 설명하고 OpenTelemetry가 왜 나오게 되었는 지에 대해 간단히 설명한다. 또 관련 용어 및 개념에 대해 예시를 이용하여 설명한다. 2부에서는 1장에서 설명한 개념들에 대해, 실제 구현을 해 보면서 개념을 명확히 하고, OpenTelemetry를 이용해서 어떻게 사용할 수 있는지 설명한다. OpenTelemetry가 제공하는 기능 중 대표적인 기능인 추적, 메트릭, 로그에 대해 각 기능이 어떻게 동작하는 지에 대해 Python script를 이용하여 환경 구성 및 사용 방법에 대해 설명한다. 또 단순히 기본 제공 기능 뿐만 아니라, 응용 프로그램에서 추가적으로 원하는 데이터를 활용 시 어떻게 해야하는 지에 대한 예시를 제공하여, 단순한 tutorial이 아닌 언제든 개발시 참고가능한 레퍼런스 역할을 할 수 있도록 하였다.

  - 마지막으로 3부에서는, 2부에 설명한 기능들을 어떻게 활용하는 것이 좋은지에 대해 설명한다. 당연한 이야기겠지만, 잔뜩 설명을 해 두고 이를 실제 CNF 환경에 대해 어떻게 배포를 하고, 어떻게 백엔드 환경을 구성하여야 할지 알 수 없다면, 큰 의미가 없게 된다. K8s 환경에서 여러가지 시나리오 별로 배포 시 어떻게 설정 및 구성을 해야하는 지에 대한 방법을 설명한다. 그리고 수집한 데이터를 쉽게 분석할 수 있도록, 오픈 소스 툴들(집킨, 예거, 프로메테우스, 그라파나)을 백엔드로 활용하는 방법도 하나하나 상세히 설명한다.

 

보통 이러한 책들의 경우, 책의 내용이 늘어나는 부담도 있고, 저자가 모든 경우의 응용 환경에 대해 고려하기가 쉽지 않아, 설명하고자 하는 부분을 위주로 상세 설명을 하는 경우가 많다. 그래서 특정 챕터를 보려할 때, 해당 챕터를 보다가 다시 앞으로 돌아가 차근차근 책을 읽어 나가야 하는 경우가 많이 있다. 하지만 이 책은 그각 챕터별로 해당 챕터만 보고도 관련 내용을 쉽게 확인할 수 있도록 구성되어 있다. 테스트 환경 구성을 쉽게 하기 위해 처음부터 하나씩 툴 설정 방법을 설명하고, 설명하는 기능이 늘어감에 따라 하나씩 하나씩 코드가 추가되는 내용을 쉽게 확인할 수 있도록 해 두었다. 간단히 관련 내용을 설명하자면, 먼저 다음과 같이 챕터에서 설명할 내용의 구성에 대해 전체적으로 설명을 하며 필요 시, 이해하기 쉽도록 개발 환경 또는 스크립트 구성에 대해 도식화를 해 둔다.

 

그리고나서 기본 베이스가되는 script에 대해 설명을 하고 해당 스크립트 동작 결과를 보여준다. 설명이 진행되면서 기능을 추가되는 과정을 반복하는데, script가 어느 부분이 어떻게 추가되는 지 변경 내용을 다른 색으로 구분해 눈에 변경 사항이 쉽게 들어올 수 있게 하여, 코드 확인을 쉽게 해 준다.

 

script 실행 결과의 역시 마찬가지이다.

 

 

어찌보면 사소할 수 있지만, 책의 내용과는 별개로 이런 부분은 필요한 챕터만 선택적으로 읽어 가나가는 데 있어 시간도 절약되고 빠른 이해에도 도움이 되어, 다른 책과 차별적인 포인트라 생각한다.

 

끝으로 이 책의 대상독자를 짚으며 리뷰를 마치려 한다. 책의 제일 처음 부분에 있는 대상 독자에 기술되어 있는 것처럼 (중급이라 기술되어 있음), 내용을 무리없이 이해하는데는 어느 정도의 시스템 지식, CNF 환경에 대한 지식 그리고 Python script에 대한 지식이 필요할 것으로 생각한다. 개발을 해보지 않은 분이나, 이제 막 개발을 시작하는 분들의 경우, 이 책에서 언급하는 내용들을 충분히 이해하고 필요성을 느끼기 어려울 수도 있기 때문이다. 또 CNF 시스템 및 k8s 나 docker 환경에 대한 익숙함, 기본적인 Python 스크립트 지식이 역시 책에 제공된 코드를 테스트해보는데 중요할 것으로 생각한다. 하지만, 반대로 생각해보면 이 책을 천천히 읽으며, 필요한 내용들을 하나씩 공부하면서 책을 익혀나간다면, 책을 다 읽고났을 때, 또 다른 분야에 대한 접근을 하는데 많은 도움이 되는 지식들을 이미 지니고 있을 것이라 생각된다.

 

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

반응형