프로시저
개요
프로시저는 DBMS의 프로시저처럼 쿼리를 모듈화하고, 매개변수를 통해 반복적인 작업을 간편하게 수행할 수 있는 기능입니다. 같은 로그 원본에서 특정 필드 조건만 바꿔가며 조회해야 할 때 특히 유용합니다.
예를 들어 분석 > 쿼리 화면에서 table *:SNIPER_NGFW를 실행하면 결과에 level 컬럼이 포함됩니다. 이 값을 기준으로 Normal, Debug, Warning 로그만 골라 보려면 원본 쿼리에 다음 검색 조건을 붙일 수 있습니다.
table *:SNIPER_NGFW | search level == $("level")
위 쿼리를 프로시저로 저장해 두면, 이후에는 level 값만 바꿔 입력하면서 같은 분석을 반복할 수 있습니다.
프로시저는 다음과 같은 장점을 제공합니다.
- 재사용성과 유지보수성 향상
- 반복적으로 사용하는 쿼리를 프로시저로 모듈화하면 재사용이 쉬워지고, 쿼리 관리가 간편해집니다. 사용자는 프로시저 이름과 매개변수만으로 필요한 작업을 수행할 수 있어, 쿼리를 반복 작성할 필요가 없고 유지보수도 용이해집니다.
- 보안성 향상
- dbquery, ftp, sftp 등 외부 시스템에 접속하는 명령은 접속 프로파일 사용 권한이 필요합니다. 해당 권한을 사용자에게 직접 부여하면 외부 시스템에 임의로 접속할 수 있어 보안에 취약해질 수 있습니다. 프로시저를 이용하면 관리자 권한이 필요한 쿼리나 외부 시스템 작업을 제한된 형태로 제공할 수 있습니다. 예를 들어, 사용자에게 전체 권한을 부여하지 않고도 특정 외부 작업만 실행하도록 하거나, 원본 데이터의 일부만 조회하거나 마스킹된 형태로 제공하는 방식으로 응용할 수 있습니다.
- 로그프레소 설정 정보 접근
- 로그프레소의 시스템 테이블은 관리자 권한이 있어야 접근할 수 있습니다. 일반 사용자가 설정 정보에 접근해야 하는 경우, 프로시저를 통해 필요한 범위 내에서 조회하도록 구성할 수 있습니다.
유의사항
프로시저 내 매개변수 사용 시 다음 사항을 반드시 확인하세요.
- 매개변수는 검색 조건 등 일부 표현식에서만 사용할 수 있습니다.
- 쿼리 명령어 이름이나 테이블 이름에는 매개변수를 사용할 수 없습니다.
- 이는 쿼리 실행의 안정성을 높이고, SQL 인젝션 공격을 방지하기 위함입니다.
프로시저 목록 조회/검색
분석 > 프로시저 메뉴에서 프로시저 목록을 조회하거나 검색할 수 있습니다.
- 실행: 프로시저 실행 버튼
- 이름: 프로시저 이름
- 설명: 프로시저에 대한 설명
- 소유자: 프로시저를 등록한 사용자 계정
- 수정일: 프로시저가 마지막으로 수정된 날짜 또는 생성일
프로시저 목록에서 특정 프로시저를 찾으려면 도구 모음의 검색창을 사용하세요. 검색을 실행하면 입력한 단어가 이름 또는 설명에 포함된 프로시저가 조회됩니다. 검색은 대소문자를 구분하지 않습니다.
프로시저 추가
프로시저를 추가하려면,
-
프로시저 목록 우측 상단의 추가 버튼을 클릭하세요.
-
프로시저 추가 화면에서 필요한 항목을 입력한 후 확인 버튼을 클릭하세요.
-
이름: 프로시저의 고유 이름을 입력하세요. 문자, 숫자, 밑줄(_)만 사용할 수 있습니다. 예:
sniper_ngfw_by_level -
설명: 프로시저의 세부 설명을 입력하세요(최대 2,000자). 예:
SNIPER_NGFW 로그에서 level 값에 따라 결과를 조회합니다. -
쿼리: 프로시저가 실행할 로그프레소 쿼리문을 입력하세요.
table *:SNIPER_NGFW | search level == $("level") -
매개변수: 쿼리에서 사용할 매개변수를 설정하세요.
-
전체 공유: 모든 사용자 간 공유 체크박스를 선택하면 모든 사용자가 이 프로시저를 조회하고 실행할 수 있습니다.
-
계정 공유: 전체 공유를 선택하지 않은 경우, 계정 공유 검색 입력에서 프로시저를 조회하고 실행할 사용자를 직접 검색해 추가할 수 있습니다.
-
그룹 공유: 그룹 공유 검색 입력에서 프로시저를 조회하고 실행할 그룹을 직접 검색해 추가할 수 있습니다.
-
위 예시에서는 매개변수 자동 추가를 클릭하면 level 키가 자동으로 등록됩니다. 자동 등록 뒤에는 다음과 같이 정리해 두면 실행 화면에서 의미를 바로 이해하기 쉽습니다.
- 유형: 문자열
- 키:
level - 이름:
레벨 - 설명:
조회할 SNIPER_NGFW level 값
프로시저를 다른 개체(예: 예약된 쿼리, 대시보드 위젯 등)에서 사용할 경우, 설명란에 해당 연관 개체 정보를 기입해 두면 관리에 도움이 됩니다.
클러스터 관리자 또는 관리자 계정은 공유 설정과 관계없이 모든 프로시저를 추가, 수정, 삭제할 수 있습니다.
프로시저 쿼리
프로시저에서 정의하는 쿼리에는 $() 참조 함수를 사용하여, 프로시저 호출 시 전달되는 쿼리 매개변수를 참조할 수 있습니다. 아래는 sniper_ngfw_by_level 프로시저의 예입니다:
# 이 쿼리문을 사용하는 프로시저의 이름을 sniper_ngfw_by_level이라고 가정합니다.
table *:SNIPER_NGFW | search level == $("level")
level은SNIPER_NGFW로그의level필드와 비교할 입력 매개변수입니다.- 예를 들어
Warning값을 전달하면level이Warning인 행만 조회합니다.
프로시저 작성 시 가장 흔한 실수는 $() 함수가 마치 매크로처럼 문자열을 그대로 치환하는 것처럼 이해하고 사용하는 것입니다. 그러나 $() 함수는 표현식을 입력할 수 있는 위치에만 사용할 수 있습니다. 예를 들어, 다음 쿼리는 dbquery 명령어가 SQL 문 전체를 표현식으로 받지 않기 때문에 잘못된 사용입니다:
dbquery USERDB $("sql")
프로시저 실행
프로시저는 다음 두 가지 방법으로 실행할 수 있습니다:
- 쿼리 화면에서 proc 명령어를 사용해 직접 호출
- 분석 > 프로시저 메뉴의 목록에서 실행할 프로시저의 실행 버튼 클릭
쿼리문에서 프로시저 실행
프로시저는 쿼리 실행이 가능한 대부분의 화면에서 사용할 수 있습니다. 예를 들어, 분석 > 쿼리 메뉴에서 다음과 같이 실행할 수 있습니다.
예: sniper_ngfw_by_level 프로시저 호출
proc sniper_ngfw_by_level("Warning")
- 괄호 안의 값은 쿼리 매개변수
level에 전달됩니다. 이 예시에서는 문자열 값을 넘기므로 따옴표를 함께 사용합니다. - 예를 들어
proc sniper_ngfw_by_level("Normal"),proc sniper_ngfw_by_level("Debug")처럼 값만 바꿔 같은 프로시저를 재사용할 수 있습니다. - 매개변수가 없는 프로시저는 "
proc procedure_name()"와 같이 괄호만 입력하세요.
프로시저 목록에서 프로시저 실행
프로시저 목록에서 프로시저를 실행하려면,
-
프로시저 목록에서 실행할 프로시저 행의 ▶ 버튼을 클릭하세요.
-
프로시저 실행 대화상자에서 매개변수 값을 입력하고 실행 버튼을 클릭하세요. 입력 값은 매개변수의 유형과 일치해야 합니다.
위 예시 프로시저라면 다음과 같이 입력할 수 있습니다.
- 유형: 문자열
- 키:
level - 이름:
레벨 - 값:
Warning
-
프로시저가 실행되면 분석 > 쿼리 화면으로 전환되며, 실행 결과가 자동으로 표시됩니다.
이때 쿼리 화면에는 다음과 같은 형태로 프로시저 호출 구문이 적용됩니다.
proc sniper_ngfw_by_level("Warning")
프로시저 수정
프로시저를 수정하려면,
- 프로시저 목록에서 수정할 프로시저 행을 클릭해 상세 화면을 여세요.
- 프로시저 수정 화면에서 필요한 정보를 수정한 후 저장 버튼을 클릭하세요.
- 수정 가능한 속성에 대한 설명은 프로시저 추가 항목을 참고하세요.
프로시저 삭제
프로시저를 삭제하려면,
- 프로시저 목록에서 삭제할 프로시저를 선택하세요.
- 도구 모음에서 삭제 버튼을 클릭하세요.
- 프로시저 삭제 대화상자에서 삭제할 프로시저를 확인한 후 삭제 버튼을 클릭하세요.







