해당 문서는 로그프레소를 처음 접하는 엔지니어 또는 담당자분이 로그프레소 쿼리를 쉽게 접근하기 위해 만든 기초 쿼리 문서입니다.
추가 쿼리 학습은 로그프레소 공식 문서나 인프런 강의 수강 부탁드립니다.
사전 준비
-
테스트 테이블 생성
[SNR UI]→[시스템]→[테이블]에서 logpresso_query_test 테이블을 생성합니다.
-
테스트 데이터 적재
[SNR UI]→[분석]→[쿼리]메뉴로 이동하여 아래 명령어를 실행합니다.
json "{}" | eval src_ip=ip("192.168.0.1") | eval src_port=50001 | eval dst_ip=ip("192.168.0.100") | eval dst_port=443 | eval action="permit" | union [json "{}" | eval src_ip=ip("192.168.0.2") | eval src_port=50002 | eval dst_ip=ip("192.168.0.100") | eval dst_port=443 | eval action="deny"] | union [json "{}" | eval src_ip=ip("192.168.0.3") | eval src_port=50003 | eval dst_ip=ip("192.168.0.100") | eval dst_port=443 | eval action="deny"] | union [json "{}" | eval src_ip=ip("192.168.0.4") | eval src_port=50004 | eval dst_ip=ip("192.168.0.100") | eval dst_port=80 | eval action="permit"] | union [json "{}" | eval src_ip=ip("192.168.0.5") | eval src_port=50005 | eval dst_ip=ip("192.168.0.101") | eval dst_port=443 | eval action="permit"] | union [json "{}" | eval src_ip=ip("192.168.0.6") | eval src_port=50006 | eval dst_ip=ip("192.168.0.101") | eval dst_port=22 | eval action="deny"] | union [json "{}" | eval src_ip=ip("192.168.0.7") | eval src_port=50007 | eval dst_ip=ip("192.168.0.100") | eval dst_port=443 | eval action="permit"] | union [json "{}" | eval src_ip=ip("192.168.0.8") | eval src_port=50008 | eval dst_ip=ip("192.168.0.102") | eval dst_port=3306 | eval action="deny"] | union [json "{}" | eval src_ip=ip("192.168.0.9") | eval src_port=50009 | eval dst_ip=ip("192.168.0.100") | eval dst_port=80 | eval action="permit"] | union [json "{}" | eval src_ip=ip("192.168.0.10") | eval src_port=50010 | eval dst_ip=ip("192.168.0.101") | eval dst_port=443 | eval action="deny"] | import logpresso_query_test
-
위 쿼리를 실행하면 src_ip, src_port, dst_ip, dst_port, action 필드를 가진 10건의 테스트 데이터가
logpresso_query_test테이블에 적재됩니다. -
이후부터는 적재된 데이터를 활용해 실습을 진행합니다.
table 쿼리 활용
-
table명령은 지정된 테이블에서 로그를 조회하는 가장 기본적인 명령어입니다.
-
기본 사용법
-
주의 사항 :
table명령은 옵션 없이 사용하면 테이블 전체를 풀스캔하기 때문에 시스템에 큰 부하가 발생할 수 있습니다. -
반드시 권장사용법의 예시처럼
limit또는from ~ to옵션을 함께 지정하여 사용해야 합니다.
table logpresso_query_test -
-
권장 사용법
-
조회 건수 제한 (limit)
table limit=1 logpresso_query_test -
기간 지정 (from ~ to)
table from=20260101 to=20260512 logpresso_query_test -
기간+건수 동시 지정
table from=20260101 to=20260512 limit=2 logpresso_query_test
-
search 쿼리 활용
-
search명령은 조건에 맞는 데이터만 필터링할 때 사용합니다. SQL의 WHERE 절과 유사한 역할을 합니다.
-
기본 사용법
-
특정 액션이 "deny"인 데이터만 조회
table logpresso_query_test | search action == "deny" -
단어 일부만 활용하여 데이터 조회
table logpresso_query_test | search action == "*en*" -
특정 출발지 IP만 조회
table logpresso_query_test | search src_ip == ip("192.168.0.1") -
복합 조건(AND/OR)
table logpresso_query_test | search action == "deny" and dst_port == 443table logpresso_query_test | search action == "permit" or action == "deny"
-
eval 쿼리 활용
-
eval명령은 새로운 필드를 만들거나, 기존 필드의 값을 변환할 때 사용합니다.
-
새 필드 생성
-
action 값에 따라 한글 상태 필드 추가
table logpresso_query_test | eval status = if(action == "permit", "허용", "차단")
-
-
필드 가공
-
src_ip와 src_port를 합쳐서 하나의 필드로 만들기
table logpresso_query_test | eval src = concat(src_ip,":",src_port)
-
-
값 변환
-
src_ip의 값을 100.100.100.100으로 변경
table logpresso_query_test | eval src_ip=ip("100.100.100.100")
-
stats 쿼리 활용
-
stats명령은 데이터를 그룹화하여 집계(count, sum, avg 등)할 때 사용합니다.
-
전체 건수 조회
table logpresso_query_test | stats count -
그룹별 집계
table logpresso_query_test | stats count by action -
고유값 집계 (dc=distinct count)
table logpresso_query_test | stats dc(action) as unique_action -
여러 필드로 그룹화
table logpresso_query_test | stats count by action, dst_port
sort 쿼리 활용
-
sort명령은 결과를 특정 필드 기준으로 정렬할 때 사용합니다.
-
오름차순 정렬
table logpresso_query_test | sort src_port -
내림차순 정렬
- 필드명 앞에
-를 붙입니다.
table logpresso_query_test | sort -src_port - 필드명 앞에
-
다중 필드 정렬
- action 오름차순, 그 안에서 src_port 내림차순
table logpresso_query_test | sort action, -src_port
order 쿼리 활용
-
order명령은 결과의 필드 순서(컬럼 순서) 를 재배열할 때 사용합니다. (sort는 행 정렬,order는 열 순서)
기본 사용법
-
기본 사용법
- 원하는 순서로 컬럼 재배치
table logpresso_query_test | order action, src_ip, dst_ip, src_port, dst_port