

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# サンプルクエリ
<a name="CWL_QuerySyntax-examples"></a>

このセクションでは、[CloudWatch コンソール](https://console.aws.amazon.com/cloudwatch/)で実行できる一般的で便利なクエリコマンドの一覧を紹介します。クエリコマンドの実行方法については、「Amazon CloudWatch Logs ユーザーガイド**」の「[チュートリアル: サンプルクエリを実行および変更する](https://docs.aws.amazon.com/en_us/AmazonCloudWatch/latest/logs/CWL_AnalyzeLogData_RunSampleQuery.html)」を参照してください。

クエリ構文の詳細については、「[CloudWatch Logs Insights 言語のクエリ構文](CWL_QuerySyntax.md)」を参照してください。

**Topics**
+ [一般的なクエリ](#CWL_QuerySyntax-examples-general)
+ [Lambda ログのクエリ](#CWL_QuerySyntax-examples-Lambda)
+ [Amazon VPC フローログのクエリ](#CWL_QuerySyntax-examples-VPC)
+ [Route 53 ログのクエリ](#CWL_QuerySyntax-examples-Route53)
+ [CloudTrail ログのクエリ](#CWL_QuerySyntax-examples-CloudTrail)
+ [のクエリ Amazon API Gateway](#CWL_QuerySyntax-examples-APIGateway)
+ [NAT ゲートウェイに対するクエリ](#CWL_QuerySyntax-examples-NATGateway)
+ [Apache サーバーのログに対するクエリ](#CWL_QuerySyntax-examples-Apache)
+ [Amazon EventBridge のクエリ](#CWL_QuerySyntax-examples-EventBridge)
+ [解析コマンドの例](#CWL_QuerySyntax-examples-parse)

## 一般的なクエリ
<a name="CWL_QuerySyntax-examples-general"></a>

**最近追加された 25 件のログイベントを検索します。**

```
fields @timestamp, @message | sort @timestamp desc | limit 25
```

**1 時間あたりの例外数のリストを表示します。**

```
filter @message like /Exception/ 
    | stats count(*) as exceptionCount by bin(1h)
    | sort exceptionCount desc
```

**例外ではないログイベントのリストを取得します。**

```
fields @message | filter @message not like /Exception/
```

**`server` フィールドの一意の値ごとに最新のログイベントを表示します。**

```
fields @timestamp, server, severity, message 
| sort @timestamp asc 
| dedup server
```

**各 `severity` タイプの、`server` フィールドの一意の値ごとに最新のログイベントを表示します。**

```
fields @timestamp, server, severity, message 
| sort @timestamp desc 
| dedup server, severity
```

## Lambda ログのクエリ
<a name="CWL_QuerySyntax-examples-Lambda"></a>

**過剰にプロビジョニングされたメモリの量を確認します。**

```
filter @type = "REPORT"
    | stats max(@memorySize / 1000 / 1000) as provisonedMemoryMB,
        min(@maxMemoryUsed / 1000 / 1000) as smallestMemoryRequestMB,
        avg(@maxMemoryUsed / 1000 / 1000) as avgMemoryUsedMB,
        max(@maxMemoryUsed / 1000 / 1000) as maxMemoryUsedMB,
        provisonedMemoryMB - maxMemoryUsedMB as overProvisionedMB
```

**レイテンシーレポートを作成します。**

```
filter @type = "REPORT" |
    stats avg(@duration), max(@duration), min(@duration) by bin(5m)
```

**遅い関数呼び出しを検索し、再試行やクライアント側コードが原因で発生する可能性のある重複リクエストを削除します。このクエリでは、`@duration` はミリ秒単位です。**

```
fields @timestamp, @requestId, @message, @logStream 
| filter @type = "REPORT" and @duration > 1000
| sort @timestamp desc
| dedup @requestId 
| limit 20
```

## Amazon VPC フローログのクエリ
<a name="CWL_QuerySyntax-examples-VPC"></a>

**ホスト間での上位 15 件のパケット転送を検索します:**

```
stats sum(packets) as packetsTransferred by srcAddr, dstAddr
    | sort packetsTransferred  desc
    | limit 15
```

**特定のサブネットにおけるホストの上位 15 バイトの転送を検索します。**

```
filter isIpv4InSubnet(srcAddr, "192.0.2.0/24")
    | stats sum(bytes) as bytesTransferred by dstAddr
    | sort bytesTransferred desc
    | limit 15
```

**データ転送プロトコルとして UDP を使用する IP アドレスを検索します。**

```
filter protocol=17 | stats count(*) by srcAddr
```

**キャプチャウィンドウでフローレコードがスキップされた IP アドレスを検索します。**

```
filter logStatus="SKIPDATA"
    | stats count(*) by bin(1h) as t
    | sort t
```

**接続のたびに 1 つのレコードを検索し、ネットワークの接続問題の解決を促します。**

```
fields @timestamp, srcAddr, dstAddr, srcPort, dstPort, protocol, bytes 
| filter logStream = 'vpc-flow-logs' and interfaceId = 'eni-0123456789abcdef0' 
| sort @timestamp desc 
| dedup srcAddr, dstAddr, srcPort, dstPort, protocol 
| limit 20
```

## Route 53 ログのクエリ
<a name="CWL_QuerySyntax-examples-Route53"></a>

**クエリタイプ別に 1 時間あたりのレコードのディストリビューションを検索します。**

```
stats count(*) by queryType, bin(1h)
```

**リクエスト数が最大である 10 件の DNS リゾルバーを検索します。**

```
stats count(*) as numRequests by resolverIp
    | sort numRequests desc
    | limit 10
```

**サーバーが DNS リクエストを完了できなかったレコード数をドメイン別およびサブドメイン別に検索します。**

```
filter responseCode="SERVFAIL" | stats count(*) by queryName
```

## CloudTrail ログのクエリ
<a name="CWL_QuerySyntax-examples-CloudTrail"></a>

**各サービス、イベントタイプ、 AWS リージョンのログエントリの数を検索します。**

```
stats count(*) by eventSource, eventName, awsRegion
```

**特定の AWS リージョンで開始または停止された Amazon EC2 ホストを検索します。**

```
filter (eventName="StartInstances" or eventName="StopInstances") and awsRegion="us-east-2"
```

**新しく作成した IAM ユーザーの AWS リージョン、ユーザー名、ARNs を検索します。**

```
filter eventName="CreateUser"
    | fields awsRegion, requestParameters.userName, responseElements.user.arn
```

**API `UpdateTrail` の呼び出し中に例外が発生したレコードの数を検索します。**

```
filter eventName="UpdateTrail" and ispresent(errorCode)
    | stats count(*) by errorCode, errorMessage
```

**TLS 1.0 または 1.1 が使用されたログエントリを検索します。**

```
filter tlsDetails.tlsVersion in [ "TLSv1", "TLSv1.1" ]
| stats count(*) as numOutdatedTlsCalls by userIdentity.accountId, recipientAccountId, eventSource, eventName, awsRegion, tlsDetails.tlsVersion, tlsDetails.cipherSuite, userAgent
| sort eventSource, eventName, awsRegion, tlsDetails.tlsVersion
```

**TLS バージョン 1.0 または 1.1 を使用したサービスごとの呼び出し数を検索します。**

```
filter tlsDetails.tlsVersion in [ "TLSv1", "TLSv1.1" ]
| stats count(*) as numOutdatedTlsCalls by eventSource
| sort numOutdatedTlsCalls desc
```

## のクエリ Amazon API Gateway
<a name="CWL_QuerySyntax-examples-APIGateway"></a>

最新の 4XX エラーを 10 件検索します。

```
fields @timestamp, status, ip, path, httpMethod
| filter status>=400 and status<=499
| sort @timestamp desc
| limit 10
```

 Amazon API Gateway アクセスロググループ内で最も長く実行されている 10 個の Amazon API Gateway リクエストを特定する

```
fields @timestamp, status, ip, path, httpMethod, responseLatency
| sort responseLatency desc
| limit 10
```

 Amazon API Gateway  アクセスロググループで最もよく使用されている API パスのリストを返します。

```
stats count(*) as requestCount by path
| sort requestCount desc
| limit 10
```

 Amazon API Gateway  アクセスロググループの統合レイテンシーレポートを作成します。

```
filter status=200
| stats avg(integrationLatency), max(integrationLatency), 
min(integrationLatency) by bin(1m)
```

## NAT ゲートウェイに対するクエリ
<a name="CWL_QuerySyntax-examples-NATGateway"></a>

 AWS 請求額が通常よりも高い場合は、CloudWatch Logs Insights を使用して上位の寄与要因を見つけることができます。以下のクエリコマンドの詳細については、 AWS プレミアムサポートページの[「VPC の NAT ゲートウェイ経由のトラフィックの上位寄与要因を見つけるにはどうすればよいですか?](https://aws.amazon.com/premiumsupport/knowledge-center/vpc-find-traffic-sources-nat-gateway/)」を参照してください。

**注記**  
次のクエリコマンドの「x.x.x.x」の部分をお使いの NAT ゲートウェイのプライベート IP に置き換え、「y.y」を VPC CIDR アドレス範囲の第 1 および 第 2 オクテットの値に置き換えます。

**NAT ゲートウェイ経由で最も多くのトラフィックを送信しているインスタンスを検索します。**

```
filter (dstAddr like 'x.x.x.x' and srcAddr like 'y.y.') 
| stats sum(bytes) as bytesTransferred by srcAddr, dstAddr
| sort bytesTransferred desc
| limit 10
```

**NAT ゲートウェイ内のインスタンスとの間で送受信されているトラフィックを特定します。**

```
filter (dstAddr like 'x.x.x.x' and srcAddr like 'y.y.') or (srcAddr like 'xxx.xx.xx.xx' and dstAddr like 'y.y.')
| stats sum(bytes) as bytesTransferred by srcAddr, dstAddr
| sort bytesTransferred desc
| limit 10
```

**VPC 内のインスタンスがアップロードとダウンロードの通信で最も頻繁に使用している、インターネット上の送信先を特定します。**

*****アップロードの場合*****

```
filter (srcAddr like 'x.x.x.x' and dstAddr not like 'y.y.') 
| stats sum(bytes) as bytesTransferred by srcAddr, dstAddr
| sort bytesTransferred desc
| limit 10
```

*****ダウンロードの場合*****

```
filter (dstAddr like 'x.x.x.x' and srcAddr not like 'y.y.') 
| stats sum(bytes) as bytesTransferred by srcAddr, dstAddr
| sort bytesTransferred desc
| limit 10
```

## Apache サーバーのログに対するクエリ
<a name="CWL_QuerySyntax-examples-Apache"></a>

CloudWatch Logs Insights では Apache サーバーのログにクエリできます。以下のクエリの詳細については、 クラウド AWS オペレーションと移行ブログの「[CloudWatch Logs Insights を使用した Apache サーバーログの簡素化](https://aws.amazon.com/blogs/mt/simplifying-apache-server-logs-with-amazon-cloudwatch-logs-insights/)」を参照してください。

**アクセスログを確認してアプリケーションの */admin* パスでトラフィックをチェックできるよう、最も関連性の高いフィールドを検索します。**

```
fields @timestamp, remoteIP, request, status, filename| sort @timestamp desc
| filter filename="/var/www/html/admin"
| limit 20
```

**メインページにアクセスした際のステータスコードが「200」(成功) になっている箇所を探し、一意の GET リクエストの数を見つけます。**

```
fields @timestamp, remoteIP, method, status
| filter status="200" and referrer= http://34.250.27.141/ and method= "GET"
| stats count_distinct(remoteIP) as UniqueVisits
| limit 10
```

**Apache サービスが再起動した回数を確認します。**

```
fields @timestamp, function, process, message
| filter message like "resuming normal operations"
| sort @timestamp desc
| limit 20
```

## Amazon EventBridge のクエリ
<a name="CWL_QuerySyntax-examples-EventBridge"></a>

イベント詳細タイプ別にグループ化された EventBridge イベントの数を取得します。

```
fields @timestamp, @message
| stats count(*) as numberOfEvents by `detail-type`
| sort numberOfEvents desc
```

## 解析コマンドの例
<a name="CWL_QuerySyntax-examples-parse"></a>

**glob 式を使用して、ログフィールド `@message` から、抽出フィールド `@user`、`@method`、`@latency` を抽出し、`@method` および `@user` との一意の組み合わせごとに平均レイテンシーを返します。**

```
parse @message "user=*, method:*, latency := *" as @user,
    @method, @latency | stats avg(@latency) by @method,
    @user
```

**正規表現を使用して、ログフィールド `@message` から、フィールド `@user2`、`@method2`、`@latency2` を抽出し、`@method2` および `@user2` との一意の組み合わせごとに平均レイテンシーを返します。**

```
parse @message /user=(?<user2>.*?), method:(?<method2>.*?),
    latency := (?<latency2>.*?)/ | stats avg(latency2) by @method2, 
    @user2
```

**フィールド `loggingTime`、`loggingType`、`loggingMessage` を抽出し、`ERROR` または `INFO` 文字列を含むログイベントをフィルタリングし、`ERROR` 文字列を含むイベントの `loggingMessage` および `loggingType` フィールドのみを表示します。**

```
FIELDS @message
    | PARSE @message "* [*] *" as loggingTime, loggingType, loggingMessage
    | FILTER loggingType IN ["ERROR", "INFO"]
    | DISPLAY loggingMessage, loggingType = "ERROR" as isError
```