

# CloudWatch ツールと Internet Monitor のクエリインターフェイスによるデータの調査
<a name="CloudWatch-IM-view-cw-tools"></a>

Internet Monitor ダッシュボードを使用してアプリケーションのパフォーマンスと可用性を可視化することに加えて、Internet Monitor が生成するデータをより詳しく調べる方法が、いくつか用意されています。これらの方法には、CloudWatch のログファイルに保存されている Internet Monitor のデータで CloudWatch ツールを使用することや、Internet Monitor のクエリインターフェイスを使用することが含まれます。ここで使用できるツールとしては、CloudWatch Logs Insights、CloudWatch Metrics、CloudWatch Contributor Insights、Amazon Athena などがあります。必要に応じて、ダッシュボードだけでなくこれらのツールの一部またはすべてを使用し、Internet Monitor のデータを調べることができます。

Internet Monitor はアプリケーションと各 AWS リージョン へのトラフィックに関する CloudWatch メトリクスを集計し、また、総合的なトラフィックへの影響、可用性、往復時間などのデータも集計します。このデータは CloudWatch Logs に公開され、Internet Monitor のクエリインターフェイスでも使用できます。調査可能な地理的粒度や、その他の側面についての詳細は、その情報によって異なります。

Internet Monitor は、5 分間隔でモニターのデータを公開し、さまざまな方法でデータを利用できるようにします。Internet Monitor のデータにアクセスするシナリオと、そこで収集されるデータの特徴を次の表に示します。


****  

| 機能 | CloudWatch Logs | S3 へのエクスポート | クエリインターフェイス | CloudWatch ダッシュボード | 
| --- | --- | --- | --- | --- | 
| デフォルトで有効 | はい | なし | はい | はい | 
| データ収集の対象となる都市ネットワークの数 | 上位 500 件 (下記の注記を参照) | すべて | すべて | すべて | 
| データ保持 | ユーザー制御 | ユーザー制御 | 30 日間 | 30 日間 | 
| データ収集の地理的粒度 | すべて (都市ネットワーク、都市部とネットワーク、行政区画とネットワーク、国とネットワーク) | 都市ネットワーク | すべて (都市ネットワーク、都市部とネットワーク、行政区画とネットワーク、国とネットワーク) | すべて (都市ネットワーク、都市部とネットワーク、行政区画とネットワーク、国とネットワーク) | 
| データのクエリとフィルタリングを行う方法 | [CloudWatch Logs Insights を使用して Internet Monitor の測定値を調べる](CloudWatch-IM-view-cw-tools-logs-insights.md) | [Amazon Athena を使用して、Amazon S3 ログファイルのインターネット測定値をクエリする](CloudWatch-IM-view-cw-tools.S3_athena.md) | [Internet Monitor クエリインターフェイスを使用する](CloudWatch-IM-view-cw-tools-cwim-query.md) | [Internet Monitor ダッシュボードを使用したモニタリングと最適化](CloudWatch-IM-monitor-and-optimize.md) | 

注:上位 500 件の測定値は都市ネットワークで取得されます。上位 250 件は都市部とネットワーク、上位 100 件は行政区画とネットワーク、上位 50 件は国とネットワークで取得されます。

この章では、CloudWatch ツールまたは Internet Monitor クエリインターフェイスを使用してデータをクエリし調査する方法を、それぞれの方法の例とともに説明します。

**Topics**
+ [CloudWatch Logs Insights](CloudWatch-IM-view-cw-tools-logs-insights.md)
+ [CloudWatch Contributor Insights](CloudWatch-IM-view-cw-tools-contributor-insights.md)
+ [CloudWatch メトリクス](CloudWatch-IM-view-cw-tools-metrics-dashboard.md)
+ [S3 ログ付きAthena](CloudWatch-IM-view-cw-tools.S3_athena.md)
+ [Internet Monitor クエリインターフェイス](CloudWatch-IM-view-cw-tools-cwim-query.md)

# CloudWatch Logs Insights を使用して Internet Monitor の測定値を調べる
<a name="CloudWatch-IM-view-cw-tools-logs-insights"></a>

CloudWatch Logs Insights クエリを使用して、特定の都市または地域 (クライアントの場所）、クライアント ASN (ISP)、および AWS ソースの場所のログのサブセットをフィルタリングできます。Internet Monitor は、CloudWatch Logs Insights を使用して調べることができる CloudWatch Logs の可用性と往復時間の詳細な測定値を発行します。

Internet Monitor のクライアントのロケーションの精度の詳細については、「[Internet Monitor の位置情報と精度](CloudWatch-IM-inside-internet-monitor.md#IMGeolocationSourceAccuracy)」を参照してください。

このセクションの例は、CloudWatch Logs Insights クエリを作成して、独自のアプリケーショントラフィックの測定値やメトリクスについて詳細を知るのに役立ちます。CloudWatch Logs Insights でこれらの例を使用する場合は、*monitorName* を独自のモニタ名に置き換えます。

**トラフィック最適化の提案を表示する**

Internet Monitor の **[トラフィックインサイト]** タブでは、ロケーション別にフィルタリングされたトラフィック最適化の提案を表示できます。そのタブ内に存在する **[トラフィック最適化の提案]** セクションに表示されている情報と同じ情報を、ロケーションの詳細度フィルターなしで表示するには、次の CloudWatch Logs Insights クエリを使用できます。

1. AWS マネジメントコンソール の中で、CloudWatch Logs Insights に移動します。

1. **[Log Group]** (ロググループ) で、`/aws/internet-monitor/monitorName/byCity` および `/aws/internet-monitor/monitorName/byCountry` を選択した後に、時間範囲を指定します。

1. 以下のクエリを追加した後に、それらを実行します。

```
fields @timestamp, 
clientLocation.city as @city, clientLocation.subdivision as @subdivision, clientLocation.country as @country,
`trafficInsights.timeToFirstByte.currentExperience.serviceName` as @serviceNameField,
concat(@serviceNameField, ` (`, `serviceLocation`, `)`) as @currentExperienceField,
concat(`trafficInsights.timeToFirstByte.ec2.serviceName`, ` (`, `trafficInsights.timeToFirstByte.ec2.serviceLocation`, `)`) as @ec2Field,
`trafficInsights.timeToFirstByte.cloudfront.serviceName` as @cloudfrontField,
concat(`clientLocation.networkName`, ` (AS`, `clientLocation.asn`, `)`) as @networkName
| filter ispresent(`trafficInsights.timeToFirstByte.currentExperience.value`)
| stats avg(`trafficInsights.timeToFirstByte.currentExperience.value`) as @averageTTFB,
avg(`trafficInsights.timeToFirstByte.ec2.value`) as @ec2TTFB,
avg(`trafficInsights.timeToFirstByte.cloudfront.value`) as @cloudfrontTTFB,
sum(`bytesIn` + `bytesOut`) as @totalBytes,
latest(@ec2Field) as @ec2,
latest(@currentExperienceField) as @currentExperience,
latest(@cloudfrontField) as @cloudfront,
count(*) by @networkName, @city, @subdivision, @country
| display @city, @subdivision, @country, @networkName, @totalBytes, @currentExperience, @averageTTFB, @ec2, @ec2TTFB, @cloudfront, @cloudfrontTTFB
| sort @totalBytes desc
```

**インターネットの可用性と RTT (p50、p90、p95) を表示する**

トラフィックでのインターネットの可用性と往復時間 (p50、p90、p95) を表示するには、以下の CloudWatch Logs Insights クエリを使用できます。

**エンドユーザーの地域: **米国イリノイ州シカゴ

**エンドユーザーネットワーク (ASN): ** AS7018 

**AWS のサービスの拠点: **米国東部 (バージニア北部) リージョン

ログを表示するには、次の操作を行います。

1. AWS マネジメントコンソール の中で、CloudWatch Logs Insights に移動します。

1. **[Log Group]** (ロググループ) で、`/aws/internet-monitor/monitorName/byCity` および `/aws/internet-monitor/monitorName/byCountry` を選択した後に、時間範囲を指定します。

1. 以下のクエリを追加した後に、それらを実行します。

このクエリは、選択した期間において、イリノイ州シカゴの AS7018 から米国東部 (バージニア北部) リージョンに接続していたユーザーの、すべてのパフォーマンスデータを返します。

```
fields @timestamp, 
internetHealth.availability.experienceScore as availabilityExperienceScore, 
internetHealth.availability.percentageOfTotalTrafficImpacted as percentageOfTotalTrafficImpacted,
internetHealth.performance.experienceScore as performanceExperienceScore,
internetHealth.performance.roundTripTime.p50 as roundTripTimep50, 
internetHealth.performance.roundTripTime.p90 as roundTripTimep90, 
internetHealth.performance.roundTripTime.p95 as roundTripTimep95
 | filter clientLocation.country == `United States` 
 and clientLocation.city == `Chicago` 
 and serviceLocation == `us-east-1` 
 and clientLocation.asn == 7018
```

詳細については、「[CloudWatch Logs Insights を使用したログデータの分析](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html)」を参照してください。

# Contributor Insights を使用して上位の場所と ISPs を特定する
<a name="CloudWatch-IM-view-cw-tools-contributor-insights"></a>

CloudWatch Contributor Insights は、AWS アプリケーションで上位のクライアントの場所と ASN (通常は、インターネット サービス プロバイダーまたは ISP) を特定するのに役立ちます。Internet Monitor で役立つルールの使用開始には、以下の Contributor Insights ルール例を使用できます。詳細については、「[CloudWatch で Contributor Insights ルールを作成する](ContributorInsights-CreateRule.md)」を参照してください。

Internet Monitor のクライアントのロケーションの精度の詳細については、「[Internet Monitor の位置情報と精度](CloudWatch-IM-inside-internet-monitor.md#IMGeolocationSourceAccuracy)」を参照してください。

**注記**  
Internet Monitor は 5 分ごとにインターネット測定値を保存するので、Contributor Insights ルールを設定した後は、グラフが表示される間隔を 5 分に調整する必要があります。

**可用性の影響を受ける上位のロケーションと ASN を表示する**

可用性の低下によって影響を受けた上位のクライアントロケーションと ASN を表示するには、構文エディタで次の Contributor Insights ルールを使用します。*monitor-name* は、実際のモニターの名前に置き換えます。

```
{
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    },
    "AggregateOn": "Sum",
    "Contribution": {
        "Filters": [
            {
                "Match": "$.clientLocation.city",
                "IsPresent": true
            }
        ],
        "Keys": [
            "$.clientLocation.city",
            "$.clientLocation.networkName"
        ],
        "ValueOf": "$.awsInternetHealth.availability.percentageOfTotalTrafficImpacted"
    },
    "LogFormat": "JSON",
    "LogGroupNames": [
        "/aws/internet-monitor/monitor-name/byCity"
    ]
}
```

**レイテンシーの影響を受ける上位のクライアントロケーションと ASN を表示する**

往復時間 (レイテンシー) の増加によって影響を受けた上位のクライアントロケーションと ASN を表示するには、構文エディタで次の Contributor Insights ルールを使用します。*monitor-name* は、実際のモニターの名前に置き換えます。

```
{
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    },
    "AggregateOn": "Sum",
    "Contribution": {
        "Filters": [            {
                "Match": "$.clientLocation.city",
                "IsPresent": true
            }
        ],
        "Keys": [
            "$.clientLocation.city",
            "$.clientLocation.networkName"
        ],
        "ValueOf": "$.awsInternetHealth.performance.percentageOfTotalTrafficImpacted"
    },
    "LogFormat": "JSON",
    "LogGroupNames": [
        "/aws/internet-monitor/monitor-name/byCity"
    ]
}
```

**トラフィックの合計パーセンテージによって影響を受けた上位のクライアントロケーションと ASN を表示する**

トラフィックの合計パーセンテージによって影響を受けた上位のクライアントロケーションと ASN を表示するには、構文エディタで次の Contributor Insights ルールを使用します。*monitor-name* は、実際のモニターの名前に置き換えます。

```
{
    "Schema": {
        "Name": "CloudWatchLogRule",
        "Version": 1
    },
    "AggregateOn": "Sum",
    "Contribution": {
        "Filters": [
            {
                "Match": "$.clientLocation.city",
                "IsPresent": true
            }
        ],
        "Keys": [
            "$.clientLocation.city",
            "$.clientLocation.networkName"
        ],
        "ValueOf": "$.percentageOfTotalTraffic"
    },
    "LogFormat": "JSON",
    "LogGroupNames": [
        "/aws/internet-monitor/monitor-name/byCity"
    ]
}
```

# CloudWatch Metrics で Internet Monitor メトリクスを表示するか、アラームを設定する
<a name="CloudWatch-IM-view-cw-tools-metrics-dashboard"></a>

CloudWatch コンソールで CloudWatch アラームや CloudWatch Metrics を使用することで、Internet Monitor のメトリクスのアラームを表示し、設定できます。Internet Monitor は、パフォーマンス、可用性、往復時間、スループット (1 秒あたりのバイト数) に関するメトリクスをアカウントに発行します。モニタですべてのメトリクスを検索するには、CloudWatch メトリクスダッシュボードでカスタム名前空間 `AWS/InternetMonitor` を使用します。

これらのメトリクスは、モニターの都市ネットワークの最大限度として選択する値を決定するのに役立ちます。そのいくつかを使用する例については、「[都市ネットワークの最大値を選択する](IMCityNetworksMaximum.md)」を参照してください。Internet Monitor のアラームの設定の詳細については、「[Internet Monitor でアラームを作成する](CloudWatch-IM-create-alarm.md)」を参照してください。

メトリクスは、モニタ内の VPC、Network Load Balancers、CloudFront ディストリビューション、WorkSpaces ディレクトリへのインターネットトラフィックすべて、およびモニタリング対象の各 AWS リージョン とインターネットエッジロケーションのトラフィックすべてにわたって集計されます。各リージョンはサービスロケーションによって定義され、すべてのロケーションを指定することとも、特定のリージョン (`us-east-1` など) にすることもできます。

注: *都市ネットワーク* とは、クライアントの場所とクライアントが使用する ASN (通常はインターネット サービス プロバイダー または ISP) のペアのことです。

Internet Monitor は以下のメトリクスを提供しています。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/CloudWatch-IM-view-cw-tools-metrics-dashboard.html)

詳細については、「[Amazon CloudWatch のメトリクス](working_with_metrics.md)」を参照してください。

# Amazon Athena を使用して、Amazon S3 ログファイルのインターネット測定値をクエリする
<a name="CloudWatch-IM-view-cw-tools.S3_athena"></a>

Amazon Athena を使用すると、Internet Monitor が Amazon S3 バケットに発行するインターネット測定値をクエリして表示できます。Internet Monitor では、モニタリング対象の都市ネットワーク (クライアントのロケーションと ASN、通常はインターネットサービスプロバイダー (ISP)) のインターネット向けトラフィック用 S3 バケットにアプリケーションのインターネット測定値を発行するオプションが用意されています。S3 に測定値をパブリッシュすることを選択するかどうかにかかわらず、Internet Monitor は、各モニタの (トラフィック量で) 上位 500 の都市ネットワークのインターネット測定値を、5 分ごとに CloudWatch Logs に自動的にパブリッシュします。

この章では、S3 ログファイルにあるインターネット測定値のテーブルを Athena に作成する手順を説明します。また、測定値をさまざまなビューで表示する[クエリの例](#CloudWatch-IM-view-cw-tools.S3_athena.athena-sample-queries)を紹介します。例えば、レイテンシーによる影響度の上位 10 の都市ネットワークをクエリできます。

## Amazon Athena を使用して、Internet Monitor でインターネット測定値用のテーブルを作成する
<a name="CloudWatch-IM-view-cw-tools.S3_athena.athena-queries"></a>

Internet Monitor S3 ログファイルで Athena の使用を開始するには、まずインターネット測定値用のテーブルを作成します。

以下の手順に従い、S3 ログファイルに基づいて Athena にテーブルを作成します。次に、[これらのインターネット測定クエリの例](#CloudWatch-IM-view-cw-tools.S3_athena.athena-sample-queries)など、テーブルで Athena クエリを実行して、測定値に関する情報を取得できます。

**Athena テーブルを作成する**

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

1. Athena クエリエディタでクエリステートメントを入力して、Internet Monitor のインターネット測定値を含むテーブルを生成します。LOCATION パラメータの値を、Internet Monitor のインターネット測定値が保存されている S3 バケットの場所に置き換えます。

   ```
   CREATE EXTERNAL TABLE internet_measurements (
       version INT,
       timestamp INT,
       clientlocation STRING,
       servicelocation STRING,
       percentageoftotaltraffic DOUBLE,
       bytesin INT,
       bytesout INT,
       clientconnectioncount INT,
       internethealth STRING,
       trafficinsights STRING
   )
   PARTITIONED BY (year STRING, month STRING, day STRING)
   ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
   LOCATION
   's3://amzn-s3-demo-bucket/bucket_prefix/AWSLogs/account_id/internetmonitor/AWS_Region/'
   TBLPROPERTIES ('skip.header.line.count' = '1');
   ```

1. ステートメントを入力して、データを読み取るためのパーティションを作成します。例えば、以下のサンプルクエリは、1 つの指定日と 1 つのロケーション用に単一のパーティションを作成します。

   ```
   ALTER TABLE internet_measurements
   ADD PARTITION (year = 'YYYY', month = 'MM', day = 'dd')
   LOCATION
   's3://amzn-s3-demo-bucket/bucket_prefix/AWSLogs/account_id/internetmonitor/AWS_Region/YYYY/MM/DD';
   ```

1. **[Run]** (実行) を選択します。

**インターネット測定値用の Athena ステートメントの例**

以下は、テーブルを生成するステートメントの例です。

```
CREATE EXTERNAL TABLE internet_measurements (
    version INT,
    timestamp INT,
    clientlocation STRING,
    servicelocation STRING,
    percentageoftotaltraffic DOUBLE,
    bytesin INT,
    bytesout INT,
    clientconnectioncount INT,
    internethealth STRING,
    trafficinsights STRING
)
PARTITIONED BY (year STRING, month STRING, day STRING)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://internet-measurements/TestMonitor/AWSLogs/1111222233332/internetmonitor/us-east-2/'
TBLPROPERTIES ('skip.header.line.count' = '1');
```

以下は、データを読み取るためのパーティションを作成するステートメントの例です。

```
ALTER TABLE internet_measurements
ADD PARTITION (year = '2023', month = '04', day = '07')
LOCATION 's3://internet-measurements/TestMonitor/AWSLogs/1111222233332/internetmonitor/us-east-2/2023/04/07/'
```

## Internet Monitor のインターネット測定値に使用する Amazon Athena クエリのサンプル
<a name="CloudWatch-IM-view-cw-tools.S3_athena.athena-sample-queries"></a>

このセクションには、Amazon Athena で使用できるクエリの例があります。これを使用すると、Amazon S3 にパブリッシュされたアプリケーションのインターネット測定値に関する情報を取得できます。

**影響を受けた上位 10 のクライアントロケーションと ASN (トラフィックの合計パーセンテージ順) をクエリする**

この Athena クエリを実行すると、影響を受けた上位 10 の都市ネットワーク (トラフィックの合計パーセンテージ順) が返されます。都市ネットワークとは、クライアントロケーションと ASN (通常はインターネットサービスプロバイダー) のことです。

```
SELECT json_extract_scalar(clientLocation, '$.city') as city,
    json_extract_scalar(clientLocation, '$.networkname') as networkName,
    sum(percentageoftotaltraffic) as percentageoftotaltraffic
FROM internet_measurements
GROUP BY json_extract_scalar(clientLocation, '$.city'),
    json_extract_scalar(clientLocation, '$.networkname')
ORDER BY percentageoftotaltraffic desc
limit 10
```

**影響を受けた上位 10 のクライアントロケーションと ASN (可用性順) をクエリする**

この Athena クエリを実行すると、影響を受けた上位 10 の都市ネットワーク (可用性順) が返されます。都市ネットワークとは、クライアントロケーションと ASN (通常はインターネットサービスプロバイダー) のことです。

```
SELECT json_extract_scalar(clientLocation, '$.city') as city,
    json_extract_scalar(clientLocation, '$.networkname') as networkName,
    sum(
        cast(
            json_extract_scalar(
                internetHealth,
                '$.availability.percentageoftotaltrafficimpacted'
            )
        as double ) 
    ) as percentageOfTotalTrafficImpacted
FROM internet_measurements
GROUP BY json_extract_scalar(clientLocation, '$.city'),
    json_extract_scalar(clientLocation, '$.networkname')
ORDER BY percentageOfTotalTrafficImpacted desc
limit 10
```

**影響を受けた上位 10 のクライアントロケーションと ASN (レイテンシー順) をクエリする**

この Athena クエリを実行すると、影響を受けた上位 10 の都市ネットワーク (レイテンシーの影響度順) が返されます。都市ネットワークとは、クライアントロケーションと ASN (通常はインターネットサービスプロバイダー) のことです。

```
SELECT json_extract_scalar(clientLocation, '$.city') as city,
    json_extract_scalar(clientLocation, '$.networkname') as networkName,
    sum(
        cast(
            json_extract_scalar(
                internetHealth,
                '$.performance.percentageoftotaltrafficimpacted'
            )
        as double ) 
    ) as percentageOfTotalTrafficImpacted
FROM internet_measurements
GROUP BY json_extract_scalar(clientLocation, '$.city'),
    json_extract_scalar(clientLocation, '$.networkname')
ORDER BY percentageOfTotalTrafficImpacted desc
limit 10
```

**クライアントロケーションと ASN のトラフィックのハイライトをクエリする**

この Athena クエリを実行すると、都市ネットワークの可用性スコア、パフォーマンススコア、最初のバイトまでの時間などを含むトラフィックのハイライトが返されます。都市ネットワークとは、クライアントロケーションと ASN (通常はインターネットサービスプロバイダー) のことです。

```
SELECT json_extract_scalar(clientLocation, '$.city') as city,
    json_extract_scalar(clientLocation, '$.subdivision') as subdivision,
    json_extract_scalar(clientLocation, '$.country') as country,
    avg(cast(json_extract_scalar(internetHealth, '$.availability.experiencescore') as double)) as availabilityScore,
    avg(cast(json_extract_scalar(internetHealth, '$.performance.experiencescore') as double)) performanceScore,
    avg(cast(json_extract_scalar(trafficinsights, '$.timetofirstbyte.currentexperience.value') as double)) as averageTTFB,
    sum(bytesIn) as bytesIn,
    sum(bytesOut) as bytesOut,
    sum(bytesIn + bytesOut) as totalBytes
FROM internet_measurements
where json_extract_scalar(clientLocation, '$.city') != 'N/A'
GROUP BY 
json_extract_scalar(clientLocation, '$.city'),
    json_extract_scalar(clientLocation, '$.subdivision'),
    json_extract_scalar(clientLocation, '$.country')
ORDER BY totalBytes desc
limit 100
```

Athena の詳しい使用方法については、「[Amazon Athena ユーザーガイド](https://docs.aws.amazon.com/athena/latest/ug/)」を参照してください。

# Internet Monitor クエリインターフェイスを使用する
<a name="CloudWatch-IM-view-cw-tools-cwim-query"></a>

AWS アプリケーションのインターネットトラフィックをより深く理解するには、Internet Monitor の*クエリインターフェイス*を使用する方法があります。クエリインターフェイスを使用するには、選択したデータフィルタを使用してクエリを作成してから、そのクエリを実行して Internet Monitor データのサブセットを返します。クエリにより返されるデータを調べると、アプリケーションがインターネット上でどのように動作しているのか分かります。

可用性とパフォーマンスのスコア、転送バイト数、往復時間、先頭バイトまでの時間 (TTFB) など、Internet Monitor がモニターでキャプチャする、すべてのメトリクスをクエリして調べることができます。

Internet Monitor はクエリインターフェイスを使用してデータを提供し、Internet Monitor コンソールのダッシュボードでそのデータを調べることができます。**[分析]** ページまたは **[最適化]** ページのダッシュボードにある検索オプションを使用すると、アプリケーションのインターネットデータをクエリおよびフィルタリングできます。

ダッシュボードよりも柔軟にデータを調べたりフィルタリングしたりしたい場合は、AWS Command Line Interface または AWS SDK と組み合わせて Internet Monitor API オペレーションを使うと、自分でクエリインターフェイスを使えます。このセクションでは、アプリケーションのインターネットトラフィックに関する洞察を得るために、クエリインターフェイスで使用可能なクエリの種類と、データのサブセット作成時に指定するフィルターについて説明します。

**Topics**
+ [クエリインターフェースを使用する方法](#CloudWatch-IM-view-cw-tools-cwim-query-use-query)
+ [クエリの例](#CloudWatch-IM-view-cw-tools-cwim-query-example-queries)
+ [クエリ結果を取得する](#CloudWatch-IM-view-cw-tools-cwim-query-get-data)
+ [トラブルシューティング](#CloudWatch-IM-view-cw-tools-cwim-query-troubleshooting)

## クエリインターフェースを使用する方法
<a name="CloudWatch-IM-view-cw-tools-cwim-query-use-query"></a>

クエリインターフェイスで、クエリタイプを選択し、フィルタの値を指定してクエリを作成すると、ログファイルから目的のデータのサブセットが返ってきます。その後、データサブセットをさらに絞り込んだり、並べ替えたり、レポートを作成したりできます。

このクエリプロセスの動作は、次のようになります。

1. クエリを実行すると、Internet Monitor はクエリ固有の `query ID` を返します。このセクションでは、使用可能なクエリタイプと、クエリ内のデータをフィルタリングするオプションについて説明します。この仕組みを理解するには、「[クエリの例](#IMQueryInterfaceExamples)」のセクションもご覧ください。

1. [GetQueryResults](https://docs.aws.amazon.com/internet-monitor/latest/api/API_GetQueryResults.html) API オペレーションでは、クエリ ID とモニター名を指定して、クエリの結果のデータを返します。クエリの種類ごとに、異なるデータフィールドのセットが返されます。詳細については、「[クエリ結果を取得する](#IMGetQueryData)」をご参照ください。

クエリインターフェイスは、次のクエリタイプをサポートします。次に示すように、ログファイルからトラフィックについての情報を、クエリタイプごとに返します。
+ **測定値:** 可用性スコア、パフォーマンススコア、総トラフィック、往復時間を 5 分間隔で表示します。
+ **上位のロケーション:** モニタリング中の上位のロケーションと ASN の組み合わせについて、可用性スコア、パフォーマンススコア、総トラフィック、最初のバイトまでの時間 (TTFB) 情報を、トラフィック量別に表示します。
+ **上位のロケーションの詳細:** Amazon CloudFront の TTFB、現在の設定、最もパフォーマンスの高い Amazon EC2 設定を 1 時間間隔で表示します。
+ **全体的なトラフィックの提案:** モニタリングされる各 AWS ロケーションのすべてのトラフィックについて、30 日間の加重平均を使用して TTFB を提供します。
+ **全体的なトラフィックの提案の詳細:** 30 日間の加重平均を使用して、上位ロケーションごとに、提案された AWS ロケーションの TTFB を提供します。
+ **ルーティングの提案:** IP プレフィックスから DNS リゾルバーの AWS ロケーションまでの予測平均ラウンドトリップタイム (RTT) を提供します。RTT は、1 時間ごとに 1 時間分のデータを基に計算されます。

特定の条件を使用して、データをさらにフィルタリングできます。ルーティング提案を除くほとんどのクエリタイプでは、次の条件の 1 つ以上を指定してフィルタリングできます。
+ **AWS ロケーション:**AWS ロケーションには、CloudFront または `us-east-2` などの AWS リージョンを指定できます。
+ **ASN:** DNS リゾルバー (通常は ISP) のAS 番号 (ASN) (例えば、4225 など) を指定します。
+ **クライアントロケーション:**ロケーションとして都市、地下鉄、行政区画、または国を指定します。
+ **提案された AWS ロケーション:** `us-east-2` などの AWS リージョン、または AWS ローカルゾーンを指定します。このフィルターは、全体的なトラフィック提案の詳細クエリタイプで使用できます。
+ **地域:** 一部のクエリでは、`geo` を指定します。これは `Top locations` のクエリタイプを使用するクエリでは必須ですが、他のクエリタイプでは使用できません。フィルタパラメーターの `geo` を指定するタイミングについては、「[クエリの例](#IMQueryInterfaceExamples)」セクションを参照してください。

ルーティング提案クエリ タイプでは、次の条件を 1 つ以上指定することで、データをさらに絞り込めます。
+ **現在の AWS ロケーション:** `us-east-2` などの AWS リージョンを指定します。
+ **提案された AWS ロケーション:** `us-east-2` などの AWS リージョン、または AWS ローカルゾーンを指定します。
+ **IPv4 プレフィックス:** `192.0.2.0/24` のように、IPv4 プレフィックスを標準形式で指定します。
+ **Monitor ARN:** 特定のモニターの ARN を指定します。
+ **DNS リゾルバー IP:** DNS リゾルバーの IP アドレスを指定します。
+ **DNS リゾルバー ISP:** DNS リゾルバー (通常は ISP) の名前 (例えば、`Cloudflare` など) を指定します。
+ **DNS リゾルバー ASN:** DNS リゾルバーの AS 番号 (ASN) (例えば、4225 など) を指定します。

データのフィルタリングに使用できる演算子は、`EQUALS` と `NOT_EQUALS` です。パラメータのフィルタリングについて詳しくは、[FilterParameter](https://docs.aws.amazon.com/internet-monitor/latest/api/API_FilterParameter.html) API のオペレーションを参照してください。

クエリインターフェイスのオペレーションの詳細については、「Internet Monitor API リファレンスガイド」にある次の API オペレーションを参照してください。
+ クエリを作成して実行するには、[StartQuery](https://docs.aws.amazon.com/internet-monitor/latest/api/API_StartQuery.html) API オペレーションを参照してください。
+ クエリを停止するには、[StopQuery](https://docs.aws.amazon.com/internet-monitor/latest/api/API_StopQuery.html) API オペレーションを参照してください。
+ 作成したクエリを使用してデータを返すには、[GetQueryResults](https://docs.aws.amazon.com/internet-monitor/latest/api/API_GetQueryResults.html) API オペレーションを参照してください。
+ クエリのステータスを取得するには、[GetQueryStatus](https://docs.aws.amazon.com/internet-monitor/latest/api/API_GetQueryStatus.html) API オペレーションを参照してください。

## クエリの例
<a name="CloudWatch-IM-view-cw-tools-cwim-query-example-queries"></a>

モニターのログファイルから、フィルタリングされたデータセットを取得するクエリを作成するには、[StartQuery](https://docs.aws.amazon.com/internet-monitor/latest/api/API_StartQuery.html) API オペレーションを使用します。クエリについて、クエリタイプとフィルタパラメータを指定します。次に、Internet Monitor クエリインターフェイス API オペレーションを使用してクエリ結果を取得すると、処理するデータのサブセットが取得されます。

クエリタイプとフィルタパラメータがどのように動作するのか、いくつかの例を挙げて説明します。

**例 1**

ある都市を除き、特定の国のモニターから、ログファイルのデータをすべて取得したいとしましょう。次の例は、このシナリオの `StartQuery` オペレーションで作成できる、クエリのフィルターパラメーターを示しています。

```
{
   MonitorName: "TestMonitor"
   StartTime: "2023-07-12T20:00:00Z"
   EndTime: "2023-07-12T21:00:00Z"
   QueryType: "MEASUREMENTS"
   FilterParameters: [
      {
       Field: "country",
       Operator: "EQUALS",
       Values: ["Germany"]
      },
      {
       Field: "city",
       Operator: "NOT_EQUALS",
       Values: ["Berlin"]
      },
    ]
}
```

**例 2**

別の例として、大都市圏ごとに上位のロケーションを確認したいとしましょう。このシナリオでは、次の例で示すクエリを使用できます。

```
{
   MonitorName: "TestMonitor"
   StartTime: "2023-07-12T20:00:00Z"
   EndTime: "2023-07-12T21:00:00Z"
   QueryType: "TOP_LOCATIONS"
   FilterParameters: [
      {
       Field: "geo",
       Operator: "EQUALS",
       Values: ["metro"]
      },
    ]
}
```

**例 3**

例えば、ロサンゼルスの大都市圏で最もよく利用されている、都市とネットワークの組み合わせを確認するとします。そのためには、`geo=city` を指定してから、`metro` をロサンゼルスに設定します。これで、全体の大都市圏とネットワークではなく、ロサンゼルス大都市圏における上位の都市ネットワークを、クエリが返すようになりました。

次のクエリの例が使用できます。

```
{
   MonitorName: "TestMonitor"
   StartTime: "2023-07-12T20:00:00Z"
   EndTime: "2023-07-12T21:00:00Z"
   QueryType: "TOP_LOCATIONS"
   FilterParameters: [
      {
       Field: "geo",
       Operator: "EQUALS",
       Values: ["city"]
      },
      {
       Field: "metro",
       Operator: "EQUALS",
       Values: ["Los Angeles"]
      }
    ]
}
```

**例 4**

次に、特定の行政区画 (米国の州など) の TTFB データを取得するとします。

このシナリオのクエリは、次の例のようになります。

```
{
   MonitorName: "TestMonitor"
   StartTime: "2023-07-12T20:00:00Z"
   EndTime: "2023-07-12T21:00:00Z"
   QueryType: "TOP_LOCATION_DETAILS"
   FilterParameters: [
      {
       Field: "subdivision",
       Operator: "EQUALS",
       Values: ["California"]
      },
    ]
}
```

**例 5**

次に、アプリケーションにクライアントトラフィックがあるすべてのロケーションの TTFB データを取得するとします。

このシナリオのクエリは、次の例のようになります。

```
{
   MonitorName: "TestMonitor"
   StartTime: "2023-07-12T20:00:00Z"
   EndTime: "2023-07-12T21:00:00Z"
   QueryType: "OVERALL_TRAFFIC_SUGGESTIONS"
   FilterParameters: []
}

Results:
[us-east-1, 40, us-west-2, 30],
[us-east-1, 40, us-west-1, 35],
[us-east-1, 40, us-east-1, 44],
[us-east-1, 40, CloudFront, 22],
...
[us-east-2, 44, us-west-2, 30],
[us-east-2, 44, us-west-1, 35],
...
```

**例 6**

特定の新しい AWS リージョンの TTFB データを取得するとします。

このシナリオのクエリは、次の例のようになります。

```
{
   MonitorName: "TestMonitor"
   StartTime: "2023-07-12T20:00:00Z"
   EndTime: "2023-07-12T21:00:00Z"
   QueryType: "OVERALL_TRAFFIC_SUGGESTIONS_DETAILS"
   FilterParameters: [
      {
       Field: "proposed_aws_location",
       Operator: "EQUALS",
       Values: ["us-west-2"]
      },
   ]
}

Results:
[San Jose, San Jose-Santa Clara, California, United States, 7922, us-east-1, 40, 350, 350, us-west-2, 45]
[San Jose, San Jose-Santa Clara, California, United States, 7922, us-west-1, 35, 450, 450, us-west-2, 45]
```

**例 7**

最後の例は、特定の DNS リゾルバーのデータの取得についてです。

このシナリオのクエリは、次の例のようになります。

```
{
   MonitorName: "TestMonitor"
   StartTime: "2023-07-12T20:00:00Z"
   EndTime: "2023-07-12T21:00:00Z"
   QueryType: "ROUTING_SUGGESTIONS"
   FilterParameters: [
      {
       Field: "proposed_aws_location",
       Operator: "EQUALS",
       Values: ["us-east-1"]
      },
   ]
}

Results:
[162.158.180.245, 13335, Cloudflare, [5.4.0.0/14], us-east-2, 200.0, us-east-1, 160.0]
[162.158.180.243, 13313, Cloudflare, [5.4.0.0/10], us-east-2, 150.0, us-east-1, 125.0]
```

## クエリ結果を取得する
<a name="CloudWatch-IM-view-cw-tools-cwim-query-get-data"></a>

クエリを実行した後、別の Internet Monitor API オペレーション [GetQueryResults](https://docs.aws.amazon.com/internet-monitor/latest/api/API_GetQueryResults.html) を実行すると、結果のセットをクエリとともに返すことができます。`GetQueryResults` を実行するときに、クエリで定義したクエリ ID と、モニターの名前を指定します。`GetQueryResults` は指定したクエリの結果セットからデータを取得します。

クエリを実行する場合は、`GetQueryResults` を実行して結果を見る前に、クエリの実行を完了していたことを確認してください。[GetQueryStatus](https://docs.aws.amazon.com/internet-monitor/latest/api/API_GetQueryStatus.html) API オペレーションを使用すると、クエリが完了したかどうか確認できます。クエリの `Status` が `SUCCEEDED` になったら、結果を確認してください。

クエリが完了した後は、次の情報が結果の確認に役立ちます。次のリストで説明するように、クエリの作成時に使用したクエリタイプには、それぞれログファイルに固有な、一連のデータフィールドが含まれています。

**測定値**  
`measurements` のクエリタイプでは、次のデータが返ります。  
`timestamp, availability, performance, bytes_in, bytes_out, rtt_p50, rtt_p90, rtt_p95`

**上位のロケーション**  
`top locations` クエリタイプは、場所ごとにデータをグループ化し、その期間の平均データを提供します。返されるデータには、次が含まれます。  
`aws_location, city, metro, subdivision, country, asn, availability, performance, bytes_in, bytes_out, current_fbl, best_ec2, best_ec2_region, best_cf_fbl`  
`city`、`metro` および `subdivision` は、`geo` フィールドでロケーションタイプを選択した場合にのみ返されることに注意してください。`geo` で指定したロケーションタイプに応じて、次のロケーションフィールドが返されます。  

```
city = city, metro, subdivision, country
metro = metro, subdivision, country
subdivision = subdivision, country
country = country
```

**上位のロケーションの詳細**  
`top locations details` クエリタイプは、時間ごとにグループ化されたデータを返します。クエリは次を返します。  
`timestamp, current_service, current_fbl, best_ec2_fbl, best_ec2_region, best_cf_fbl`

**全体的なトラフィックの提案**  
`overall traffic suggestions` クエリタイプは、時間ごとにグループ化されたデータを返します。クエリは次を返します。  
`current_aws_location, proposed_aws_location, average_fbl, traffic, optimized_traffic_excluding_cf, optimized_traffic_including_cf`

**全体的なトラフィックに関する提案の詳細**  
`overall traffic suggestions details` クエリタイプは、時間ごとにグループ化されたデータを返します。クエリは次を返します。  
`aws_location, city, metro, subdivision, country, asn, traffic, current_aws_location, fbl_data`

**ルーティングの提案**  
`routing suggestions` クエリタイプは、時間ごとにグループ化されたデータを返します。クエリは次を返します。  
`dns_resolver_ip, dns_resolver_asn, dns_resolver_isp, ipv4_prefixes, current_aws_location, current_latency, proposed_aws_location, proposed_latency`

`GetQueryResults` API オペレーションを実行すると、Internet Monitor はレスポンスで次を返します。
+ クエリが返す結果を含んでいる、文字列配列のデータ。情報は `Fields` フィールドに合わせた配列で返されます。また、API 呼び出しによっても返されます。`Fields` フィールドを使用すると、`Data` リポジトリから情報を解析でき、目的に合わせて、さらに絞り込んだりソートしたりできます。
+ (`Data` フィールドのレスポンスにおいて) クエリがデータを返したフィールドを一覧表示する、フィールドの配列。この配列のそれぞれの項目は、`availability_score` - `float` のように、名前とデータ型がペアになっています。

## トラブルシューティング
<a name="CloudWatch-IM-view-cw-tools-cwim-query-troubleshooting"></a>

クエリインターフェイス API オペレーションを使用したときに、エラーが返される場合は、Internet Monitor を使用するために必要なアクセス許可があることを確認してください。特に、次のアクセス許可があることを確認してください。

```
internetmonitor:StartQuery
internetmonitor:GetQueryStatus
internetmonitor:GetQueryResults
internetmonitor:StopQuery
```

これらのアクセス許可は、コンソールで Internet Monitor ダッシュボードを使用する場合に推奨される、AWS Identity and Access Management ポリシーに含まれています。詳細については、「[Internet Monitor の AWS マネージドポリシー](CloudWatch-IM-permissions.md)」を参照してください。