KR102281827B1 - 프로그램 컨테이너 모니터링 - Google Patents

프로그램 컨테이너 모니터링 Download PDF

Info

Publication number
KR102281827B1
KR102281827B1 KR1020207032285A KR20207032285A KR102281827B1 KR 102281827 B1 KR102281827 B1 KR 102281827B1 KR 1020207032285 A KR1020207032285 A KR 1020207032285A KR 20207032285 A KR20207032285 A KR 20207032285A KR 102281827 B1 KR102281827 B1 KR 102281827B1
Authority
KR
South Korea
Prior art keywords
computer program
data
container
execution
kernel
Prior art date
Application number
KR1020207032285A
Other languages
English (en)
Other versions
KR20200137013A (ko
Inventor
기안루카 보랠로
로리스 데지오안니
Original Assignee
시스딕, 인크.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 시스딕, 인크. filed Critical 시스딕, 인크.
Publication of KR20200137013A publication Critical patent/KR20200137013A/ko
Application granted granted Critical
Publication of KR102281827B1 publication Critical patent/KR102281827B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized resources
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/545Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45591Monitoring or debugging support
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/53Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)
  • Auxiliary Devices For And Details Of Packaging Control (AREA)
  • Burglar Alarm Systems (AREA)

Abstract

컴퓨터로 구현되는 방법이 개시된다. 방법은 복수의 실행 포인트로부터 하나 이상의 실행 포인트를 선택하는 단계; 커널 공간에서 컴퓨터 프로그램을 실행하기 전에 컴퓨터 프로그램의 실행을 확인하도록 구성된 가상 머신에 컴퓨터 프로그램을 로드 하는 단계; 복수의 컨테이너 중 하나와 연관된 프로세스의 실행이 상기 하나의 실행 포인트에 도달하면 컴퓨터 프로그램이 상기 커널 공간에서 직접 실행되도록 하는 단계 - 컨테이너 각각은 커널의 개별 자원 세트와 연관되고, 컴퓨터 프로그램은 커널에 의해 직접 관리되고 커널 공간과 사용자 공간에 의해 공유되는 메모리 버퍼에 특정 데이터를 저장하고, 특정 데이터는 하나의 실행 포인트에서의 프로세스 실행과 관련된 트레이스 데이터 및 하나의 컨테이너와 관련된 컨테이너 데이터를 포함함 -; 메모리 버퍼에서 특정 데이터를 수신하는 단계를 포함한다.

Description

프로그램 컨테이너 모니터링
본 개시는 일반적으로 컴퓨터 프로세스 모니터링(computer process monitoring)의 기술 영역에 관한 것이다. 본 개시 내용은, 보다 구체적으로, 커널 내 인스트루먼테이션(in-kemel instrumentation)을 통한 프로그램 컨테이너(programmatic containers) 내의 프로세스 모니터링에 관한 것이다.
이 섹션에서 설명하는 접근 방식은 추구할 수 있는 접근 방식이지만 반드시 이전에 구상했거나 추구한 접근 방식은 아니다. 따라서 달리 명시되지 않는 한, 이 섹션에 설명된 접근 방식 중 어느 것이 이 섹션에 포함된다는 이유만으로 선행 기술로 자격이 있다고 가정해서는 안된다.
프로그램 컨테이너(programmatic container)("컨테이너")는 상대적으로 격리된 개별 런타임 환경 내에서 컴퓨터 프로그램 애플리케이션을 캡슐화 한다. 예를 들어, 컨테이너는 종속 항목(dependencies), 라이브러리(libraries) 및 구성 파일(configuration files)과 함께 애플리케이션을 단일 패키지로 묶을 수 있다. 따라서, 컨테이너는 다양한 운영 시스템과 다양한 하드웨어 환경에서 이식성(portability)을 지원한다. 즉, 컨테이너는 가상 머신 인스턴스(virtual machine instances)의 많은 이점을 제공한다. 동시에 컨테이너는 가상 머신 인스턴스보다 훨씬 적은 리소스를 사용한다. 예를 들어 컨테이너의 크기는 수 메가 바이트인 반면 가상 머신 인스턴스의 크기는 수 기가 바이트일 수 있다.
이 차이의 한 가지 이유는 컨테이너가 호스트 컴퓨터의 운영 시스템 커널(operating system kernel)을 사용하기 때문이다. 반면 가상 머신 인스턴스(virtual machine instance)에는 호스트 컴퓨터의 운영 시스템 커널 위에서 실행되는 전체 운영 시스템가 포함된다. 컨테이너의 이러한 경량 측면은 컴퓨터 프로그램 애플리케이션 개발을 위한 가상 머신 인스턴스의 인기있는 대안이 된다. 예를 들어, 컴퓨터 프로그램 애플리케이션은 컨테이너 세트로 한 번 이상 배포될 수 있다. 더욱이, 각 컨테이너는 단순화된 종속성을 나타내거나 성능 효율성을 위해 간소화된 코드 세트를 포함할 수 있다.
그러나, 컨테이너의 고립된 특성은 소프트웨어 애플리케이션의 가시성에 대한 현재 접근 방식을 비효율적으로 만든다. 모니터링 되는 애플리케이션은 컨테이너 내부에서 실행되는 반면 모니터링 구성 요소는 일반적으로 해당 컨테이너 외부에 있으므로 모니터링되는 애플리케이션의 실행과 관련된 정보를 수집하는 것은 간단하지 않을 수 있다. 모니터링 구성 요소에서 이러한 정보를 사용할 수 있는 경우에도 이러한 정보를 해당 정보와 관련된 컨테이너와 올바르게 연결하는 것은 어려울 수 있다.
컨테이너에서 운영 시스템 커널을 사용하려면 소프트웨어 애플리케이션의 가시성에 대하여 현재 접근 방식에서 제공하는 것보다 더 많은 시스템 보안 보호가 필요하다. 모니터링 구성 요소(monitoring component)는 일반적으로 전체 시스템 오류를 쉽게 일으킬 수 있는 커널 모듈(kernel module)로 구현된다.
따라서, 호스트 시스템의 보안을 훼손하지 않고 모니터링 되는 애플리케이션을 완전히 검사(introspection)할 수 있는 고품질 프로세스 실행 데이터를 제공하는 대체 인스트루먼테이션 방법을 찾는 것이 도움이 될 것이다.
첨부된 청구 범위는 본 개시 내용의 요약으로 적용될 수 있다.
일 실시예에 따르면, 사용자 공간에서 모니터링 구성 요소를 실행하여 수행되는 프로그램 컨테이너(컨테이너)를 모니터링하는 컴퓨터 구현 방법에 있어서, 프로세서에 의해, 복수의 실행 포인트(execution points)로부터 하나 이상의 실행 포인트를 선택하는 단계, 상기 프로세서에 의해, 컴퓨터 프로그램이 가상 머신에 로드(load)되도록 하는 단계 - 상기 가상 머신은, 상기 컴퓨터 프로그램을 커널 공간(kernel space)에서 실행하기 전에 상기 컴퓨터 프로그램의 실행을 확인(verify)함 -, 복수의 컨테이너 중 하나와 연관된 프로세스의 실행이 상기 하나의 실행 포인트에 도달하면, 컴퓨터 프로그램이 상기 커널 공간에서 직접 실행되도록 하는 단계 - 상기 복수의 컨테이너 각각은, 상기 커널 공간의 커널의 구별된 자원 세트(distinct set of resources)와 연관되고, 상기 컴퓨터 프로그램은, 하나 이상의 메모리 버퍼에 특정 데이터를 저장하고, 상기 하나 이상의 메모리 버퍼는, 상기 커널에 의해 직접 관리되고 상기 커널 공간과 상기 사용자 공간(user space)에 의해 공유되고, 상기 특정 데이터는, 상기 하나의 실행 포인트에서의 상기 프로세스 실행과 관련된 트레이스 데이터(trace data) 및 상기 하나의 컨테이너와 관련된 컨테이너 데이터(container data)를 포함함 -, 하나 이상의 상기 메모리 버퍼로부터 상기 특정 데이터를 수신하는 단계, 및 컨테이너-특정 트레이스 데이터(container-specific trace data)를 다른 장치로 전송하는 단계를 포함하는 컴퓨터 구현 방법이 제공된다.
일 실시예에 따르면, 상기 복수의 실행 포인트는, 시스템 호출 시작(system call entry), 시스템 호출 종료(system call exit), 프로세스 컨텍스트 전환(process context switch), 프로세스 마감(process termination), 페이지 오류(page faulting) 또는 프로세스 신호 전달(process signal delivery)을 포함할 수 있다.
일 실시예에 따르면, 상기 트레이스 데이터는, 시스템 호출에 대한 인수(arguments to a system call), 호출 스택으로부터 수집된 추가 데이터(additional data collected from a call stack), 또는 인수 또는 추가 데이터에서 계산된 메트릭(metrics computed from the arguments or additional data)을 포함할 수 있다.
일 실시예에 따르면, 상기 추가 데이터는, 네트워크 연결(network connections), 소켓 큐(socket queues), 페이지 오류(page faults) 또는 메모리 카운터(memory counters)와 관련될 수 있다.
일 실시예에 따르면, 상기 방법은, 특정 실행 포인트에 도달하도록 네트워크 연결을 포함하는 특정 프로세스를 실행하는 단계 - 이에 의해, 상기 특정 실행 포인트에 연결(attach)된 컴퓨터 프로그램이 상기 하나 이상의 메모리 버퍼에 파일 설명자(file descriptor)를 저장하도록 함 -, 상기 하나 이상의 메모리 버퍼로부터 상기 파일 설명자를 검색하는 단계, 상기 파일 설명자와 네트워크 연결 사이의 연관성(association)을 저장하는 단계를 더 포함할 수 있다.
일 실시예에 따르면, 상기 하나 이상의 메모리 버퍼는 8MB 이상의 CPU 당 링 버퍼(per-CPU ring buffer)를 포함할 수 있다.
일 실시예에 따르면, 상기 컨테이너 데이터는 상기 하나의 컨테이너와 연관된 리소스의 개별 세트(distinct sets of resources)를 식별할 수 있다.
일 실시예에 따르면, 상기 컴퓨터 프로그램은 커널 데이터 구조의 원시 액세스를 통해 상기 하나의 컨테이너와 관련된 컨테이너 데이터를 검색할 수 있다.
일 실시예에 따르면, 상기 가상 머신에는, 리눅스 플랫폼 상에 확장된 버클리 패킷 필터(extended Berkeley Packet Filter)(eBPF)가 제공될 수 있다.
일 실시예에 따르면, 상기 가상 머신에 로드 된 상기 컴퓨터 프로그램은 가상 머신 코드에 있고, 상기 컴퓨터 프로그램이 상기 커널 공간에서 실행되도록 하는 단계는, 상기 컴퓨터 프로그램을 커널 코드로 컴파일(compile)하는 단계를 포함할 수 있다.
일 실시예에 따르면, 상기 확인은, 루프를 평가(evaluating loops)하는 것, 유효하지 않은 메모리 액세스 체크(checking for invalid memory access)하는 것, 또는 상기 가상 머신 내 상기 컴퓨터 프로그램의 실행을 시뮬레이션하는 것을 포함할 수 있다.
일 실시예에 따르면, 상기 컴퓨터 프로그램이 상기 커널 공간에서 직접 실행되도록 하는 단계는, 임의의 프로세스가 상기 하나의 실행 포인트에 도달할 때 상기 컴퓨터 프로그램이 실행되도록, 상기 컴퓨터 프로그램을 상기 하나의 실행 포인트에 연결(attach)하는 단계를 포함할 수 있다.
일 실시예에 따르면, 커널 공간에서 컴퓨터 프로그램을 실행하여 수행되는 프로그램 컨테이너(컨테이너)를 모니터링하는 컴퓨터 구현 방법에 있어서, 프로세서에 의해, 상기 커널 공간 및 사용자 공간에 의해 공유되는 메모리 버퍼의 실행 포인트에서 컨테이너와 연관된 프로세스의 실행과 관련된 입력 인수를 저장하는 단계, 상기 프로세서에 의해, 하나 이상의 커널 데이터 구조의 원시 액세스를 통해 상기 컨테이너와 관련된 컨테이너 데이터를 검색하는 단계 - 상기 검색하는 단계는 상기 프로세스의 실행이 중지될 때 수행됨 -, 및 상기 입력 인수와 상기 컨테이너 데이터를 메모리 버퍼에 저장하는 단계를 포함하는 컴퓨터 구현 방법이 제공된다.
일 실시예에 따르면, 상기 방법은, 메모리 카운터, 페이지 오류 또는 소켓 큐와 관련된 데이터를 포함하는 호출 스택으로부터 수집된 추가 데이터를 저장하는 단계를 더 포함할 수 있다.
일 실시예에 따르면, 상기 하나 이상의 커널 데이터 구조는 메모리 포인터를 통해 서로 연결되고, 상기 검색하는 단계는, 상기 메모리 포인터를 역 참조하기 위해 가상 머신에 의해 제공되는 안전한 기능을 사용하여 상기 하나 이상의 커널 데이터 구조를 탐색하는 단계를 포함할 수 있다.
일 실시예에 따르면, 상기 방법은, 트레이스 데이터와 상기 컨테이너 사이의 연관성을 생성하는 단계, 상기 메모리 버퍼에 연관성을 저장하는 단계를 더 포함할 수 있다.
일 실시예에 따르면, 하나 이상의 비 일시적 컴퓨터 판독 가능 저장 매체에 있어서, 상기 하나 이상의 비 일시적 컴퓨터 판독 가능 저장 매체는, 실행시, 사용자 공간에서 모니터링 구성 요소를 실행함으로써 프로그램 컨테이너(컨테이너)를 모니터링하는 방법을 실행하도록 하는 명령어를 저장하고, 상기 방법은, 프로세서에 의해, 복수의 실행 포인트로부터 하나 이상의 실행 포인트를 선택하는 단계, 상기 프로세서에 의해, 컴퓨터 프로그램이 가상 머신에 로드되도록 하는 단계 - 상기 가상 머신은, 상기 컴퓨터 프로그램을 커널 공간에서 실행하기 전에 상기 컴퓨터 프로그램의 실행을 확인(verify)함 -, 복수의 컨테이너 중 하나와 연관된 프로세스의 실행이 상기 하나의 실행 포인트에 도달하면, 상기 컴퓨터 프로그램이 상기 커널 공간에서 직접 실행되도록 하는 단계 - 상기 복수의 컨테이너의 각각은, 상기 커널 공간의 커널의 개별 자원 세트와 연관되고, 상기 컴퓨터 프로그램은, 하나 이상의 메모리 버퍼에 특정 데이터를 저장하고, 상기 하나 이상의 메모리 버퍼는, 상기 커널에 의해 직접 관리되고 상기 커널 공간과 상기 사용자 공간에 의해 공유되고, 상기 특정 데이터는, 상기 하나의 실행 포인트에서의 상기 프로세스 실행과 관련된 트레이스 데이터 및 상기 하나의 컨테이너와 관련된 컨테이너 데이터를 포함함 -, 상기 하나 이상의 메모리 버퍼로부터 상기 특정 데이터를 수신하는 단계, 및 컨테이너-특정 트레이스 데이터를 표시하는 단계를 포함하는 하나 이상의 비 일시적 컴퓨터 판독 가능 저장 매체가 제공될 수 있다.
일 실시예에 따르면, 상기 방법은, 실행 포인트에 도달하도록 네트워크 연결을 포함하는 특정 프로세스를 실행하는 단계 - 이에 의해, 상기 실행 포인트에 연결된 컴퓨터 프로그램이 상기 하나 이상의 메모리 버퍼에 파일 설명자를 저장하도록 함 -, 상기 하나 이상의 메모리 버퍼로부터 상기 파일 설명자를 검색하는 단계, 및 상기 파일 설명자와 네트워크 연결(network connection) 사이의 연관성을 저장하는 단계를 더 포함할 수 있다.
일 실시예에 따르면, 상기 하나 이상의 메모리 버퍼는, 8MB 이상의 CPU 당 링 버퍼를 포함할 수 있다. 또한, 상기 컴퓨터 프로그램은, 커널 데이터 구조의 원시 액세스를 통해 상기 하나의 컨테이너와 관련된 컨테이너 데이터를 검색할 수 있다.
각각의 도면 도면은 명확한 예를 설명하기 위한 특정 실시예를 도시하지만, 다른 실시예는 도면에 도시된 요소 중 임의의 것을 생략, 추가, 재정렬 및 또는 수정할 수 있다. 또는 명확한 예를 묘사하기 위한 목적으로, 하나 이상의 도면은 하나 이상의 다른 도면을 참조하여 설명될 수 있지만, 하나 이상의 다른 도면에 도시된 특정 배열을 사용하는 것은 다른 실시예에서 요구되지 않는다.
도면에서:
도 1은 가상 머신과 통신하는 모니터링 구성 요소를 포함하는 컨테이너 애플리케이션을 모니터링하기 위한 예시적인 컴퓨팅 아키텍처를 도시한다.
도 2a는 모니터링 구성 요소의 예시적인 컴퓨터 모듈을 도시한다.
도 2b는 가상 머신을 위해 작성된 컴퓨터 프로그램의 예시적인 컴퓨터 모듈을 도시한다.
도 3a는 사용자 공간에서 모니터링 구성 요소를 실행함으로써 수행되는 컨테이너 프로세스를 모니터링하는 예시적인 프로세스를 도시한다.
도 3b는 커널 공간에서 컴퓨터 프로그램을 실행하여 수행되는 컨테이너 프로세스를 모니터링하는 예시적인 프로세스를 도시한다.
도 4는 실시예가 그 위에 있을 수 있는 컴퓨터 시스템을 도시한다.
다음 설명에서는, 설명을 위해, 본 개시 내용의 완전한 이해를 제공하기 위해 다수의 특정 세부 사항이 제시된다. 그러나, 본 개시 내용은 이러한 특정 세부 사항 없이 실시될 수 있음이 명백할 것이다. 다른 경우에는, 본 개시 내용을 불필요하게 모호하게 하는 것을 피하기 위해 잘 알려진 구조 및 장치가 블록도 형태로 도시된다.
"제1" 및 "제2"와 같은 수식어는 요소를 구별하는 데 사용될 수 있지만 수식어가 반드시 특정 순서를 나타내는 것은 아니다.
본 명세서에서 실시예는 다음 개요에 따라 설명된다:
1.0 일반 개요
2.0 예시적인 컴퓨팅 아키텍처
3.0 예시적인 컴퓨터 구성 요소
4.0 프로세스 예
5.0 구현 예 - 하드웨어 개요
6.0 확장 및 대안
1.0 일반 개요
컨테이너 내의 애플리케이션 또는 프로세스("컨테이너 애플리케이션(container application)" 또는 "컨테이너 프로세스(container process)")를 모니터링하기 위한 모니터링 시스템(monitoring system) 및 관련 방법이 개시된다. 모니터링 시스템은 커널(kernel) 내 인스트루먼테이션(instrumentation)을 통해 컨테이너 프로세스 실행과 관련된 고품질 트레이스 데이터를 안전하게 생성하는 모니터링 구성 요소를 실행하도록 프로그래밍 되거나 구성된다.
일부 실시예에서, 사용자 공간(user space)에서 실행되는 모니터링 구성 요소(monitoring component)는, 사용자 지정 명령 세트(custom set of instruction)가 있는 가상 머신(virtual machine)과 통신하고, 커널 공간에서 컴퓨터 프로그램을 실행하기 전에 가상 머신 코드로 작성된 컴퓨터 프로그램을 확인(verify)한다. 모니터링 구성 요소는 트레이스 데이터를 수집할 하나 이상의 실행 포인트를 선택한다. 예를 들어, 하나의 실행 포인트는 시스템 호출의 시작 또는 종료일 수 있다. 그런 다음 모니터링 구성 요소는 가상 머신 코드로 작성된 하나 이상의 컴퓨터 프로그램이 가상 머신에 로드되도록 한다. 하나 이상의 컴퓨터 프로그램이 하나 이상의 실행 포인트에 연결(attach)된다. 하나 이상의 컴퓨터 프로그램은 유사한 명령(instruction)을 포함하거나 개별 실행 포인트에 특정한 다른 명령을 포함할 수 있다. 연결(attachment)을 통해, 모니터링 구성 요소는, 컨테이너 애플리케이션을 포함한 실행 중인 애플리케이션이 하나 이상의 실행 포인트에 도달할 때, 커널 코드로 컴파일 된 하나 이상의 컴퓨터 프로그램이 커널 공간에서 실행되도록 할 수 있다.
일부 실시예에서, 각각의 컴퓨터 프로그램은 컴퓨터 프로그램의 실행을 트리거 한 컨테이너 애플리케이션 또는 프로세스의 실행과 관련된 트레이스 데이터를 저장한다. 예를 들어, 실행 포인트가 시스템 호출의 시작인 경우, 트레이스 데이터에는 시스템 호출에 대한 인수(argument)가 포함될 수 있다. 트레이스 데이터에는 메모리 카운터(memory counter), 페이지 오류(page fault), 소켓 큐(socket queue) 등과 관련된 추가 컨텍스트 정보(contextual information)도 포함될 수 있다. 또한, 컨테이너 애플리케이션 또는 프로세스의 컨테이너와 관련된 컨테이너 데이터는 일반적으로 커널 공간에서 실행되는 컴퓨터 프로그램의 호출 스택(call stack)에 포함되지 않으므로, 컴퓨터 프로그램은 잘못된 메모리 액세스를 유발하지 않고 특정 커널 데이터 구조에 대한 직접 액세스를 통해 이러한 컨테이너 데이터를 얻을 수 있다. 컴퓨터 프로그램은 트레이스 데이터와 컨테이너 데이터를 커널이 직접 관리하고 모니터링 구성 요소에 의해 검색되기 위해 커널 공간과 사용자 공간에 의해 공유되는 하나 이상의 메모리 버퍼에 저장할 수 있다. 이러한 메모리 버퍼의 예는 컨테이너 애플리케이션 또는 프로세스의 실행 중에 하나 이상의 컴퓨터 프로그램에 의해 생성된 모든 트레이스 데이터 및 컨테이너 데이터를 수용할 수 있을 만큼 충분히 큰 CPU 당 링 버퍼이다.
일부 실시예에서, 모니터링 구성 요소는 하나 이상의 메모리 버퍼에 있는 하나 이상의 컴퓨터 프로그램에 의해 저장된 데이터를 검색한다. 모니터링 구성 요소는 트레이스 데이터를 적절한 컨테이너와 연결하고, 트레이스 데이터에서 다양한 메트릭을 계산하고, 사용자 장치의 요청에 대한 응답으로 트레이스 데이터 또는 다양한 메트릭을 포함하는 컨테이너-특정 트레이스 보고서를 생성할 수 있다.
모니터링 시스템에는 많은 기술적 이점이 있다. 선택한 모든 실행 포인트에서 데이터를 수집하고 수집된 데이터를 기록하면 실행중인 프로세스의 스냅 샷 만 주기적으로 찍는 기존 방식보다 더 세분화된 데이터가 생성되는 경향이 있다. 또한, 상이한 낮은 수준 커널 하위 시스템(low-level kernel subsystem)에 연결할 필요없이 실행 포인트에 직접 연결하면, 모니터링 되는 애플리케이션에 대한 오버 헤드를 줄이는 경향이 있다. 모니터링 되는 애플리케이션을 수정할 필요없이 실행 포인트에 직접 연결하는 것도 비 침습적 솔루션(non-invasive solution)을 제공한다.
또한, 안전한 실행을 확인하고 추가적인 안전한 메모리 액세스 루틴을 제공하는 가상 머신을 통해 커널 공간에서 트레이스 데이터를 수집하는 컴퓨터 프로그램의 실행은 높은 수준의 안전 보호를 제공한다. 또한 적절한 실행 포인트 선택, 컨테이너 데이터 검색 및 특정 메트릭 계산을 통해, 모니터링 시스템은 컨테이너 환경에서 문제 해결, 모니터링 및 보안 감사 목적(security auditing)에 유용한 컨테이너-특정 고품질 트레이스 보고서를 생성한다.
2.0 예시적인 컴퓨팅 아키텍처
일부 실시예에서, 모니터링 구성 요소는 커널 공간에서 사용자를 대신하여 안전한 컴퓨터 프로그램을 실행하는 가상 머신과 통신하거나 이를 포함한다.
가상 머신은 사용자 지정 가상 머신 명령어 세트와 레지스터 세트 및 스택 메모리 영역과 함께 가상 프로세서를 사용자에게 노출한다.
사용자 명령어 세트("가상 머신 프로그램")을 사용하여 컴퓨터 프로그램을 수신하면, 가상 머신은 코드가 기능 루프(functional loop)의 부재 또는 적절한 마감 또는 유효하지 않은 메모리 액세스 부재와 같은 특정 안전 기준을 충족하는지 확인한다. 확인(verification)에는 가상 머신 내에서 한 번에 한 명령씩 컴퓨터 프로그램의 실행을 시뮬레이션 하는 것이 포함될 수 있다. 반면에, 커널을 사용하면 컴퓨터 프로그램을 다양한 실행 포인트에 연결(attach)하여 실행 포인트에서 오는 관련 데이터를 수신할 수 있다. 예를 들면, 컴퓨터 프로그램은 사용자 공간에서 실행되는 모니터링 되는 모든 애플리케이션에 의해 호출되는 시스템 호출에 연결(attach)될 수 있다. 모니터링 되는 애플리케이션이 시스템 호출을 호출하면 커널에서 컴퓨터 프로그램을 실행하여 시스템 호출에 대한 인수를 받을 수 있다. 그런 다음 가상 머신은 애플리케이션 또는 프로세스가 실행 포인트에 도달할 때 실행 포인트에 연결(attach)된 가상 머신 프로그램이 커널에서 직접 실행되도록 한다. 가상 머신은 일반적으로 커널에서 직접 컴퓨터 프로그램을 실행하기 전에 컴퓨터 프로그램을 커널 코드로 컴파일 한다. 가상 머신은 잠금 동기화(locking synchronization) 없이 손상된 데이터(corrupted data)를 읽을 가능성을 최소화하기 위해 컴퓨터 프로그램이 실행되는 동안 모니터링 되는 프로세스가 중지되도록 할 수 있다.
일부 실시예에서, 가상 머신은 커널 공간에서 실행되는 컴퓨터 프로그램이 커널 공간과 사용자 공간에 의해 공유되는, 컨테이너 애플리케이션의 실행과 관련된 선택 트레이스 데이터를 저장하기에 충분히 큰 적어도 하나의, 하나 이상의 메모리 공간을 통해 모니터링 구성 요소와 통신할 수 있도록 한다. 예를 들면, 컴퓨터 프로그램은 초기에 임시 저장소로 더 작은 메모리 공간에 데이터를 저장하고 나중에 특정 일정에 따라 또는 더 작은 메모리 공간이 가득 차는 것과 같은 특정 트리거에 응답하여 데이터를 더 큰 메모리 공간으로 이동할 수 있다. 컴퓨터 프로그램은 제어 메시지(control message)와 같은 저용량 데이터를 전달하기 위해 더 작은 메모리 공간을 예약하고 일반 이벤트 스트리밍을 위해 더 큰 메모리 공간을 활용할 수도 있다. 한 가지 유형의 제어 메시지는 커널 이벤트의 특정 하위 세트에 대한 인스트루먼테이션 활성화 또는 비활성화를 지정한다. 예를 들면, 제어 메시지는 컴퓨터 프로그램이 기준을 만족하는 시스템 호출의 시작점에서만 데이터를 수집하도록 시스템 호출의 진입 포인트에 연결(attach)된 컴퓨터 프로그램에 대한 기준을 지정할 수 있다. 다른 유형의 제어 메시지는 특정 유형의 데이터 소스에 대한 데이터 캡처 양을 제어한다. 예를 들어, 파일 또는 네트워크 I/O(예를 들어, 읽기/쓰기)를 직접 수행하는 시스템 호출의 경우, 시스템 호출에 전달된 I/O 버퍼에는 기록 중인 내용이나 기타 유용한 페이로드(payloads.)가 포함될 수 있다. 제어 메시지는 유용한 정보를 획득하는 것과 합리적인 실행 시간을 유지하는 것 사이의 균형을 맞추기 위해 이러한 콘텐츠의 특정 부분(예를 들어, 처음 몇 바이트)을 캡처하도록 시스템 호출의 진입 포인트에 연결(attach)된 컴퓨터 프로그램에 명령할 수 있다.
또한, 가상 머신은 커널 공간에 있는 동안 유효하지 않은 메모리에 액세스 하는 치명적인 결과로부터 올바르게 보호하는 메모리 액세스 기능을 제공한다.
일부 실시예에서, 모니터링 구성 요소는 하나 이상의 컴퓨터 프로그램을 가상 머신에 로드하고 이러한 하나 이상의 컴퓨터 프로그램을 하나 이상의 실행 포인트에 연결한다. 모니터링 구성 요소는 또한 위에서 논의된 바와 같이 하나 이상의 컴퓨터 프로그램에 의한 검색을 위해 하나 이상의 메모리 공간에 제어 메시지를 저장할 수 있다. 모니터링 구성 요소는 요청시, 특정 일정에 따라 또는 특정 트리거에 응답하여 하나 이상의 메모리 공간에 연결(attach)된 컴퓨터 프로그램에 의해 저장된 데이터를 검색할 수 있다. 모니터링 구성 요소는 검색된 데이터를 추가로 분석하고 검색된 데이터 또는 분석 결과를 사용자 장치에 보고할 수 있다.
예를 들면, 리눅스 운영 시스템(Linux operating system)에서는 커널 코드에 트레이스 포인트(tracepoint)를 삽입할 수 있고, 이는 일반적으로 콜백 기능(callback function)을 호출하는 플레이스홀더 기능(placeholder function)으로, 해당 인수로 콜백 기능이 호출된 것처럼 삽입 포인트 근처에서 트레이스 될 커널 데이터가 포함된 인수를 전달한다. 다시 말해, 콜백 기능은 호출자(caller)의 실행 컨텍스트에서 트레이스 포인트가 실행될 때마다 호출된다. 트레이스 포인트와 콜백 기능이 커널 공간에서 실행되므로, 콜백 기능은 일반적으로 최소한 사용자 공간에 매핑 될 수 있는 커널 공간의 메모리에 인수를 복사한다. 따라서, 가상 머신 용으로 작성된 컴퓨터 프로그램을 트레이스 포인트에 연결(attach)할 수 있다. 마찬가지로, 리눅스 운영 시스템에서는 특정 명령어 주소에 있는 중단점(breakpoint)을 나타내는 디버깅 모드에서 케이프로브(kprobe)를 동적으로 삽입할 수 있다. kprobe는 일반적으로 트레이스 포인트와 연관된 콜백 기능과 유사한 사후 처리기(post-handler)를 포함하는, 핸들러 세트와 연관된다. 따라서 가상 머신 용으로 작성된 컴퓨터 프로그램을 kprobe에 연결(attach)할 수 있다.
추가 예를 들어, 확장된 버클리 패킷 필터(Berkeley Packet Filter)("eBPF")의 개선은 위에서 설명한 가상 머신을 제공한다. eBPF 프로그램, eBPF 바이트 코드의 컴퓨터 프로그램은 트레이스 포인트 또는 kprobe와 같은 모니터링 되는 애플리케이션을 실행하는 동안 특정 작업 또는 조건에 연결(attach)될 수 있다. eBPF 프로그램의 실행은 가상 머신 내에서 시뮬레이션 되거나 컴퓨터 프로그램의 안전을 보장하기 위해 코드 수준에서 확인된다. 시뮬레이션에는 적절한 시간(예를 들어, 몇 초) 내에 가능한 한 많은 안전 기준 위반을 포착할 수 있도록 입력 인수 공간을 현명하게 정리하는 것이 포함될 수 있다. eBPF 가상 머신은 확인 후, 특히 커널에서 실행해야 할 때(적기(just-in-time) 컴파일) eBPF 프로그램을 네이티브 커널 코드로 변환할 수 있다.
추가 예를 들어, 애플리케이션 또는 프로세스가 컴퓨터 프로그램이 연결(attach)된 실행 포인트 중 하나에 도달하면, 그런 다음 컴퓨터 프로그램이 커널에서 실행된다.
컴퓨터 프로그램은 실행 포인트에서 오는 일부 관련 데이터를 인수로 받는다.
그런 다음 컴퓨터 프로그램은 전송된 네트워크 패킷 수와 같은 추가 컨텍스트 데이터에서 일부 메트릭을 계산하고 관련 데이터 또는 계산된 메트릭을 리눅스 운영 시스템에서 관리되고 최소 8MB의 크기를 갖는 CPU 당 링 버퍼(per-CPU ring buffer)로 저장 이동한다. 컴퓨터 프로그램은 또한 수집된 데이터를 eBPF 가상 머신이 관리하는 확장된 eBPF 맵에 저장할 수 있으며 상대적으로 큰 데이터 덩어리(data chunk)를 CPU 당 링 버퍼로 이동하기 전에 크기가 32KB 이상이다.
CPU 당 버퍼 링의 크기로 인해 모니터링 구성 요소는 폴(poll)과 같은 커널에서 제공하는 느린 I/O 멀티플렉싱 메커니즘에 의존하지 않고, 대신 버스트에서 일부 데이터를 잃을 위험 없이 몇 밀리 초마다 새 데이터에 대한 CPU 당 링 버퍼를 수동으로 체크한다. CPU 당 링 버퍼의 데이터 저장은 bpf_perf_event_output과 같은, 기본 eBPF 기능을 사용하여 수행할 수 있다.
추가 예를 들어, 모니터링 구성 요소는 bpf와 같은, eBPF 시스템 호출을 실행하여 컴퓨터 프로그램을 eBPF 가상 머신에 업로드 하고 컴퓨터 프로그램을 특정 실행 포인트에 연결(attach)할 수 있다. 모니터링 구성 요소는 perf_event_open과 같은, 추가 리눅스 시스템 호출을 실행하고, 및 debugfs에서 커널이 사용할 수 있는 여러 파일을 처리하여 연결(attachment)을 수행할 수 있다. 이후, 모니터링 구성 요소는 perf_event_open과 같은, 추가 리눅스 시스템 호출을 실행하여 CPU 당 링 버퍼를 열 수 있다.
도 1은 가상 머신과 통신하는 모니터링 구성 요소를 포함하는 컨테이너 애플리케이션을 모니터링하기 위한 예시적인 컴퓨팅 아키텍처를 도시한다. 처음에는, 사용자 공간에서 실행되는 모니터링 구성 요소(monitoring component)(114)는 컴퓨터 프로그램(computer program)(108)을 eBPF 가상 머신에 로드 하고 컴퓨터 프로그램(108)을 트레이스 포인트 또는 kprobe(106)에 부착한다. 트레이스 포인트 또는 kprobe(106)는 시스템 호출(104)의 시작 또는 종료에 대응할 수 있다. 런타임(run time)에 모니터링 될 컨테이너 애플리케이션(container application)(102)이 시스템 호출(104)을 만들 때, 컴퓨터 프로그램(108)은 트레이스 포인트(106)를 통해 호출될 수 있다. 컴퓨터 프로그램(108)은 eBPF 맵(110)에서 제어 메시지 또는 다른 값을 수신하거나 저장할 수 있다. 컴퓨터 프로그램(108)은 또한 호출된 인수, 호출 스택의 추가 데이터 및 eBPF 맵(110)의 특정 커널 데이터 구조에 저장된 컨테이너 데이터를 또는 CPU 당 링 버퍼(112)에 직접 저장할 수 있다. 컴퓨터 프로그램(108)은 수집된 데이터로부터 다양한 메트릭을 추가로 계산할 수 있고 또한 계산된 메트릭을 eBPF 맵 또는 CPU 당 링 버퍼(per-CPU ring buffer)(112)에 저장할 수 있다. 거의 연속적으로(예를 들어, 몇 밀리 초마다), 모니터링 구성 요소(114)는 CPU 당 링 버퍼(112)에 저장된 데이터를 검색하고 검색된 데이터를 적절하게 추가로 프로세스 한다. 예를 들면, 모니터링 구성 요소(114)는 하나 이상의 실행 포인트에 부착된 하나 이상의 컴퓨터 프로그램에 의해 CPU 당 링 버퍼에 저장된 모든 데이터로부터 추가 메트릭을 계산하고 특정 트레이스 보고서를 생성할 수 있다.
3.0 예시적인 컴퓨터 구성 요소
도 2a는 모니터링 구성 요소의 예시적인 컴퓨터 모듈을 도시한다. 도 2b는 가상 머신을 위해 작성된 컴퓨터 프로그램의 예시적인 컴퓨터 모듈을 도시한다. 이 수치는 설명을 위한 것이며 모니터링 구성 요소 또는 컴퓨터 프로그램은 더 적거나 더 많은 기능 구성 요소를 포함할 수 있다. 구성 요소는 독립적일 수도 있고 아닐 수도 있다. 구현-특정 또는 기타 고려 사항에 따라 구성 요소를 중앙 집중화되거나 기능 또는 물리적으로 분산될 수 있다.
일부 실시예에서, 모니터링 구성 요소는 가상 머신 인터페이스(virtual machine interface)(202), 커널 트레이스 저장소 인터페이스(kernel trace repository interface)(204), 컨테이너 데이터 관리 모듈(container data management module)(206) 및 사용자 인터페이스(user interface)(208)를 포함한다. 가상 머신 인터페이스(202)는 가상 머신에 의한 확인을 위해 실행 포인트에 연결(attach)될 컴퓨터 프로그램을 가상 머신으로 로딩하는 것을 포함하여 가상 머신과 통신한다. 커널 트레이스 저장소 인터페이스(204)는 커널 공간 및 사용자 공간에 의해 공유되는 하나 이상의 메모리 버퍼에 컴퓨터 프로그램에 의해 저장된 데이터에 액세스 한다. 데이터에는 일반적으로 실행 포인트에서 모니터링 되는 컨테이너 애플리케이션의 실행과 관련된 트레이스 데이터와 모니터링 되는 컨테이너 애플리케이션의 컨테이너와 관련된 컨테이너 데이터가 포함된다. 커널 트레이스 저장소 인터페이스(204)는 다수의 컴퓨터 프로그램에 의해 저장된 데이터를 검색할 수 있고 컨테이너 데이터 관리 모듈(206) 및 사용자 인터페이스(208)에 의한 추가 프로세스를 위해 로컬 데이터베이스에 데이터를 축적할 수 있다. 컨테이너 데이터 관리 모듈(206)은 트레이스 데이터를 각 컴퓨터 프로그램에 의해 생성된 컨테이너와 연관시킨다. 컨테이너 데이터 관리 모듈(206)은 컨테이너 특정 트레이스 보고서를 생성하기 위해 로컬 데이터베이스에 저장된 데이터를 추가로 분석할 수 있다. 사용자 인터페이스(208)는 트레이스 보고서(trace report)에 대한 요청을 수신하고 요청에 응답하여 컨테이너 특정 트레이스 보고서를 사용자 장치로 전송하는 것을 포함하여 사용자 장치와 통신한다.
일부 실시예에서, 컴퓨터 프로그램은 커널 트레이스 저장소 인터페이스(kernel trace repository interface)(214), 컨테이너 데이터 관리 모듈(container data management module)(216) 및 커널 데이터 구조 액세스 모듈(kernel data structure access module)(218)을 포함한다. 커널 트레이스 저장소 인터페이스(214)는 커널 공간 및 사용자 공간에 의해 공유되는 하나 이상의 메모리 버퍼에 데이터를 저장한다. 데이터에는 일반적으로 시스템 호출의 시작 또는 종료와 같은 실행 포인트에서의 프로세스 실행과 관련된 트레이스 데이터와 프로세스의 모든 컨테이너와 관련된 컨테이너 데이터가 포함된다. 트레이스 데이터에는 컴퓨터 프로그램에서 수신한 인수(argument), 인수 변환(translations of the argument), 계산된 메트릭(computed metric) 또는 커널 데이터 구조(kernel data structure)에서 검색된 추가 데이터가 포함될 수 있다. 커널 데이터 구조 액세스 모듈(218)은 가상 머신에 의해 제공되는 안전 메모리 액세스 기능을 사용하여 하나 이상의 커널 데이터 구조의 원시 액세스를 수행함으로써 컨테이너 데이터를 획득한다. 커널 데이터 구조 액세스 모듈(218)은 저장을 위해이 데이터를 커널 트레이스 저장소 인터페이스(214)로 전달할 수 있다. 컨테이너 데이터 관리 모듈(216)은 모듈이 트레이스 데이터를 컨테이너와 연관시키고, 인수를 변환하고, 인수로부터 특정 메트릭을 생성하거나, 호출 스택으로부터 추가 데이터를 수집할 수 있다는 것에서 컨테이너 데이터 관리 모듈(206)과 유사하다. 또한, 컨테이너 데이터 관리 모듈(216)은 수집된 모든 데이터를 저장을 위해 커널 트레이스 저장소 인터페이스(214)로 전송한다.
일부 실시예에서, 모니터링 구성 요소는 가상 머신 내에서 실행할 특정 프로그램을 시스템 호출 시작 경로, 시스템 호출 종료 경로, 프로세스 컨텍스트 전환, 프로세스 종료 또는 페이지 오류와 같은 복수의 실행 포인트 각각에 연결(attach)한다. 앞에서 설명한대로, 각 특정 컴퓨터 프로그램은 실행 포인트-특정 데이터를 입력으로 받아 프로세스를 시작한다. 프로세스는 실행 포인트의 특성에 따라 다르다. 간단한 시스템 호출에 해당하는 실행 포인트의 경우, 입력 인수는 임시 저장을 위해 메모리 공간 중 하나에 그대로 복사된다. 보다 복잡한 시스템 호출 또는 기타 작업에 해당하는 실행 포인트의 경우, 특정 컴퓨터 프로그램은 입력 데이터에서 특정 데이터를 추출하거나 또는 모니터링 구성 요소가 실행 포인트-특정 데이터를 완전히 활용할 수 있도록 입력 데이터를 늘리기 위해 추가 데이터를 생성할 수 있다. 특정 컴퓨터 프로그램은 메모리 사용량, 페이지 오류 빈도 또는 소켓 큐 길이와 같은 추가 데이터를 호출 스택에서 수집하여 특정 데이터를 추출할 수 있다.
일부 실시예에서, 가상 머신 내에서 실행될 특정 컴퓨터 프로그램은 커널 데이터 구조에 직접 액세스하여 추가 데이터를 생성한다. 컨테이너 애플리케이션에 특정한 데이터와 같은 특정 관련 데이터는 커널 데이터 구조에 저장될 수 있지만 실행 포인트에 연결된 컴퓨터 프로그램으로 직접 전달되지는 않는다. 따라서, 특정 컴퓨터 프로그램은 가상 머신이 제공하는 보안 보호를 희생하지 않고 안전한 방식으로 커널 데이터 구조에서 관련 데이터를 가져온다. 추가 컨테이너-특정 데이터는 컨테이너 컨텍스트를 제공하여 호출 스택에서 사용 가능한 트레이스 데이터를 보강한다. 특정 컴퓨터 프로그램은 컴퓨터 프로그램의 타임 스탬프 또는 식별 등과 함께, 컨테이너 데이터와 트레이스 데이터를 동일한 데이터 구조 내에 저장하여 연관성을 설정하는 데 도움이 될 수 있다.
예를 들어, 리눅서에서, cgroups 데이터 및 네임 스페이스 데이터와 같은 컨테이너와 관련된 일부 데이터는 특정 커널 구조에 저장된다. 커널 구조는 메모리 포인터를 통해 서로 연결된 계층적으로 구성된 구조이다. eBPF 가상 머신 용으로 작성되고 실행 포인트에 연결된 컴퓨터 프로그램은, 관련 컨테이너 데이터를 얻기 위하여, bpf_probe_read 및 bpf_probe_read_str과 같은, eBPF 가상 머신에서 제공하는 메모리 액세스 기능을 사용하여 특정 커널 구조를 탐색하고 관련 메모리 포인터를 역 참조할 수 있다. 예를 들면, 컴퓨터 프로그램은 일반 cgroup 데이터를 포함하는 커널 데이터 구조 내의 제1 영역으로 탐색하고, 및 하나 또는 몇 개의 컨테이너에 대한 cgroup 데이터를 포함하는 제2 영역으로 탐색하고, 및 제2 영역에서 특정 컨테이너 ID를 추출해야 할 필요가 있을 수 있다. 컴퓨터 프로그램은 컨테이너 데이터를 트레이스 데이터에 직접 연결(attach)하여 다운 스트림 애플리케이션이 트레이스 데이터에 대한 컨테이너 컨텍스트를 인식할 수 있도록 특정 커널 데이터 구조에서 검색된 컨테이너 데이터를 동일한 실행 중에 얻은 트레이스 데이터와 연관시킬 수 있다.
일부 실시예에서, 모니터링 구성 요소는 이러한 데이터의 유형 정보를 미리 결정하여 가상 머신 용으로 작성된 특정 컴퓨터 프로그램에 의해 저장된 데이터의 후속 프로세스를 용이하게 한다. 특정 컴퓨터 프로그램에 대한 입력 인수는 실제 파일 문서 또는 네트워크 연결에 해당할 수 있는 파일 설명자(file descriptor)일 수 있다. 네트워크 연결과 연관된 다양한 데이터를 얻는 것이 도움이 되는 경우가 많고, 및 지정된 파일 설명자가 네트워크 연결에 해당하는지 여부에 대한 초기 결정이 필요할 수 있다. 따라서, 모니터링 구성 요소는 초기 보정 절차를 수행하여 파일 설명자의 분류를 미리 결정할 수 있다. 구체적으로, 모니터링 구성 요소는 네트워크 연결 또는 파일 문서와 포함된 시스템 호출을 불러올 수 있고 시스템 호출의 시작 또는 종료에 연결(attach)된 특정 컴퓨터 프로그램에 의해 저장된 할당된 파일 설명자를 적절한 유형(네트워크 연결 또는 파일 문서)과 연관 지을 수 있고, 및 나중에 참조할 수 있도록 이러한 연관성을 저장할 수 있다. 이 연관성을 통해, 모니터링 될 컨테이너 애플리케이션이 실행되고 및 실행 포인트에 연결된 컴퓨터 프로그램 중 하나에 의해 파일 설명자가 저장될 때, 모니터 구성 요소는 해당 유형을 - 파일 설명자가 네트워크 연결 또는 파일 문서에 해당하는지 여부를 - 알 것이다. 연관성은 또한 모니터링 목적으로 메모리 버퍼에 액세스 하는 모든 컴퓨터 프로그램이 액세스 할 수 있도록 커널 공간과 사용자 공간에 의해 공유되는 메모리 버퍼에 저장할 수 있다.
예를 들어, 리눅스에서는, TCP/UDP IPv4/IPv6 튜플 또는 UNIX 소켓 이름과 같은 네트워크 연결과 관련된 다양한 데이터를 얻는 것이 도움이 될 수 있다. 파일 설명자의 유형 정보는 일반적으로 부팅시 초기화되고 eBPF 프로그램에서 액세스 할 수 없는 전역 변수에 저장된다. 따라서, 모니터링 구성 요소는 리눅스 커널을 부팅 할 때마다 위에서 설명한 보정 절차를 수행하여 유형 정보를 얻을 수 있다.
특히, 모니터링 구성 요소는 네트워크 연결에서 작동하는 것으로 알려진 시스템 호출을 발행할 수 있으며 시스템 호출의 시작 또는 종료에 연결된 eBPF 프로그램은 네트워크 연결 또는 네트워크 연결 분류와의 연관성에 대응하는 수신된 입력 인수를 모니터링 구성 요소에 전달할 수 있다.
일부 실시예에서, 모니터링 시스템은 컴퓨터 프로그램이 궁극적으로 커널 공간에서 실행되도록 하는 모니터링 구성 요소의 배치를 위해, 가상 머신에 로드 할 컴퓨터 프로그램, 모니터링 구성 요소 및 관련 커널 개발 파일(kernel development file)을 단일 이미지로 패키징 하도록 프로그래밍 되거나 구성된다. 컴퓨터 프로그램은 원래 고급 프로그래밍 언어로 작성될 수 있다. 이미지를 시작하면 컴퓨터 프로그램을 가상 머신 코드로 즉시 컴파일 하고 커널의 일부로 가상 머신에 로드 할 수 있다. 컴파일이 실패한 경우, 컴퓨터 프로그램의 미리 컴파일 된 버전은 보안 저장소에서 자동으로 다운로드 할 수 있다. 이러한 배치 전략은 위에서 설명한대로 수동 작업을 줄이고 원하는 모니터링 기능의 가용성을 촉진한다.
예를 들면, eBPF 가상 머신, 모니터링 구성 요소 및 관련 커널 개발 파일 용으로 작성된 컴퓨터 프로그램을 단일 컨테이너 이미지로 패키지화 할 수 있다. 관련 커널 개발 파일에는 Clang, LLVM 도구 체인 또는 기타 컴파일 도구가 포함될 수 있다. 이미지를 시작하면, 커널 개발 파일의 존재를 검출하고 컴퓨터 프로그램을 즉시 eBPF 코드로 컴파일 하고 Linux 커널의 일부로 eBPF 가상 머신에 로드 할 수 있다. 컴파일이 실패한 경우, 사전 컴파일 된 버전의 컴퓨터 프로그램은 보안 HTTPS 저장소에서 자동으로 다운로드 할 수 있다.
4.0 예시 프로세스
도 3a는 사용자 공간에서 모니터링 구성 요소를 실행하여 수행되는 컨테이너 프로세스를 모니터링하는 예시적인 프로세스를 도시한다. 도 3b는 커널 공간에서 컴퓨터 프로그램을 실행하여 수행되는 컨테이너 프로세스를 모니터링하는 예시적인 프로세스를 나타낸다. 도 3a 및 도 3b는 명확한 예를 설명하기 위해 단순화된 개략적인 형식으로 도시되며, 다른 실시예는 다양한 방식으로 연결된 더 많거나, 더 적거나, 다른 요소를 포함할 수 있다. 도 3a 및 도 3b 각각은 실행될 때 여기에 설명된 기능적 개선 및 기술적 진보를 수행하게 하는 하나 이상의 컴퓨터 프로그램 또는 다른 소프트웨어 요소를 구현하는 데 사용될 수 있는 알고리즘, 계획 또는 개요를 개시하기 위한 것이다. 또한, 본 명세서의 흐름도는 당업자가 축적된 기술과 지식을 사용하여 코딩 또는 구현할 계획 인 소프트웨어 프로그램의 기초를 형성하는 알고리즘, 계획 또는 사양에 대해 서로 통신하기 위해 일반적으로 사용하는 것과 동일한 수준의 세부 사항으로 설명된다.
다시 도 3a를 참조하면, 단계 302에서, 모니터링 시스템은 복수의 실행 포인트로부터 하나 이상의 실행 포인트를 선택하도록 프로그래밍 되거나 구성된다. 선택은 일반적으로 실행중인 애플리케이션에 과도한 오버 헤드를 발생시키지 않고 시스템 호출의 시작 및 종료 또는 페이지 오류 발생과 같은 주요 실행 포인트를 포함한다. 단계 304에서, 모니터링 시스템은 컴퓨터 프로그램이 가상 머신에 로드되도록 프로그래밍 되거나 구성된다. 컴퓨터 프로그램 및 기타 컴퓨터 프로그램은 선택된 실행 포인트에 연결(attach)되어 연결된 실행 포인트에서 트레이스 데이터를 수집한다. 컴퓨터 프로그램은 현재 가상 머신 내에서 실행하기 위한 가상 머신 코드에 있다. 컴퓨터 프로그램은 코드 수준 또는 실행 수준에서 가상 머신에 의해 확인될 수 있다. 단계 306에서, 모니터링 시스템은 컴퓨터 프로그램이 커널 공간에서 실행되도록 프로그래밍 되거나 구성된다. 실행 포인트 중 하나에 연결하면, 컴퓨터 프로그램은 실행중인 컨테이너 애플리케이션 또는 프로세스가 하나의 실행 포인트에 도달하면 커널 공간에서 실행되기 전에 커널 코드로 변환된다. 그런 다음 컴퓨터 프로그램은 수집된 데이터를 커널에서 직접 관리하고 커널 공간과 사용자 공간에 의해 공유되는 하나 이상의 메모리 버퍼에 저장한다. 수집된 데이터는 하나의 실행 포인트에서 컨테이너 프로세스의 실행과 관련된 트레이스 데이터와 컨테이너 프로세스의 컨테이너와 관련된 컨테이너 데이터를 포함할 수 있다. 단계 308에서, 모니터링 시스템은 하나 이상의 메모리 버퍼에 컴퓨터 프로그램에 의해 저장된 데이터를 수신하도록 프로그래밍 되거나 구성된다. 수신된 데이터에는 트레이스 데이터와 해당 컨테이너 데이터가 모두 포함되어 컨테이너 애플리케이션의 트레이스 데이터를 해당 컨테이너와 연관성을 가능하게 한다. 모니터링 시스템은 또한 선택된 실행 포인트에 연결(attach)된 모든 컴퓨터 프로그램에 의해 저장된 하나 이상의 메모리 버퍼에서 데이터를 검색하고 검색된 데이터의 집계(aggregate) 또는 기타 메트릭을 계산하도록 프로그래밍 될 수 있다. 단계 310에서, 모니터링 시스템은 모니터링, 감사 또는 기타 유사한 목적을 위해 컨테이너-특정 트레이스 데이터를 다른 장치로 전송하도록 프로그래밍 되거나 구성된다.
일부 실시예에서, 파일 설명자와 같은 특정 트레이스 데이터의 분류를 용이하게 하기 위해, 모니터링 시스템은 초기 보정 절차(initial calibration procedure)를 수행하도록 프로그래밍 되거나 구성된다. 초기 보정 절차에서, 모니터링 시스템은 네트워크 연결(또는 파일 문서)을 여는 동안 선택한 실행 포인트 중 하나에 도달하는 프로세스를 실행하도록 프로그래밍 되어 있다. 그런 다음 모니터링 시스템은 하나의 실행 포인트에 연결(attach)된 컴퓨터 프로그램에 의해 저장된 파일 설명자를 네트워크 연결(또는 파일 문서)과 연관 짓고 및 나중에 사용하기 위해 연관성을 저장하도록 프로그래밍 된다.
위에서 논의한 바와 같이, 컴퓨터 프로그램이 선택한 실행 포인트 중 하나에 연결된다. 또한, 컴퓨터 프로그램은 처음에 가상 머신 용으로 작성되고 궁극적으로 커널에서 실행된다. 컨테이너 애플리케이션이 실행 포인트에 도달하면, 컴퓨터 프로그램은 실행 포인트의 특성에 따라 달라지는 특정 인수로 실행된다. 예를 들어, 실행 포인트가 시스템 호출의 시작인 때, 특정 인수는 시스템 호출에 대한 인수일 수 있다. 도 3b를 참조하면, 단계 312에서, 컴퓨터는 컨테이너 애플리케이션 또는 프로세스의 실행과 관련된 입력 인수를 커널 공간과 사용자 공간에 의해 공유되는 메모리 버퍼의 하나(연결된) 실행 포인트에 저장한다. 컴퓨터 프로그램이 가상 머신에 제출되고 호출되는 동안, 컴퓨터 프로그램이 액세스 하는 메모리 버퍼는 커널에서 직접 관리할 수 있다. 입력 인수(input argument) 외에도, 컴퓨터 프로그램은 메모리 카운터, 소켓 큐 또는 오류 조건과 관련된 데이터와 같은 실행 컨텍스트에서 추가 데이터를 수집하고 이러한 데이터를 메모리 버퍼에 저장할 수 있다. 단계 314에서, 컴퓨터 프로그램은 하나 이상의 커널 데이터 구조에 대한 원시 액세스를 통해 컨테이너 애플리케이션의 컨테이너와 관련된 컨테이너 데이터를 검색한다. 가상 머신 명령어의 특성으로 인해 컨테이너 프로세스 실행이 중지될 때 검색이 수행될 수 있다. 더 구체적으로, 컴퓨터 프로그램은 컨테이너 데이터를 저장하는 유일한 위치 인 하나 이상의 커널 데이터 구조를 탐색할 수 있다. 컨테이너 데이터를 검색하기 위해 가상 머신이 제공하는 안전한 메모리 액세스 기능을 사용한다. 단계 316에서, 컴퓨터 프로그램은 입력 인수, 컨테이너 데이터 및 기타 수집된 메모리 버퍼에 저장한다. 컴퓨터 프로그램은 획득된 데이터를 사용할 수 있는 즉시 저장할 수 있다. 컴퓨터 프로그램은 획득된 데이터를 동일한 데이터 구조 또는 컴퓨터 프로그램에 의해 수집된 나머지 데이터와 컨테이너 데이터의 준비된 연관성을 가능하게 하는 다른 방식으로 저장할 수 있다.
5.0 구현 예-하드웨어 개요
일 구현 예에 따르면, 여기에 설명된 기술은 하나 이상의 특수 목적 컴퓨팅 장치에 의해 구현된다. 특수 목적 컴퓨팅 장치는 기술을 수행하기 위해 유선으로 연결될 수 있다. 또는 기술을 수행하도록 지속적으로 프로그래밍 되는 하나 이상의 주문형 반도체(application-specific integrated circuit)(ASIC) 또는 필드 프로그램 게이트 어레이(field programmable gate array)(FPGA)와 같은 디지털 전자 장치를 포함할 수 있다. 또는 펌웨어, 메모리, 기타 스토리지 또는 조합의 프로그램 명령에 따라 기술을 수행하도록 프로그래밍 된 하나 이상의 범용 하드웨어 프로세서를 포함할 수 있다. 이러한 특수 목적의 컴퓨팅 장치(special-purpose computing device)는 기술을 달성하기 위해 맞춤형 유선 로직, ASIC 또는 FPGA를 맞춤형 프로그래밍과 결합할 수도 있다. 특수 목적 컴퓨팅 장치는 데스크탑 컴퓨터 시스템, 휴대용 컴퓨터 시스템, 핸드 헬드 장치, 네트워킹 장치 또는 기술을 구현하기 위해 하드 와이어 및/또는 프로그램 로직을 통합하는 임의의 다른 장치 일 수 있다.
예를 들면, 도 4는 본 개시 내용의 실시예가 구현될 수 있는 컴퓨터 시스템(bus)(400)을 예시하는 블록도이다. 컴퓨터 시스템(400)은 정보를 전달하기 위한 버스(402) 또는 다른 통신 메커니즘, 및 정보 프로세스를 위해 버스(bus)(402)와 결합된 하드웨어 프로세서(hardware processor)(404)를 포함한다. 하드웨어 프로세서(Hardware processor)(404)는 예를 들어 범용 마이크로 프로세서 일 수 있다.
컴퓨터 시스템(400)은 또한 프로세서(404)에 의해 실행될 명령 및 정보를 저장하기 위해 버스(402)에 연결된 랜덤 액세스 메모리(RAM) 또는 다른 동적 저장 장치와 같은 주 메모리(406)를 포함한다. 메인 메모리(Main memory)(406)는 또한 프로세서(404)에 의해 실행될 명령의 실행 동안 임시 변수 또는 다른 중간 정보를 저장하기 위해 사용될 수 있다. 이러한 명령어는, 프로세서(404)에 액세스 할 수 있는 비 일시적 저장 매체에 저장될 때, 컴퓨터 시스템(400)을 명령어에 지정된 동작을 수행하도록 맞춤화 된 특수 목적 기계(special-purpose machine)로 렌더링 한다.
컴퓨터 시스템(400)은 프로세서(404)에 대한 정적 정보 및 명령을 저장하기 위해 버스(402)에 결합된 읽기 전용 메모리(ROM)(408) 또는 다른 정적 저장 장치를 더 포함한다. 자기 디스크, 광 디스크 또는 솔리드 스테이트 드라이브와 같은 저장 장치(storage device)(410)가 제공되고 정보 및 명령을 저장하기 위해 버스(402)에 결합된다.
컴퓨터 시스템(400)은 컴퓨터 사용자에게 정보를 표시하기 위해 버스(402)를 통해 음극선 관(CRT)과 같은 디스플레이(412)에 연결될 수 있다. 영숫자 및 기타 키를 포함하는 입력 장치(input device)(414)는 정보 및 명령 선택을 프로세서(404)에 전달하기 위해 버스(402)에 연결된다. 다른 유형의 사용자 입력 장치는 마우스, 트랙볼, 또는 프로세서(404)에 방향 정보 및 명령 선택을 전달하고 디스플레이(412)상의 커서 이동을 제어하기 위한 커서 방향 키와 같은 커서 제어(416)이다. 이 입력 장치는 일반적으로 두 개의 축, 즉 제1 축(예를 들어, x)과 제2 축(예를 들어, y)에서 두 개의 자유도를 가지며, 이를 통해 장치가 평면에서 위치를 지정할 수 있다.
컴퓨터 시스템(400)은 컴퓨터 시스템과 결합하여 컴퓨터 시스템(400)을 특수 목적 기계로 만들거나 프로그램 하는 맞춤형 하드-와이어 로직, 하나 이상의 ASIC 또는 FPGA, 펌웨어 및/또는 프로그램 로직을 사용하여 여기에 설명된 기술을 구현할 수 있다. 일 구현 예에 따르면, 본 명세서의 기술은 주 메모리(406)에 포함된 하나 이상의 명령의 하나 이상의 시퀀스를 실행하는 프로세서(404)에 응답하여 컴퓨터 시스템(400)에 의해 수행된다. 이러한 명령어는 저장 장치(410)와 같은 다른 저장 매체로부터 주 메모리(406)로 판독될 수 있다. 주 메모리(406)에 포함된 명령어 시퀀스의 실행은 프로세서(404)가 여기에 설명된 프로세스 단계를 수행하게 한다. 대안적인 실시예에서, 하드 와이어 회로는 소프트웨어 명령 대신 또는 함께 사용할 수 있다.
본 명세서에서 사용되는 용어 "저장 매체"는 기계가 특정 방식으로 작동하게 하는 데이터 및/또는 명령을 저장하는 임의의 비 일시적 매체를 지칭한다. 이러한 저장 매체는 비 휘발성 매체 및/또는 휘발성 매체를 포함할 수 있다. 비 휘발성 매체는 예를 들어 광 디스크, 자기 디스크, 또는 저장 장치(410)와 같은 솔리드 스테이트 드라이브를 포함한다. 휘발성 매체는 주 메모리(406)와 같은 동적 메모리를 포함한다. 일반적인 형태의 저장 매체에는, 예를 들어, 플로피 디스크, 유연한 디스크, 하드 디스크, 솔리드 스테이트 드라이브, 자기 테이프 또는 기타 자기 데이터 저장 매체, CD-ROM, 기타 광학 데이터 저장 매체, 구멍 패턴이 있는 물리적 매체, RAM, PROM, EPROM, FLASH-EPROM, NVRAM, 기타 메모리 칩 또는 카트리지를 포함한다.
저장 매체는 전송 매체와 다르지만 함께 사용할 수 있다. 전송 매체는 저장 매체 간의 정보 전송에 참여한다. 예를 들어, 전송 매체는 버스(402)를 포함하는 와이어를 포함하여 동축 케이블, 구리 와이어 및 광섬유를 포함한다. 전송 매체는 전파 및 적외선 데이터 통신 중에 생성되는 것과 같은 음향 또는 광파의 형태를 취할 수도 있다.
다양한 형태의 미디어가 실행을 위해 하나 이상의 명령의 하나 이상의 시퀀스를 프로세서(404)로 전달하는 데 포함될 수 있다. 예를 들어, 명령 사항은 처음에 자기 디스크 또는 원격 컴퓨터의 솔리드 스테이트 드라이브에 전달될 수 있다. 원격 컴퓨터는 명령을 동적 메모리에 로드 하고 모뎀을 사용하여 전화선을 통해 명령을 보낼 수 있다. 컴퓨터 시스템(400)에 로컬 인 모뎀은 전화선에서 데이터를 수신하고 적외선 송신기를 사용하여 데이터를 적외선 신호로 변환할 수 있다. 적외선 검출기는 적외선 신호로 전달된 데이터를 수신할 수 있으며 적절한 회로는 데이터를 버스(402)에 배치할 수 있다. 버스(402)는 데이터를 주 메모리(406)로 전달하고, 여기서 프로세서(404)는 명령어를 검색하고 실행한다. 메인 메모리(406)에 의해 수신된 명령은 프로세서(404)에 의한 실행 전 또는 후에 저장 장치(410)에 선택적으로 저장될 수 있다.
컴퓨터 시스템(400)은 또한 버스(402)에 연결된 통신 인터페이스(communication interface)(418)를 포함한다. 통신 인터페이스(418)는 로컬 네트워크(422)에 연결된 네트워크 링크(420)에 대한 양방향 데이터 통신 결합을 제공한다. 예를 들면, 통신 인터페이스(418)는 통합 서비스 디지털 네트워크(Integrated Services Digital Network)(ISDN) 카드, 케이블 모뎀, 위성 모뎀, 또는 대응하는 유형의 전화선에 데이터 통신 연결을 제공하는 모뎀 일 수 있다. 또 다른 예로, 통신 인터페이스(418)는 호환 가능한 LAN에 데이터 통신 연결을 제공하기위한 근거리 통신망(LAN) 카드 일 수 있다. 무선 링크도 구현할 수 있다. 그러한 구현에서, 통신 인터페이스(418)는 다양한 유형의 정보를 나타내는 디지털 데이터 스트림을 전달하는 전기, 전자기 또는 광학 신호를 송수신한다.
네트워크 링크(network link)(420)는 일반적으로 하나 이상의 네트워크를 통해 다른 데이터 장치에 데이터 통신을 제공한다. 예를 들면, 네트워크 링크(420)는 로컬 네트워크(422)를 통해 호스트 컴퓨터(424) 또는 인터넷 서비스 제공자(ISP)(426)에 의해 운영되는 데이터 장비에 대한 연결을 제공할 수 있다. ISP(426)는 이제 일반적으로 "인터넷"(428)으로 지칭되는 월드 와이드 패킷 데이터 통신 네트워크를 통해 데이터 통신 서비스를 제공한다. 로컬 네트워크(422) 및 인터넷(428)은 모두 디지털 데이터 스트림을 전달하는 전기, 전자기 또는 광학 신호를 사용한다. 다양한 네트워크를 통한 신호 및 네트워크 링크(420)상의 신호 및 컴퓨터 시스템(400)으로 및 컴퓨터 시스템(400)으로부터 디지털 데이터를 전달하는 통신 인터페이스(418)를 통한 신호는 전송 매체의 예시적인 형태이다.
컴퓨터 시스템(400)은 네트워크(들), 네트워크 링크(420) 및 통신 인터페이스(418)를 통해 프로그램 코드를 포함하는 메시지를 전송하고 데이터를 수신할 수 있다. 인터넷 예에서, 서버(430)는 인터넷(428), ISP(426), 로컬 네트워크(422) 및 통신 인터페이스(418)를 통해 애플리케이션 프로그램에 대한 요청된 코드를 전송할 수 있다.
수신된 코드는 수신될 때 프로세서(404)에 의해 실행될 수 있고/있거나 저장 장치(410) 또는 추후 실행을 위해 다른 비 휘발성 저장 장치에 저장될 수 있다.
6.0 확장 및 대안
앞의 상세한 설명에서, 본 개시의 실시예는 구현마다 다를 수 있는 수많은 특정 세부 사항을 참조하여 설명되었다. 따라서, 명세서 및 도면은 제한적인 의미가 아니라 예시적인 의미로 간주되어야 한다. 공개 범위의 유일하고 배타적인 지표, 그리고 출원인이 공개의 범위가 되도록 의도한 것은 후속 정정을 포함하여 그러한 청구가 발행하는 특정 형태의 본 출원에서 발행하는 청구 범위의 문자적이고 동등한 범위이다.

Claims (20)

  1. 사용자 공간에서 모니터링 구성 요소를 실행하여 수행되는 프로그램 컨테이너(컨테이너)를 모니터링하는 컴퓨터 구현 방법에 있어서,
    프로세서에 의해, 복수의 실행 포인트로부터 하나 이상의 실행 포인트를 선택하는 단계;
    상기 프로세서에 의해, 컴퓨터 프로그램이 가상 머신에 로드되도록 하는 단계 - 상기 가상 머신은, 상기 컴퓨터 프로그램을 커널 공간에서 실행하기 전에 상기 컴퓨터 프로그램의 실행을 확인함 -;
    복수의 컨테이너 중 하나와 연관된 프로세스의 실행이 상기 하나의 실행 포인트에 도달하면, 상기 컴퓨터 프로그램이 상기 커널 공간에서 직접 실행되도록 하는 단계 - 상기 복수의 컨테이너의 각각은, 상기 커널 공간의 커널의 개별 자원 세트와 연관되고, 상기 컴퓨터 프로그램은, 하나 이상의 메모리 버퍼에 특정 데이터를 저장하고, 상기 하나 이상의 메모리 버퍼는, 상기 커널에 의해 직접 관리되고 상기 커널 공간과 상기 사용자 공간에 의해 공유되고, 상기 특정 데이터는, 상기 하나의 실행 포인트에서의 상기 프로세스 실행과 관련된 트레이스 데이터 및 상기 하나의 컨테이너와 관련된 컨테이너 데이터를 포함함 -;
    상기 하나 이상의 메모리 버퍼로부터 상기 특정 데이터를 수신하는 단계;
    컨테이너-특정 트레이스 데이터를 다른 장치로 전송하는 단계
    를 포함하는 컴퓨터 구현 방법.
  2. 제1항에 있어서,
    상기 복수의 실행 포인트는,
    시스템 호출 시작, 시스템 호출 종료, 프로세스 컨텍스트 전환, 프로세스 마감, 페이지 오류 또는 프로세스 신호 전달
    을 포함하는 컴퓨터 구현 방법.
  3. 제1항에 있어서,
    상기 트레이스 데이터는,
    시스템 호출에 대한 인수, 호출 스택으로부터 수집된 추가 데이터, 또는 인수 또는 추가 데이터에서 계산된 메트릭
    을 포함하는 컴퓨터 구현 방법.
  4. 제3항에 있어서,
    상기 추가 데이터는,
    네트워크 연결, 소켓 큐, 페이지 오류 또는 메모리 카운터와 관련되는
    컴퓨터 구현 방법.
  5. 제1항에 있어서,
    상기 방법은,
    특정 실행 포인트에 도달하도록 네트워크 연결을 포함하는 특정 프로세스를 실행하는 단계 - 이에 의해, 상기 특정 실행 포인트에 연결된 컴퓨터 프로그램이 상기 하나 이상의 메모리 버퍼에 파일 설명자를 저장하도록 함 -;
    상기 하나 이상의 메모리 버퍼로부터 상기 파일 설명자를 검색하는 단계;
    상기 파일 설명자와 네트워크 연결 사이의 연관성을 저장하는 단계
    를 더 포함하는 컴퓨터 구현 방법.
  6. 제1항에 있어서,
    상기 하나 이상의 메모리 버퍼는,
    8MB 이상의 CPU 당 링 버퍼를 포함하는
    컴퓨터 구현 방법.
  7. 제1항에 있어서,
    상기 컨테이너 데이터는,
    상기 하나의 컨테이너와 연관된 리소스의 개별 세트를 식별하는
    컴퓨터 구현 방법.
  8. 제1항에 있어서,
    상기 컴퓨터 프로그램은,
    커널 데이터 구조의 원시 액세스를 통해 상기 하나의 컨테이너와 관련된 컨테이너 데이터를 검색하는
    컴퓨터 구현 방법.
  9. 제1항에 있어서,
    상기 가상 머신에는,
    리눅스 플랫폼 상에 확장된 버클리 패킷 필터(extended Berkeley Packet Filter)(eBPF)가 제공되는
    컴퓨터 구현 방법.
  10. 제1항에 있어서,
    상기 가상 머신에 로드된 상기 컴퓨터 프로그램은 가상 머신 코드에 있고,
    상기 컴퓨터 프로그램이 상기 커널 공간에서 실행되도록 하는 단계는,
    상기 컴퓨터 프로그램을 커널 코드로 컴파일하는 단계
    를 포함하는 컴퓨터 구현 방법.
  11. 제1항에 있어서,
    상기 확인은,
    루프를 평가하는 것,
    유효하지 않은 메모리 액세스 체크하는 것, 또는
    상기 가상 머신 내 상기 컴퓨터 프로그램의 실행을 시뮬레이션하는 것
    을 포함하는 컴퓨터 구현 방법.
  12. 제1항에 있어서,
    상기 컴퓨터 프로그램이 상기 커널 공간에서 직접 실행되도록 하는 단계는,
    임의의 프로세스가 상기 하나의 실행 포인트에 도달할 때 상기 컴퓨터 프로그램이 실행되도록, 상기 컴퓨터 프로그램을 상기 하나의 실행 포인트에 연결(attach)하는 단계
    를 포함하는 컴퓨터 구현 방법.
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
  17. 하나 이상의 비 일시적 컴퓨터 판독 가능 저장 매체에 있어서,
    상기 하나 이상의 비 일시적 컴퓨터 판독 가능 저장 매체는,
    실행시, 사용자 공간에서 모니터링 구성 요소를 실행함으로써 프로그램 컨테이너(컨테이너)를 모니터링하는 방법을 실행하도록 하는 명령어를 저장하고,
    상기 방법은,
    프로세서에 의해, 복수의 실행 포인트로부터 하나 이상의 실행 포인트를 선택하는 단계;
    상기 프로세서에 의해, 컴퓨터 프로그램이 가상 머신에 로드되도록 하는 단계 - 상기 가상 머신은, 상기 컴퓨터 프로그램을 커널 공간에서 실행하기 전에 상기 컴퓨터 프로그램의 실행을 확인함 -;
    복수의 컨테이너 중 하나와 연관된 프로세스의 실행이 상기 하나의 실행 포인트에 도달하면, 상기 컴퓨터 프로그램이 상기 커널 공간에서 직접 실행되도록 하는 단계 - 상기 복수의 컨테이너의 각각은, 상기 커널 공간의 커널의 개별 자원 세트와 연관되고, 상기 컴퓨터 프로그램은, 하나 이상의 메모리 버퍼에 특정 데이터를 저장하고, 상기 하나 이상의 메모리 버퍼는, 상기 커널에 의해 직접 관리되고 상기 커널 공간과 상기 사용자 공간에 의해 공유되고, 상기 특정 데이터는, 상기 하나의 실행 포인트에서의 상기 프로세스 실행과 관련된 트레이스 데이터 및 상기 하나의 컨테이너와 관련된 컨테이너 데이터를 포함함 -;
    상기 하나 이상의 메모리 버퍼로부터 상기 특정 데이터를 수신하는 단계;
    컨테이너-특정 트레이스 데이터를 표시하는 단계
    를 포함하는 하나 이상의 비 일시적 컴퓨터 판독 가능 저장 매체.
  18. 제17항에 있어서,
    상기 방법은,
    실행 포인트에 도달하도록 네트워크 연결을 포함하는 특정 프로세스를 실행하는 단계 - 이에 의해, 상기 실행 포인트에 연결된 컴퓨터 프로그램이 상기 하나 이상의 메모리 버퍼에 파일 설명자를 저장하도록 함 -;
    상기 하나 이상의 메모리 버퍼로부터 상기 파일 설명자를 검색하는 단계;
    상기 파일 설명자와 네트워크 연결 사이의 연관성을 저장하는 단계
    를 더 포함하는 하나 이상의 비 일시적 컴퓨터 판독 가능 저장 매체.
  19. 제17항에 있어서,
    상기 하나 이상의 메모리 버퍼는, 8MB 이상의 CPU 당 링 버퍼를 포함하는
    하나 이상의 비 일시적 컴퓨터 판독 가능 저장 매체.
  20. 제17항에 있어서,
    상기 컴퓨터 프로그램은,
    커널 데이터 구조의 원시 액세스를 통해 상기 하나의 컨테이너와 관련된 컨테이너 데이터를 검색하는
    하나 이상의 비 일시적 컴퓨터 판독 가능 저장 매체.
KR1020207032285A 2018-04-20 2019-04-19 프로그램 컨테이너 모니터링 KR102281827B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/959,153 US10592380B2 (en) 2018-04-20 2018-04-20 Programmatic container monitoring
US15/959,153 2018-04-20
PCT/US2019/028319 WO2019204725A1 (en) 2018-04-20 2019-04-19 Programmatic container monitoring

Publications (2)

Publication Number Publication Date
KR20200137013A KR20200137013A (ko) 2020-12-08
KR102281827B1 true KR102281827B1 (ko) 2021-07-26

Family

ID=66597649

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207032285A KR102281827B1 (ko) 2018-04-20 2019-04-19 프로그램 컨테이너 모니터링

Country Status (6)

Country Link
US (3) US10592380B2 (ko)
EP (1) EP3782064A1 (ko)
KR (1) KR102281827B1 (ko)
CA (2) CA3130991A1 (ko)
IL (2) IL278157B (ko)
WO (1) WO2019204725A1 (ko)

Families Citing this family (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111052085B (zh) * 2017-09-07 2023-11-28 索尼公司 信息处理装置及信息处理方法
US11765249B2 (en) * 2017-11-27 2023-09-19 Lacework, Inc. Facilitating developer efficiency and application quality
US10592380B2 (en) 2018-04-20 2020-03-17 Sysdig, Inc. Programmatic container monitoring
US11792216B2 (en) * 2018-06-26 2023-10-17 Suse Llc Application layer data protection for containers in a containerization environment
US20200034156A1 (en) * 2018-07-25 2020-01-30 Futurewei Technologies, Inc. Resource Optimization and Reuse in Resource Constrained Environment
US11405182B2 (en) 2018-12-03 2022-08-02 Ebay Inc. Adaptive security for smart contracts using high granularity metrics
US11263315B2 (en) * 2018-12-03 2022-03-01 Ebay Inc. System level function based access control for smart contract execution on a blockchain
US11250125B2 (en) 2018-12-03 2022-02-15 Ebay Inc. Highly scalable permissioned block chains
US11263122B2 (en) * 2019-04-09 2022-03-01 Vmware, Inc. Implementing fine grain data coherency of a shared memory region
US11403247B2 (en) * 2019-09-10 2022-08-02 GigaIO Networks, Inc. Methods and apparatus for network interface fabric send/receive operations
CN112965782A (zh) * 2019-12-13 2021-06-15 天翼电子商务有限公司 针对Docker容器的智能监控方法、装置、存储介质及电子设备
CN113010174B (zh) * 2019-12-19 2024-06-18 北京沃东天骏信息技术有限公司 业务监控的方法和装置
FR3105507B1 (fr) * 2019-12-23 2023-11-03 Orange Procédé et dispositif mettant en œuvre ce procédé pour générer et installer un code exécutable dans la mémoire d’un noyau d’une machine virtuelle depuis un hyperviseur
US11119843B2 (en) * 2020-02-07 2021-09-14 Red Hat, Inc. Verifying application behavior based on distributed tracing
US11176247B2 (en) * 2020-04-02 2021-11-16 Aqua Security Software, Ltd. System and method for container assessment using sandboxing
KR102386617B1 (ko) * 2020-06-15 2022-04-15 한국전자통신연구원 어플리케이션 컨테이너에 대한 시스템 콜 화이트리스트 생성 장치 및 방법, 어플리케이션 컨테이너에 대한 시스템 콜 제어 방법
US11599342B2 (en) * 2020-09-28 2023-03-07 Red Hat, Inc. Pathname independent probing of binaries
US12045676B2 (en) 2020-11-12 2024-07-23 New Relic, Inc. Automation solutions for event logging and debugging on Kubernetes
CN113051034B (zh) * 2021-03-30 2023-04-07 四川大学 一种基于kprobes的容器访问控制方法与系统
KR102571477B1 (ko) * 2021-06-03 2023-08-29 한국과학기술원 컨테이너의 실행시간 보안 프로파일 갱신을 위한 방법 및 시스템
KR102644436B1 (ko) * 2021-06-04 2024-03-07 주식회사 카카오엔터프라이즈 클라우드 네이티브 환경에서 로드 밸런서를 관리하는 시스템, 방법, 프로그램 및 이 방법에 의해서 생성된 로드 밸런서
US11507353B1 (en) * 2021-07-14 2022-11-22 International Business Machines Corporation Adapting pre-compiled eBPF programs at runtime for the host kernel by offset inference
US11966343B2 (en) 2021-07-19 2024-04-23 Samsung Electronics Co., Ltd. Universal mechanism to access and control a computational device
CN113949537B (zh) * 2021-09-26 2023-11-21 杭州谐云科技有限公司 一种基于eBPF的防火墙管理方法和系统
US20230136524A1 (en) 2021-10-29 2023-05-04 Sysdig, Inc. Dynamic instrumentation to capture cleartext from transformed communications
CN114039875B (zh) * 2021-10-30 2023-09-01 北京网聚云联科技有限公司 一种基于eBPF技术的数据采集方法、装置及系统
KR102494791B1 (ko) * 2021-11-08 2023-02-06 숭실대학교산학협력단 컨테이너 환경에서 알려지지 않은 바이너리 검사 및 차단 방법 및 장치
US20230176878A1 (en) * 2021-12-03 2023-06-08 Samsung Electronics Co., Ltd. Systems and methods for verifying program states
US11507672B1 (en) 2022-01-12 2022-11-22 Sysdig, Inc. Runtime filtering of computer system vulnerabilities
US11997178B2 (en) * 2022-05-25 2024-05-28 Microsoft Technology Licensing, Llc Fine-grained real-time pre-emption of codelets based on runtime threshold
CN115599503B (zh) * 2022-11-28 2023-03-21 联通(广东)产业互联网有限公司 容器安全风险检测方法、装置、电子设备及存储介质
CN116204892B (zh) * 2023-05-05 2023-08-08 中国人民解放军国防科技大学 漏洞处理方法、装置、设备以及存储介质
CN116627850B (zh) * 2023-07-21 2023-10-03 北京趋动智能科技有限公司 函数调试方法、装置、存储介质以及电子设备
CN117290857B (zh) * 2023-11-27 2024-03-26 中孚安全技术有限公司 基于eBPF实现云原生安全的系统、方法、设备及介质
CN117724905B (zh) * 2024-02-05 2024-04-19 成都云祺科技有限公司 Linux下文件系统的实时复制方法、系统及恢复方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110138389A1 (en) * 2009-12-04 2011-06-09 Ingo Molnar Obtaining application performance data for different performance events via a unified channel
US20160357618A1 (en) * 2015-06-01 2016-12-08 Draios Inc. Implicit push data transfer

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090165132A1 (en) 2007-12-21 2009-06-25 Fiberlink Communications Corporation System and method for security agent monitoring and protection
US9088606B2 (en) 2012-07-05 2015-07-21 Tenable Network Security, Inc. System and method for strategic anti-malware monitoring
US9104864B2 (en) 2012-10-24 2015-08-11 Sophos Limited Threat detection through the accumulated detection of threat characteristics
US11196636B2 (en) 2013-06-14 2021-12-07 Catbird Networks, Inc. Systems and methods for network data flow aggregation
US9886581B2 (en) 2014-02-25 2018-02-06 Accenture Global Solutions Limited Automated intelligence graph construction and countermeasure deployment
US20160099960A1 (en) 2014-10-01 2016-04-07 Infocyte, Inc. System and method for scanning hosts using an autonomous, self-destructing payload
US9916233B1 (en) 2015-03-27 2018-03-13 Amazon Technologies, Inc. Using containers for update deployment
WO2016183347A1 (en) 2015-05-12 2016-11-17 CloudPassage, Inc. Systems and methods for implementing intrusion prevention
US10706145B2 (en) 2015-10-01 2020-07-07 Twistlock, Ltd. Runtime detection of vulnerabilities in software containers
US10417065B2 (en) 2016-06-13 2019-09-17 Dynatrace Llc Method and system for automated agent injection in container environments
US10505830B2 (en) * 2016-08-11 2019-12-10 Micro Focus Llc Container monitoring configuration deployment
US10802857B2 (en) 2016-12-22 2020-10-13 Nicira, Inc. Collecting and processing contextual attributes on a host
US10382492B2 (en) 2017-03-02 2019-08-13 Draios Inc. Automated service-oriented performance management
US10606646B1 (en) 2017-03-13 2020-03-31 Veritas Technologies Llc Systems and methods for creating a data volume from within a software container and initializing the data volume with data
US10698714B2 (en) 2017-04-07 2020-06-30 Nicira, Inc. Application/context-based management of virtual networks using customizable workflows
US11657145B2 (en) 2017-11-09 2023-05-23 British Telecommunications Public Limited Company Vulnerability assessment of containerised installation
US11113405B2 (en) 2018-04-10 2021-09-07 Rapid7, Inc. Vulnerability assessment
US10592380B2 (en) 2018-04-20 2020-03-17 Sysdig, Inc. Programmatic container monitoring
US11347843B2 (en) 2018-09-13 2022-05-31 King Fahd University Of Petroleum And Minerals Asset-based security systems and methods
US10922072B1 (en) 2019-05-25 2021-02-16 Juniper Networks, Inc Apparatus, system, and method for seamless and reversible in-service software upgrades
US11184384B2 (en) 2019-06-13 2021-11-23 Bank Of America Corporation Information technology security assessment model for process flows and associated automated remediation
US11151024B2 (en) 2019-08-09 2021-10-19 International Business Machines Corporation Dynamic automation of DevOps pipeline vulnerability detecting and testing
US11645245B2 (en) 2019-09-26 2023-05-09 International Business Machines Corporation Container software discovery and cataloging
US11159557B2 (en) 2019-11-13 2021-10-26 Servicenow, Inc. Network security through linking vulnerability management and change management
EP4042305A1 (en) 2019-12-19 2022-08-17 Google LLC Resource management unit for capturing operating system configuration states and managing malware
US11438362B2 (en) 2020-01-02 2022-09-06 Saudi Arabian Oil Company Method and system for prioritizing and remediating security vulnerabilities based on adaptive scoring
US11509676B2 (en) 2020-01-22 2022-11-22 Tenable, Inc. Detecting untracked software components on an asset
US20210344703A1 (en) 2020-05-01 2021-11-04 Booz Allen Hamilton Inc. Visualized Penetration Testing (VPEN)

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110138389A1 (en) * 2009-12-04 2011-06-09 Ingo Molnar Obtaining application performance data for different performance events via a unified channel
US20160357618A1 (en) * 2015-06-01 2016-12-08 Draios Inc. Implicit push data transfer

Also Published As

Publication number Publication date
WO2019204725A1 (en) 2019-10-24
IL280194B (en) 2022-06-01
US11226886B2 (en) 2022-01-18
US20200174905A1 (en) 2020-06-04
CA3097791A1 (en) 2019-10-24
IL280194A (en) 2021-03-01
IL278157A (en) 2020-11-30
US20220138079A1 (en) 2022-05-05
CA3130991A1 (en) 2019-10-24
US10592380B2 (en) 2020-03-17
US11656970B2 (en) 2023-05-23
US20190324882A1 (en) 2019-10-24
CA3097791C (en) 2021-10-19
KR20200137013A (ko) 2020-12-08
IL278157B (en) 2021-04-29
EP3782064A1 (en) 2021-02-24

Similar Documents

Publication Publication Date Title
KR102281827B1 (ko) 프로그램 컨테이너 모니터링
US10621068B2 (en) Software code debugger for quick detection of error root causes
US10996947B2 (en) Diagnosing production applications
US20210392061A1 (en) Communication between independent containers
US10635570B2 (en) Memory leak profiling events
Long et al. Automatic runtime error repair and containment via recovery shepherding
EP3660684B1 (en) Efficient and comprehensive source code fuzzing
US8402318B2 (en) Systems and methods for recording and replaying application execution
US7047521B2 (en) Dynamic instrumentation event trace system and methods
US20030120980A1 (en) System trace unit
US9355002B2 (en) Capturing trace information using annotated trace output
US20120137181A1 (en) Preventing log wrap with debug scripts
CA2226224A1 (en) Fast traps for computer software instrumentation
US20120246518A1 (en) Operating a computer system
Tang et al. Xdebloat: Towards automated feature-oriented app debloating
US7735067B1 (en) Avoiding signals when tracing user processes
US11263115B2 (en) Problem diagnosis technique of memory corruption based on regular expression generated during application compiling
CN110806968B (zh) 应用程序运行信息获取方法及装置
CN110377401B (zh) 基于idea的事务请求处理方法、装置、服务器和存储介质
Neri et al. Debugging distributed applications with replay capabilities
Bucur Improving scalability of symbolic execution for software with complex environment interfaces
CN118193354A (zh) 云原生应用的代码插桩方法、装置、存储介质和计算设备

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant