[서평] 관찰 가능성 엔지니어링
한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.
실제로 적용해 보며 배우는 OpenTelemetry
책 소개
인턴을 하면서 복잡해지기 시작한 애플리케이션의 모니터링 시스템을 구축한 적이 있습니다. 모노리스가 아닌 여러 서비스로 쪼개지며 알 수 없는 지연과 의존성 때문에 오류가 나고는 했는데 그러한 것을 가시화했습니다.
이때, 메트릭을 위해 프로메테우스를, 여러 애플리케이션의 로그를 위해 Loki를, 로그 수집 및 처리를 위해 fluentbit를, 이러한 데이터 소스의 시각화를 위해 그라파나를 사용했습니다.
이러한 환경을 구축하면서도 여러 선택지와 고민사항이 있었습니다. 먼저 이 책을 읽었다면.. 크게 도움이 됐을 것 같네요!
이런 시스템을 직접 구축하려다 보면 수집을 어떻게 할 것이며 분산된 데이터를 어떻게 추적할 것이며, 어떻게 모니터링을 할 것인지 하나하나 다 정해야 했습니다. 이러한 것에 대한 표준의 집합체가 OpenTelemetry입니다.
이 책을 따라가다 보면 Observability가 개발&운영에 있어서 왜 중요한지 알 수 있고 OpenTelemetry를 체계적으로 배울 수 있도록 도와줍니다.
OpenTelemetry 실습하기 좋은 책
OpenTelemetry는 처음에 배우기가 상당히 복잡합니다. 책에서 언급하듯이 처음부터 여러 용어도 알아야 해서 헷갈립니다.
제가 공부하고 개발할 때 가장 불편했던 것은 실습 환경을 갖추는 것이었습니다.
어느 정도 복잡한 분산된 환경이 있어야 했습니다. 그래서 직접 API 서버랑 메시지 브로커 등을 짜고 여러 도커 파일을 만드는 일이 많았습니다. 이걸 짜고 나면 여기에 원하는 Agent랑 로그 수집할 컨테이너도 띄워야 하고 서로 통신할 수 있도록 네트워크 작업도 해줘야 했습니다.
원하는 상황을 만들려면 인위적인 조작도 계속해야 했습니다. 예를 들어서, 일부 시스템이 불안정한 상황을 만들려면 일부러 비효율적으로 짜거나 인스턴스를 강제로 끄면서 작업해보고는 했습니다.
이렇게 간단하게 몇 가지 검증 작업이 끝나면 위에 파일처럼 파일이 난잡해지고는 했습니다.
책에서는 모든 실습 환경을 Docker Compose로 제공해줍니다. 이런 것을 귀찮게 안 만들고 OpenTelemetry에 집중할 수 있다는 것이 큰 장점으로 느껴졌습니다.
너무 편하게 실습했습니다.
실습을 하며 상당히 많은 부분을 무시하고 단순 라벨로만 구별 지을려고 했던 것을 알게 되었습니다. 기본기를 다질 수 있는 좋은 기회였습니다.
Silicon Mac 사용자를 위한 팁
이 책은 실습이 핵심입니다. 주어진 실습 파일을 기반으로 이것 저것 뜯어고치면서 궁금증을 해결하기 좋습니다.
저는 M1이 탑재된 맥북을 쓰고 있는데 책은 macOS x86-64 환경 기반으로 작성되어서 그런지 실습 파일이 저는 제대로 작동하지 않았습니다.
저는 첫 번째로 실습 파일인 Chapter 2부터 docker compose를 실행하니 애플리케이션이 바로 죽었습니다.
아무래도 이미지가 제 OS와 맞지 않아서 더 많은 메모리를 줄 필요가 있었습니다.
보면 inventory와 grocery-store가 137 코드(혹은 간헐적으로 237)를 던지며 죽어있습니다. 137 코드는 Docker의 OOM(Out of Memory) 오류이기 때문에 먼저 도커 데스크탑(혹은 다른 컨테이너 엔진)의 메모리 제한을 늘려줘야 합니다.
저는 전체 메모리 제한을 풀어도 계속 죽길래 docker-compose.yml을 보니 죽은 두 컨테이너에게 limit이 걸려있었습니다.
이 Limit의 메모리를 좀 늘려줘야 OOM Kill을 당하지 않습니다.
memory를 128M으로 설정하면 좀 기다리시면 간간히 ReadTimeout 나오는 정도로 돌아갑니다.
이것 말고도 맥은 Linuxkit 위에서 도커 엔진이 동작해서 가끔 네트워크가 꼬일 일도 있긴 했습니다.
헷갈릴 때는 아래 명령어로 직접 접속해서 확인했었습니다.
nc -U ~/Library/Containers/com.docker.docker/Data/debug-shell.sock .
실리콘 맥 유저분들께 도움이 되었으면 좋겠습니다!
추천 대상
실습하려면 컨테이너 환경의 네트워크에 대한 개념은 알아야지 원활할 것 같다는 생각이 들었습니다.
아무래도 Docker나 K8S 같은 분산 시스템에 관해 어느정도 익숙한 분이 읽으면 좋을 것 같습니다.
처음 접하면 복잡할 수 있는 OpenTelemetry를 직접 이것저것 조작하며 실습하며 익혀보고 싶은 분께 추천드립니다.
댓글
이 글 공유하기
다른 글
-
[서평] 이토록 쉬운 리액트로 배우는 소켓 프로그래밍
[서평] 이토록 쉬운 리액트로 배우는 소켓 프로그래밍
2023.09.18 -
[서평] 모의 해킹으로 알아보는 리눅스 서버 해킹과 보안
[서평] 모의 해킹으로 알아보는 리눅스 서버 해킹과 보안
2023.08.29 -
[서평] 백엔드 개발을 위한 핸즈온 장고
[서평] 백엔드 개발을 위한 핸즈온 장고
2023.06.25 -
[서평] 쉽게 시작하는 쿠버네티스
[서평] 쉽게 시작하는 쿠버네티스
2023.04.09