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

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

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