KR20130136730A - 비정형 로그 압축 저장 및 조회 방법 및 장치 - Google Patents
비정형 로그 압축 저장 및 조회 방법 및 장치 Download PDFInfo
- Publication number
- KR20130136730A KR20130136730A KR1020120060365A KR20120060365A KR20130136730A KR 20130136730 A KR20130136730 A KR 20130136730A KR 1020120060365 A KR1020120060365 A KR 1020120060365A KR 20120060365 A KR20120060365 A KR 20120060365A KR 20130136730 A KR20130136730 A KR 20130136730A
- Authority
- KR
- South Korea
- Prior art keywords
- log
- index
- data
- block
- file
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording 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/3466—Performance evaluation by tracing or monitoring
- G06F11/3476—Data logging
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
로그를 일정 주기별로 압축하여 저장하고 외부에서 로그를 요청할 때 데이터 파일의 일부만 압축 해제한 후 로그를 검색하는 비정형 로그 압축 저장 및 조회 장치 및 방법을 개시한다.
본 발명의 실시예에 따르면, 로그를 압축함에 있어, 전체 로그를 한꺼번에 압축하는 것이 아니라, 일정 주기별로 압축한 후 데이터 파일에 연속해서 저장하기 때문에 로그를 쓰면서 동시에 읽을 수 있고, 로그를 요청할 때 전체 파일의 압축을 해제할 필요 없이 데이터 파일의 일부만 읽어들여 압축을 해제한 후 로그를 찾을 수 있으므로, 압축한 상태에서도 로그를 빠르게 읽을 수 있다.
본 발명의 실시예에 따르면, 로그를 압축함에 있어, 전체 로그를 한꺼번에 압축하는 것이 아니라, 일정 주기별로 압축한 후 데이터 파일에 연속해서 저장하기 때문에 로그를 쓰면서 동시에 읽을 수 있고, 로그를 요청할 때 전체 파일의 압축을 해제할 필요 없이 데이터 파일의 일부만 읽어들여 압축을 해제한 후 로그를 찾을 수 있으므로, 압축한 상태에서도 로그를 빠르게 읽을 수 있다.
Description
본 발명의 실시예들은 외부에서 로그를 입력받아 메모리에 버퍼링한 뒤, 일정 주기에 따라 압축하여 저장하고 외부에서 로그를 요청할 때 데이터 파일의 일부만 압축 해제한 후 로그를 검색하는 비정형 로그 압축 저장 및 조회 장치 및 방법에 관한 것이다.
일반적으로, 로그파일(logfile)에는 서버를 통해 이루어지는 모든 작업들에 대한 기록이 저장된다. 사용자가 상기 서버에 접속하면, 접속후의 모든 작업들은 상기 서버의 미리 정해놓은 위치에 로그파일 형태로 남는다. 즉, 로그파일에는 서버가 수행한 작업들에 대한 정보가 포함된다. 이들은 단순히 특정 작업 요청과 성공 여부에 대한 것뿐만 아니라, 해당 특정 작업을 실패했을 경우 그 해결책에 대한 정보도 포함된다.
로그파일에는 복수의 로그라인들이 저장되고, 로그라인에는 방문자의 접속 인터넷 프로토콜(Internet Protocol, IP), 방문 날짜 및 시간, 방문 페이지 정보, 방문 상태 등의 정보들이 저장된다.
웹사이트 운영자나 기업인들은 광고나 운영방식의 변환에 따른 효과를 보다 객관적으로 평가하고, 효율적으로 회사를 운영하기 위해 상기 로그파일을 분석한다. 또한, 상기 로그파일은 효율적인 타겟 광고나 컨설팅을 통해 수익을 창출하기 위해 이용된다.
한편, 통계와 함께 로그라인 정보를 확인할 필요가 있을 때, 발견된 원본 로그라인은 다른 파일에 저장된다. 이에 따라, 발견횟수와 상기 발견횟수의 근거가 되는 로그라인이 함께 확인될 수 있다. 이러한 정보는 웹사이트를 방문하는 방문자들의 트랜드뿐만 아니라, 발견된 명확한 근거가 필요한 보안 분야에서 반드시 필요한 처리이다.
하지만, 대용량 로그파일에서 발견된 로그라인이 많이 발생한다면 발견파일의 크기가 증가하는 단점이 있다. 예를들어, 10기가바이트의 로그파일에서 특정 문자, 예를들어, NETBIOS'의 로그횟수가 매우 많이 발견되어 1기가 바이트 이상으로 용량이 증가한다면, 발견파일을 열어볼 수 없을 뿐만 아니라, 저장하기에도 용이하지 않다. 발견파일을 저장하기 위해서는 고가의 데이터베이스(DB)를 구축하여야 한다.
본 발명의 일실시예는 로그를 입력받아, 메모리에 버퍼링한 뒤 일정 주기별로 압축하여 저장하고 외부에서 로그를 요청할 때 데이터 파일의 일부만 압축 해제한 후 로그를 검색하는 비정형 로그 압축 저장 및 조회 방법을 제공한다.
상기 일실시예를 달성하기 위한 장치로서, 비정형 로그 압축 저장 및 조회 장치는 로그 객체 아이디로 로그를 요청받는 로그 스토리지; 상기 로그 객체 아이디에 대응하는 인덱스 파일 오프셋 값과, 데이터 파일 오프셋 값을 검색하는 인덱스 캐시, 데이터 캐시; 및 상기 인덱스 파일 오프셋 값, 상기 데이터 파일 오프셋 값, 상기 로그 객체 아이디로 인덱스 파일, 데이터 파일에 접근하여 상기 로그를 추출하는 로그 저장 시스템을 포함한다.
상기 일실시예를 달성하기 위한 장치로서, 비정형 로그 압축 저장 및 조회 장치는 기간으로 로그를 요청받는 로그 스토리지; 상기 기간을 포함하는 데이터 블록을 검색하는 데이터 캐시; 및 상기 검색된 데이터 블록을 압축 해제하고, 상기 압축 해제된 데이터 블록에서 상기 기간을 포함하는 상기 로그를 추출하는 로그 저장 시스템을 포함한다.
상기 일실시예를 달성하기 위한 방법으로서, 로그 저장 및 조회 방법은 로그 객체 아이디로 로그를 요청받는 단계; 인덱스 캐시에서 상기 로그 객체 아이디에 대응한 인덱스 파일 오프셋 값과, 데이터 파일 오프셋 값을 읽는 단계; 상기 인덱스 파일 오프셋 값과, 상기 데이터 파일 오프셋 값, 상기 로그 객체 아이디로 인덱스 파일, 데이터 파일에 접근하여 상기 로그를 추출하는 단계를 포함한다.
상기 일실시예를 달성하기 위한 방법으로서, 로그 저장 및 조회 방법은 기간으로 로그를 요청받는 단계; 데이터 캐시에서 상기 기간을 포함하는 데이터 블록을 검색하는 단계; 상기 검색된 데이터 블록을 압축 해제하는 단계; 및 상기 압축 해제된 데이터 블록에서 상기 기간을 포함하는 상기 로그를 추출하는 단계를 포함한다.
본 발명의 일실시예에 따르면, 로그 포맷과 길이에 상관없이 로그 원문을 손상시키지 않으면서 빠르게 저장하고, 빠르게 검색할 수 있는 효과가 있다.
또한, 본 발명의 일실시예에 따르면, 로그를 압축하여 저장함으로써, 디스크를 효율적으로 사용할 수 있는 효과가 있다.
또한, 본 발명의 일실시예에 따르면, 로그를 압축함에 있어, 전체 로그를 한꺼번에 압축하는 것이 아니라, 전달받은 로그를 메모리에 버퍼링한 후 일정 주기별로 압축하여 데이터 파일에 연속해서 저장하기 때문에 데이터 파일에 로그를 쓰면서 동시에 읽을 수 있고, 로그를 요청할 때 데이터 파일 전체의 압축을 해제할 필요 없이 데이터 파일의 일부만 읽어들여 압축을 해제한 후 로그를 찾을 수 있으므로, 압축한 상태에서도 로그를 빠르게 읽을 수 있는 효과가 있다.
또한, 본 발명의 일실시예에 따르면, 테이블마다 메모리에 버퍼링한 로그를 일정 주기에 따라 로그를 압축하여 저장하면서, 압축하여 저장하는 로그 객체 각각에 대한 오프셋 값을 인덱스 파일에 저장하기 때문에, 로그를 빠르게 검색할 수 있는 효과가 있다.
도 1은 본 발명의 일실시예에 따른 로그 저장 시스템의 구성을 보인 블록도이다.
도 2는 본 발명의 일실시예에 따른 실제로 저장되는 로그 객체의 구성을 보인 예시도이다.
도 3은 본 발명의 일실시예에 따른 인-메모리 로그 버퍼의 구성을 보인 예시도이다.
도 4는 본 발명의 일실시예에 따른 인-메모리 인덱스 버퍼의 구성을 보인 예시도이다.
도 5는 본 발명의 일실시예에 따른 메모리에 테이블별로 생성되는 로그 버퍼와 인덱스 버퍼의 구성을 보인 블록도이다.
도 6은 본 발명의 일실시예에 따른 데이터 파일에 기록되는 메타 정보와, 압축된 로그 블록을 하나의 데이터 블록으로 나타낸 블록도이다.
도 7는 본 발명의 일실시예에 따른 인덱스 파일에 기록되는 인덱스 블록의 구성을 보인 블록도이다.
도 8은 본 발명의 일실시예에 따른 인덱스 파일과 데이터 파일간의 관계를 나타내는 예시도이다.
도 9는 본 발명의 일실시예에 따른 데이터 파일과 인덱스 파일이 테이블과, 주기로 나뉘어져 별도의 폴더에 기록되는 구성을 보인 블록도이다.
도 10은 본 발명의 일실시예에 따른 인덱스 캐시의 구성을 보인 예시도이다.
도 11은 본 발명의 일실시예에 따른 데이터 캐시의 구성을 보인 예시도이다.
도 12는 본 발명의 일실시예에 따른 인덱스 캐시와 데이터 캐시가, 테이블과 블록 단위로 나뉘어져 생성된 구성을 보인 예시도이다.
도 13은 본 발명의 일실시예에 따른 로그 객체 아이디와 테이블 정보로 로그를 요청하는 과정의 흐름도이다.
도 14는 본 발명의 일실시예에 따른 시간과 테이블 정보로 로그를 요청하는 과정의 흐름도이다.
도 2는 본 발명의 일실시예에 따른 실제로 저장되는 로그 객체의 구성을 보인 예시도이다.
도 3은 본 발명의 일실시예에 따른 인-메모리 로그 버퍼의 구성을 보인 예시도이다.
도 4는 본 발명의 일실시예에 따른 인-메모리 인덱스 버퍼의 구성을 보인 예시도이다.
도 5는 본 발명의 일실시예에 따른 메모리에 테이블별로 생성되는 로그 버퍼와 인덱스 버퍼의 구성을 보인 블록도이다.
도 6은 본 발명의 일실시예에 따른 데이터 파일에 기록되는 메타 정보와, 압축된 로그 블록을 하나의 데이터 블록으로 나타낸 블록도이다.
도 7는 본 발명의 일실시예에 따른 인덱스 파일에 기록되는 인덱스 블록의 구성을 보인 블록도이다.
도 8은 본 발명의 일실시예에 따른 인덱스 파일과 데이터 파일간의 관계를 나타내는 예시도이다.
도 9는 본 발명의 일실시예에 따른 데이터 파일과 인덱스 파일이 테이블과, 주기로 나뉘어져 별도의 폴더에 기록되는 구성을 보인 블록도이다.
도 10은 본 발명의 일실시예에 따른 인덱스 캐시의 구성을 보인 예시도이다.
도 11은 본 발명의 일실시예에 따른 데이터 캐시의 구성을 보인 예시도이다.
도 12는 본 발명의 일실시예에 따른 인덱스 캐시와 데이터 캐시가, 테이블과 블록 단위로 나뉘어져 생성된 구성을 보인 예시도이다.
도 13은 본 발명의 일실시예에 따른 로그 객체 아이디와 테이블 정보로 로그를 요청하는 과정의 흐름도이다.
도 14는 본 발명의 일실시예에 따른 시간과 테이블 정보로 로그를 요청하는 과정의 흐름도이다.
이하에서, 본 발명에 따른 실시예들을 첨부된 도면을 참조하여 상세하게 설명한다. 그러나, 본 발명이 실시예들에 의해 제한되거나 한정되는 것은 아니다. 각 도면에 제시된 동일한 참조 부호는 동일한 부재를 나타낸다.
또한, 본 발명에서 주기에 대한 별도의 표기를 하지 않는 한, 주기는 플러시 동작을 수행하는 주기를 의미한다.
도 1은 본 발명의 일실시예에 따른 로그 저장 시스템의 구성을 보인 블록도이다.
도 1에 도시된 바와 같이, 로그 저장 시스템은 인-메모리 로그 버퍼(110), 데이터 파일 기록부(120), 인-메모리 인덱스 버퍼(130), 인덱스 파일 기록부(140), 인-메모리 인덱스 캐시(150), 인덱스 파일 리더(160), 인-메모리 데이터 캐시(170), 데이터 파일 메타 정보 리더(180), 데이터 파일 리더(190)로 구성된다.
로그 저장 시스템은, 범용적인 하드웨어와 기능을 수행하는 소프트웨어의 논리적 결합을 의미하는 것으로 해석되어야 한다. 본 발명의 실시예에서 "테이블"은 사용자 정의에 따라, 자료를 분류하여 저장하는 논리적 구성 단위의 개념이다. 로그 저장 시스템은 자료 수집원의 종류에 상관없이 하나의 테이블에 저장할 수도 있고, 각각의 테이블에 저장할 수도 있다.
1단계로 인-메모리 로그 버퍼(110)는 테이블 별로 로그 객체를 메모리에 버퍼링한다. 그리고 데이터 파일 기록부(120)는 주기적으로 플러시(flush) 동작을 수행하여 인-메모리 로그 버퍼에 버퍼링 되어있던 다수의 로그 객체를 영구 기록장치에 로그 객체를 기록한다. "영구 기록장치"라 함은 하드디스크와 같이 일단 데이터가 기록된 후에는 삭제 명령이나 물리적 파손을 제외하고는 전원 공급 여부와 상관없이 기록된 데이터의 기록상태가 유지되는 장치를 의미한다.
2단계로 인-메모리 인덱스 버퍼(130)는 테이블 별로 인-메모리 로그 버퍼(110)에 저장된 로그 객체 개수를 갱신하고, 로그 객체 각각에 대한 오프셋 값을 로그 객체가 인-메모리 로그 버퍼(110)에 버퍼링 된 순서와 동일하게 메모리에 버퍼링한다. 1단계, 2단계에 대한 상세 설명은 후술하기로 한다.
3단계로 데이터 파일 기록부(120)는 주기적으로 플러시 동작을 수행하여 인-메모리 로그 버퍼(110)에 저장된 다수의 로그 객체를 하나의 로그 블록으로 압축하고, 다음으로 압축된 로그 블록에 대한 메타 정보와 압축된 로그 블록을 영구 기록장치에 기록한다. 상세 설명은 후술하기로 한다.
3-1단계로 데이터 파일 기록부(120)는 데이터 파일에 메타 정보와, 로그 블록을 함께 하나의 데이터 블록으로 데이터 파일에 기록할 때에는, 각 테이블 별로 일정한 주기를 기준으로 폴더를 만들어 데이터 파일을 생성한 후 주기가 종료되는 시점까지, 플러시 동작을 수행할 때 마다 해당 데이터 파일에 연속적으로 이어서 저장한다. 이와 같이 데이터 파일 기록부(120)는 데이터 블록을 데이터 파일에 이어서 저장하기 때문에, 저장과 동시에 데이터 파일을 판독하는 것이 가능하다. 폴더를 생성하는 주기는, 플러시 동작을 수행하는 주기보다 훨씬 길다.
4단계로 인덱스 파일 기록부(140)는 데이터 파일 기록부(120)가 플러시 동작을 수행 완료한 다음, 인-메모리 인덱스 버퍼(130)에 저장된 로그 객체 개수 정보와, 로그 객체별 오프셋 값을 인덱스 파일에 하나의 인덱스 블록으로 기록한다. 이렇게 3-1단계에서 데이터 블록을 데이터 파일에 기록할 때 마다, 인덱스 파일 기록부(140)는 인덱스 블록을 인덱스 파일에 기록하게 되면, 데이터 파일의 데이터 블록 개수와, 인덱스 파일의 인덱스 블록 개수가 동일하게 유지되며, 도 8과 같이 데이터 블록과 인덱스 블록은 각기 저장된 순서대로 대응된다.
4-1단계로 인덱스 파일 기록부(140)는 인덱스 파일에 인덱스 블록을 기록할 때에는, 3-1단계와 동일하게 각 테이블 별로 일정한 주기를 기준으로 폴더를 만들고 인덱스 파일을 생성한 후 주기가 종료되는 시점까지, 플러시 동작을 수행할 때 마다 연속적으로 이어서 저장한다. 이와 같이 이어서 저장하기 때문에, 저장과 동시에 파일을 판독하는 것이 가능하다. 폴더를 생성하는 주기는, 플러시 동작을 수행하는 주기보다 훨씬 길다.
5단계로 인-메모리 인덱스 캐시(150)는 인덱스 파일에 저장된 인덱스 블록 단위로 로그 객체 개수, 첫번째 로그 객체 ID, 인덱스 파일 오프셋 값을 메모리에 캐시로 구축하고, 인-메모리 데이터 캐시(170)는 데이터 파일에 저장된 데이터 블록 단위로 로그블록의 시작/종료 시간, 압축된 길이/원본 길이, 데이터 파일 오프셋 값을 메모리에 캐시로 구축한다. 이렇게 도 12처럼 데이터 파일 오프셋 값과, 인덱스 파일 오프셋 값을 메모리에 캐시로 유지하게 되면, 인-메모리 인덱스 캐시(150)와 인-메모리 데이터 캐시(170)는 특정한 로그 객체 아이디로 로그를 요청하거나, 기간을 정하여 로그를 요청 할 때 빠른 검색이 가능해진다.
다음은 도 1, 2, 3, 4, 5, 6, 7, 8, 9를 참조하여 1단계, 2단계, 3단계, 4단계, 5단계에서 입력받은 로그를 메모리에 버퍼링하고, 영구 기록장치에 기록하는 과정과 데이터 구조에 대해 설명하기로 한다.
도 1을 참조하면, 로거는 외부(웹 서버, IDS, IPS 등)에서 생성된 로그 메시지를 전달받은 후, 로그 메시지를 사용자가 지정한 테이블로 분류하여, 버퍼에 저장되는 순서에 따라 로그 객체 아이디 n을 부여하고, 로그 메시지에 기록된 시간 값 또는 로거에 전달된 시간을 로그 객체의 시간으로 기록하며, 로그 메시지 크기 값을 로그 객체에 기록해 도 2와 같은 로그 객체를 생성하고, 도 3처럼 인-메모리 로그 버퍼(110)에 아이디 순서대로 저장한다.
로그 메시지의 길이는 매번 다르기 때문에, 각각의 로그 객체 길이는 또한 가변적이다. 그렇기 때문에 로그 객체는 아이디, 날짜 와 더불어 로그 메시지 길이 값을 포함한다.
로그 객체 n이 인-메모리 로그 버퍼(110)에 저장된 후, 인-메모리 인덱스 버퍼(130)는 해당 테이블 인덱스 버퍼에 저장된 로그 객체 수를 갱신하고, 로그 객체 n에 대한 로그 객체 오프셋 값을 추가한다. 인-메모리 인덱스 버퍼(130)에 저장되는 로그 객체 오프셋 값은 또한, 인-메모리 로그 버퍼(110)에 로그 객체가 저장된 순서처럼 아이디 순서대로 저장된다.
후술하는 로그 검색 방법에 있어, 특정 인덱스 블록과 데이터 블록에 저장된 로그 객체 아이디 범위를 판단하기 위해 로그 객체 개수가 인덱스 버퍼에 필요하다.
로그 객체 오프셋 값은 해당 로그 객체가 출현하는 시작위치를 뜻한다. 시작위치라 함은 인 메모리 로그 버퍼의 시작 위치로부터 상대적인 위치이다. 또한, 후술하는 로그 검색 방법에 있어, 특정 아이디로 로그 객체를 요청했을 때, 로그 객체가 저장된 위치를 알려주기 위해 로그 객체 오프셋 값이 필요하다. 로그 객체 오프셋 값을 참고하여, 저장된 로그 객체에 빠르게 접근할 수 있다.
일정 주기에 따라 데이터 파일 기록부(120)는 플러시 동작을 수행한다.
데이터 파일 기록부(120)는 지금까지 인-메모리 로그 버퍼(110)에 저장되어있는 다수의 로그 객체를 하나의 로그 블록으로 압축한다. 그리고 데이터 파일 기록부(120)는 로그 블록의 시작 시간, 종료 시간, 블록을 압축하기 전 길이, 압축한 길이를 메타 정보로 만든다. 데이터 파일 기록부(120)는 메타 정보와, 압축한 로그 블록을 하나의 데이터 블록으로 하드디스크와 같은 영구 기록장치의 데이터 파일에 이어서 저장한다. 데이터 파일은 별도의 잠금 없이 어펜드 온리(append only) 파일 포맷을 사용한다. 이와 같이 데이터 파일 기록부(120)는 데이터 블록을 이어서 저장하기 때문에, 저장과 동시에 데이터 파일을 판독하는 것이 가능하다.
데이터 파일에 저장을 완료한 후, 인덱스 파일 기록부(140)는 인-메모리 인덱스 버퍼(130)에 버퍼링된 로그 객체 개수와 로그 객체별 오프셋 값을 하나의 인덱스 블록으로, 하드디스크와 같은 영구 기록장치의 인덱스 파일에 이어서 저장한다. 인덱스 파일 기록부(140)는 데이터 파일과 동일하게 별도의 잠금 없이 어펜드 온리(append only) 파일 포맷을 사용한다. 데이터 파일과 동일하게, 저장과 동시에 인덱스 파일을 판독하는 것이 가능하다.
이렇게 주기적으로 플러시 동작을 수행하게 되면, 도 8과 같이 데이터 파일, 인덱스 파일이 각각의 데이터 블록, 인덱스 블록 단위로 누적되고, 각각의 데이터 블록과, 인덱스 블록은 순서에 따라 대응되는 구조를 가지게 된다.
다음은 도 10, 11, 12를 참조하여, 로그 저장 시스템이 인덱스 캐시와 데이터 캐시를 생성하는 과정과 캐시 구조에 대해 설명하기로 한다.
먼저 도 10, 11과 같이, 로그 저장 시스템은 기존에 저장되어있던 인덱스 파일의 정보와, 데이터 파일의 메타 정보를 참조하여 도 12처럼, 영구 기록장치에 저장된 인덱스 블록, 데이터 블록 순서와 동일하게 인덱스 캐시와 데이터 캐시를 메모리에 생성한다.
인-메모리 인덱스 캐시(150)에는 캐싱하는 인덱스 블록의 첫번째 로그 객체 아이디, 로그 객체 개수, 그리고 인덱스 파일 오프셋 값이 포함되어 있다.
첫번째 로그 객체 아이디와 로그 객체 개수는, 후술하는 로그 검색 방법에 있어, 특정 아이디로 로그를 요청했을 때, 해당 인덱스 캐시 블록이 특정 로그 객체 아이디를 포함하고 있는지 판단하기 위해 첫번째 로그 객체 아이디와 로그 객체 개수가 필요하다.
인덱스 파일 오프셋 값은 인덱스 파일 내부에서 해당 인덱스 블록의 시작 위치를 의미하는 것이다. 후술하는 로그 검색 방법에 있어, 특정 로그 객체 아이디를 요청했을 때, 해당 로그 객체 아이디의 오프셋 값을 포함하고 있는 인덱스 블록의 위치를 찾기 위해 필요하다.
인-메모리 데이터 캐시(170)에는 로그 블록의 시작/종료 시간, 원본/압축 길이, 데이터 파일 오프셋 값이 포함되어 있다.
데이터 파일 오프셋 값은 데이터 파일에서 해당 데이터 블록의 시작 위치를 의미하는 것이다. 후술하는 로그 검색 방법에 있어, 로그 저장 시스템은 특정 데이터 블록을 요청할 때, 데이터 파일 오프셋 값과 압축 길이 정보를 이용하여 데이터 파일에서 특정한 부분만 읽어 들인 후 압축을 부분적으로 해제하므로 데이터 파일 오프셋 값이 필요하다.
도 8의 인덱스 파일, 데이터 파일이 블록단위로 저장되고 각기 대응되는 것처럼, 인덱스 캐시와 데이터 캐시도 동일하게 블록단위로 메모리에 생성되고, 대응된다. 인덱스 캐시와 데이터 캐시는 영구 기록장치로부터 읽은 인덱스 파일의 내용과, 데이터 파일의 메타 정보를 이용하여 생성된다.
다음은 도 13을 참조하여, 로그 저장 시스템이 메모리에 저장된 캐시를 기반으로 로그 객체 아이디(X)를 이용하여 로그를 요청하는 방법에 대해 설명하기로 한다.
사용자가 특정 테이블과, 로그 객체 아이디(아이디=X)로 로그를 요청하면(1301), 먼저 로그 저장 시스템은 해당 테이블 인덱스 캐시의 첫번째 캐시 블록에 요청한 로그 객체 아이디가 포함되어 있는지 살펴본다(1302). 로그 객체 아이디 X가 해당 인덱스 캐시 블록에 저장된 첫번째 로그 객체 아이디 값 이상이고, 로그 객체 아이디 X가 인덱스 캐시 블록에 저장된 첫번째 로그 객체 아이디와 로그 객체 개수를 더한 값 미만일 경우 다음으로 넘어간다(1303). 하지만 로그 객체 아이디 X가 해당 로그 블록의 첫번째 로그 객체 아이디와 로그 객체 개수를 더한 값 이상이면, 로그 저장 시스템은 인덱스 캐시의 다음 캐시 블록으로 이동하여 동일한 작업을 수행한다.
로그 저장 시스템이 로그 객체 아이디 X가 포함된 인덱스 캐시 블록을 찾으면, 해당 인덱스 캐시 블록의 인덱스 파일 오프셋 값과, 해당 인덱스 캐시 블록과 대응되는 데이터 캐시 블록의 데이터 파일 오프셋 값과, 압축 길이 값(압축된 로그 블록 길이 값)을 읽는다(1304).
다음으로 로그 저장 시스템은 해당 인덱스 파일 오프셋 값과 로그 객체 아이디 X를 사용하여, 인덱스 파일에서 로그 객체 아이디 X의 로그 객체 오프셋 값을 저장하고 있는 위치를 계산하고, 계산한 값으로 인덱스 파일에 접근하여 로그 객체 아이디 X에 대한 로그 객체 오프셋 값을 읽는다.
로그 저장 시스템은 데이터 캐시에서 읽어 들인 데이터 파일 오프셋 값과, 압축 길이 값을 이용하여, 데이터 파일에서 해당 부분만 읽어 들인 후 압축을 푼다. 그리고 로그 저장 시스템은 인덱스 파일에서 읽어 들인 로그 객체 아이디 X에 대한 로그 객체 오프셋 값으로 압축이 풀린 로그 블록에 접근하여, 고정 길이인 로그 객체 X의 메타 정보를 읽는다(1305). 그리고 로그 저장 시스템은 메타 정보에서 로그 메시지 크기를 확인한 후 크기만큼 로그 블록을 추가로 읽어, 로그 메시지를 추출하고 사용자에게 내용을 반환한다. 로그 저장 시스템은 로그 객체의 메타 정보에서 로그 객체 오프셋 값에 대응하는 로그 메시지 길이 값을 읽으며, 로그 메시지 길이 값으로 로그를 추출한다.
다음은 도 14를 참조하여, 메모리에 저장된 캐시를 기반으로 하여 특정 기간의 로그를 요청하는 방법에 대해 설명하기로 한다.
사용자가 특정 테이블과 기간으로 요청을 하면(1401), 먼저 로그 저장 시스템은 해당 테이블의 데이터 캐시에 해당 기간이 포함된 데이터 블록이 있는지 살펴본다(1402). 즉, 로그 저장 시스템은 데이터 캐시와 인덱스 캐시를 읽기 전 인-메모리 로그 버퍼와 인-메모리 인덱스 버퍼를 검색한다.
해당 기간에 포함된 데이터 블록이 있다면, 로그 저장 시스템은 데이터 블록 각각에 대한 데이터 파일 오프셋 값과, 압축 길이 정보를 읽는다(1403).
로그 저장 시스템은 각 데이터 블록의 데이터 파일 오프셋 값과, 압축 길이 정보를 참고하여, 데이터 파일에서 각 데이터 블록을 읽어 들인 다음 각각 압축을 푼 뒤(1404), 로그 객체의 날짜 정보와 검색 기간을 비교하여, 검색기간에 포함된 로그를 추출하여 사용자에게 반환한다(1405).
본 발명의 실시예에 의하면, 플러쉬되기 전까지는 메모리의 인 메모리 로그버퍼에 로그 객체가, 인 메모리 인덱스 버퍼에 오프셋 값이 버퍼링되기 때문에, 검색시 로그 저장 시스템은 메모리에 위치한 정보를 먼저 검색하고 캐시된 인덱스를 검색하므로 로그를 받는 즉시 전체 로그 검색이 가능해진다.
또한, 본 발명의 실시예들은 다양한 컴퓨터로 구현되는 동작을 수행하기 위한 프로그램 명령을 포함하는 컴퓨터 판독 가능 매체를 포함한다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 본 발명을 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다.
이상과 같이 본 발명에서는 구체적인 구성 요소 등과 같은 특정 사항들과 한정된 실시예 및 도면에 의해 설명되었으나 이는 본 발명의 보다 전반적인 이해를 돕기 위해서 제공된 것일 뿐, 본 발명은 상기의 실시예에 한정되는 것은 아니며, 본 발명이 속하는 분야에서 통상적인 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형이 가능하다. 따라서 본 발명의 사상은 설명된 실시예에 국한되어 정해져서는 아니되며, 후술하는 특허청구범위뿐 아니라 이 특허청구범위와 균등하거나 등가적 변형이 있는 모든 구성들은 본 발명 사상의 범주에 속한다고 할 것이다.
110 : 인-메모리 로그 버퍼
120 : 데이터 파일 기록부
130 : 인-메모리 인덱스 버퍼
140 : 인덱스 파일 기록부
150 : 인-메모리 인덱스 캐시
160 : 인덱스 파일 리더
170 : 인-메모리 데이터 캐시
180 : 데이터파일 메타 정보 리더
190 : 데이터 파일 리더
120 : 데이터 파일 기록부
130 : 인-메모리 인덱스 버퍼
140 : 인덱스 파일 기록부
150 : 인-메모리 인덱스 캐시
160 : 인덱스 파일 리더
170 : 인-메모리 데이터 캐시
180 : 데이터파일 메타 정보 리더
190 : 데이터 파일 리더
Claims (15)
- 로그 객체 아이디로 로그를 요청받는 로그 스토리지;
상기 로그 객체 아이디를 포함하는 블록을 찾고, 인덱스 파일 오프셋 값을 읽는 인덱스 캐시;
상기 인덱스 캐시에 대응한 데이터 파일 오프셋 값과, 압축된 로그 블록 길이 값을 읽는 데이터 캐시;
상기 인덱스 파일 오프셋 값과 상기 로그 객체 아이디에 대응한 로그 객체 오프셋 값을 읽는 인덱스 파일; 및
상기 데이터 파일 오프셋 값과, 상기 압축된 로그 블록 길이 값을 이용하여 데이터 파일에 접근하고, 상기 데이터 파일로부터 읽어온 압축된 로그 블록을 압축 해제한 로그 객체의 메타 정보에서, 상기 로그 객체 오프셋 값에 대응하는 로그 메시지 길이 값을 읽으며, 상기 읽은 로그 메시지 길이 값으로 상기 로그를 추출하는 로그 저장 시스템
를 포함하는 비정형 로그 압축 저장 및 조회 장치. - 기간으로 로그를 요청받는 로그 스토리지;
상기 기간을 포함하는 데이터 블록을 검색하는 데이터 캐시; 및
상기 검색된 데이터 블록을 압축 해제하고, 상기 압축 해제된 데이터 블록에서 상기 기간을 포함하는 상기 로그를 추출하는 로그 저장 시스템
을 포함하는 비정형 로그 압축 저장 및 조회 장치. - 제1항 또는 제2항에 있어서,
로그 객체를 버퍼링하는 인-메모리 로그 버퍼;
상기 로그 객체에 대한 로그 객체 아이디별 오프셋 값을 버퍼링하는 인-메모리 인덱스 버퍼;
주기가 도래함에 따라 상기 버퍼링된 로그 객체를 하나의 로그 블록으로 압축하고, 상기 압축된 로그 블록과 메타 정보를 하나의 데이터 블록으로 데이터 파일에 기록하는 데이터 파일 기록부;
상기 인-메모리 인덱스 버퍼에 버퍼링된 오프셋 값을 하나의 인덱스 블록으로 인덱스 파일에 기록하는 인덱스 파일 기록부; 및
상기 인덱스 파일과 상기 데이터 파일에 각각 대응하는 인덱스 캐시와 데이터 캐시를 저장하는 메모리
를 더 포함하는 비정형 로그 압축 저장 및 조회 장치. - 제3항에 있어서,
상기 로그 객체가 상기 인-메모리 로그 버퍼에 버퍼링 됨에 따라,
상기 인-메모리 인덱스 버퍼는,
상기 버퍼링된 로그 객체의 오프셋 값을 버퍼링하는 비정형 로그 압축 저장 및 조회 장치. - 제3항에 있어서,
상기 데이터 파일 기록부는,
상기 압축된 로그 블록에 대한 메타 정보를, 상기 로그 블록과 함께 상기 하나의 데이터 블록으로 상기 데이터 파일에 기록하는 비정형 로그 압축 저장 및 조회 장치. - 제3항에 있어서,
상기 인덱스 파일 기록부는,
상기 주기가 개시되는 시점에서, 상기 로그 또는 상기 데이터 파일에 대응하는 로그 객체 오프셋 값에 관한 상기 인덱스 파일을 생성하고, 상기 주기가 종료되는 시점까지, 로그 객체 개수를 포함하여 상기 로그 객체 아이디별 오프셋 값을 상기 인덱스 파일에 기록하는 비정형 로그 압축 저장 및 조회 장치. - 제3항에 있어서,
상기 로그 저장 시스템은,
영구 기록장치로부터, 상기 인덱스 파일과 상기 데이터 파일 각각에 대한 메타 정보를 읽고, 상기 읽은 메타 정보를 이용하여, 상기 메모리에 저장하는 상기 인덱스 캐시와 상기 데이터 캐시를 생성하는 비정형 로그 압축 저장 및 조회 장치. - 로그 객체 아이디로 로그를 요청받는 단계;
인덱스 캐시에서 상기 로그 객체 아이디를 포함하는 블록을 찾고, 인덱스 파일 오프셋 값을 읽는 단계;
상기 인덱스 캐시에 대응하는 데이터 캐시에서 데이터 파일 오프셋 값과 압축한 길이 값을 읽는 단계;
상기 인덱스 파일 오프셋 값과 상기 로그 객체 아이디로 인덱스 파일에서 로그 객체 오프셋 값을 읽는 단계;
상기 데이터 파일 오프셋 값과 상기 압축한 길이 값으로, 데이터 파일에서 압축된 로그 블록을 읽는 단계;
상기 로그 블록의 압축을 풀고, 상기 로그 객체 오프셋 값으로 로그 객체의 메타 정보를 읽는 단계; 및
상기 메타 정보의 로그 메시지 길이 값으로, 상기 로그를 추출하는 단계
를 포함하는 로그 저장 및 조회 방법. - 기간으로 로그를 요청받는 단계;
데이터 캐시에서 상기 기간을 포함하는 데이터 블록을 검색하는 단계;
상기 검색된 데이터 블록에서 로그 블록을 압축 해제하는 단계; 및
상기 압축 해제된 로그 블록에서 상기 기간을 포함하는 상기 로그를 추출하는 단계
를 포함하는 로그 저장 및 조회 방법. - 제8항 또는 제9항에 있어서,
입력받은 로그 객체를 인-메모리 로그 버퍼에 버퍼링하는 단계;
상기 버퍼링된 로그 객체에 대한 로그 객체 아이디별 오프셋 값을 인-메모리 인덱스 버퍼에 버퍼링하는 단계;
상기 버퍼링된 로그 객체 개수를 인-메모리 인덱스 버퍼에 갱신하는 단계;
주기가 도래함에 따라 상기 버퍼링된 로그 객체를 하나의 로그 블록으로 압축하는 단계;
상기 압축된 로그 블록과, 메타 정보를 하나의 데이터 블록으로 데이터 파일에 기록하는 단계;
상기 버퍼링된 로그 객체 개수와, 로그 객체별 오프셋 값을 하나의 인덱스 블록으로 인덱스 파일에 기록하는 단계; 및
상기 인덱스 파일과 상기 데이터 파일에 각각 대응하는 인덱스 캐시와 데이터 캐시를 구축하는 단계
를 포함하는 로그 저장 및 조회 방법. - 제10항에 있어서,
상기 압축된 로그 블록을 데이터 파일에 기록하는 단계는,
상기 압축된 로그 블록에 대한 메타 정보를, 상기 압축된 로그 블록과 함께 하나의 데이터 블록으로 상기 데이터 파일에 기록하는 단계
를 포함하는 로그 저장 및 조회 방법. - 제10항에 있어서,
상기 데이터 파일 또는 상기 인덱스 파일은,
영구 기록장치에 저장되는 로그 저장 및 조회 방법. - 제10항에 있어서,
상기 버퍼링된 인덱스 블록을 인덱스 파일에 기록하는 단계는,
상기 데이터 파일에 대응하는 인덱스 파일이 없을 경우 상기 인덱스 파일을 생성하는 단계; 및
상기 데이터 파일에 기록된 데이터 블록에 대응하는 로그 객체 개수 및 상기 로그 객체 아이디별 오프셋 값을 상기 인덱스 블록으로서 상기 인덱스 파일에 기록하는 단계
를 포함하는 로그 저장 및 조회 방법. - 제10항에 있어서,
상기 인덱스 캐시와 데이터 캐시를 구축하는 단계는,
영구 기록장치로부터, 상기 인덱스 파일과 상기 데이터 파일 각각에 대한 메타 정보를 읽고, 상기 읽은 메타 정보를 이용하여, 메모리에 상기 인덱스 캐시와 상기 데이터 캐시를 생성하는 단계
를 포함하는 로그 저장 및 조회 방법. - 제8항 또는 제9항에 있어서,
로그 객체 아이디와 기간으로 로그를 요청받는 단계;
데이터 캐시와 인덱스 캐시를 읽기 전 인-메모리 로그 버퍼와, 인-메모리 인덱스 버퍼를 검색하는 단계
를 더 포함하는 로그 저장 및 조회 방법.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020120060365A KR101375408B1 (ko) | 2012-06-05 | 2012-06-05 | 비정형 로그 압축 저장 및 조회 방법 및 장치 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020120060365A KR101375408B1 (ko) | 2012-06-05 | 2012-06-05 | 비정형 로그 압축 저장 및 조회 방법 및 장치 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20130136730A true KR20130136730A (ko) | 2013-12-13 |
KR101375408B1 KR101375408B1 (ko) | 2014-03-17 |
Family
ID=49983332
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020120060365A KR101375408B1 (ko) | 2012-06-05 | 2012-06-05 | 비정형 로그 압축 저장 및 조회 방법 및 장치 |
Country Status (1)
Country | Link |
---|---|
KR (1) | KR101375408B1 (ko) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108874639A (zh) * | 2018-03-27 | 2018-11-23 | 平安科技(深圳)有限公司 | 日志归档方法、电子装置及可读存储介质 |
CN115756334A (zh) * | 2022-11-30 | 2023-03-07 | 天翼云科技有限公司 | 一种基于大规模存储系统的数据处理方法及装置 |
CN116010348A (zh) * | 2023-01-31 | 2023-04-25 | 北京基调网络股份有限公司 | 一种分布式海量对象的管理方法和装置 |
KR102657160B1 (ko) * | 2023-07-04 | 2024-04-15 | 인스피언 주식회사 | 데이터 관리 장치, 데이터 관리 방법 및 데이터 관리 프로그램을 저장하는 컴퓨터로 판독 가능한 저장 매체 |
KR102660695B1 (ko) * | 2023-06-28 | 2024-04-25 | 인스피언 주식회사 | 데이터 관리 장치, 데이터 관리 방법 및 데이터 관리 프로그램을 저장하는 컴퓨터로 판독 가능한 저장 매체 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101703880B1 (ko) | 2015-10-01 | 2017-02-07 | 국민대학교산학협력단 | 시큐어로깅을 위한 포워드시큐어 압축 서명 장치 및 방법 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2002207613A (ja) | 2001-01-12 | 2002-07-26 | Fujitsu Ltd | 履歴採取装置及び履歴採取方法 |
JP5483405B2 (ja) | 2009-04-27 | 2014-05-07 | Necシステムテクノロジー株式会社 | ログファイル管理システム、ログファイル管理方法及びプログラム |
KR101123846B1 (ko) | 2010-09-07 | 2012-03-16 | 시큐아이닷컴 주식회사 | 트래픽 로그 저장 및 검색 방법 및 이를 이용한 방화벽 시스템 |
KR101112568B1 (ko) | 2010-10-18 | 2012-02-15 | 양봉열 | 로그 인덱싱 방법 |
-
2012
- 2012-06-05 KR KR1020120060365A patent/KR101375408B1/ko not_active IP Right Cessation
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108874639A (zh) * | 2018-03-27 | 2018-11-23 | 平安科技(深圳)有限公司 | 日志归档方法、电子装置及可读存储介质 |
CN115756334A (zh) * | 2022-11-30 | 2023-03-07 | 天翼云科技有限公司 | 一种基于大规模存储系统的数据处理方法及装置 |
CN116010348A (zh) * | 2023-01-31 | 2023-04-25 | 北京基调网络股份有限公司 | 一种分布式海量对象的管理方法和装置 |
CN116010348B (zh) * | 2023-01-31 | 2023-10-03 | 北京基调网络股份有限公司 | 一种分布式海量对象的管理方法和装置 |
KR102660695B1 (ko) * | 2023-06-28 | 2024-04-25 | 인스피언 주식회사 | 데이터 관리 장치, 데이터 관리 방법 및 데이터 관리 프로그램을 저장하는 컴퓨터로 판독 가능한 저장 매체 |
KR102657160B1 (ko) * | 2023-07-04 | 2024-04-15 | 인스피언 주식회사 | 데이터 관리 장치, 데이터 관리 방법 및 데이터 관리 프로그램을 저장하는 컴퓨터로 판독 가능한 저장 매체 |
Also Published As
Publication number | Publication date |
---|---|
KR101375408B1 (ko) | 2014-03-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101375408B1 (ko) | 비정형 로그 압축 저장 및 조회 방법 및 장치 | |
US8959075B2 (en) | Systems for storing data streams in a distributed environment | |
US8738572B2 (en) | System and method for storing data streams in a distributed environment | |
CN108319654B (zh) | 计算系统、冷热数据分离方法及装置、计算机可读存储介质 | |
CN103902623B (zh) | 用于在存储系统上存取文件的方法和系统 | |
CN111309720B (zh) | 时序数据的存储、读取方法、装置、电子设备及存储介质 | |
US8868512B2 (en) | Logging scheme for column-oriented in-memory databases | |
CN108984686B (zh) | 一种基于日志合并的分布式文件系统索引方法和装置 | |
CN112262379B (zh) | 存储数据项并且标识存储的数据项 | |
EP2336901B1 (en) | Online access to database snapshots | |
US20070079084A1 (en) | Method, apparatus and program for management of access history, storage unit, and information processing apparatus | |
JP6752547B2 (ja) | データベース管理方法及びデータベース管理システム | |
KR102253841B1 (ko) | 대용량 분산 파일 시스템에서 데이터의 수정을 포함하는 트랜잭션 처리 장치 및 컴퓨터로 읽을 수 있는 기록매체 | |
CN109213760A (zh) | 非关系数据存储的高负载业务存储及检索方法 | |
US11520818B2 (en) | Method, apparatus and computer program product for managing metadata of storage object | |
JP5956064B2 (ja) | 計算機システム、データ管理方法、及び計算機 | |
US20160004749A1 (en) | Search system and search method | |
CN111045994A (zh) | 一种基于kv数据库的文件分类检索方法及系统 | |
US10037155B2 (en) | Preventing write amplification during frequent data updates | |
KR101112568B1 (ko) | 로그 인덱싱 방법 | |
JP5334214B2 (ja) | 組織内ソーシャルマップ作成システム及び組織内ソーシャルマップ作成方法 | |
KR20110061013A (ko) | 로그 데이터 관리 시스템 | |
KR101062384B1 (ko) | 크롤러를 이용한 기밀정보관리 시스템과 그 방법. | |
JP5906810B2 (ja) | 全文検索装置、プログラム及び記録媒体 | |
JP6627809B2 (ja) | データベース処理装置、システム、方法およびプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20170307 Year of fee payment: 4 |
|
LAPS | Lapse due to unpaid annual fee |