Object Storage 버킷 접근 로그 활용

Prev Next

VPC 환경에서 이용 가능합니다.

Object Storage 버킷 접근 로그 활용

데이터 쿼리를 사용하여 수집된 Object Storage 버킷 접근 로그 데이터를 분석할 수 있습니다.
이 예시는 Object Storage 버킷 접근 로그 데이터를 다양한 템플릿 쿼리로 분석하고 BI(Business Intelligence) 도구로 시각화하는 과정을 설명합니다.

기능 요약


1. Object Storage 버킷 접근 로그 설정

Object Storage의 버킷 접근 로그에 관한 활성화 및 생성에 대해서 확인할 수 있습니다.

버킷 접근 로그 활성화

  • Object Storage 서비스에서 버킷 접근 로그를 활성화하면, 해당 버킷의 접근 이력을 로그 파일로 저장할 수 있습니다.
  • 이 로그 데이터를 Data Query 서비스에서 분석 대상으로 활용할 수 있습니다.
  • 접근 로그 설정 예시
    항목 설정 값
    버킷 이름 접근 로그를 분석 대상 버킷
    저장 버킷 접근 로그가 저장될 버킷
    로그 파일 Prefix bucket_access_log_
  • 접근 로그 설정 가이드는 Object Storage 사용 가이드를 참조해 주십시오.

접근 로그 생성

클라이언트를 통해 해당 버킷에 접근하여 실제로 접근 로그 데이터가 생성되도록 합니다.

주의
  • 접근 로그 저장 버킷 선택 시 다른 데이터가 포함되지 않은 새로운 버킷 사용을 권장합니다. 로그 외 다른 파일이 버킷 내 혼재되는 경우 테이블 생성 및 조회 쿼리가 기대대로 동작하지 않을 수 있습니다.
  • 접근 로그 파일은 실시간으로 생성되지 않습니다. 접근 로그의 생성 시점 및 주기는 Object Storage 사용 가이드를 참고해 주십시오.

2. 분석 대상 데이터 테이블 생성

데이터 테이블 생성 (데이터에 대한 테이블화)

  • 데이터 카탈로그 서비스의 스캐너 기능을 사용하여 Object Storage에 저장된 데이터를 참조하는 원본 데이터 테이블을 생성합니다.
  • 아래 설정 예시를 참고하여 값을 입력한 후 스캔 시작 버튼을 클릭하여 테이블을 추가합니다.
  • 스캐너 설정 예시
    항목 설정 값
    데이터 유형 Object Storage
    경로 s3a://[접근 로그 설정에서 지정한 저장 버킷]/
    스캔 범위 일부, 10개
    실행 주기 온디멘드
    패턴 사용: 포함, bucket_access_log_*
    파티션 설정 모든 파티셔닝 형태
    수집 옵션 테이블 정의 업데이트
    테이블 병합 True
    테이블 수 제한 1
  • 스캐너 관련 자세한 내용은 Data Catalog 사용 가이드를 참고해 주십시오.

데이터 테이블 생성 확인

스캐너를 통한 테이블 생성에는 수 초~수 분의 시간이 걸릴 수 있습니다. 좌측 테이블 목록에서 검색을 통해 접근 로그 설정에서 지정한 저장 버킷 이름의 테이블이 생성되었는지 확인할 수 있습니다.

3. 템플릿 쿼리를 이용한 접근 로그 데이터 분석

제공된 템플릿 쿼리를 이용하여 접근 로그 분석을 수행합니다. 콘솔 에디터, BI, CLI 등에서 쿼리하거나 JDBC, SDK를 사용하여 사용자 Application 비즈니스 로직과 통합할 수 있습니다.

VIEW 테이블 생성

템플릿 쿼리 사용을 위해 아래 쿼리를 실행하여 VIEW 테이블을 생성합니다. VIEW 테이블을 생성하지 않고 스캔된 데이터 테이블 이름을 템플릿 쿼리에 직접 사용해도 동일한 결과를 확인할 수 있습니다.

CREATE OR REPLACE VIEW 
  "data_catalog"."default"."bucket_access_log"
AS SELECT *
FROM
  "data_catalog"."default"."scanned_table"; -- replace database/table name with yours

제공 템플릿 쿼리

  • 특정 기간 데이터 조회 (Range Query)
SELECT
  date_trunc('second', from_unixtime(CAST(timestamp_start AS BIGINT) / 1000.0) 
    AT TIME ZONE 'Asia/Seoul') AS log_time,
  remote_user,
  request_method,
  request_type,
  status,
  object_name,
  response_length
FROM
  data_catalog.default.bucket_access_log
WHERE
  from_unixtime(CAST(timestamp_start AS BIGINT) / 1000.0) AT TIME ZONE 'Asia/Seoul'
    BETWEEN TIMESTAMP '2025-01-01 00:00:00 Asia/Seoul'
        AND TIMESTAMP '2025-12-31 23:59:59 Asia/Seoul'
ORDER BY
  log_time;
  • 가장 많이 접근한 오브젝트 TOP 10
SELECT
  object_name,
  COUNT(*) AS access_count
FROM
  data_catalog.default.bucket_access_log
WHERE 
  object_name IS NOT NULL
GROUP BY
  object_name
ORDER BY
  access_count DESC
LIMIT 10;
  • 가장 많이 접근한 remote_user(access_key 구분 포함) TOP 10
SELECT
  remote_user,
  COUNT(*) AS request_count
FROM
  data_catalog.default.bucket_access_log
GROUP BY
  remote_user
ORDER BY
  request_count DESC
LIMIT 10;
  • HTTP 상태 코드별 요청 분포
SELECT
  status,
  COUNT(*) AS request_count
FROM
  data_catalog.default.bucket_access_log
GROUP BY
  status
ORDER BY
  request_count DESC;
  • 10분 단위 메서드별 요청 수
SELECT
  from_unixtime(floor(CAST(timestamp_start AS DOUBLE) / 1000.0 / 600.0) * 600.0)
    AT TIME ZONE 'Asia/Seoul' AS time_slot,
  request_method,
  COUNT(*) AS request_count
FROM
  data_catalog.default.bucket_access_log
GROUP BY
  1, request_method
ORDER BY
  1;
  • 시간대별 최대 트래픽 (Peak Time)
SELECT
  date_trunc('hour', from_unixtime(CAST(timestamp_start AS BIGINT) / 1000.0) 
    AT TIME ZONE 'Asia/Seoul') AS hour_slot,
  COUNT(*) AS access_count
FROM
  data_catalog.default.bucket_access_log
GROUP BY
  date_trunc('hour', from_unixtime(CAST(timestamp_start AS BIGINT) / 1000.0) 
    AT TIME ZONE 'Asia/Seoul')
ORDER BY
  access_count DESC
LIMIT 5;

BI 활용 예시

생성한 로그 데이터 테이블과 템플릿 쿼리를 기반으로 BI 도구(Superset 등)에서 시각화할 수 있습니다. 외부 BI 연계 방법은 Data Query BI 연계 가이드를 참해 주십시오.

  • 예시: 접근량 트렌드 차트, 시간대별 트래픽 분석, 상위 요청 오브젝트 대시보드 등

dataquery-example-obs-accesslog-bi.png