Skip to content

Tracing

  • Published on
    커널 디버깅에는 사용자 공간과 결정적으로 다른 제약이 하나 있습니다. 멈춰 세우면 시스템 전체가 멈춘다는 것입니다. 그래서 커널 관측 도구는 대부분 멈추지 않고 들여다보는 쪽으로 발달했습니다. 이 글은 그 도구들을 실제로 쓰는 순서대로 정리합니다. 먼저 모두가 실제로 가장 많이 쓰는 printk와 dmesg를, 그다음 oops 메시지를 소스 줄 번호로 되돌리는 트리 안의 스크립트들을, 이어서 /proc과 /sys라는 커널 자신의 인터페이스를 다룹니다. 본론은 ftrace입니다. tracefs의 제어 파일들과 function_graph 추적기로 호출 그래프를 얻는 절차를 공식 문서 기준으로 설명합니다. 그다음 임의 함수에 동적으로 붙는 kprobes와, 샘플링으로 전체 그림을 잡는 perf를 다루고, eBPF가 이 지형에서 어디에 놓이는지 정리합니다. 마지막은 진짜 중단점이 필요한 경우입니다. QEMU의 gdb 스텁과 커널이 제공하는 lx 명령들, 그리고 물리 장비용 KGDB를 다룹니다.
  • Published on
    계측은 SDK를 설치하는 일이 아니라 순서를 지키는 일입니다. 자동 계측으로 하루 만에 골격을 세우고, 리소스 속성을 먼저 확정한 뒤, self time이 큰 구간에만 수동 스팬을 넣는 순서를 실제 서비스 하나를 끝까지 계측하며 보여줍니다. 컨텍스트 전파가 끊기는 네 지점인 스레드풀, 메시지 큐, 백그라운드 작업, 헤더를 지우는 프록시를 각각 재현하고 고칩니다. 마지막으로 컬렉터를 앱과 백엔드 사이에 두는 이유를 다섯 가지로 정리하고, 계측이 오히려 앱을 망가뜨리는 실패 모드를 짚습니다.
  • Published on
    로그·메트릭·트레이스라는 세 기둥부터 이들이 trace_id로 어떻게 엮이는지, Loki와 OpenSearch의 로그 전략 차이, OpenTelemetry를 중심으로 한 분산 트레이싱(Jaeger·Tempo), 그리고 Langfuse로 대표되는 LLM 관측 가능성까지. 실무에서 스택을 어떻게 짜고 무엇을 골라야 하는지 하나씩 대조하며 정리합니다.