Athena의 CloudFront 로그 분석

3034 단어 AthenaAWS
streampack의 Tana입니다.

개요



이번은 Athena에 의한 로그 해석입니다.
동영상을 다루면 CDN(예: CloudFront)을 통해 전송되므로 CloudFront 로그에서 재생 상태를 확인하는 경우가 많습니다.
로컬에 s3 로부터 아카이브 된 로그를 다운로드해 grep, sort, uniq 해 하는 것도 편합니다만, 보기 어렵게 해석하기 어려운 때가 있습니다.
이 때 AWS Athena를 사용하면 SQL 쿼리에서 조건을 좁히거나 정렬할 수 있으므로 편리합니다.

S3에 CloudFront 로그 넣기





Athena에서 테이블 만들기



이번에는 이미 준비한 아래 쿼리에서 테이블을 만듭니다.
  • 테이블 이름: app_log
  • s3 bucket & path: s3://xxxxxx-sandbox/cf-logs/app

  • htps : // 아 p의 r ぇ아 st-1. 안녕하세요. 아 ws. 아마존. 코 m / 아테나 / 칭찬? Furr & Region = A p-r tea st-1 # 쿠 ry
    다음 쿼리를 Query Editor에서 설정하고 "Run query"를 실행합니다.
    CREATE EXTERNAL TABLE `app_log`(
      `request_date` string, 
      `request_time` string, 
      `x_edge_location` string, 
      `sc_bytes` int, 
      `client_ip` string, 
      `cs_method` string, 
      `cs_host` string, 
      `cs_uri_stem` string, 
      `sc_status` string, 
      `cs_referer` string, 
      `user_agent` string, 
      `uri_query` string, 
      `cookie` string, 
      `x_edge_result_type` string, 
      `x_edge_request_id` string, 
      `x_host_header` string, 
      `cs_protocol` string, 
      `cs_bytes` int, 
      `time_taken` decimal(8,3), 
      `x_forwarded_for` string, 
      `ssl_protocol` string, 
      `ssl_cipher` string, 
      `x_edge_response_result_type` string, 
      `cs_protocol_version` string)
    ROW FORMAT SERDE 
      'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
    WITH SERDEPROPERTIES (
        'serialization.format' = '\t',
        'input.regex' = '\t'
    )
    LOCATION
      's3://xxxxxx-sandbox/cf-logs/app'
    TBLPROPERTIES (
      'has_encrypted_data'='false')
    

    쿼리를 던지다



    간단히 얻으려면 다음 SQL을 실행하십시오.
    SELECT * FROM app_log;
    

    필터와 순서를 변경하려면 SQL과 유사한 쿼리를 실행하면 됩니다.
    WHERE request_time >= '17:00:00' AND request_time < '18:00:00'
    AND time_taken > 1          # 1秒以上のレスポンスでかかったもの
    AND sc_status = '200'       # 200 のもの
    ORDER BY request_time ASC   # 処理時間順に表示
    LIMIT 10                    # 10件のみ
    





    AWS-CLI에서도 생성하거나 검색할 수 있으므로 운영상 편리합니다. (아래는 취득만)

    $aws athena get-query-results --query-execution-id xxxxxxxxxx --output table



    실전에서 사용하려면 파티션 설계가 필요합니다. 그렇지 않으면 전체 스캔이 되므로 비용 증가나 시간이 더 걸립니다. Lmabda 등으로 출력되는 로그에서 s3의 경로를 year=YYYY/month=mm/day=dd/등의 날짜별로 분할하도록 하고 대상 날짜의 것만 스캔하는 장치가 필요할 것 같습니다. (아직 할 수 없지만..)

    좋은 웹페이지 즐겨찾기