트레이싱
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
트레이싱은 시스템의 동작을 추적하고 분석하는 데 사용되는 기술 및 도구에 대한 포괄적인 용어이다. 이벤트 로깅과 소프트웨어 트레이싱은 트레이싱의 두 가지 주요 유형으로, 이벤트 로깅은 시스템 관리자가 시스템의 상태를 모니터링하고 문제를 진단하는 데 유용한 정보를 제공하는 반면, 소프트웨어 트레이싱은 개발자가 코드의 실행 흐름을 이해하고 디버깅하는 데 사용된다. 이러한 기술들은 다양한 운영 체제와 소프트웨어 환경에서 구현되며, 성능, 보안, 정확성과 같은 여러 가지 고려 사항이 있다. 트레이싱을 위한 다양한 도구와 기법이 존재하며, 트레이스 분석을 통해 시스템의 성능 병목 현상과 오류를 식별할 수 있다.
더 읽어볼만한 페이지
| 트레이싱 | |
|---|---|
| 디버깅 기술 | |
| 유형 | 원격 디버깅 역추적 디버깅 |
| 관련 | 소프트웨어 테스팅 테스트 케이스 디버거 프로파일링 소프트웨어 개발 프로세스 예외 처리 |
| 트레이싱 | |
| 설명 | 실행 중인 컴퓨터 프로그램의 실행을 추적하는 디버깅 방법 |
2. 이벤트 로깅
이벤트 로깅은 시스템 관리자가 진단하고 감사하는데 유용한 정보를 제공한다. 기록될 이벤트 종류와 세부 사항은 개발 단계 이전에 고려되는 경향이 있다. 많은 이벤트 로깅 기술들은 각 이벤트의 클래스에 고유한 코드가 부여되는 것을 허용하거나 요구하는데, 이는 지역화를 가능케 하고 시스템 관리자가 발생한 문제에 대한 정보를 얻는 것을 쉽게 한다.
이벤트 로깅은 높은 수준의 정보를 기록하는 것을 요구하기 때문에 성능은 종종 비교적 덜 고려된다.
이벤트 로깅과 소프트웨어 추적을 명확하게 구분하는 데 어려움이 있는 이유는 동일한 기술이 두 가지 모두에 사용된다는 사실과, 두 가지를 구분하는 많은 기준이 이산적이라기보다는 연속적이기 때문이다. 다음 표는 각 목적에 맞는 기술을 선택하고 각 영역에서 새로운 기술의 별도 개발을 안내하기 위해 개발자가 사용하는 중요하지만 절대 정확하거나 보편적이지 않은 몇 가지 구분을 나타낸다.
| 이벤트 로깅 | 소프트웨어 추적 |
|---|---|
| 주로 시스템 관리자가 사용 | 주로 개발자가 사용 |
| "높은 수준" 정보 로깅 (예: 프로그램 설치 실패) | "낮은 수준" 정보 로깅 (예: 던져진 예외) |
| 너무 "잡음"이 없어야 함 (의도된 대상에게 도움이 되지 않는 많은 중복 이벤트 또는 정보 포함) | 잡음이 있을 수 있음 |
| 표준 기반 출력 형식이 종종 바람직하며, 때로는 필수적 | 출력 형식에 대한 제한이 거의 없음 |
| 이벤트 로그 메시지는 종종 현지화됨 | 현지화는 거의 고려 사항이 아님 |
| 새로운 유형의 이벤트 및 새로운 이벤트 메시지 추가는 민첩할 필요가 없음 | 새로운 추적 메시지 추가는 반드시 민첩해야 함 |
소프트웨어 트레이싱은 개발자에게 디버깅을 위한 유용한 정보를 제공하며, 개발 기간뿐만 아니라 배포 후에도 사용된다.[5] 이벤트 로깅과 다르게, 소프트웨어 트레이싱은 이벤트의 "클래스"와 "이벤트 코드"라는 개념을 갖지 않는다. 이벤트 로깅 방식이 소프트웨어 트레이싱에 적절하지 않은 이유는 다음과 같다.
3. 소프트웨어 트레이싱
소프트웨어 트레이싱에서 고려해야 할 점은 성능이다. 소프트웨어 트레이싱이 낮은 수준에서 이루어지기 때문에 트레이스 메시지의 가능한 양은 훨씬 커질 수 있다. 그렇기 때문에 종종 컴파일 타임이나 실행 시간에 꺼놓을 필요가 있다. 다른 고려 사항을 보자면
운영체제에서, 트레이싱은 부팅 때 같은 상황 같이 이벤트 로깅이 활성화되지 못할 때 유용하다.
리눅스는 커널 마커와 LTTng을 사용하여 시스템 수준 및 사용자 수준 트레이싱 기능을 제공한다.[6] ftrace는 또한 리눅스 커널 트레이싱을 지원한다. syslog는 다양한 운영 체제에서 시스템 메시지를 로깅하고 추적하기 위한 또 다른 도구이다.
FreeBSD 및 SmartOS는 커널 및 사용자 공간에 대한 트레이싱을 위해 DTrace를 사용한다.
임베디드 소프트웨어에서 트레이싱은 효율적인 계측 및 로깅과 낮은 CPU 오버헤드를 위해 특수한 기술을 필요로 한다.
4. 이벤트 로깅 대 트레이싱
이벤트 로깅과 소프트웨어 트레이싱은 동일한 기술을 사용하기 때문에 명확하게 구분하기 어렵다. 다음 표는 중요하지만 절대적이지 않은 구분을 보여준다.
| 이벤트 로깅 | 소프트웨어 트레이싱 |
|---|---|
| 주로 시스템 관리자가 사용 | 주로 개발자가 사용 |
| "높은 수준" 정보 로깅 (예: 프로그램 설치 실패) | "낮은 수준" 정보 로깅 (예: 던져진 예외) |
| 잡다하지 않음 (많은 중복은 유용하지 않음) | 잡다할 수 있음 |
| 표준 기반 출력 형식이 종종 요구됨 | 출력 형식에 대한 제한이 없음 |
| 이벤트 로그 메시지는 종종 지역화됨 | 지역화는 고려 대상이 아님 |
| 새로운 유형의 이벤트에 대한 추가가 빨리 이루어질 필요가 없음 | 새로운 트레이싱 메시지 추가는 빨리 이루어져야 함 |
이벤트 로깅은 시스템 관리자에게 진단 및 감사에 유용한 정보를 제공한다. 서로 다른 이벤트 클래스와 이벤트 메시지에 나타날 세부 사항은 종종 개발 주기 초기에 고려된다. 많은 이벤트 로깅 기술은 각 이벤트 클래스에 고유한 "코드"를 할당하도록 허용하거나 요구한다. 이 코드는 이벤트 로깅 소프트웨어 또는 별도의 뷰어(예: 이벤트 뷰어)에서 사람이 읽을 수 있는 메시지를 형식화하고 출력하는 데 사용된다. 이는 지역화를 용이하게 하고 시스템 관리자가 발생하는 문제에 대한 정보를 더 쉽게 얻을 수 있도록 한다.
이벤트 로깅은 높은 수준의 정보(종종 실패 정보)를 기록하는 데 사용되므로 로깅 구현의 성능은 종종 덜 중요하다.
이벤트가 "너무 자주" 기록되는 것을 방지하는 특별한 문제는 이벤트 스로틀링을 통해 처리된다.
이벤트 로깅과 소프트웨어 추적을 명확하게 구분하는 데 어려움이 있는 이유는 동일한 기술이 두 가지 모두에 사용된다는 사실과, 두 가지를 구분하는 많은 기준이 이산적이라기보다는 연속적이기 때문이다.
5. 기술 및 기법
소프트웨어 트레이싱에는 트레이싱 매크로나 디버거에 출력하는 방법, 관점 지향 프로그래밍과 관련된 계측 기법을 사용하는 방법 등이 있다.[7] Windows software trace preprocessor (WPP)를 이용하거나, ftrace를 통해 리눅스 커널 트레이싱을 할 수도 있다. Kernel Markers와 LTTng을 통해 리눅스 시스템 레벨 및 사용자 레벨 트레이싱도 가능하다.
이벤트 로깅에는 syslog, 마이크로소프트 윈도우를 위한 [http://msdn2.microsoft.com/en-us/library/aa363652.aspx Event Logging APIs], [http://msdn2.microsoft.com/en-us/library/aa385780.aspx Windows Event Log] (윈도우 비스타) 등이 있다.
[http://logging.apache.org/ Apache logging], [http://msdn.microsoft.com/en-us/library/bb968803(VS.85).aspx Event Tracing for Windows], [http://www.codeproject.com/Tips/1026577/Code-Tracing .][http://www.codeproject.com/Tips/1026577/Code-Tracing Net Tracing API], [http://java.sun.com/j2se/1.5.0/docs/api/java/util/logging/package-summary.html Java logging APIs], [http://msdn2.microsoft.com/en-us/library/microsoft.visualbasic.logging.aspx Visual Basic logging] (Visual Basic .NET) 등은 소프트웨어 트레이싱과 이벤트 로깅 모두에 사용 가능하다. Logcheck는 로그 관리를 위한 자유 오픈 소스 유틸리티이다. [http://www.x-trace.net X-Trace] 는 연구 프로젝트이다. Instruction set simulation, [https://web.archive.org/web/20140815063124/http://easylogging.org/ C++ Logging] (크로스 플랫폼 C++ 애플리케이션용) 등도 있다.
소스 코드에서 사용되는 라이브러리는 데이터를 에이전트 또는 수집 구성 요소로 직접 전송한다.[4] 메서드 호출의 추적은 소스 코드 계측, 런타임 정보 수집 또는 디버거 제어 하에서 수행할 수 있다.[7]
6. 한계 및 과제
런타임 중에 추적을 활성화하거나 비활성화하려면 바이너리에 추가 데이터가 포함되어야 하는 경우가 많다. 이는 추적이 활성화되지 않은 경우에도 성능 저하로 이어질 수 있다.
컴파일 시간에 추적을 활성화 또는 비활성화하는 경우, 클라이언트 시스템에서 추적 데이터를 수집하려면 클라이언트가 추적이 특별히 활성화된 소프트웨어 버전을 설치하고 그 문제를 재현할 의지와 능력이 있어야 한다.
소프트웨어 추적은 일반적으로 추적 출력의 정확성과 신뢰성뿐만 아니라 추적되는 프로세스가 중단되지 않도록 보장하는 데 있어서 높은 수준의 강건성을 요구한다.
낮은 수준의 특성으로 인해 추적은 많은 양의 메시지를 생성할 수 있다. 성능 문제를 완화하기 위해 컴파일 시점이나 런타임 중에 소프트웨어 추적을 비활성화하는 옵션이 있어야 하는 경우가 많다. 독점 소프트웨어에서 트레이싱 데이터는 제품의 소스 코드에 대한 민감한 정보를 포함할 수 있다.
7. 도구
OpenTelemetry는 분산 추적을 포괄적으로 지원하는 CNCF 오픈 소스 프로젝트이다.[3] Datadog, New Relic, Splunk를 포함한 일부 벤더는 추적 SaaS 서비스도 제공한다.[4]
구글(Google)과 메타(Meta Platforms)는 자체 추적 프레임워크인 Dapper와 Canopy를 개발했다.[2]
- GNU 디버거(GNU Debugger)의 trace 명령어를 사용한 트레이싱[5]
- cwrap을 사용한 리눅스 C/C++ 애플리케이션 트레이싱
- UST를 사용한 리눅스 애플리케이션 트레이싱 - LTTng과 동일한 프로젝트의 일부
- 윈도우 소프트웨어 트레이스 전처리(WPP)
- 명령어 집합 시뮬레이션
운영 체제에서 트레이싱은 이벤트 로깅을 제공하는 데 사용되는 일부 기술을 사용할 수 없는 상황(예: 부팅)에서 사용될 수 있다.
리눅스는 커널 마커와 LTTng을 사용하여 시스템 수준 및 사용자 수준 트레이싱 기능을 제공한다. ftrace는 또한 리눅스 커널 트레이싱을 지원한다. syslog는 다양한 운영 체제에서 시스템 메시지를 로깅하고 추적하기 위한 또 다른 도구이다.
FreeBSD 및 SmartOS는 커널 및 사용자 공간에 대한 트레이싱을 위해 DTrace를 사용한다.
임베디드 소프트웨어에서 트레이싱은 효율적인 계측 및 로깅과 낮은 CPU 오버헤드를 위해 특수한 기술을 필요로 한다.[6]
8. 트레이스 분석
ISVis는 실행 트리를 모델링하기 위해 루트 트리를 유향 비순환 그래프로 변환하며, Jinsight는 호출 프레임 원리를 활용하여 추적에 대한 누적 정보를 수집하고 표현한다.[7]
주요 시각화 방법은 재거(Jaeger)와 같은 도구에서 사용되는 스윔레인(swimlane) 뷰이며, 주석과 키-값 속성을 포함하는 경우가 많다. 널리 사용됨에도 불구하고 이 설계는 엄격한 정당성이 부족하며, 사용자는 기능 누락 및 혼란스러운 탐색과 같은 문제에 자주 직면한다. 스윔레인 뷰의 대안으로는 재거의 서비스 종속성 뷰 또는 스카이워킹(SkyWalking)의 목록, 트리 및 테이블 뷰가 있다. 집계 시각화는 대량의 추적을 분석하는 데에도 사용되며, 카노피(Canopy)와 같은 시스템은 쿼리 가능한 메트릭을 제공하고 재거는 추적 비교 기능을 제공한다.[8]
참조
[1]
웹사이트
The Tracing Book
http://ltt.polymtl.c[...]
[2]
논문
Enjoy your observability: an industrial survey of microservice tracing and analysis
2022
[3]
웹사이트
Council Post: Distributed Tracing: The Key To Microservices Observability
https://www.forbes.c[...]
2024-01-12
[4]
논문
Open tracing tools: Overview and critical comparison
https://www.scienced[...]
Elsevier BV
[5]
웹사이트
Tracepoints (Debugging with GDB)
https://sourceware.o[...]
2022-06-24
[6]
서적
Trace Recording for Embedded Systems: Lessons Learned from Five Industrial Projects
https://link.springe[...]
Springer Berlin Heidelberg
2010
[7]
간행물
On the Practical Feasibility of Software Monitoring: a Framework for Low-Impact Execution Tracing
https://dl.acm.org/d[...]
IEEE
2019
[8]
웹사이트
A Qualitative Interview Study of Distributed Tracing Visualisation: A Characterisation of Challenges and Opportunities
https://ieeexplore.i[...]
2024-01-12
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com