11.프로시저

Edit

11.1개요

로그프레소는 사전 정의된 쿼리를 함수처럼 호출할 수 있는 프로시저 기능을 제공합니다. 프로시저를 이용하면 쿼리의 세부 내용을 감추고 프로시저 이름과 매개변수 명세만 노출하므로, 사용자가 긴 쿼리를 입력하지 않고도 쉽게 쿼리를 실행할 수 있고, 향후 쿼리의 내용을 바꾸려고 할 때에도 외부의 코드 변경 없이 프로시저만 재정의하면 되므로 유지보수가 용이합니다.

한편으로, dbquery, ftp, sftp 등 외부의 시스템에 접속하는 쿼리의 경우 프로파일에 대한 권한을 사용자에게 직접 부여하면 임의의 작업을 수행할 수 있기 때문에 보안 문제가 생길 수 있습니다. 이런 경우 프로시저를 생성하고 해당 프로시저의 권한만 사용자에게 부여하면, 외부 시스템에 대한 전체 권한을 주지 않고도 원하는 작업을 사용자 계정의 권한으로 실행할 수 있습니다. 원본 데이터의 일부만 조회하도록 열어주거나, 원본 데이터에 마스킹을 하는 경우에도 유용하게 사용됩니다.

프로시저의 매개변수는 쿼리 매개변수로 설정됩니다. 따라서 프로시저에 정의하는 쿼리에서는 $ 함수를 사용하여 사용자가 프로시저 호출 시 넘긴 매개변수를 참조할 수 있습니다. 예를 들면 아래와 같습니다:

table duration=1d sys_cpu_logs | search kernel + user >= $("threshold")

프로시저 작성 시 가장 흔한 실수는 $ 함수 참조가 매크로처럼 치환된다고 생각하여 쿼리를 작성하는 것입니다. $ 함수는 쿼리 명령어에서 표현식을 입력할 수 있는 위치에만 지정할 수 있습니다. 예를 들어, 아래의 프로시저는 dbquery가 임의의 SQL 문장 입력을 표현식으로 지원하지 않으므로 올바른 쿼리가 아닙니다:

dbquery USERDB $("sql")

이하에서는 프로시저를 호출할 수 있는 proc 명령어를 설명합니다.

11.2proc

문법

proc 프로시저이름(인자1, 인자2, ..., 인자N)

사용자 정의 프로시저를 실행합니다. 프로시저 매개변수 형식에 맞추어 인자를 넘겨주면, 인자가 쿼리 매개변수로 설정된 후 미리 정의된 쿼리가 실행됩니다. 프로시저의 소유자 혹은 권한을 부여받은 사용자가 프로시저의 소유자 권한으로 쿼리를 실행합니다.

프로시저 이름

실행할 프로시저 이름을 입력합니다.

인자

프로시저에서 정의한 매개변수 형식에 맞추어 상수로 평가될 수 있는 표현식을 입력합니다.

사용 예

cpu_overload 이름으로 최근 24시간동안 N% 이상의 과부하 기록을 추출하는 프로시저를 생성합니다:

table duration=1d sys_cpu_logs | search kernel + user >= $("threshold")

이제 90% 이상의 CPU 부하 기록 조회를 아래와 같이 수행할 수 있습니다:

proc cpu_overload(90)
Count of comments [0]