CloudWatch Logsを使用すれば、AWS環境からすべてのパフォーマンスログと運用ログを1カ所に収集することができます。この柔軟なプラットフォームのおかげで、多くのログソースを、ソースとログ形式ごとに複数のロググループにまとめて収集することができます。たとえば、VPCフローログ、CloudTrailログ、RDSログはすべてログ構造が異なります。この記事では、あらゆる形式のログファイルをCloudWatchからSplunkに取り込む方法、そして別のユースケースのために用意されたサンプルを拡張あるいは変更できるケースについてご紹介します。
Splunkは、AWSアドオンを使用する方法、Lambda 関数 (ラムダ式)やKinesis Firehoseを介してサーバーレスで取り込む方法、さらにはProject Trumpetを使用して自動的にサーバーレスで取り込む方法など、AWSデータを取り込むためのさまざまな方法を提供しています。しかし、CloudWatch Logsからの取り込みには、大規模なログ収集を実行でき、複数のAWSアカウントからログを収集する柔軟性を備えたKinesis Firehoseがおすすめです。
Firehoseの機能の1つに、Lambda関数を呼び出してログコンテンツの変換や処理を行うオプションがあります。これにより、CloudWatchログから取得したメッセージパッケージを開いてSplunkイベントに変換できるほか、ログコンテンツに基づいて、ソース、ソースタイプ、ホスト、インデックスなどのイベント情報を、柔軟に設定できるようになります。
この変換のバージョンの1つは、SplunkとAWSがFirehoseの統合を発表した際にすでにご紹介しています。この例で使用されたLambda関数は、VPCフローログを抽出したあと、それらのログをSplunkに送信します。この関数については、AWS LambdaのBlueprint、kinesis-firehose-cloudwatch-logs-processorまたはkinesis-firehose-cloudwatch-logs-processor-pythonでご覧いただけます。このブログではさらに一歩進み、CloudWatchのあらゆるログに使用できる、Splunkでの一般的なログ収集方法の基本事項についてご説明します。
以下の図は、Firehoseでログを取り込む方法のアーキテクチャをまとめたものです。
FirehoseとSplunkの設定に必要な手順のほとんどは、以前のブログでご確認いただけます。また、こちらに記載されている設定プロセスも参照してください。このページには、前述のブログに記載された手順のあとに実行する別の手順が記載されているほか、新しいLambda関数について追記されています。
以前のブログでは、Lambda関数のテンプレートを使ってログストリームから個々のログイベントを抽出し、そのイベントを変更することなくFirehoseに送信しています。これらはJSON形式ではなく単純なVPCフローログであるため、ログのコンテンツをRawイベントとして簡単にSplunkに送信できます。この標準テンプレートでは、注意するべきいくつかの重要なポイントがあります。
新しいLambda関数を使用すると、CloudWatchからログを収集し、JSON形式のSplunk HECイベントとしてパッケージできます。これにより、さらに以下のメリットが得られます。
この関数テンプレートのサンプルは、以下のことを実行します。
HECイベントの形式を設定する方法について詳しくは、こちらをご覧ください。
この変換関数の例では、Firehoseに送信されるイベントの形式をSplunk HEC JSON形式に変換し、ログ情報に基づいて、イベントの詳細の一部を設定する方法を示しています。関数を変更すれば、柔軟性を高めたり、要件に合わせたりできます。簡単な変更を行うだけで、Splunkのインデックス、ホスト、ソース、ソースタイプを独自の方法で設定できるようになります。以下に、2つの例を示します。
1) CloudWatchにログを送信するRDSインスタンスがある場合、1つのFirehoseで複数のRDSインスタンスやログタイプを使用できるようにロググループ名を使用できます。たとえば、2つのRDSインスタンスがあり、それらのログが以下のロググループに送信されるとします。
/aws/rds/mydatabse1/audit
/aws/rds/mydatabse1/error
/aws/rds/mydatabse2/audit
/aws/rds/mydatabse2/error
監査ログとエラーログではソースタイプが異なるため、そのログが監査ログなのかエラーログなのかによって簡単にソースタイプの値を設定できます。この場合、同じFirehoseにサブスクリプションフィルターを追加するだけで、他のデータベースログからロググループを追加することもできます。Splunk側で変更を行う必要はありません。
2) もう1つの例は、複数のAWSアカウントからログを収集する際、セキュリティ上の理由からこれらのログを別々のSplunkインデックスに保存する必要がある場合です。変換関数にインデックスの値を設定すれば、関数によって各アカウントに異なるインデックス名が設定されます。
Splunkのメリットをどうぞお試しください。
Splunkプラットフォームは、データを行動へとつなげる際に立ちはだかる障壁を取り除いて、オブザーバビリティチーム、IT運用チーム、セキュリティチームの能力を引き出し、組織のセキュリティ、レジリエンス(回復力)、イノベーションを強化します。
Splunkは、2003年に設立され、世界の21の地域で事業を展開し、7,500人以上の従業員が働くグローバル企業です。取得した特許数は1,020を超え、あらゆる環境間でデータを共有できるオープンで拡張性の高いプラットフォームを提供しています。Splunkプラットフォームを使用すれば、組織内のすべてのサービス間通信やビジネスプロセスをエンドツーエンドで可視化し、コンテキストに基づいて状況を把握できます。Splunkなら、強力なデータ基盤の構築が可能です。