SystemTap
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
SystemTap은 리눅스 시스템의 성능과 동작을 모니터링하고 분석하기 위한 오픈 소스 도구이다. 2005년 기술 프리뷰로 처음 소개되었으며, SystemTap 스크립트 언어로 작성된 스크립트를 사용하여 시스템의 다양한 이벤트를 추적한다. 스크립트는 실행 전에 커널 모듈로 컴파일되어 실행되며, CPython VM 및 JVM 추적을 지원하고, 프로메테우스 익스포터를 포함한다. SystemTap은 DTrace 마커와의 호환성을 제공하며, TCP 소켓 옵션 설정 추적과 같은 예제를 통해 사용법을 확인할 수 있다.
더 읽어볼만한 페이지
- 디버거 - Valgrind
Valgrind는 동적 분석 도구들의 프레임워크로, 가상 머신 기반으로 작동하며 메모리 오류 감지, 멀티스레드 코드 분석 등 다양한 기능을 제공하지만, 정적 또는 스택 할당 데이터의 경계 오류는 모두 감지하지 못한다. - 디버거 - Eclipse (소프트웨어)
이클립스는 IBM에서 개발한 자바 기반의 통합 개발 환경으로, OSGi 서비스 플랫폼을 런타임 아키텍처로 사용하며, 플러그인을 통해 기능을 확장할 수 있고, 이클립스 퍼블릭 라이선스를 따르며, 한국어를 지원한다. - 리눅스 커널 특징 - 커널 기반 가상 머신
커널 기반 가상 머신(KVM)은 리눅스 커널의 가상화 확장 기능으로, CPU와 메모리 가상화를 지원하며 QEMU와 함께 완전한 가상화 솔루션을 구성하고 다양한 관리 도구를 제공한다. - 리눅스 커널 특징 - AppArmor
AppArmor는 리눅스 보안 모듈로, 프로그램의 정상적인 동작을 정의하는 프로필을 통해 비정상적인 행위를 차단하며 SELinux의 대안으로 제시되었으나 보안 취약점, 성능, 설정, 호환성 등에 대한 논란도 있다. - C++로 작성된 자유 소프트웨어 - 클램윈
클램윈은 ClamAV 엔진 기반의 오픈 소스 백신 소프트웨어로, 트로이 목마, 바이러스, 멀웨어 등 다양한 악성 위협 분석 자료를 제공하며 예약 검사, 수동 검사, 컨텍스트 메뉴 통합 등의 기능을 지원하지만 실시간 감시 기능은 제공하지 않는다. - C++로 작성된 자유 소프트웨어 - VirtualDub
VirtualDub은 윈도우 운영 체제에서 실행되는 무료 오픈 소스 비디오 캡처 및 처리 유틸리티이며, AVI 파일을 주로 처리하고 플러그인을 통해 다른 파일 형식도 지원하며, 동영상 캡처, 편집, 비디오 처리 및 필터 기능을 제공한다.
| SystemTap - [IT 관련 정보]에 관한 문서 | |
|---|---|
| 기본 정보 | |
| 유형 | 트레이싱 프로그래밍 언어 |
| 개발자 | 다수 |
| 출시일 | 2005년 |
| 최신 버전 | 5.2 |
| 최신 릴리스 날짜 | 2024년 11월 8일 |
| 프로그래밍 언어 | C, C++, 커스텀 스크립팅 |
| 운영 체제 | 리눅스 커널 |
| 라이선스 | GNU 일반 공중 사용 허가서 |
| 웹사이트 | SystemTap 공식 웹사이트 |
2. 역사
SystemTap은 2005년 레드햇 엔터프라이즈 리눅스 4 업데이트 2에서 기술 미리 보기(Technical Preview) 형태로 처음 등장했다.[14][2] 4년간의 개발을 거쳐 2009년에 SystemTap 1.0 버전이 출시되었으며,[15][3] 같은 해 SystemTap 1.2 버전에서는 CPython VM 및 JVM의 추적점(Tracepoints) 기능이 추가되었다.[18][6] 2011년부터는 주요 리눅스 배포판들에서 SystemTap이 완전히 지원되기 시작했다.[16][17][4][5] 이후에도 개발이 지속되어 2019년 11월에는 SystemTap 4.2 버전에 프로메테우스 익스포터가 포함되는 등 기능이 확장되었다.
2. 1. 초기 개발
SystemTap은 2005년 레드햇 엔터프라이즈 리눅스 4 업데이트 2에서 기술 미리 보기(Technical Preview)로 처음 소개되었다.[2]4년간의 개발 끝에 SystemTap 1.0 버전이 2009년에 출시되었다.[3] 같은 해 SystemTap 1.2 버전에서는 CPython VM 및 JVM의 추적점(Tracepoints)이 추가되었다.[6]
2011년에는 RHEL/CentOS 5 업데이트 2부터, SLES 10, Fedora, 데비안, Ubuntu를 포함한 주요 리눅스 배포판에서 SystemTap을 완전히 지원하게 되었다.[4][5]
2. 2. 1.0 출시
4년간의 개발 끝에 SystemTap 1.0이 2009년에 출시되었다.[3]2. 3. 지원 확대
SystemTap은 2005년 레드햇 엔터프라이즈 리눅스(Red Hat Enterprise Linux) 4 업데이트 2에서 기술 미리 보기 형태로 처음 소개되었다.[14][2] 4년간의 개발을 거쳐 2009년에 SystemTap 1.0 버전이 출시되었다.[15][3] 같은 해 출시된 SystemTap 1.2 버전에서는 CPython 가상 머신(VM)과 자바 가상 머신(JVM)에 대한 추적점(Tracepoints) 기능이 추가되어 지원 범위가 넓어졌다.[18][6]2011년을 기점으로 SystemTap은 RHEL / CentOS 5 업데이트 2부터, SLES 10, 페도라, 데비안, 우분투를 포함한 주요 리눅스 배포판에서 완전히 지원되기 시작했다.[16][17][4][5]
2. 4. 기능 추가
SystemTap 1.2(2009년)에서는 CPython VM 및 JVM의 추적점 기능이 추가되었다.[18][6] 2019년 11월에는 SystemTap 4.2 버전에 프로메테우스(Prometheus) 익스포터가 포함되었다.3. 사용법
SystemTap 스크립트는 일반적으로 `.stp` 확장자를 가진 텍스트 파일 형태로 작성되며[19][7], `stap` 명령줄 도구를 사용하여 실행된다.[20][8] 스크립트를 실행하면, SystemTap은 내부적으로 여러 분석 단계를 거쳐 스크립트를 준비하고 실행 환경에 맞게 처리한다.
스크립트는 주로 시스템 커널이나 특정 사용자 프로그램 내에서 발생하는 이벤트, 예를 들어 특정 함수의 호출이나 반환, 또는 리눅스 커널의 트레이스 포인트와 같은 특정 지점에서의 동작을 관찰하고 기록하는 데 사용된다. 스크립트 실행이 완료되면, SystemTap이 사용했던 관련 자원들은 스크립트 종료 시 시스템에서 정리된다.
스크립트의 구체적인 실행 방식, 다양한 프로브 지점의 종류, 특별한 권한이 필요한 "전문가 모드" 사용법, 그리고 실행에 필요한 권한 설정 등 더 자세한 내용은 아래의 하위 섹션들에서 설명한다. SystemTap 버전 1.7부터는 권한 관리를 위한 `stapsys` 그룹이 도입되었다.[21][10]
3. 1. 스크립트 언어
SystemTap 스크립트는 SystemTap 언어로 작성되며[7][19], 파일 확장자는 '.stp'이다. 이 스크립트 파일은 'stap' 명령어를 사용하여 실행한다.[8][20]스크립트를 실행하면 시스템 내부에서는 여러 단계를 거치게 된다. 먼저 스크립트를 분석한 후, '--runtime=' 옵션으로 지정된 백엔드를 통해 실행한다. 사용 가능한 백엔드에는 세 가지 종류가 있다.
- 로드 가능 커널 모듈: 기본 백엔드로, 시스템의 모든 부분을 검사하고 조작할 수 있는 가장 강력한 기능을 제공한다. 따라서 가장 높은 수준의 권한이 필요하다. 실행 시 'stap_
' 형태의 이름으로 커널 모듈이 로드된다. - DynInst: 사용자의 사용자 공간 프로그램만을 계측하는 백엔드로, 동적 프로그램 분석 라이브러리인 DynInst를 기반으로 한다. 가장 낮은 수준의 권한만 필요하다.
- eBPF: 리눅스 커널의 eBPF 바이트코드 인터프리터를 기반으로 하는 최신 백엔드이다.[9] 커널 인터프리터의 기능으로 제한되며 중간 수준의 권한이 필요하다.
어떤 백엔드를 사용하든, 스크립트 실행이 완료되면 관련 모듈은 시스템에서 언로드된다.
SystemTap 스크립트는 주로 특정 이벤트(스크립트 시작 또는 종료 등), 리눅스의 "트레이스 포인트"와 같은 미리 컴파일된 프로브 지점, 또는 커널이나 사용자 공간에서 특정 함수나 구문이 실행되는 시점에 초점을 맞추어 작성된다.
특별한 경우, '-g' 명령줄 옵션을 사용하여 "전문가 모드(guru mode)"로 스크립트를 실행할 수도 있다. 전문가 모드 스크립트에는 내장된 C 코드를 포함할 수 있으며, 이를 통해 계측 대상 소프트웨어의 상태를 수정하는 것도 가능하다. 예를 들어, 긴급한 보안 패치를 적용하는 등의 작업에 사용될 수 있다. 하지만 전문가 모드는 시스템 안정성에 영향을 줄 수 있어 사용이 권장되지는 않는다. SystemTap 개발팀은 새로운 릴리스마다 더 많은 프로브 지점을 추가하여 전문가 모드의 필요성을 줄여나가고 있다.
SystemTap 버전 1.7부터는 'stapsys'라는 새로운 그룹과 권한 체계가 도입되어 권한 관리를 용이하게 하였다.[10][21]
3. 2. 실행 방식
SystemTap 스크립트 파일(`.stp`)은 SystemTap 언어로 작성되며[19][7], `stap` 명령줄 도구를 사용하여 실행된다.[20][8] 스크립트를 실행하기 전에 시스템은 여러 분석 단계를 거친다.스크립트는 `--runtime=` 옵션으로 선택 가능한 세 가지 백엔드 중 하나를 통해 실행될 수 있다.
- 적재 가능 커널 모듈: 기본 실행 방식이다. 스크립트는 커널 모듈로 컴파일되어 커널에 적재된다. 이 방식은 시스템의 모든 부분을 검사하고 조작할 수 있는 가장 포괄적인 기능을 제공하지만, 가장 높은 수준의 권한을 요구한다. 실행 중인 모듈은 'stap_
'와 같은 이름으로 식별된다. - DynInst: 이 백엔드는 사용자의 사용자 공간 프로그램만을 계측(instrument)하며, 가장 낮은 수준의 권한만 필요로 한다.
- eBPF 바이트코드: 비교적 최신 백엔드로[9], 리눅스 커널의 eBPF 인터프리터 기능을 활용한다. 커널 모듈 방식보다는 기능이 제한적이며 중간 수준의 권한이 필요하다.
어떤 백엔드를 사용하든 스크립트 실행이 완료되면 관련 모듈이나 프로세스는 언로드된다.
스크립트는 일반적으로 특정 이벤트(스크립트 시작 및 종료 등), 리눅스의 "트레이스포인트"(tracepoints)와 같은 컴파일된 프로브 지점, 또는 커널이나 사용자 공간 내 함수 및 구문의 실행 시점을 중심으로 동작한다.
특별한 경우, "전문가 모드"(guru mode) 스크립트는 내장된 C 언어 코드를 포함할 수 있으며, `-g` 명령줄 옵션을 통해 실행된다. 전문가 모드는 스크립트가 계측 대상 소프트웨어의 상태를 수정하는 것을 가능하게 하여, 예를 들어 긴급 보안 패치를 적용하는 등의 작업에 사용될 수 있다. 그러나 전문가 모드의 사용은 일반적으로 권장되지 않으며, SystemTap의 각 새 릴리스는 전문가 모드 스크립트의 필요성을 줄이기 위해 더 많은 프로브 지점을 포함하도록 설계되고 있다.
SystemTap 버전 1.7부터는 새로운 `stapsys` 그룹과 관련 권한 수준 체계가 도입되었다.[21][10]
3. 3. 프로브
SystemTap 스크립트는 다양한 지점에서 시스템 동작을 추적하는 데 사용된다. 일반적으로 스크립트는 다음과 같은 지점에 중점을 둔다.[8]3. 4. 전문가 모드
일부 "전문가 모드" 스크립트는 임베디드 C 코드를 포함할 수 있으며, 이는 `stap` 명령어 실행 시 `-g` 옵션을 사용하여 활성화할 수 있다. 그러나 전문가 모드의 사용은 일반적으로 권장되지 않는다. SystemTap은 새로운 릴리스마다 전문가 모드 스크립트의 필요성을 줄이기 위해 설계된 더 많은 프로브 지점을 포함하여 기능을 확장하고 있기 때문이다.[19][20]전문가 모드는 스크립트가 계측 대상 소프트웨어의 상태를 직접 수정할 수 있게 허용한다는 특징이 있다. 예를 들어, 시스템 운영 중 긴급하게 보안 관련 수정을 적용해야 하는 경우 등에 제한적으로 사용될 수 있다.
3. 5. 권한
SystemTap 스크립트를 실행하려면 사용하는 백엔드에 따라 다른 수준의 권한이 필요하다. 스크립트는 `stap` 명령어의 `--runtime=` 옵션을 통해 세 가지 백엔드 중 하나로 실행될 수 있다.- 적재 가능 커널 모듈 (기본값): 시스템의 모든 부분을 검사하고 조작할 수 있는 가장 포괄적인 기능을 제공하며, 따라서 가장 높은 수준의 권한이 요구된다.
- 동적 프로그램 분석 (DynInst): 사용자의 사용자 공간 프로그램만을 계측하며, 가장 낮은 수준의 권한이 필요하다.
- eBPF 바이트코드:[9] 리눅스 커널 인터프리터의 기능으로 제한되며, 중간 수준의 권한이 필요하다.
스크립트가 내장된 C 코드를 포함하고 `-g` 명령줄 옵션과 함께 "전문가 모드"로 실행될 경우, 계측 대상 소프트웨어의 상태를 직접 수정하는 것도 가능하다. 예를 들어, 이를 통해 긴급한 보안 패치를 적용할 수도 있다. 하지만 이러한 강력한 기능 때문에 전문가 모드는 더 높은 권한을 요구하며, 일반적인 사용은 권장되지 않는다. 각 SystemTap 릴리스는 전문가 모드의 필요성을 줄이기 위해 더 많은 프로브 포인트를 포함하도록 설계되고 있다.
SystemTap 버전 1.7부터는 새로운 ''stapsys'' 그룹과 권한 레벨 체계가 도입되어, 보다 세분화된 권한 관리가 가능해졌다.[21][10]
4. 예제
SystemTap 스크립트는 시스템의 다양한 동작을 실시간으로 관찰하고 분석하는 데 사용될 수 있다. 아래 하위 섹션에서는 구체적인 스크립트 예시를 통해 TCP 소켓 옵션 설정을 추적하는 방법과 더 많은 활용 사례를 찾아볼 수 있는 자료를 소개한다.
4. 1. TCP 소켓 옵션 설정 추적
다음 스크립트는 시스템에서 TCP 소켓 옵션을 설정하는 모든 애플리케이션을 추적하고, 어떤 옵션이 설정되는지, 그리고 해당 옵션 설정이 성공했는지 여부를 보여준다.
# 소켓 옵션 설정 표시
# optval의 값을 기반으로 활성화 또는 비활성화를 반환
function getstatus(optval)
{
if ( optval == 1 )
return "enabling"
else
return "disabling"
}
probe begin
{
print ("\n소켓 옵션을 설정하는 앱을 확인합니다\n")
}
# 소켓 옵션 설정
probe tcp.setsockopt
{
status = getstatus(user_int($optval))
# 원본 스크립트의 의도(영문 버전 참고)에 맞춰 출력 형식 수정
printf (" 앱 '%s' (PID %d)가 소켓 옵션 %s %s 중... ", execname(), pid(), optstr, status)
}
# 소켓 옵션 설정이 작동했는지 확인
probe tcp.setsockopt.return
{
if ( ret == 0 )
printf ("성공")
else
printf ("실패")
printf ("\n")
}
probe end
{
print ("\n종료\n")
}
SystemTap과 함께 제공되는 다른 많은 예시들은 [https://web.archive.org/web/20160312144834/https://sourceware.org/systemtap/examples/ SystemTap 예시]에서 찾아볼 수 있다.[11] 또한, [http://sourceware.org/systemtap/wiki/WarStories War Stories 페이지]에서 SystemTap 사용에 대한 실제 사례들을 확인할 수 있다.[12]
4. 2. 추가 예제
다음 스크립트는 시스템에서 모든 애플리케이션이 TCP 소켓 옵션을 설정하는 것을 보여준다. 어떤 옵션이 설정되고 있는지, 해당 옵션이 성공적으로 설정되었는지 여부를 확인할 수 있다.
# 소켓 옵션 설정 표시
# optval의 값을 기반으로 활성화 또는 비활성화를 반환
function getstatus(optval)
{
if ( optval == 1 )
return "enabling"
else
return "disabling"
}
probe begin
{
print ("\n소켓 옵션을 설정하는 앱을 확인합니다\n")
}
# 소켓 옵션 설정
probe tcp.setsockopt
{
status = getstatus(user_int($optval))
printf (" 앱 '%s' (PID %d)가 소켓 옵션 %s... ", execname(), pid(), status, optstr)
}
# 소켓 옵션 설정이 작동했는지 확인
probe tcp.setsockopt.return
{
if ( ret == 0 )
printf ("성공")
else
printf ("실패")
printf ("\n")
}
probe end
{
print ("\n종료\n")
}
SystemTap과 함께 제공되는 다른 많은 예제들이 SystemTap 예제 페이지에 나와 있다.[11] 또한, War Stories 페이지에서 SystemTap 사용에 대한 실제 사례들을 찾아볼 수 있다.[12]
5. 다른 트레이싱 기술과의 호환성
SystemTap은 DTrace와 같은 다른 트레이싱 도구와 연동될 수 있다.
5. 1. DTrace
SystemTap은 sys/sdt.h 헤더 파일의 매크로를 사용하여 애플리케이션에 컴파일될 때 DTrace 마커에 연결할 수 있다.참조
[1]
웹사이트
A SystemTap update
https://lwn.net/Arti[...]
LWN.net
[2]
웹사이트
Product Documentation for Red Hat Enterprise Linux
http://www.redhat.co[...]
Red Hat
[3]
웹사이트
Josh Stone - SystemTap release 1.0
http://sourceware.or[...]
[4]
웹사이트
Product Documentation
http://www.redhat.co[...]
Red Hat
[5]
웹사이트
Optional update for SystemTap
http://support.novel[...]
Novell
2006-10-10
[6]
웹사이트
Features/SystemtapStaticProbes - FedoraProject
http://fedoraproject[...]
Fedoraproject
[7]
웹사이트
SystemTap Language Reference
https://sourceware.o[...]
[8]
간행물
SystemTap Language Reference: A guide to the constructs and syntax used in SystemTap scripts
Red Hat
[9]
웹사이트
systemtap 3.2 release
https://sourceware.o[...]
2017-10-18
[10]
웹사이트
systemtap 1.7 release
http://sourceware.or[...]
2013-03-26
[11]
웹사이트
SystemTap Examples
https://sourceware.o[...]
[12]
웹사이트
WarStories - Systemtap Wiki
https://sourceware.o[...]
[13]
뉴스
A SystemTap update
http://lwn.net/Artic[...]
[14]
문서
http://www.redhat.co[...]
[15]
문서
http://sourceware.or[...]
[16]
문서
http://www.redhat.co[...]
[17]
문서
http://support.novel[...]
[18]
문서
http://fedoraproject[...]
[19]
문서
http://www.redhat.co[...]
[20]
웹인용
SystemTap Language Reference: A guide to the constructs and syntax used in SystemTap scripts
http://citeseerx.ist[...]
Red Hat
2010-12-19
[21]
웹인용
systemtap 1.7 release
http://sourceware.or[...]
2013-03-26
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com