Collector 생성
Collector Manager 등록
Collector manager를 마크베이스 서버와 연결하기 위해서 마크베이스 서버에 collector manager를 등록한다. 아래의 명령을 machsql을 이용하여 실행한다.
CREATE COLLECTORMANAGER manager_name AT "host_addr:host_port";
- manager_name : collector manager의 이름. 중복된 값은 허용되지 않는다.
- host_addr : collector manager가 실행중인 서버의 ip
- host_port : collector manager가 실행중인 서버의 포트 번호
[mach@localhost ~/mach]$ machsql ================================================================= Machbase Client Query Utility Release Version x.x.x.official Copyright 2015, Machbase Inc. or its subsidiaries. All Rights Reserved. ================================================================= Machbase server address (Default:127.0.0.1): Machbase user ID (Default:SYS) Machbase user password: MACHBASE_CONNECT_MODE=INET, PORT=5656 mach>CREATE COLLECTORMANAGER LOCALHOST AT "127.0.0.1:9999"; Created successfully.
마크베이스 서버에 collector manager를 등록한 이후에는m$sys_collectormanagers 테이블에서 상태를 조회할 수 있다.
mach> SELECT * FROM m$sys_collectormanagers; MANAGER_ID MANAGER_NAME MANAGER_HOST MANAGER_PORT MANAGER_STATE ------------------------------------------------------------------------------------------------------------------------------ 1 LOCALHOST 127.0.0.1 9999 1 [1] row(s) selected.
해당 테이블에서 collector manager의 식별자, 명칭, 포트번호와 주소 및 실행 상태를 조회할 수 있다.
Collector 생성
Collector manager를 등록한 이후, collector객체를 collector manager를 통해서 생성한다.
Collector에 대한 정보는 마크베이스 서버에 저장되고, 그 정보를 조회할 수 있다. 아래의 명령을 machsql을 통해서 실행하여 collector를 생성한다.
CREATE COLLECTOR manager_name.collector_name FROM "path_for_template.tpl";
- manager_name : 해당 collector를 실행하는 collector manager의 이름
- collector_name : collector 객체의 이름
- path_for_template.tpl : collector의 설정 파일 경로. 다양한 샘플 설정파일이 "$MACHBASE_COLLECTOR_HOME/collector" 디렉토리에 있다. 원하는 샘플 파일을 선택하여 수정한 다음, 다른 파일로 저장하여 사용하는 것을 추천한다.
템플릿 파일 준비
템플릿 파일은 Collector의 데이터 소스, 처리 방법, 저장 방법을 기술한 text file이다. 샘플 파일들이 $MACHBASE_COLLECTOR_HOME/collector 디렉토리에 제공된다.
템플릿 파일의 구조
템플릿 파일은 마크베이스 프로퍼티 파일과 유사한 "variable name = value"의 구조로 되어 있다. 각 설정 변수의 자세한 정보는 아래 표와 같다.
변수 이름 | 설명 | 비고 |
---|---|---|
COLLECT_TYPE | 데이터 수집 방법 | 데이터 수집 방법을 설정한다. 데이터 수집방법은 다음과 같다. FILE 은 기본 값으로 collector가 설치된 장비의 특정 파일을 지정한다. SFTP: 원격 SFTP파일 경로, SOCKET: socket 입력 데이터 입력. ODBC: ODBC로 설정된 데이터베이스에서 데이터 입력한다. |
LOG_SOURCE | 읽을 로그 파일의 위치 | 읽어들일 데이터 파일의 위치. SFTP 모드에서는 원격 호스트의 절대 경로를 지정해야 한다. SOKET 및 ODBC 모드에서는 사용되지 않는다. 원본 파일을 여러개로 설정하거나 정규 표현식으로 설정하는 것도 가능하다. |
SFTP_HOST | SFTP_HOST | |
SFTP_PORT | SFTP_PORT | 설정하지 않은 경우 22가 기본으로 설정된다. |
SFTP_USER | SFTP 사용자명 | anonymous가 기본값으로 설정된다. |
SFTP_PASS | SFTP 패스워드 | anonymous가 기본값으로 설정된다. |
SOCKET_PORT | Collector가 데이터를 입력받는 소켓 포트 번호 | |
SOCKET_PROTOCOL | Collector 소켓 프로토콜 종류 | 사용 가능한 값은 TCP와 UDP이며 기본값은 TCP이다. |
ODBC_DSN | ODBC 모드의 DSN | ".odbc.ini"의 값 |
ODBC_QUERY | ODBC 모드의 질의문 | ODBC 데이터 소스에서 입력 데이터를 얻기 위해 실행하는 Query string |
ODBC_SEQ_COLUMN | ODBC 모드의 증가되는 컬럼 명 | 숫자 컬럼만 가능하다. |
LIB_NAME | 외부 링크 라이브러리 패스 | 아직 사용되지 않는다. |
REGEX_PATH | 입력 데이터를 분석하기 위한 정규 표현식 파일 | ODBC모드에서는 사용되지 않는다. |
PREPROCESS_PATH | 데이터 선처리용 Python 스크립트 파일의 위치 | |
SLEEP_TIME | 데이터를 입력 완료후 대기 시간 | 밀리초 단위이며 기본값은 1000이다. |
DB_TABLE_NAME | 입력할 테이블 명 | |
DB_ADDR | 입력할 데이터베이스의 IP주소 | |
DB_PORT | 데이터베이스 포트 번호 | |
DB_USER | 데이터베이스 사용자명 | |
DB_PASS | 데이터베이스 패스워드 | |
APPEND_MODE | 데이터 입력 방법 설정 | 과거 버전과의 호환성을 위한 값으로 사용되지 않는다. |
AUTO_ADD_COLUMN | 테이블 컬럼이 없는 경우 이를 자동으로 생성할 지의 여부 0이면 생성하지 않고 1이면 자동 생성함. | 기본값은 1이다. |
CREATE_TABLE_MODE | 입력 테이블에 대한 연산을 설정한다. (0:아무것도 실행하지 않는다. 1: 기존 테이블을 truncate한다 2 : 테이블을 생성한다. 에러가 발생하면 에러를 trc에 기록하고 계속 진행한다. 3: 테이블을 drop하고 테이블을 재생성한다.) | 일반적으로 2로 설정하는 것을 추천한다. |
LANG | 입력 데이터 파일의 인코딩을 지정한다. | 사용가능 값은 UTF-8(기본값), CP949(MS949), KSC5601, EUCJP, SHIFTJIS, BIG5, BG231280가 지원된다. |
REGEX_SORT | 입력 파일의 순서를 결정한다. | 기본값은 ASC이며 DESC도 가능한다. |
ROTATE_FILE_PATH | Rotation 파일 경로명 설정 | |
ROTATE_FILE_COUNT | Rotation 파일 숫자 설정 | |
ROTATE_REGEX_SORT | Rotation 파일의 순서 설정 | 기본값은 ASC임 DESC도 가능한다. |
REGEX_PATH, PREPROCESS_PATH는 collector가 실행시에 참조하는 파일이다. 아래는 REGEX_PATH에 설정되는 rgx파일에 대한 설명이다.
변수 이름 | 설명 | 비고 |
---|---|---|
LOG_TYPE | 정규식 이름 | 수정될 수 있는 값이지만, 데이터 베이스에 함께 저장되므로 값을 유지하는 것이 좋다. |
COL_LIST | 테이블내의 컬럼들의 리스트 | 테이블에 속해있는 컬럼들의 정보 |
REGEX | 데이터 분석을 위한 정규표현식 | |
END_REGEX | 한 레코드의 끝을 의미하는 정규표현식 | 각각의 레코드를 구분하기위한 정규표현식. 설정하지않으면 "\n" 줄바꿈을 기본으로 사용한다. |
COL_LIST는 로그 파일과 데이터베이스 컬럼을 연결하는 정보를 기술한다. 정규표현식의 결과와 컬럼을 설정하는 다양한 정보를 설정해야 한다. COL_LIST를 이용하여 복잡한 로그 데이터를 구조화된 테이블 컬럼에 입력할 수 있다.
변수 이름 | 설명 | 비고 |
---|---|---|
NAME | 컬럼 이름 | 스페이스를 포함하지 않은 문자열이다. |
TYPE | 컬럼의 데이터 타입 | 타입의 이름을 의미한다. |
SIZE | 컬럼의 사이즈 | 컬럼의 실제 지정된 크기를 의미한다. 문자열은 생성된 혹은 생성될 크기에 따라 다른 값을 지정한다.(short (6), int (11), long (20), float (17), double (17), datetime (31), varchar (User-defined), ipv4 (15), ipv6 (45), text (64MB), binary (64MB)) |
DATE_FORMAT | 타입이 datetime일 때, datetime 데이터의 형식 | 내부적으로 "strptime" 함수를 이용해 값을 파싱한다. e.g.) 'Aug 19 07:56:16' 는 '월 일 시간:분:초'의 포맷을 가진다. 따라서 사용되는 포맷값은 다음과 같다. "%b %d %H:%M:%S" add) 추가적인 인자로 %0,%1,%2가 존재하며 각각 밀리초, 마이크로초,나노초를 의미를 가지는 세자리 숫자가 입력된다. |
USE_INDEX | 인덱스 생성 여부 | 타입기반으로 LSM 또는 KEYWORD LSM 인덱스를 생성한다. 0: 생성하지 않는다./ 1: 생성한다. |
REGEX_NO | 정규표현식 내에서의 토큰 번호 | 정규식 파일에서 지정한 REGEX 문법중에 "()" 괄호로 싸인 영역이 하나의 토큰이 된다. 0번은 해당 레코드 데이터 전체를 의미한다. 이후 첫번째 위치한 괄호부터 1번 토큰이 된다. |
syslog.tpl 예제
아래에 syslog.tpl파일의 예제를 기술한다. 해당 파일은 $MACHBASE_COLLECTOR_HOME/collector/syslog.tpl에 샘플로 제공된다.
############################################################################### # Copyright of this product 2013-2023, # Machbase Inc. or its subsidiaries. # All Rights reserved ############################################################################### # # This file is for Machbase collector template file. # ################################################################### # Input setting ################################################################### COLLECT_TYPE=FILE <== It specifies a method to collect local data. LOG_SOURCE=/var/log/syslog <== It specifies a location of source file. ################################################################### # Process setting ################################################################### REGEX_PATH=syslog.rgx <== 정규 표현식 파일의 위치. $MACHBASE_HOME/collector/regex/ 를 root 로 둔다. ################################################################### # Output setting ################################################################### DB_TABLE_NAME = "syslogtable" <== 테이블 이름 : 데이터가 여기 입력됨 DB_ADDR = "127.0.0.1" <== 마크베이스 서버가 작동 중인 IP/PORT DB_PORT = 5656 DB_USER = "SYS" DB_PASS = "MANAGER" # 0: Direct insert # 1: Prepared insert # 2: Append APPEND_MODE=2 <== Data insertion in APPEND mode. # 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 <== Create a table if there is none.
syslog.rgx 파일은 syslog.tpl파일에 설정된 정규표현식 파일이다. rgx 파일을 설정할 때는 절대 경로로 설정하거나 $MACHBASE_COLLECTOR_HOME/collector/regex를 기준으로 한 상대 경로를 설정하면 된다.
############################################################################### # Copyright of this product 2013-2023, # Machbase Corporation (Incorporation) or its subsidiaries. # All Rights reserved ############################################################################### # # This file is for Machbase collector regex file. # LOG_TYPE=syslog COL_LIST= ( ( REGEX_NO = 0 <== REGEX 정규표현식의 토큰 번호 NAME = tm TYPE = datetime SIZE = 8 DATE_FORMAT="%b %d %H:%M:%S" <== strptime 함수에서 사용하는 datetime 포맷 ), ( REGEX_NO = 4 NAME = host TYPE = varchar SIZE = 128 USE_INDEX = 1 <== 인덱스의 사용 여부 ), ( REGEX_NO = 5 NAME = msg TYPE = varchar SIZE = 512 USE_INDEX = 1 ) ) # Below is the regular expression to pares syslog data. It may not work properly if it is modified. REGEX="(([a-zA-Z]+)\s+([0-9]+)\s+([0-9:]*))\s(\S+)\s+([^\n]+)" END_REGEX="\n"
Collector 생성
아래와 같이 collector "syslog_test"를 생성한다.
mach> CREATE COLLECTOR localhost.syslog_test FROM "/home/mach/mach_collector_home/collector/syslog.tpl"; Created successfully.
Collector 확인
M$SYS_COLLECTORS 테이블에 등록된 collector들의 정보가 있다. "RUN_FLAG" 컬럼 값이 1인 collector는 실행중이며 0이면 실행이 중지된 상태이다.
mach> SELECT collector_name, run_flag FROM m$sys_collectors; collector_name run_flag --------------------------------------------------------- SYSLOG_TEST 0 [1] row(s) selected. mach> SELECT * FROM m$sys_collectors; COLLECTOR_ID MANAGER_NAME COLLECTOR_NAME ----------------------------------------------------------------------------------------------------- LOG_TYPE TABLE_NAME --------------------------------------------------------------------------------------- TEMPLATE_NAME COLLECT_TYPE ------------------------------------------------------------------------------------------------------------------------------- COLLECTOR_SOURCE ------------------------------------------------------------------------------------ COLLECTOR_LIB COL_COUNT ------------------------------------------------------------------------------------------------- PREPROCESS_PATH ------------------------------------------------------------------------------------ REGEX_PATH ------------------------------------------------------------------------------------ REGEX ------------------------------------------------------------------------------------ END_REGEX ------------------------------------------------------------------------------------ DEFAULT_ADDR LANGUAGE ----------------------------------------------------------------------------------------------------------------------- SLEEP_TIME DB_ADDR DB_PORT DB_USER ----------------------------------------------------------------------------------------------------------------- DB_PASS RUN_FLAG --------------------------------------------------------- 1 LOCALHOST SYSLOG_TEST syslog syslogtable /home/mach/mach_collector_home/collector/syslog.tpl FILE /var/log/syslog NULL 7 NULL syslog.rgx (([a-zA-Z]+)\s+([0-9]+)\s+([0-9:]*))\s(\S+)\s+([^\n]+) \n 192.168.122.1 UTF-8 1000 127.0.0.1 5656 SYS MANAGER 0 [1] row(s) selected.
Collector 실행
ALTER COLLECTOR manager_name.collector_name START [TRACE];
등록된 collector를 시작하려면 ALTER COLLECTOR 문을 이용한다.
- manager_name : 등록된 collector manager의 이름
- collector_name : 실행할 collector의 이름
Collector 실행시 오류가 발생한 경우 $MACHBASE_COLLECTOR_HOME/trc/machcollector.trc 파일을 참고하여 문제 해결을 할 수 있다.
mach> ALTER COLLECTOR localhost.syslog_test START; Altered successfully. mach> SELECT collector_name, run_flag FROM m$sys_collectors; collector_name run_flag --------------------------------------------------------- SYSLOG_TEST 1 [1] row(s) selected.
ALTER COLLECTOR문으로 collector를 시작하면 RUN_FLAG 컬럼 값이 1 변경된 것을 알 수 있다.
Collector를 시작하면 수집된 데이터가 저장되는 log 테이블도 데이터베이스 서버에 생성된다. collector_type, collector_addr, collector_origin, collector_offset 값들은 기본 값으로 설정된다. syslog.tpl 파일에 설정된 tmp, host, msg 컬럼 또한 생성된다.
mach> ALTER COLLECTOR localhost.syslog_test START; Altered successfully. mach> SELECT collector_name, run_flag FROM m$sys_collectors; collector_name run_flag --------------------------------------------------------- SYSLOG_TEST 1 [1] row(s) selected.
Machsql 을 이용하여 질의문을 수행할 때, 마크베이스 서버에 접속하여 실행되는지를 확인해야 한다. 마크베이스 서버와 collector가 다른 장비에 설치된 경우, machsql이 접속하는 서버가 collector인 경우에는 정상적으로 실행이 안될 수 있다.
Collector 실행시 오류가 발생하여 중지된 이후, 재 실행되면 콜렉터는 마지막으로 입력한 데이터의 위치를 읽어 들여서 데이터를 유실하지 않고 나머지 데이터를 계속 입력한다.
데이터 확인
아래 내용은 원본 syslog의 마지막 10건과 데이터와 입력된 데이터를 비교한 것이다.
[mach@localhost ~/mach]$ tail -n 10 /var/log/syslog Jun 28 21:05:01 localhost CROND[12285]: (root) CMD (LANG=C LC_ALL=C /usr/bin/mrtg /etc/mrtg/mrtg.cfg --lock-file /var/lock/mrtg/mrtg_l --confcache-file /var/lib/mrtg/mrtg.ok) Jun 28 21:10:01 localhost CROND[12442]: (root) CMD (LANG=C LC_ALL=C /usr/bin/mrtg /etc/mrtg/mrtg.cfg --lock-file /var/lock/mrtg/mrtg_l --confcache-file /var/lib/mrtg/mrtg.ok) Jun 28 21:10:01 localhost CROND[12443]: (root) CMD (/usr/lib64/sa/sa1 1 1) Jun 28 21:15:01 localhost CROND[12527]: (root) CMD (LANG=C LC_ALL=C /usr/bin/mrtg /etc/mrtg/mrtg.cfg --lock-file /var/lock/mrtg/mrtg_l --confcache-file /var/lib/mrtg/mrtg.ok) Jun 28 21:20:01 localhost CROND[12609]: (root) CMD (/usr/lib64/sa/sa1 1 1) Jun 28 21:20:01 localhost CROND[12608]: (root) CMD (LANG=C LC_ALL=C /usr/bin/mrtg /etc/mrtg/mrtg.cfg --lock-file /var/lock/mrtg/mrtg_l --confcache-file /var/lib/mrtg/mrtg.ok) Jun 28 21:25:01 localhost CROND[12707]: (root) CMD (LANG=C LC_ALL=C /usr/bin/mrtg /etc/mrtg/mrtg.cfg --lock-file /var/lock/mrtg/mrtg_l --confcache-file /var/lib/mrtg/mrtg.ok) Jun 28 21:25:01 localhost CROND[12708]: (pcp) CMD ( /usr/libexec/pcp/bin/pmlogger_check -C) Jun 28 21:25:43 localhost su: pam_unix(su:session): session opened for user root by mach(uid=506) Jun 28 21:26:02 localhost su: pam_unix(su:session): session closed for user root
아래 내용은 마크베이스 서버에 입력된 마지막 10건의 데이터이다.
mach> SELECT tm, msg FROM syslogtable LIMIT 10; tm msg --------------------------------------------------------------------------------------------------------------------- 2016-06-28 21:26:02 000:000:000 su: pam_unix(su:session): session closed for user root 2016-06-28 21:25:43 000:000:000 su: pam_unix(su:session): session opened for user root by mach(uid=506) 2016-06-28 21:25:01 000:000:000 CROND[12708]: (pcp) CMD ( /usr/libexec/pcp/bin/pmlogger_check -C) 2016-06-28 21:25:01 000:000:000 CROND[12707]: (root) CMD (LANG=C LC_ALL=C /usr/bin/mrtg /etc/mrtg/mrtg.cfg --loc k-file /var/lock/mrtg/mrtg_l --confcache-file /var/lib/mrtg/mrtg.ok) 2016-06-28 21:20:01 000:000:000 CROND[12608]: (root) CMD (LANG=C LC_ALL=C /usr/bin/mrtg /etc/mrtg/mrtg.cfg --loc k-file /var/lock/mrtg/mrtg_l --confcache-file /var/lib/mrtg/mrtg.ok) 2016-06-28 21:20:01 000:000:000 CROND[12609]: (root) CMD (/usr/lib64/sa/sa1 1 1) 2016-06-28 21:15:01 000:000:000 CROND[12527]: (root) CMD (LANG=C LC_ALL=C /usr/bin/mrtg /etc/mrtg/mrtg.cfg --loc k-file /var/lock/mrtg/mrtg_l --confcache-file /var/lib/mrtg/mrtg.ok) 2016-06-28 21:10:01 000:000:000 CROND[12443]: (root) CMD (/usr/lib64/sa/sa1 1 1) 2016-06-28 21:10:01 000:000:000 CROND[12442]: (root) CMD (LANG=C LC_ALL=C /usr/bin/mrtg /etc/mrtg/mrtg.cfg --loc k-file /var/lock/mrtg/mrtg_l --confcache-file /var/lib/mrtg/mrtg.ok) 2016-06-28 21:05:01 000:000:000 CROND[12285]: (root) CMD (LANG=C LC_ALL=C /usr/bin/mrtg /etc/mrtg/mrtg.cfg --loc k-file /var/lock/mrtg/mrtg_l --confcache-file /var/lib/mrtg/mrtg.ok) [10] row(s) selected.
Collector 정지
ALTER COLLECTOR manager_name.collector_name STOP;
다음 명령으로 collector를 중지시킬 수 있다.
mach> ALTER COLLECTOR localhost.syslog_test STOP; Altered successfully.
Collector 삭제
DROP COLLECTOR manager_name.collector_name;
mach> DROP COLLECTOR localhost.syslog_test; Dropped successfully.
Collector가 삭제된 상황은 다음의 질의로 확인할 수 있다.
mach> SELECT collector_name, run_flag FROM m$sys_collectors; collector_name run_flag --------------------------------------------------------- [0] row(s) selected.
Collector 갱신
ALTER COLLECTOR manager_name.collector_name RELOAD;
콜렉터를 생성한 이후, 템플릿 파일을 변경하고 그 내용을 새로 적용할 경우에 사용한다. 실행시 갱신된 템플릿 파일의 내용이 적용된다. 아래 예제는 데이터를 입력할 테이블을 원래 값 대신에 "anothertable"로 바꾼 경우이다.
mach> ALTER COLLECTOR localhost.custom RELOAD; Altered successfully. mach> SELECT * FROM m$sys_collectors; COLLECTOR_ID MANAGER_NAME COLLECTOR_NAME ----------------------------------------------------------------------------------------------------- LOG_TYPE TABLE_NAME --------------------------------------------------------------------------------------- TEMPLATE_NAME COLLECT_TYPE ------------------------------------------------------------------------------------------------------------------------------- COLLECTOR_SOURCE ------------------------------------------------------------------------------------ COLLECTOR_LIB COL_COUNT ------------------------------------------------------------------------------------------------- PREPROCESS_PATH ------------------------------------------------------------------------------------ REGEX_PATH ------------------------------------------------------------------------------------ REGEX ------------------------------------------------------------------------------------ END_REGEX LANGUAGE ----------------------------------------------------------------------------------------------------------------------- SLEEP_TIME DB_ADDR DB_PORT DB_USER ----------------------------------------------------------------------------------------------------------------- DB_PASS PROCESS_BYTE PROCESS_RECORD RUN_FLAG ----------------------------------------------------------------------------------------------------- 4 LOCALHOST CUSTOM syslog anothertable syslog.tpl FILE /var/log/syslog NULL 7 NULL syslog.rgx (([a-zA-Z]+)\s+([0-9]+)\s+([0-9:]*))\s(\S+)\s+([^\n]+) \n UTF-8 1000 127.0.0.1 5656 SYS MANAGER 0 0 0 [1] row(s) selected.
메타 테이블을 조회하면, 입력 테이블이 anothertable 로 바뀐 것을 알 수 있다.