# Subtrace - Docker 컨테이너를 위한 Wireshark

> Clean Markdown view of GeekNews topic #19335. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=19335](https://news.hada.io/topic?id=19335)
- GeekNews Markdown: [https://news.hada.io/topic/19335.md](https://news.hada.io/topic/19335.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-02-21T08:28:31+09:00
- Updated: 2025-02-21T08:28:31+09:00
- Original source: [github.com/subtrace](https://github.com/subtrace/subtrace)
- Points: 18
- Comments: 2

## Summary

Subtrace는 도커 컨테이너에서 발생하는 모든 네트워크 요청을 추적할 수 있는 도구로, Wireshark의 기능을 컨테이너 환경에 적용하여 백엔드 서버의 네트워크 트래픽을 실시간으로 분석할 수 있습니다. 이 도구는 별도의 설정이나 코드 수정 없이 모든 프로그래밍 언어를 지원하며, 100µs 이하의 성능 오버헤드로 요청의 전체 페이로드, 헤더, 상태 코드, 지연 시간을 확인할 수 있습니다. Subtrace는 오픈 소스이지만 현재는 Pull Request를 받지 않으며, 기능 요청과 버그 리포트는 언제든 환영합니다.

## Topic Body

- 도커 컨테이너에서 발생하는 모든 네트워크 요청을 추적할 수 있도록 해주는 도구  
  - 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를 받지 않음  
- 스타트업 특성상 소규모 팀으로 운영되며, 오픈 소스 커뮤니티를 효율적으로 관리할 여력이 부족하기 때문임  
- 향후 정책이 변경될 가능성이 있으며, 기능 요청과 버그 리포트는 언제든 환영함

## Comments



### Comment 34886

- Author: codemasterkimc
- Created: 2025-02-21T10:01:50+09:00
- Points: 1

Falco 나 linkerd 로 문제를 발견하고 필요시 subtrace 로 분석하면 되겠구만~ :)

### Comment 34879

- Author: neo
- Created: 2025-02-21T08:28:32+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=43096477) 
- 문서들을 읽어보니 subtrace 프로세스가 모든 데이터를 서버로 전송하는 것 같음. API 키와 개인 데이터를 다루는 프로덕션 환경에서는 그렇게 하고 싶지 않음
  - 완전히 자체 호스팅으로 실행할 방법이 있는지 궁금함. 만약 없다면, 계획이 있는지? 자체 호스팅 옵션을 어떻게 수익화할 것인지도 궁금함
- Wireshark는 약간 오해의 소지가 있음. 브라우저의 네트워크 탭을 사용하는 "네트워크 검사기"에 더 가까움
  - 정말 유용해 보이며, 도구 상자에 넣을지 확인하기 위해 꼭 사용해 볼 것임
- HTTP 요청에만 해당되는 것 같음. 그렇다면 Wireshark와의 비교는 적절하지 않음
- Docker 네트워킹에서 가장 고통스러운 디버깅 시나리오는 항상 비-TCP 트래픽을 다루는 것임. 그래도 유용해 보임. 이해가 안 되는 점은 왜 계정 토큰이 필요한지임. subtrace에 네트워크 연결이 필요한가? 이 모든 것이 로컬에서 실행되어야 하며, 이러한 종류의 연결 세부 정보는 절대 호스트를 떠나지 않아야 함
- seccomp 기반의 인터셉션에 축하를 보냄. 이 문제를 해결하는 정말 깔끔한 방법임. 우리는 mitmproxy에서 BPF_PROG_TYPE_CGROUP_SOCK eBPF를 사용한 재밋는 작업을 했지만, 컨테이너에서는 전혀 작동하지 않음. 관련된 모든 시스템 호출을 인터셉트하는 것이 잘 작동하는 것을 보니 멋짐
- TLS를 해독할 수 있는지 궁금함. 아마도 일반적인 라이브러리 호출을 후킹하여 가능할 것임
- 비디오를 보니 대시보드가 sibtrace.dev에 호스팅되는 것 같음. 내 데이터가 거기로 전송되는지 궁금함. 그건 절대 안 됨
- 사용해보지는 않았지만, 궁금한 점은 프로덕션에서 특정 요청/세션을 디버깅하는 방법임. 요청 추적 ID 같은 것으로 필터링할 수 있는지 궁금함
- 항상 이런 도구를 원했음. 다음에 Docker 컨테이너의 트래픽을 검사해야 할 때 사용해 볼 것임
