GN⁺: Subtrace - Docker 컨테이너를 위한 Wireshark
(github.com/subtrace)- 도커 컨테이너에서 발생하는 모든 네트워크 요청을 추적할 수 있도록 해주는 도구
- Wireshark의 기능을 컨테이너 환경에 적용한 것
- 이를 통해 백엔드 서버의 네트워크 트래픽을 실시간으로 분석하고, 프로덕션 환경의 문제를 더 빠르게 해결할 수 있음
주요 기능
- 별도 설정 없이 즉시 사용 가능
- 백엔드 서버 실행 명령 앞에
subtrace run
을 추가하는 것만으로 끝
- 백엔드 서버 실행 명령 앞에
- 코드 수정 불필요
- 모든 프로그래밍 언어 지원 (Python, Node.js, Go 등)
- 요청의 전체 페이로드, 헤더, 상태 코드, 지연 시간 확인 가능
- 100µs 이하의 성능 오버헤드
- Clickhouse 기반
- 오픈 소스
Subtrace의 동작 방식
- 모든 네트워크 관련 Linux 시스템 호출(syscall)을 Seccomp BPF를 이용해 가로챔
- TCP 연결을 프록시하여 HTTP 요청을 분석하고, 이를 WebSocket을 통해 브라우저로 전송
- Chrome DevTools의 네트워크 탭을 활용하여 요청을 시각적으로 확인 가능
- 기존의 Sentry나 OpenTelemetry처럼 로그 기반이 아니라, 실시간으로 모든 요청을 그대로 볼 수 있음
코드 기여 관련
- Subtrace는 오픈 소스지만 현재는 Pull Request를 받지 않음
- 스타트업 특성상 소규모 팀으로 운영되며, 오픈 소스 커뮤니티를 효율적으로 관리할 여력이 부족하기 때문임
- 향후 정책이 변경될 가능성이 있으며, 기능 요청과 버그 리포트는 언제든 환영함
Hacker News 의견
- 문서들을 읽어보니 subtrace 프로세스가 모든 데이터를 서버로 전송하는 것 같음. API 키와 개인 데이터를 다루는 프로덕션 환경에서는 그렇게 하고 싶지 않음
- 완전히 자체 호스팅으로 실행할 방법이 있는지 궁금함. 만약 없다면, 계획이 있는지? 자체 호스팅 옵션을 어떻게 수익화할 것인지도 궁금함
- Wireshark는 약간 오해의 소지가 있음. 브라우저의 네트워크 탭을 사용하는 "네트워크 검사기"에 더 가까움
- 정말 유용해 보이며, 도구 상자에 넣을지 확인하기 위해 꼭 사용해 볼 것임
- HTTP 요청에만 해당되는 것 같음. 그렇다면 Wireshark와의 비교는 적절하지 않음
- Docker 네트워킹에서 가장 고통스러운 디버깅 시나리오는 항상 비-TCP 트래픽을 다루는 것임. 그래도 유용해 보임. 이해가 안 되는 점은 왜 계정 토큰이 필요한지임. subtrace에 네트워크 연결이 필요한가? 이 모든 것이 로컬에서 실행되어야 하며, 이러한 종류의 연결 세부 정보는 절대 호스트를 떠나지 않아야 함
- seccomp 기반의 인터셉션에 축하를 보냄. 이 문제를 해결하는 정말 깔끔한 방법임. 우리는 mitmproxy에서 BPF_PROG_TYPE_CGROUP_SOCK eBPF를 사용한 재밋는 작업을 했지만, 컨테이너에서는 전혀 작동하지 않음. 관련된 모든 시스템 호출을 인터셉트하는 것이 잘 작동하는 것을 보니 멋짐
- TLS를 해독할 수 있는지 궁금함. 아마도 일반적인 라이브러리 호출을 후킹하여 가능할 것임
- 비디오를 보니 대시보드가 sibtrace.dev에 호스팅되는 것 같음. 내 데이터가 거기로 전송되는지 궁금함. 그건 절대 안 됨
- 사용해보지는 않았지만, 궁금한 점은 프로덕션에서 특정 요청/세션을 디버깅하는 방법임. 요청 추적 ID 같은 것으로 필터링할 수 있는지 궁금함
- 항상 이런 도구를 원했음. 다음에 Docker 컨테이너의 트래픽을 검사해야 할 때 사용해 볼 것임