サンプルクエリ - Amazon CloudWatch Logs

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

サンプルクエリ

このセクションでは、CloudWatch コンソール で実行できる一般的なクエリコマンドと便利なクエリコマンドのリストを示します。クエリコマンドの実行方法については、「Amazon Logs ユーザーガイド」の「チュートリアル: サンプルクエリの実行と変更」を参照してください。 CloudWatch

クエリ構文の詳細については、「」を参照してくださいCloudWatch Logs Insights クエリ構文

一般的なクエリ

最近追加された 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 ログのクエリ

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

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 フローログのクエリ

ホスト間での上位 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 ログのクエリ

クエリタイプ別に 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 ログのクエリ

サービス別、イベントタイプ別、 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

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

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

Amazon API Gateway アクセスロググループで最も実行時間が長い Amazon API Gateway リクエストを 10 件特定する

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 ゲートウェイに対するクエリ

AWS 請求額が通常よりも高い場合は、Logs Insights CloudWatch を使用して上位の寄稿者を見つけることができます。次のクエリコマンドの詳細については、 AWS プレミアムサポートページの「VPC の NAT ゲートウェイ経由のトラフィックの上位の寄稿者を見つけるにはどうすればよいですか?」を参照してください。

注記

次のクエリコマンドの「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 サーバーのログに対するクエリ

CloudWatch Logs Insights を使用して Apache サーバーログをクエリできます。次のクエリの詳細については、 AWS クラウド運用と移行ブログの CloudWatch 「Logs Insights を使用した Apache サーバーログの簡素化」を参照してください。

アクセスログを確認してアプリケーションの /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

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

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

解析コマンドの例

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

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

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