위젯 실습용 데이터
실습용 테이블 만들기
위젯을 이해하는 가장 빠른 방법은 직접 만들어보는 것입니다. 위젯 실습에 사용하고자 GitHub 로그프레소 저장소에서 wp-nginx.log 파일을 가져와 로그프레소 플랫폼에 web_example 테이블을 생성해서 사용합니다. 이 데이터는 2022년 4월 6일 오후 7시 35분부터 4월 7일 오전 0시 9분 사이에 워드프레스 서버에서 발생한 로그를 가져와 가공한 것입니다.
Tip
사용 중인 대시보드 프리셋이나 탭 패널을 변경하지 않도록 예제 실습용 프리셋이나 탭 패널을 따로 만들어서 위젯 예제를 따라해보시기 바랍니다.
-
쿼리문을 실행하는데 필요한 파서가 있는지 확인합니다.
- 파서를 적용해 데이터 추출하기를 참고해서
apache_log파서가 있는지 확인하고, 없으면 만드십시오. - 로그프레소 스토어에서 아파치 웹 서버 앱을 받아서 설치하고 앱이 제공하는 파서를 이용해도 됩니다.
- 파서를 적용해 데이터 추출하기를 참고해서
-
다음 쿼리문을 실행해 예제에 필요한 데이터를 가져옵니다.
Note어느 쿼리문이든, 단 한 번만 실행하십시오. 여러번 실행하면 wedget_example 테이블에 실행한 횟수만큼 중복된 데이터가 생깁니다. 여러 번 실행했다면 테이블을 삭제하고 다시 만드십시오.
# 아파치 웹 서버 앱이 설치되어 있지 않을 때 | wget url="https://raw.githubusercontent.com/logpresso/dataset/main/wp-nginx.log" | eval line = subarray(split(line, "\n"), 0) | explode line | parse apache_log | split field=request sep=" " overlay=t method, uri, version | split field=uri field=uri sep="?" overlay=t path, query | rename date as _time, remote_host as src_ip, resp_bytes_clf as sc_bytes | lookup geoip src_ip output country, asn | fields _time, src_ip, country, asn, status, method, path, query, version, sc_bytes, user_agent, referer | import widget_example# 아파치 웹 서버 앱이 설치되어 있을 때 | wget url="https://raw.githubusercontent.com/logpresso/dataset/main/wp-nginx.log" | eval line = subarray(split(line, "\n"), 0) | explode line | parse apache_httpd_combined_norm | import widget_example
데이터소스 만들기
데이터소스는 데이터 위젯을 구성할 때 호출해 사용하는 데이터 쿼리문을 의미합니다. 데이터소스는 위젯을 구성하는 단계에서 추가, 수정, 삭제할 수 있습니다. 자세한 내용은 대시보드 만들기에서 데이터소스를 참고하십시오.
데이터 위젯에서 다루는 예제를 실습하려면 다음 쿼리문을 데이터소스 목록에 widget_example으로 등록하여 사용하시기 바랍니다.
set from=nvl($("from"), dateadd(now(), "year", -5))
| set to=nvl($("to"), string(now(), "yyyyMMddHHmmss"))
| set site="https://example.com"
| table from=$("from") to=$("to") widget_example
| eval
suspicious = case(
path == "*/../*" or path == "*/./*", "dir_traversal",
path == "/.*", "dotfile_access",
path == "/temp*" or path == "/tmp*", "temp_file_access",
path == "/bbs/login*", "login_access",
path == "\\*", "path_anomaly",
path == "\*", "wildcard",
method == "POST", "post",
method == "PRI", "pri",
method == "CONNECT", "connect",
method == "GET" or method == "OPTIONS" or method == "HEAD", "normal",
"method_anomaly"
),
url = if(isnull(query), concat(site, path), concat(site, path, "?", query))
| search
case(
isnull($("type")), true,
typeof($("type"))=="string", suspicious==($("type")),
typeof($("type"))=="object[]", -1 != indexof(string($("type")), suspicious),
false
)
and if(isnull($("method")),true,contains(method,$("method")))
widget_example으로 등록한 데이터소스에서 from, to, type, method는 모두 쿼리 매개변수로 사용할 수 있습니다. 쿼리 매개변수의 사용은 컨트롤 위젯에서 다룹니다.