サンプルクエリ - 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/

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)

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

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

NAT ゲートウェイに対するクエリ

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

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

注記

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

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

解析コマンドの例

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

エフェメラルフィールドの loggingTimeloggingType、および 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