...
원본 로그 데이터 파일에 데이터가 입력되면 각 로그 데이터는 로그 unit단위로 분리된다. 이 분리된 데이터를 origin_msg로 명명한다. 각 origin_msg는 한번에 하나씩 위에 표시된 프로세스를 진행한다. 예를 들어 입력된 첫번째 메시지는 "Aug 19 15:37:12 localhost NetworkManager[1340]: (eth1): bringing up device." 라고 하면, 입력된 origin_msg는 정규 표현식에 의해 토큰으로 분리된다. 이를 메시지 파싱이라고 한다. 메시지 파싱 이전에 origin_msg를 선처리 전처리 할 수 있다. 만약 origin_msg를 선처리 전처리 스크립트를 이용하여 변경한다면, 변경된 메시지가 파싱될 수 있도록 주의하여야 한다.
...
로그 메시지를 파싱한 이후, 결과 토큰값들이 생성된다. 아무런 처리과정이 없다면 이 값이 데이터베이스에 저장된다. 파싱된 토큰들을 데이터베이스에 전달하기 전에 두번째 단계의 선처리 전처리 과정을 실행할 수 있다. 이때 rgx파일에 기술된 필드명을 이용하여 변경하거나 이를 이용할 수 있다. rgx파일에 기술된 데이터형과 다른 타입으로 토큰을 변경하면 에러가 발생할 수 있다.
자세한 내용은 샘플 스크립트를 참조하라.
Preprocessing Script
선처리 전처리 스크립트는 Python으로 작성하여야 한다. 쉽게 사용하려면 "custom.py"파일을 원하는 형태로 변경하는 것을 추천한다.
...
Definition of Return Value
선처리 전처리 스크립트의 실행 결과를 collector에 전달하기 위해서 리턴값을 이용한다. collector가 선처리 전처리 스크립트를 실행한 이후에 참조하는 결과값은 (code, message)의 튜플 타입이다.
...
마크베이스 collector는 python언어로 작성된 사전 정의된 클래스의 함수를 호출하여 선처리를 전처리를 수행한다. 아래의 예제를 보면 클래스의 각 함수와 "dict" 매개변수와 리턴값에 대해서 알 수 있다. 클래스 명이나 함수 이름을 바꾸면 실행되지 않는다. 따라서 작성시 유의하여야 한다.
...
사전 정의된 클래스명은 "mach_preprocess"이다. 매개변수는 메서드를 호출할 때 "self" 인스턴스로 전달된다. __init__과 __del__은 python언어의 기본 객체 생성자/제거자이다. 따라서 __init__은 collector의 프로세스가 생성될 때 호출되고, __del__은 collector가 종료될 때 호출된다. __init__에서 변수들을 초기화하고, __del__에서 할당한 자원을 해제할 수 있다. 이 두 메서드는 리턴값이 없다.
데이터 선처리에 전처리에 호출되는 메서드는 "mach_msg_preprocess"와 "mach_column_preprocess"이다. 각 메서드의 설명은 아래와 같다.
...
기본으로 제공되는 샘플은 syslog파일에 대한 것이며 $MACH_COLLECTOR_HOME/collector 디렉토리에 있다. 샘플 템플릿인 syslog.tpl에서 선처리를 전처리를 수행하는 방법을 살펴보자.
Code Block |
---|
############################################################################### Copyright of this product 2013-2023, Machbase Inc. or its subsidiaries. All Rights reserved ############################################################################### # This file is for Machbase collector template file. # ################################################################### Collect setting ################################################################### COLLECT_TYPE=FILE LOG_SOURCE=/var/log/syslog ################################################################### Process setting ################################################################### REGEX_PATH=syslog.rgx PREPROCESS_PATH=script_path ################################################################### Output setting ################################################################### DB_TABLE_NAME = "syslogtable" DB_ADDR = "127.0.0.1" DB_PORT = 5656 DB_USER = "SYS" DB_PASS = "MANAGER" # 0: Direct insert 1: Prepared insert 2: Append APPEND_MODE=2 # 0: None, just append. 1: Truncate. 2: Try to create table. If table already exists, warn it and proceed. 3: Drop and create. CREATE_TABLE_MODE=2 |
선처리 전처리 스크립트 파일의 위치를 지정하기 위해서, PREPROCESS_PATH를 tpl 파일에 설정한다. 경로명은 절대 경로 (/로 시작되는 경로)를 지정하거나 $MACH_COLLECTOR_HOME/collector/preprocess의 기본 경로(파일명만 지정한 경우)가 된다.
...
새로운 스크립트를 작성한 이후, 스크립트가 정확히 동작하는지 확인해야 한다. 스크립트 테스트를 위한 방법으로, 직접 실행 방법과 간접 실행 방법이 있다. 직접 실행 방법은 스크립트가 테스트를 직접 실행하는 것이며 간접실행방법은 그 스크립트를 임포트하여 테스트 하는 것이다.
Direct Execution
샘플 선처리 전처리 스크립트 하단에 추가되어 있는 테스트 코드들은 preprocessing 클래스 객체를 직접 호출하여 결과를 확인한다. 아래 예제는 skip.py 스크립트의 테스트 코드이다.
...
테스트 코드의 실행 과정을 살펴보면 먼저 mach_process() 함수의 호출로 프리프로세스 객체인 pre_obj를 생성한다. 이 때, __init__메서드가 호출된다. mach_msg_preprocess에 전달되는 매개변수인 dict를 설정한 후, 메서드를 호출하여 테스트를 수행한다. dict 값을 개발자가 설정해야 하지만, 실제 스크립트에 전달되는 값을 알기 어려운 경우, "trace.py" 스크립트를 이용하여 메서드에 전달되는 값을 얻어서 테스트 할 수 있다. trace.py 스크립트가 생성하는 데이터는 /tmp/msg.log 및 /tmp/column.log에 기록된다.
Indirect Execution
이미 생성한 선처리 전처리 스크립트를 import를 통해서 읽어들여서 실행하는 방법이다.
...