Amazon CloudWatch Logs Insights クエリを使用して、ロググループ内の Amazon Virtual Private Cloud (Amazon VPC) フローログを処理したいと考えています。どうすればよいですか?
簡単な説明
CloudWatch Logs をターゲットとする VPC フローログをオンにすると、Elastic Network Interface ごとに 1 つのログストリームが表示されます。CloudWatch Logs Insights は、ロググループに保存されたログイベントに対して複雑なクエリを実行できるクエリツールです。問題が発生した場合は、CloudWatch Logs Insights を使用して、潜在的な原因を特定し、デプロイされた修正を検証することができます。
サポートされるログタイプの詳細については、「サポートされるログと検出されるフィールド」を参照してください。
解決方法
クエリを実行する
クエリを実行するには、次の操作を実行します。
1. CloudWatch コンソールを開きます。
2. [Logs] (ログ)、[Logs Insights] の順に選択します。
3. [Logs Insights] ダッシュボードで、データを分析して視覚化するロググループを選択します。
4. クエリを作成することも、提供されているサンプルクエリの 1 つを VPC フローログに対して実行することもできます。カスタムクエリを作成する場合は、Amazon CloudWatch ドキュメントで提供されているチュートリアルを確認することから始めます。クエリ構文については、「CloudWatch Logs Insights のクエリ構文」を参照してください。
5. [History] (履歴) を選択して、以前に実行したクエリを表示します。[History] (履歴) からクエリを再度実行できます。
6. 結果をエクスポートするには、[Export results] (結果をエクスポート) を選択し、形式を選択します。
クエリの例
シナリオ 1
ウェブサーバー、アプリケーションサーバー、および DB サーバーがある。アプリケーションが想定どおりに動作しない。例えば、タイムアウトまたは HTTP 503 エラーを受け取り、エラーの原因を特定しようとしているとします。
変数の例:
- [Action] (アクション) は [REJECT] に設定されているため、拒否された接続のみが返されます。
- クエリには内部ネットワークのみが含まれます。
- サーバー IP のリストには、インバウンド接続とアウトバウンド接続 (srcAddr と dstAddr) の両方が表示されます。
- [Limit] (制限) は 5 に設定されているため、最初の 5 つのエントリだけが表示されます。
- ウェブサーバー IP: 10.0.0.4
- アプリケーションサーバー IP: 10.0.0.5
- DB サーバー IP: 10.0.0.6
filter(
action="REJECT" and
dstAddr like /^(10\.|192\.168\.)/and
srcAddrlike /^(10\.|192\.168\.)/ and
(
srcAddr = "10.0.0.4" or
dstAddr = "10.0.0.4" or
srcAddr = "10.0.0.5" or
dstAddr = "10.0.0.5" or
srcAddr = "10.0.0.6" or
dstAddr = "10.0.0.6" or
)
)|
stats count(*) as records by srcAddr,dstAddr,dstPort,protocol |
sort records desc |
limit 5
シナリオ 2
特定の Elastic Network Interface で断続的なタイムアウトが発生している。次のクエリは、一定期間にわたって Elastic Network Interface で拒否されたかどうかを確認します。
fields @timestamp, interfaceId, srcAddr, dstAddr, action
| filter (interfaceId = 'eni-05012345abcd' and action = 'REJECT')
| sort @timestamp desc
| limit 5
シナリオ 3
次のクエリ例では、VPC フローログを分析して、特定の Elastic Network Interface に関するレポートを生成します。このクエリは、異なるポートに送信されるトラフィックの量をチェックします。
fields @timestamp, @message
| stats count(*) as records by dstPort, srcAddr, dstAddr as Destination
| filter interfaceId="eni-05012345abcd"
| filter dstPort="80" or dstPort="443" or dstPort="22" or dstPort="25"
| sort HitCount desc
| limit 10
シナリオ 4
次のクエリは VPC フローログをフィルタリングして、VPC 内の特定の IP または CIDR に接続しようとしている IP アドレスを一覧表示します。
特定の IP の場合:
fields @timestamp, srcAddr, dstAddr
| sort @timestamp desc
| limit 5
| filter srcAddr like "172.31."
特定の CIDR の場合:
fields @timestamp, srcAddr, dstAddr
| sort @timestamp desc
| limit 5
| filter isIpv4InSubnet(srcAddr,"172.31.0.0/16)
注: その他のクエリ例については、「サンプルクエリ」を参照してください。
関連情報
CloudWatch Logs Insights を使用したログデータの分析