AWS Log Insightsで文字列を含むログを検索する方法
問題
AWS CloudWatch Logs Insightsで、特定の文字列(例:"user not found")を含むログメッセージを効率的にフィルタリングする方法について説明します。ログ分析において、特定のキーワードを含むメッセージを検索することは一般的な要件です。
解決策
AWS Log Insightsでは、文字列を含むログを検索するためにいくつかの方法が利用できます。
1. LIKE
演算子を使用する方法
最もシンプルで直感的な方法です:
sql
fields @timestamp, @message
| filter @message like /user not found/
| sort @timestamp desc
| limit 20
TIP
LIKE
演算子はパターンマッチングを行います。スラッシュ(/
)で囲まれた部分は正規表現として解釈されますが、単純な文字列検索にも使用できます。
2. strcontains()
関数を使用する方法
文字列関数を利用したより明示的な方法です:
sql
fields @timestamp, @message
| filter strcontains(@message, "User not found")
| sort @timestamp desc
| limit 20
WARNING
strcontains()
関数は大文字と小文字を区別します。大文字小文字を区別しない検索を行いたい場合は、LIKE
演算子を/pattern/i
のように使用するか、両方の文字列を適切なケースに変換してください。
3. 正規表現を使用する方法
より高度なパターンマッチングが必要な場合:
sql
fields @timestamp, @message
| filter @message =~ /.*User not found.*/
| sort @timestamp desc
| limit 20
4. フィールドを抽出してフィルタリングする方法
構造化されたログに対してより精密なフィルタリングを行う場合:
sql
fields @timestamp, @message
| parse @message "[*] * *" as @level, @severity, @info
| filter @severity="INFO"
| sort @timestamp desc
| limit 20
パースパターンの詳細
parse
コマンドを使用すると、ログメッセージから特定のパターンに基づいてフィールドを抽出できます。これは構造化ログの分析に特に有用です。
5. Query Generator(AI機能)を使用する方法
AWSが提供する生成AIを活用した方法:
- Log Insightsコンソールで「Query generator」をクリック
- 必要なフィルター条件を自然言語で記述(例:「"user not found"を含むメッセージを検索」)
- AIが適切なクエリを自動生成
INFO
この機能はAWSのAIサービスによって強化されており、複雑なクエリ作成の手間を大幅に削減できます。
パフォーマンスの考慮事項
- 大文字小文字の区別: 大文字小文字を区別しない検索には
like /pattern/i
を使用 - ワイルドカード:
%
ではなく.*
を使用(正規表現構文) - 効率性: 単純な文字列検索には
LIKE
やstrcontains()
が、複雑なパターンには正規表現が適しています
まとめ
AWS Log Insightsで文字列を含むログを検索する主な方法は:
LIKE
演算子:シンプルで直感的strcontains()
関数:明示的でコードの意図が明確- 正規表現:高度なパターンマッチングに対応
- パースとフィルター:構造化ログに最適
- Query Generator:AIによる自動クエリ生成
どの方法を選ぶかは、具体的なユースケースとパフォーマンス要件によって決まります。単純な検索にはLIKE
やstrcontains()
を、複雑な条件には正規表現やパースを検討してください。