サンプルクエリ - Amazon CloudWatch Logs

サンプルクエリ

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

一般的なクエリ

最近追加された 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 リージョン、ユーザー名、ARN を検索します。

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 の請求が通常よりも高いことに気付いた場合、CloudWatch Logs Insights でその上位の要因を見つけることができます。次のクエリコマンドの詳細については、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 クラウド運用と移行ブログの「Simplifying Apache server logs with CloudWatch Logs Insights」(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