NCSA 로그 파일 형식 쿼리
IIS는 NCSA 로깅
다음 예제는 IIS에서 설명한 것과 같은 NCSA 일반 로그 형식의 데이터를 보여 줍니다.
198.51.100.7 - ExampleCorp\Li [10/Oct/2019:13:55:36 -0700] "GET /logo.gif HTTP/1.0" 200 232 198.51.100.14 - AnyCompany\Jorge [24/Nov/2019:10:49:52 -0700] "GET /index.html HTTP/1.1" 200 2165 198.51.100.22 - ExampleCorp\Mateo [27/Dec/2019:11:38:12 -0700] "GET /about.html HTTP/1.1" 200 1287 198.51.100.9 - AnyCompany\Nikki [11/Jan/2020:11:40:11 -0700] "GET /image.png HTTP/1.1" 404 230 198.51.100.2 - ExampleCorp\Ana [15/Feb/2019:10:12:22 -0700] "GET /favicon.ico HTTP/1.1" 404 30 198.51.100.13 - AnyCompany\Saanvi [14/Mar/2019:11:40:33 -0700] "GET /intro.html HTTP/1.1" 200 1608 198.51.100.11 - ExampleCorp\Xiulan [22/Apr/2019:10:51:34 -0700] "GET /group/index.html HTTP/1.1" 200 1344
Athena에서 IIS NCSA 로그용 테이블 생성
CREATE TABLE
문에는 Apache 웹 서버 로그의 경우와 비슷한 Grok SerDe 및 grok 패턴을 사용할 수 있습니다. Apache 로그와 달리, grok 패턴은 domain\user_id
에서 백슬래시의 존재를 설명하기 위해 세 번째 필드에 대해 %{USERNAME:user_id}
대신 %{DATA:user_id}
를 사용합니다. Grok SerDe를 사용하는 방법에 대한 자세한 내용은 AWS Glue 개발자 안내서의 Grok 사용자 지정 분류자 작성을 참조하세요.
Athena에서 IIS NCSA 웹 서버 로그에 대한 테이블 생성
https://console.aws.amazon.com/athena/
에서 Athena 콘솔을 엽니다. -
다음의 DDL 문을 Athena 쿼리 편집기에 붙여 넣습니다. Amazon S3의 IIS NCSA 로그를 가리키도록
LOCATION 's3://amzn-s3-demo-bucket/
의 값을 수정합니다.iis-ncsa-logs
/'CREATE EXTERNAL TABLE iis_ncsa_logs( client_ip string, client_id string, user_id string, request_received_time string, client_request string, server_status string, returned_obj_size string ) ROW FORMAT SERDE 'com.amazonaws.glue.serde.GrokSerDe' WITH SERDEPROPERTIES ( 'input.format'='^%{IPV4:client_ip} %{DATA:client_id} %{DATA:user_id} %{GREEDYDATA:request_received_time} %{QUOTEDSTRING:client_request} %{DATA:server_status} %{DATA: returned_obj_size}$' ) STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://amzn-s3-demo-bucket/
iis-ncsa-logs
/'; -
Athena 콘솔에서
iis_ncsa_logs
테이블을 등록하는 쿼리를 실행합니다. 이 쿼리가 완료되면 로그를 Athena에서 쿼리할 수 있습니다.
IIS NCSA 로그에 대한 선택 쿼리 예제
예 - 404 오류에 대한 필터링
다음 쿼리 예제는 iis_ncsa_logs
테이블에서 요청 수신 시간, 클라이언트 요청의 텍스트 및 서버 상태 코드를 선택합니다. WHERE
절은 HTTP 상태 코드 404
(페이지를 찾을 수 없음)를 필터링합니다.
SELECT request_received_time, client_request, server_status FROM iis_ncsa_logs WHERE server_status = '404'
다음 이미지는 Athena 쿼리 편집기의 쿼리 결과를 보여줍니다.
예 - 특정 도메인의 성공적인 요청에 대한 필터링
다음 쿼리 예제는 iis_ncsa_logs
테이블에서 사용자 ID, 요청 수신 시간, 클라이언트 요청의 텍스트 및 서버 상태 코드를 선택합니다. WHERE
절은 HTTP 상태 코드 200
(성공)을 가진 AnyCompany
도메인의 사용자 요청을 필터링합니다.
SELECT user_id, request_received_time, client_request, server_status FROM iis_ncsa_logs WHERE server_status = '200' AND user_id LIKE 'AnyCompany%'
다음 이미지는 Athena 쿼리 편집기의 쿼리 결과를 보여줍니다.