Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

20.3.4. SystemTap을 사용하여 애플리케이션의 시스템 호출 모니터링

SystemTap 툴을 사용하면 커널 이벤트에 대한 사용자 정의 이벤트 처리기를 등록할 수 있습니다. strace 와 비교하여 사용하기가 어렵지만 SystemTap 은 더 효율적이고 복잡한 처리 로직을 사용할 수 있습니다.

사전 요구 사항
절차
  1. 콘텐츠를 사용하여 my_script.stp 파일을 생성합니다.

    probe begin
    {
      printf("waiting for syscalls of process %d \n", target())
    }
    
    probe syscall.*
    {
      if (pid() == target())
        printf("%s(%s)\n", name, argstr)
    }
    
    probe process.end
    {
      if (pid() == target())
        exit()
    }
  2. 모니터링할 프로세스의 프로세스ID(pid )를 찾습니다.

    $ ps -aux
  3. 스크립트를 사용하여 SystemTap 을 실행합니다.

    # stap my_script.stp -x pid

    pid 값은 프로세스 ID입니다.

    스크립트가 로드된 커널 모듈로 컴파일됩니다. 이렇게 하면 명령을 입력하고 출력을 가져오는 사이에 약간의 지연이 발생합니다.

  4. 프로세스에서 시스템 호출을 수행하면 호출 이름과 해당 매개 변수가 터미널에 출력됩니다.
  5. 프로세스가 종료되면 스크립트가 종료되거나 Ctrl+C 를 누르면 종료됩니다.
추가 리소스
  • SystemTap Beginners 가이드
  • SystemTap Tapset 참조
  • strace 기능과 근접한 더 큰 SystemTap 스크립트는 /usr/share/systemtap/examples/process/strace.stp 로 사용할 수 있습니다. 스크립트를 실행하려면 다음을 수행합니다.

    # stap --example strace.stp -x pid

    또는

    # stap --example strace.stp -c "cmd args …​"