위젯 실습용 데이터

실습용 테이블 만들기

위젯을 이해하는 가장 빠른 방법은 직접 만들어보는 것입니다. 위젯 실습에 사용하고자 GitHub 로그프레소 저장소에서 wp-nginx.log 파일을 가져와 로그프레소 플랫폼에 web_example 테이블을 생성해서 사용합니다. 이 데이터는 2022년 4월 6일 오후 7시 35분부터 4월 7일 오전 0시 9분 사이에 워드프레스 서버에서 발생한 로그를 가져와 가공한 것입니다.

Tip
사용 중인 대시보드 프리셋이나 탭 패널을 변경하지 않도록 예제 실습용 프리셋이나 탭 패널을 따로 만들어서 위젯 예제를 따라해보시기 바랍니다.
  1. 쿼리문을 실행하는데 필요한 파서가 있는지 확인합니다.

  2. 다음 쿼리문을 실행해 예제에 필요한 데이터를 가져옵니다.

    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 create=t 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 create=t 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는 모두 쿼리 매개변수로 사용할 수 있습니다. 쿼리 매개변수의 사용은 컨트롤 위젯에서 다룹니다.