12.외부 시스템 연동

Edit

12.1JDBC 연동

12.1.1dbquery

문법

dbquery JDBC프로파일 SQL문장

외부 데이터베이스 서버를 대상으로 SQL 질의를 수행합니다. JDBC 프로파일은 미리 설정되어 있어야 합니다. dbquery 커맨드는 JDBC를 통해 조회되는 모든 결과 집합을 키/값 쌍으로 읽어들입니다. SQL 문장에 콜론으로 시작하는 플레이스홀더를 입력하면, set 쿼리 커맨드에서 설정한 쿼리 전역변수를 참조하도록 할 수 있습니다.

사용 예

1) worldcup 프로파일에 오라클 11g 접속 설정, weblogs 테이블에서 100건의 로그 조회

dbquery worldcup select * from weblogs where rownum <= 100

2) emp 프로파일 사용, employee 테이블에서 최근 1주일 사이에 입사한 목록을 조회

set created_at = string(dateadd(now(), "day", -7), "yyyy-MM-dd") 
| dbquery emp select * from employee where created_at >= :created_at

MS SQL Server 2008 추출속도 계측

12.1.2dbcall

문법

dbcall JDBC프로파일 SQL문장

dbcall은 저장 프로시저를 호출합니다. SQL 문장에 콜론으로 시작하는 입력 매개변수와 출력 매개변수를 정의할 수 있습니다. 입력 매개변수는 SQL 문장에 :name 형식으로 정의하며, set 커맨드로 정의한 쿼리 매개변수가 삽입됩니다. 출력 매개변수는 SQL 문장에 :name(type) 형식으로 정의합니다. 출력 매개변수의 type은 varchar, int, datetime이 지원됩니다.

SQL 저장 프로시저가 결과집합을 반환하지 않고 출력 매개변수만 반환하는 경우, dbcall은 출력 매개변수로 구성된 튜플 1건을 출력합니다. SQL 저장 프로시저가 결과집합과 출력 매개변수를 모두 반환하는 경우, 결과집합의 모든 튜플에 출력 매개변수 필드를 추가하여 반환합니다. SQL 저장 프로시저가 다수의 결과집합을 반환하는 경우, 모든 결과집합을 순차적으로 조회하여 출력합니다.

사용 예

1) MS SQL 서버에서 특정 테이블의 컬럼 구성 조회

dbcall mssql {call msdb.dbo.sp_columns("log_shipping_primaries")}

2) id가 1000번에 해당되는 line 값을 사용자 정의 프로시저로 조회

set id = 1000 | dbcall mssql {call GetLine(:id, :line(varchar))}

12.1.3dblookup

문법

dblookup [bypass=바이패스조건] JDBC프로파일 SQL문장

dblookup은 dbquery와 다르게 각 입력 레코드를 SQL 문장의 플레이스홀더에 대응시켜서 실행하고, 조회되는 첫번째 레코드를 필드로 할당합니다.

bypass

바이패스 조건식이 참인 경우, SQL 문장을 실행하지 않고 출력을 내보냅니다. 일반적으로 조건절에 들어갈 필드 값이 존재하지 않는 경우, SQL을 실행하지 않도록 조건식을 구성합니다.

사용 예

1) 기존 사용자 DB에서 login 값으로 사용자 성명(name)과 성별(sex)을 조회하여 필드 확장

json "{'login':'xeraph'}"
| dblookup USERDB bypass="isnull(login)" select name, sex from users 
     where login = :login

12.1.4dboutput

문법

dboutput JDBC프로파일 [type=타입] [database=스키마] 
        [batchsize=배치처리단위] table=테이블 필드1 [, 필드2, ... ]

로그프레소 쿼리 결과를 외부 데이터베이스 서버에 입력합니다. 쿼리에서 사용할 JDBC 프로파일은 이미 설정되어 있어야 합니다. dboutput 커맨드는 이전 커맨드에서 전달되는 모든 결과 집합을 SQL 쿼리로 변환하여 외부의 데이터베이스에 입력합니다.

JDBC 프로파일

JDBC 드라이버 접속에 사용할 프로파일 이름을 입력합니다.

type

insert 혹은 update. 기본값은 insert 입니다. update로 지정된 경우 반드시 1개 이상의 키 필드가 지정되어야 합니다. update인 경우 키 필드를 이용하여 SELECT 쿼리를 먼저 수행하고, 결과가 없는 경우에는 INSERT, 결과가 존재하는 경우에는 UPDATE 쿼리를 수행합니다.

database

접속 후 데이터베이스 (혹은 스키마)를 전환하려고 할 때 지정합니다.

batchsize

트랜잭션 배치 처리 단위 갯수. 단위가 크면 한 번에 많이 커밋되므로 효율적이지만, 트랜잭션이 실패했을 때 롤백되는 양도 늘어나므로 적당한 수를 지정해야 합니다. 2000 정도를 권장합니다. 배치 처리 단위를 지정하지 않으면 1건씩 자동 커밋되므로 매우 느릴 수 있습니다.

table

데이터를 입력할 테이블 이름

필드 목록

입력할 대상 테이블의 컬럼 이름과 일치해야 합니다. 만약, 쿼리 결과의 필드 이름과 컬럼 이름이 일치하지 않는다면, dboutput 커맨드 앞에 rename 커맨드를 끼워넣어서 이름을 맞춰야 합니다. 필드 이름 앞에 + 기호를 붙이면 키 필드로 인식합니다.

12.1.5dbscript

문법

dbscript JDBC프로파일 [cs=문자집합] SQL파일경로 [:매개변수1] [:매개변수2] ...

수십 줄 이상의 SQL 구문을 쓰는 경우, 별도의 외부 파일로 저장된 SQL 스크립트 파일을 읽어서 실행할 수 있도록 지원합니다. 이 커맨드를 실행하려면 관리자 권한이 필요합니다. SQL 스크립트 파일의 최대 길이는 1MB(1,048,576바이트)를 초과할 수 없습니다.

SQL 스크립트 파일에는 SELECT 구문만 사용할 수 있으며, 물음표(?)를 사용하여 매개변수가 삽입될 위치를 지정할 수 있습니다. 매개변수의 이름은 콜론으로 시작해야 하고, 매개변수의 순서대로 SQL 파일의 플레이스홀더를 대치합니다. 매개변수는 set 명령어를 사용하여 설정하거나, 프로시저의 호출 인자를 매개변수로 넘겨받을 수 있습니다.

JDBC 프로파일

JDBC 드라이버 접속에 사용할 프로파일 이름을 입력합니다.

문자집합

SQL이 포함된 텍스트 파일의 인코딩을 지정합니다. 미설정 시 기본값은 UTF-8입니다.

SQL 파일 경로

SQL 파일이 위치한 텍스트 파일의 경로를 입력합니다.

12.2HTTP 연동

12.2.1wget

문법

wget [url=웹주소] [selector=셀렉터] [timeout=타임아웃] [encoding=인코딩] [method=메소드] [auth=계정:암호] [format=포맷] [header=헤더] [body=본문]

HTTP 통신을 통해 웹페이지를 다운로드하고 해석한 결과를 출력합니다. url 옵션을 사용하는 경우, 지정된 웹 주소로 요청을 전송하고 응답을 수신합니다. 또한 wget 입력 레코드에 url 필드가 있으면, 해당 url 값으로 HTTP 요청을 전송하고 응답을 수신합니다.

웹주소

HTTP 요청할 URL을 입력합니다.

셀렉터

CSS의 셀렉터와 동일한 문법으로 HTML DOM 트리에서 선택할 요소를 지정합니다.

타임아웃

HTTP 연결 타임아웃 시간을 초 단위로 지정합니다. 미지정 시 기본값은 30초입니다.

인코딩

HTTP 응답 해석에 사용할 인코딩을 지정합니다. 미지정 시 기본값은 utf-8 입니다.

메소드

get, post, put, delete 중에서 설정할 수 있습니다. post인 경우, wget 커맨드로 입력되는 레코드의 모든 키/값을 x-www-form-urlencoded 형식으로 URL 인코딩하여 HTTP 요청을 전송합니다. post 매개변수는 입력 레코드 값을 이용하기 때문에, url 옵션을 사용하는 경우에는 별도로 POST 매개변수를 전송할 수 없습니다.

인증

HTTP 기본 인증을 수행합니다. auth 옵션 값에 "계정:암호" 형식으로 입력할 수 있습니다.

포맷

REST API 전송 포맷을 form, json, xml 중에서 선택할 수 있습니다. 미지정 시 기본값은 form입니다.

헤더

헤더로 사용할 map 타입 필드를 지정합니다. key, value 모두 문자열 타입인 값들만 전송합니다.

본문

body로 사용할 필드를 직접 지정할 경우 사용합니다.

사용 예

1) RSS 피드 제목 조회

wget url="http://eediom.com/feed/" selector="item title" 
| explode elements 
| eval title = valueof(elements, "own_text") 
| fields title

2) firemon REST API 호출

wget auth="firemon:firemon" url="https://HOSTNAME/firemon/api/1.0/rules.json?q=rule%7btrue%7d" 
| parsejson 
| explode devices | parsemap field=devices 
| explode configSets | parsemap field=configSets 
| explode policies | parsemap field=policies 
| explode rules | parsemap field=rules
| fields uid, log, name, action, comment, disabled

12.2.2rss

문법

rss url="웹주소" [strip=태그제거여부]

HTTP 통신을 통해 RSS1, RSS2, ATOM 포맷의 피드를 수신하여 출력합니다. strip 옵션을 t로 설정하면, RSS 피드에 포함된 HTML 태그를 제거합니다. RSS 피드를 읽어오면 각 레코드마다 아래와 같은 필드를 출력합니다.

사용 예

1) RSS 피드 조회

rss url="http://rss.slashdot.org/Slashdot/slashdotMain"

12.3FTP 연동

12.3.1FTP 파일 목록 조회

FTP 프로파일 설정이 완료된 후, 아래의 쿼리를 사용하여 FTP 파일시스템을 탐색하거나 파일을 조회할 수 있습니다.

문법

ftp 프로파일 ls [encoding=문자집합] 경로
문자 집합

파일 이름 인코딩, 미설정 시 utf-8 입니다.

사용 예

1) srv 프로파일 설정 후, 원격 디렉터리 조회

ftp srv ls /

ls 조회 결과 필드들은 각각 아래의 의미를 가집니다:

12.3.2FTP 파일 조회

FTP 프로파일 설정이 완료된 후, 아래의 쿼리 커맨드를 사용하여 FTP 파일시스템을 탐색하거나 파일을 조회할 수 있습니다. 수신한 데이터는 line 필드로 조회됩니다.

12.3.2.1FTP 텍스트 파일 조회

문법

ftp 프로파일 cat [offset=건너뛸 갯수] [limit=최대 갯수] [encoding=문자집합] 파일경로

파일경로에 와일드카드(*)를 사용하면 특정 문자열 패턴을 포함한 모든 파일을 한 번에 조회할 수 있습니다.

건너뛸 갯수

건너뛸 행 갯수를 지정합니다. 기본값은 0입니다.

최대 갯수

가져올 최대 행 갯수를 지정합니다. 기본값은 무제한입니다.

문자 집합

파일 인코딩, 미설정 시 utf-8 입니다.

파일 경로

FTP 파일 절대 경로를 입력합니다.

사용 예

1) /logpresso.sh 파일의 첫 5행을 조회

ftp srv cat limit=5 /logpresso.sh

12.3.2.2FTP JSON 파일 조회

문법

ftp 프로파일 cat format=json [offset=건너뛸 갯수] [limit=최대 갯수] [encoding=문자집합] 파일경로

파일경로에 와일드카드(*)를 사용하면 특정 문자열 패턴을 포함한 모든 파일을 한 번에 조회할 수 있습니다.

건너뛸 갯수

건너뛸 행 갯수를 지정합니다. 기본값은 0입니다.

최대 갯수

가져올 최대 행 갯수를 지정합니다. 기본값은 무제한입니다.

문자 집합

파일 인코딩, 미설정 시 utf-8 입니다.

파일 경로

FTP 파일 절대 경로를 입력합니다.

사용 예

1) /sample.json 파일을 JSON 형식으로 파싱하여 조회

ftp srv cat format=json /sample.json

12.3.3FTP 파일 출력

FTP 프로파일 설정이 완료된 후, 아래의 쿼리 명령어를 사용하여 로그프레소 쿼리 결과를 FTP로 출력할 수 있습니다. 만약 이미 지정된 FTP 경로에 파일이 존재한다면 쿼리 생성이 실패합니다.

12.3.3.1FTP 텍스트 파일 출력

문법

ftp 프로파일 put [fields=쉼표로 구분된 필드 이름] [append=t] [overwrite=t] [encoding=인코딩] 파일경로

지정된 FTP 경로에 쿼리 결과를 텍스트 파일로 출력합니다. fields 옵션 지정을 생략하면 기본값으로 line 필드를 출력합니다. 만약 출력하려는 필드 값이 존재하지 않으면 - 문자를 출력합니다. 여러 개의 필드를 출력할 때는 탭으로 구분합니다.

append나 overwrite 옵션을 지정하지 않는 경우 지정된 파일 경로에 파일이 존재하면 쿼리가 실패합니다. append와 overwrite 옵션은 동시에 사용할 수 없습니다.

사용 예

1) JMX 클래스로딩 로그 중 UnloadedClassCount와 LoadedClassCount만 /tmp/output.txt 경로에 출력

table classloading
| ftp srv put fields=UnloadedClassCount,LoadedClassCount /tmp/output.txt

12.3.3.2FTP JSON 파일 출력

문법

ftp 프로파일 put format=json [fields=쉼표로 구분된 필드 이름] [append=t] [overwrite=t] [encoding=인코딩] 파일경로

지정된 FTP 파일 경로에 쿼리 결과를 JSON 파일로 출력합니다. fields 옵션을 지정하면 지정된 필드들만 JSON으로 출력됩니다. fields 옵션을 생략하면 모든 필드값이 JSON으로 출력됩니다.

append나 overwrite 옵션을 지정하지 않는 경우 지정된 파일 경로에 파일이 존재하면 쿼리가 실패합니다. append와 overwrite 옵션은 동시에 사용할 수 없습니다.

사용 예

1) JMX 클래스로딩 로그를 JSON 파일로 출력

table classloading | ftp srv put format=json /tmp/classloading.json

2) JMX 클래스로딩 로그 중 LoadedClassCount, UnloadedClassCount, TotalLoadedClassCount 출력

table classloading 
| ftp srv put format=json 
        fields=LoadedClassCount,UnloadedClassCount,TotalLoadedClassCount 
        /tmp/classloading.json

12.3.3.3FTP CSV 파일 출력

문법

ftp 프로파일 put format=csv [fields=쉼표로 구분된 필드 이름] [append=t] [overwrite=t] [encoding=인코딩] 파일경로

지정된 FTP 파일 경로에 쿼리 결과를 CSV 파일로 출력합니다. CSV 파일 생성 시 첫 줄에 필드 이름 목록이 출력됩니다. 지정된 필드 값이 존재하지 않는 경우 빈 문자열로 표시됩니다. fields 옵션을 생략하면 line 필드가 출력됩니다.

append나 overwrite 옵션을 지정하지 않는 경우 지정된 파일 경로에 파일이 존재하면 쿼리가 실패합니다. append와 overwrite 옵션은 동시에 사용할 수 없습니다. append 옵션을 사용할 때 CSV를 구성하는 필드 목록은 기존 파일과 동일해야 합니다.

사용 예

1) JMX 클래스로딩 로그 중 LoadedClassCount, UnloadedClassCount, TotalLoadedClassCount 출력

table classloading | ftp srv put format=csv 
        fields=LoadedClassCount,UnloadedClassCount,TotalLoadedClassCount 
        /tmp/classloading.csv

12.4SSH 및 SFTP 연동

12.4.1SFTP 파일 목록 조회

문법

sftp 프로파일 ls 경로

SSH 연동 설정이 완료된 후, SFTP 파일시스템을 탐색하거나 파일을 조회할 수 있습니다.

사용 예

1) srv 프로파일로 SSH 접속하여 원격 디렉터리 파일 조회

sftp srv ls /

ls 조회 결과 필드들은 각각 아래의 의미를 가집니다:

12.4.2SFTP 파일 조회

SSH 프로파일 설정이 완료된 후, 아래의 쿼리 명령어를 사용하여 SFTP 파일시스템을 탐색하거나 파일을 조회할 수 있습니다.

문법

sftp 프로파일 cat [offset=건너뛸 갯수] [limit=최대 갯수] [encoding=문자집합] 파일경로

파일경로에 와일드카드(*)를 사용하면 특정 문자열 패턴을 포함한 모든 파일을 한 번에 조회할 수 있습니다.

프로파일

SSH 프로파일 이름을 지정합니다.

offset

건너뛸 행 갯수를 지정합니다. 기본값은 0입니다.

limit

가져올 최대 행 갯수를 지정합니다. 기본값은 무제한입니다.

encoding

파일 인코딩, 미설정 시 utf-8 입니다

파일 경로

SFTP 파일 절대 경로를 입력합니다.

사용 예

1) srv 프로파일로 접속하여 /logpresso.sh 파일의 첫 5행을 조회

sftp srv cat limit=5 /logpresso.sh

12.4.3SFTP 파일 출력

문법

sftp 프로파일 put [format=출력 포맷] [fields=쉼표로 구분된 필드 이름] 
    [append=t] [overwrite=t] [encoding=문자집합] [partition=t] [multisession=t] 
    [maxsession=최대 세션 수] 파일경로
format

text, csv, tsv, json 중 하나로 출력 포맷을 지정합니다. 미지정 시 기본값은 text이며 공백으로 구분된 텍스트 형식으로 출력합니다.

fields

쉼표로 구분된 필드 이름: 출력할 필드 이름을 지정합니다.

append

지정된 파일경로에 파일이 이미 존재하면 파일 끝에 추가합니다. overwrite 옵션과 같이 사용할 수 없습니다.

overwrite

지정된 파일경로에 파일이 이미 존재하면 기존 파일을 삭제하고 덮어씁니다. append 옵션과 같이 사용할 수 없습니다.

encoding

결과를 출력할 문자 집합을 지정합니다. 지정하지 않을 경우 utf-8로 출력합니다.

partition

t로 설정 시 파일 경로에 시간 기반으로 입력된 매크로를 기준으로 디렉토리를 설정할 수 있습니다. 로그 시각을 기준으로 하는 logtime 매크로와 현재 시각을 기준으로 하는 now 매크로를 사용할 수 있으며, 파티션 옵션을 지정하고 경로에 매크로를 사용하지 않으면 쿼리가 실패합니다.

multisession

ssh 연결에서 멀티세션을 사용할지 여부를 불린 값으로 지정합니다. 지정하지 않을 경우 사용하지 않습니다. 추가 세션을 여는데 시간이 더 걸려 오히려 사용하지 않을 때보다 성능이 떨어질 수 있어, 테스트 후 사용 여부를 결정하는 것이 바람직합니다.

maxsession

멀티세션을 사용할 때, 최대로 열 세션 수를 지정합니다. 멀티세션 사용 여부를 체크하지 않고 이 옵션을 지정할 경우 쿼리가 실패합니다. 아무리 큰 수를 지정해도 접속 대상의 sshd_config 에서 지정한 MaxSessions 수 만큼 세션이 열립니다.

사용 예

1) JMX 클래스로딩 로그 중 UnloadedClassCount와 LoadedClassCount만 /tmp/class.txt 경로에 출력

table classloading 
| sftp srv put fields=UnloadedClassCount,LoadedClassCount /tmp/class.txt

2) JMX 클래스로딩 로그를 /tmp/class.json 파일로 출력

table classloading | sftp srv put format=json /tmp/class.json

3) JMX 클래스로딩 로그 중 LoadedClassCount, UnloadedClassCount, TotalLoadedClassCount 항목을 /tmp/class.csv 파일로 출력

table classloading 
| sftp srv put format=csv 
    fields=LoadedClassCount,UnloadedClassCount,TotalLoadedClassCount /tmp/class.csv

4) 디렉토리를 로그 시간 기준 년월일로, 파일 이름을 현재시간 기준 시분으로 JMX 클래스로딩 로그 중 LoadedClassCount, UnloadedClassCount, TotalLoadedClassCount 항목을 JSON 파일로 출력

table classloading
| sftp srv put format=json 
    partition=t fields=LoadedClassCount,UnloadedClassCount,TotalLoadedClassCount 
    {logtime:/yyyy/MM/dd/}{now:HHmm}.txt

12.5HDFS 연동

12.5.1HDFS 파일 목록 조회

문법

hdfs 프로파일 ls 절대경로
hdfs 프로파일 lsr 절대경로

HDFS 프로파일 설정을 완료한 후, HDFS 파일시스템을 탐색하거나 파일을 조회할 수 있습니다. ls 대신 lsr 옵션을 사용하는 경우 지정된 디렉터리 뿐 아니라 하위의 모든 디렉터리를 탐색합니다.

출력 필드 목록

사용 예

1) vm 이름의 프로파일로 접속하여 루트 경로 파일 목록을 조회

hdfs vm ls /

12.5.2HDFS 파일 조회

12.5.2.1HDFS 텍스트 파일 조회

문법

hdfs 프로파일 cat [offset=건너뛸 갯수] [limit=최대 갯수] 파일경로

HDFS의 텍스트 파일을 줄 단위로 읽어옵니다. 읽어온 행은 line 필드로 할당됩니다. 파일경로에 와일드카드(*)를 사용하면 특정 문자열 패턴을 포함한 모든 파일을 한 번에 조회할 수 있습니다.

offset

건너뛸 행 갯수를 지정합니다. 기본값은 0입니다.

limit

가져올 최대 행 갯수를 지정합니다. 기본값은 무제한입니다.

파일 경로

HDFS 파일 시스템의 절대 경로를 입력합니다.

사용 예

1) vm 프로파일로 접속하여 /tmp/LICENSE.txt 파일의 첫 행을 건너뛰고 5개 행을 조회

hdfs vm cat offset=1 limit=5 /tmp/LICENSE.txt

12.5.2.2HDFS CSV 파일 조회

문법

hdfs 프로파일 cat format=csv [offset=건너뛸 갯수] [limit=최대 갯수] 파일경로

HDFS의 CSV 파일을 조회합니다. 첫 줄은 열 제목으로 인식합니다. 데이터에 개행 문자가 있더라도 CSV 규칙에 맞으면 여러 개의 줄을 하나의 셀 데이터로 인식합니다. 파일경로에 와일드카드(*)를 사용하면 특정 문자열 패턴을 포함한 모든 파일을 한 번에 조회할 수 있습니다.

offset

건너뛸 행 갯수를 지정합니다. 기본값은 0입니다.

limit

가져올 최대 행 갯수를 지정합니다. 기본값은 무제한입니다.

파일 경로

HDFS 파일 시스템의 절대 경로를 입력합니다.

사용 예

1) vm 프로파일로 접속하여 /tmp/malware.csv CSV 파일에서 3개 행을 조회

hdfs vm cat format=csv limit=3 /tmp/malware.csv

12.5.2.3HDFS JSON 파일 조회

문법

hdfs 프로파일 cat format=json [offset=건너뛸 갯수] [limit=최대 갯수] 파일경로

HDFS의 JSON 파일을 줄 단위로 읽어서 파싱합니다. 파일경로에 와일드카드(*)를 사용하면 특정 문자열 패턴을 포함한 모든 파일을 한 번에 조회할 수 있습니다.

offset

건너뛸 행 갯수를 지정합니다. 기본값은 0입니다.

limit

가져올 최대 행 갯수를 지정합니다. 기본값은 무제한입니다.

파일 경로

HDFS 파일 시스템의 절대 경로를 입력합니다.

사용 예

1) vm 프로파일로 접속하여 /tmp/iis.json JSON 파일에서 1개 행을 조회

hdfs vm cat format=json limit=1 /tmp/iis.json

12.5.2.4HDFS 시퀀스 파일 조회

문법

hdfs 프로파일 cat format=sequence [offset=건너뛸 갯수] [limit=최대 갯수] 파일경로

HDFS의 시퀀스 파일을 레코드 단위로 읽어옵니다. 파일경로에 와일드카드(*)를 사용하면 특정 문자열 패턴을 포함한 모든 파일을 한 번에 조회할 수 있습니다. 압축 방식 (레코드 단위 압축, 블럭 단위 압축)에 관계없이 조회 가능합니다. 키 필드 이름은 key로 지정되고, 값 필드 이름은 값 타입이 MapWritable이 아닌 경우 value로 지정됩니다. 값 타입이 MapWritable 인 경우에는 내부의 키/값 매핑이 반환되는 행의 필드로 반환됩니다. 하둡에 내장된 아래와 같은 Writable 구현들을 자바 프리미티브로 자동 변환하여 조회합니다:

offset

건너뛸 행 갯수를 지정합니다. 기본값은 0입니다.

limit

가져올 최대 행 갯수를 지정합니다. 기본값은 무제한입니다.

파일 경로

HDFS 파일 시스템의 절대 경로를 입력합니다.

사용 예

1) vm 프로파일로 접속하여 /tmp/classloading.seq 시퀀스 파일에서 2개 레코드를 조회

hdfs vm cat format=sequence limit=2 /tmp/classloading.seq

12.5.3HDFS 파일 출력

HDFS 프로파일 설정이 완료된 후, 아래의 쿼리 명령어를 사용하여 로그프레소 쿼리 결과를 HDFS 파일로 출력할 수 있습니다. 만약 이미 지정된 HDFS 경로에 파일이 존재한다면 쿼리 생성이 실패합니다.

12.5.3.1HDFS 텍스트 파일 출력

문법

hdfs 프로파일 put [fields=쉼표로 구분된 필드 이름] [partition=t] 파일경로

지정된 HDFS 경로에 쿼리 결과를 텍스트 파일로 출력합니다.

fields

쉼표로 구분된 필드 이름: 출력할 필드 이름을 지정합니다. 미지정 시 기본값은 line입니다.

partition

t로 설정 시 파일 경로에 시간 기반으로 입력된 매크로를 기준으로 디렉토리를 설정할 수 있습니다. 로그 시각을 기준으로 하는 logtime 매크로와 현재 시각을 기준으로 하는 now 매크로를 사용할 수 있으며, 파티션 옵션을 지정하고 경로에 매크로를 사용하지 않으면 쿼리가 실패합니다.

1) JMX 클래스로딩 로그 중 UnloadedClassCount와 LoadedClassCount만 /tmp/class.txt 경로에 출력

table classloading 
| hdfs vm put fields=UnloadedClassCount,LoadedClassCount /tmp/class.txt

2) sys_cpu_logs 로그를 /tmp 밑의 날짜별 디렉터리에 출력

table sys_cpu_logs 
| eval line = concat("idle: ", idle, ", kernel: ", kernel, ", ", user: ", user)
| hdfs vm put partition=t /tmp/{logtime:yyyyMMdd}/cpu.txt

12.5.3.2HDFS CSV 파일 출력

문법

hdfs 프로파일 put format=csv [fields=쉼표로 구분된 필드 이름] 파일경로

지정된 HDFS 파일 경로에 쿼리 결과를 CSV 파일로 출력합니다. CSV 파일 생성 시 첫 줄에 필드 이름 목록이 출력됩니다. 지정된 필드 값이 존재하지 않는 경우 빈 문자열로 표시됩니다. fields 옵션을 생략하면 line 필드가 출력됩니다.

1) JMX 클래스로딩 로그 중 LoadedClassCount, UnloadedClassCount, TotalLoadedClassCount 출력

table classloading 
| hdfs vm put format=csv 
  fields=LoadedClassCount,UnloadedClassCount,TotalLoadedClassCount 
  /tmp/classloading.csv

12.5.3.3HDFS JSON 파일 출력

문법

hdfs 프로파일 put format=json [fields=쉼표로 구분된 필드 이름] 파일경로

지정된 HDFS 파일 경로에 쿼리 결과를 JSON 파일로 출력합니다. fields 옵션을 지정하면 지정된 필드들만 JSON으로 출력됩니다. fields 옵션을 생략하면 모든 필드값이 JSON으로 출력됩니다.

1) JMX 클래스로딩 로그를 JSON 파일로 출력

table classloading | hdfs vm put format=json /tmp/classloading.json

12.5.3.4HDFS 시퀀스 파일 출력

문법

hdfs 프로파일 put format=sequence [fields=쉼표로 구분된 필드 이름] 
        [key_type=키 타입] [key_field=키 필드 이름] [value_type=값 타입] 
        [value_field=값 필드 이름] [compression_type=압축 유형] 파일경로

지정된 HDFS 경로에 쿼리 결과를 시퀀스 파일로 출력합니다. 키나 값 중 하나라도 비어있으면 그 행은 출력하지 않습니다. 만약 값은 존재하지만 타입이 불일치한다면, string인 경우는 자동으로 문자열로 변환하고, int/long/float/double의 경우 0으로, bool은 false로 출력됩니다. 정밀도를 손상하지 않고 변환할 수 있는 경우에는 변환 후 출력합니다. 가령 long 타입으로 지정된 상태에서 int 값이 들어오면 long으로 변환됩니다.

fields

출력 대상 필드 이름들을 지정합니다. 미설정 시 전체 필드가 출력됩니다.

key_type

키 타입을 지정합니다. (하둡 타입 매핑 참조)

key_field

키 필드 이름을 지정합니다. 미설정 시 1부터 시작하는 LongWritable 카운터가 기록됩니다.

value_type

값 타입을 지정합니다. (하둡 타입 매핑 참조)

value_field

값 필드 이름을 지정합니다. 미설정 시 전체 필드가 하나의 MapWritable로 묶여서 출력됩니다.

compression_type

record이면 레코드 단위 압축, block이면 블럭 단위 압축, 미설정시 압축하지 않습니다.

표 12-1하둡 타입 매핑

로그프레소 타입

하둡 타입

설명

string

Text

문자열

bool

BooleanWritable

불린 (참/거짓)

int

IntWritable

32비트 정수

long

LongWritable

64비트 정수

float

FloatWritable

단정도 실수

double

DoubleWritable

배정도 실수

1) JMX 클래스로딩 로그 전체를 시퀀스 파일로 출력

table classloading | hdfs vm put format=sequence /tmp/classloading.seq

2) JMX 클래스로딩 로그 중 LoadedClassCount 값을 출력

table classloading | hdfs vm put format=sequence value_type=long 
        value_field=LoadedClassCount /tmp/classloading.seq

12.6몽고DB 연동

12.6.1몽고DB 데이터베이스 목록 조회

문법

mongo 프로파일 dbs

몽고DB의 데이터베이스 목록을 출력합니다. 각 레코드는 아래의 필드로 구성됩니다.

name

데이터베이스 이름

disk_usage

디스크 사용량 (바이트)

empty

데이터베이스가 비어있는 경우 true, 그렇지 않으면 false

12.6.2몽고DB 컬렉션 목록 조회

문법

mongo 프로파일 [database=데이터베이스이름] cols

몽고DB 프로파일에 지정된 기본 데이터베이스의 컬렉션 목록을 출력합니다. 각 레코드는 아래의 필드로 구성됩니다.

name

컬렉션 이름

type

타입 (collection)

options

컬렉션 구성 옵션

info

읽기전용 여부 등 부가정보

idIndex

_id 인덱스 명세

12.6.3몽고DB 문서 조회

문법

mongo 프로파일 [database=데이터베이스이름] db.컬렉션명.find()
mongo 프로파일 [database=데이터베이스이름] db.컬렉션명.find("필터표현식")
mongo 프로파일 [database=데이터베이스이름] db.컬렉션명.find("필터표현식", "프로젝션표현식")

몽고DB 컬렉션에서 문서들을 조회합니다. 필터 표현식과 프로젝션 표현식은 각각 몽고DB에서 지원하는 JSON 포맷의 조건절 표현식과 프로젝션 표현식을 의미합니다. 필터 매개변수를 생략하면 모든 문서를 조회합니다. 프로젝션 매개변수를 생략하면 문서의 모든 필드를 조회합니다.

사용 예

1) inventory 컬렉션의 모든 문서 조회

mongo PROFILE db.inventory.find()

2) restaurants 컬렉션에서 stars 3점 이상의 문서 조회

mongo PROFILE db.restaurants.find("{stars: {$gte: 3}}")

3) restaurants 컬렉션에서 name, stars 필드만 출력

mongo PROFILE db.restaurants.find(null, "{name: true, stars: true}")

12.6.4몽고DB 문서 입력

문법

mongo 프로파일 [database=데이터베이스이름] db.컬렉션명.insert()

커맨드 입력으로 들어오는 모든 레코드를 지정한 몽고DB 컬렉션에 입력합니다. 입력 레코드가 _id 필드를 포함하는 경우 고유식별키로 사용되며, 별도로 _id 값을 지정하지 않은 경우 자동으로 12바이트의 바이너리 값이 부여됩니다.

사용 예

1) 임의의 JSON 문서를 몽고DB restaurants 컬렉션에 입력

json 
 "{'name': 'Café Con Leche', 
   'contact': {'phone':'228-555-0149', 
               'email':'cafeconleche@example.com', 
               'location':[-73.92502, 40.8279556]}, 
   'stars':3, 
   'categories': ['Bakery', 'Coffee', 'Pastries']}"
| mongo PROFILE db.restaurants.insert()

2) 로그프레소 inventory 테이블의 최근 10건을 몽고DB inventory 컬렉션에 입력

table limit=10 inventory | mongo PROFILE db.inventory.insert()

12.6.5몽고DB 문서 수정

문법

mongo 프로파일 [database=데이터베이스이름] db.컬렉션명.updateOne("검색키 필드 목록", "업데이트 필드 목록")
mongo 프로파일 [database=데이터베이스이름] db.컬렉션명.updateMany("검색키 필드 목록", "업데이트 필드 목록")

이 명령어는 검색키 필드 목록에 지정된 필드 이름의 값을 이용하여 컬렉션을 검색한 뒤, 업데이트 필드 목록에 지정된 필드들의 값을 수정합니다. 검색키 필드 목록은 쉼표로 구분된 필드 이름 목록을 입력합니다. updateOne은 검색되는 첫번째 문서만 수정하며, updateMany는 검색되는 모든 문서를 수정합니다.

_id 필드를 검색키로 사용할 때 고유식별자가 자동 생성된 12자리 바이너리인 경우에는 _id 값을 바이너리 타입의 값으로 설정해야 합니다.

사용 예

1) name 필드를 기준으로 restaurants 컬렉션을 검색하고 stars 값을 수정

json "{}" | eval name="Café Con Leche", stars=4
| mongo PROFILE db.restaurants.updateOne("name", "stars")

12.6.6몽고DB 문서 삭제

문법

mongo 프로파일 [database=데이터베이스이름] db.컬렉션명.deleteOne("검색키 필드 목록")
mongo 프로파일 [database=데이터베이스이름] db.컬렉션명.deleteMany("검색키 필드 목록")

이 명령어는 검색키 필드 목록에 지정된 필드 이름의 값을 이용하여 컬렉션을 검색한 뒤 그 문서를 삭제합니다. 검색키 필드 목록은 쉼표로 구분된 필드 이름 목록을 입력합니다. deleteOne은 검색되는 첫번째 문서만 삭제하며, deleteMany는 검색되는 모든 문서를 삭제합니다.

_id 필드의 식별자가 자동 생성된 12자리 바이너리인 경우, 삭제에 사용할 _id 필드를 바이너리 값으로 설정해야 합니다.

사용 예

1) 특정 _id의 문서 삭제

아래 쿼리는 ObjectId가 5982df1b7098262f64d4ffaf인 문서 1건을 검색하여 삭제합니다.

json "{}" | eval _id = fromhex("5982df1b7098262f64d4ffaf") 
| mongo stream2 db.restaurants.deleteOne("_id")
Count of comments [0]