

# NCSA ログファイル形式をクエリする
<a name="querying-iis-logs-ncsa-log-file-format"></a>

IIS は [NCSA ロギング](https://docs.microsoft.com/en-us/windows/win32/http/ncsa-logging)形式も使用します。この形式には、スペースで区切られた固定数の ASCII テキスト形式のフィールドがあります。その構造は、Apache アクセスログに使用される一般的なログ形式に似ています。NCSA 共通ログ形式のフィールドには、クライアント IP アドレス、クライアント ID (通常は使用されません)、ドメイン\$1ユーザー ID、リクエスト受信時のタイムスタンプ、クライアントリクエストのテキスト、サーバステータスコード、およびクライアントに返されたオブジェクトのサイズが含まれます。

以下の例は、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 ログ用のテーブルを作成する
<a name="querying-iis-logs-ncsa-creating-a-table-in-athena"></a>

`CREATE TABLE` ステートメントには、[Apache のウェブサーバーログ](querying-apache-logs.md)の場合と同じような [Grok SerDe](grok-serde.md) および grok パターンを使用できます。Apache ログとは異なり、grok パターンは `domain\user_id` 内のバックスラッシュの存在を考慮するために、`%{DATA:user_id}` ではなく `%{USERNAME:user_id}` を 3 番目のフィールドに使用します。Grok SerDe の使用に関する詳細については、「AWS Glue デベロッパーガイド」の「[Grok カスタム分類子の書き込み](https://docs.aws.amazon.com/glue/latest/dg/custom-classifier.html#custom-classifier-grok)」を参照してください。

**Athena で IIS NCSA ウェブサーバーログ用のテーブルを作成する**

1. [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) で Athena コンソールを開きます。

1. 以下の DDL ステートメントを Athena クエリエディタに貼り付けます。`LOCATION 's3://amzn-s3-demo-bucket/iis-ncsa-logs/'` の値を変更して、Amazon S3 内の IIS NCSA ログをポイントするようにします。

   ```
   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/';
   ```

1. Athena コンソールでクエリを実行して、`iis_ncsa_logs` テーブルを登録します。クエリが完了すると、Athena からログをクエリできるようになります。

## IIS NCSA ログに対する選択クエリの例
<a name="querying-iis-logs-ncsa-example-select-queries"></a>

**Example – 404 エラーのフィルタリング**  
以下のクエリ例は、リクエストの受信時刻、クライアントリクエストのテキスト、およびサーバーステータスコードを `iis_ncsa_logs` テーブルから選択します。`WHERE` 句は、HTTP ステータスコード `404` (ページが見つかりません) をフィルターします。  

```
SELECT request_received_time, client_request, server_status
FROM iis_ncsa_logs
WHERE server_status = '404'
```
以下の画像は、Athena クエリエディタでのクエリの結果を示しています。  

![\[Athena から HTTP 404 エントリについて IIS NCSA ログをクエリします。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/querying-iis-logs-3.png)


**Example – 特定のドメインからの正常に行われたリクエストのフィルタリング**  
以下のクエリ例は、ユーザー ID、リクエスト受信時刻、クライアントリクエストのテキスト、およびサーバーステータスコードを `iis_ncsa_logs` テーブルから選択します。`WHERE` 句は、`AnyCompany` ドメイン内のユーザーから HTTP ステータスコードが `200` (成功) のリクエストをフィルターします。  

```
SELECT user_id, request_received_time, client_request, server_status
FROM iis_ncsa_logs
WHERE server_status = '200' AND user_id LIKE 'AnyCompany%'
```
以下の画像は、Athena クエリエディタでのクエリの結果を示しています。  

![\[Athena から HTTP 200 エントリについて IIS NCSA ログをクエリします。\]](http://docs.aws.amazon.com/ja_jp/athena/latest/ug/images/querying-iis-logs-4.png)
