クラウド工房 Powered by Amazon Web Services

  • 03-3342-9620
  • 受付時間 9:00~18:00 定休日:土日祝

クラウド工房 Powered by Amazon Web Services

menu
9:00~18:00(平日)

[Amazon Elasticsearch Service]複数のLogGroupからStreaming

複数のロググループから単一の「Amazon Elasticsearch Service」ドメインにストリーミングする方法

こんにちは。クラウドコンサルティング事業部の関口です。

今回は、CloudWatchログ の複数のロググループを単一の「Amazon Elasticsearch Service」(以降、Amazon ES)にストリーミングする方法です。
CloudWatch Logs のロググループを Amazon ESにストリーミングする場合、Index が全て”cwl-YYYY.MM.DD”となります。
その為、複数の ロググループを単一の Amazon ESドメインにストリーミングした場合、同じ Index に複数のロググループのログが混在してしまいます。
このような状態ですとKibanaで確認した時にどのロググループのログなのかわからなくなってしまします。
この状態を回避する為、Amazon ESドメイン作成時に自動生成される Lambda Function を修正し、別々のIndexが作成されるようにします。
そうすることで、Kibanaで確認する時にどのロググループのログなのかフィルタをかけることができます。

やりたい事

① EC2からApacheのアクセスログ(access_log、ssl_access_log)をCloudWatchログに送信
② CloudWatchログ の複数のロググループをAmazon ESにストリーミング
③ Amazon ESドメインにデプロイされているKibanaでログを確認する。
generate_presigned_url1

前提条件

・EC2にAapcheのインストール・設定とmod_ssl設定は設定済みであること。
・EC2にCloudWatchログ エージェントのインストール・設定済みであること。
・ロググループ名を、access_logは”apache-access_log”,ssl_access_logは”apache-access_log”とします。
・Amazon ESは作成済みで、クラスターのドメイン名は”test-env”とします。

Amazon ESへストリーミング

CloudWatchログのロググループに送信したApacheのアクセスログをAmazon ESにストリーミングし、サブスクリプションフィルタを作成します。
まず、ロググループ”apache-access_log”のサブスクリプションフィルタを作成し、次にロググループ”apache-ssl_access_log”のサブスクリプションフィルタを作成します。

1.AWSマネジメントコンソール「CloudWatch」の画面でロググループを選択し、”Amazon Elasticsearch Serviceへのストリーミング開始”をクリックします。

blog48_eyecatch

2.Amazon ESのクラスターとLambdaの実行ロールを選択し「次へ」をクリックします。

※事前にロールを作成していない場合は「新しいIAMロールを作成」を選択し自動生成することが可能。
generate_presigned_url2

3.ログの形式を”共通のログファイル形式”とし、フィルターパターンはデフォルトのままで「次へ」をクリックします。

※Apacheのログをカスタマイズしている場合は、フィルタパターンを修正してください。
generate_presigned_url3

4.内容を確認し「次へ」をクリックします。

generate_presigned_url3

5.「ストリーミングの開始」をクリックします。

generate_presigned_url3

6.ストリーミングが開始され、サブスクリプションフィルタが作成されます。

generate_presigned_url3

もう一つのロググループについても同じ手順でサブスクリプションフィルタを作成します。Lambda実行ロールを選択するところでは「すでに存在する。」ということで選択できないのでそのまま「次へ」をクリックしてください。
generate_presigned_url3

Lambda関数の修正

サブスクリプションフィルタ作成時にLambda関数が自動で作成されます。
自動作成されたものは、”access_log”用のLambda関数とするため修正します。

1.自動作成されたLambda関数をクリックします。

generate_presigned_url3

2.コードはのちほど使用するので、テキストにコピーしておきます。

generate_presigned_url3

3.コード内容にデフォルトのIndex”cwl-YYYY.MM.DD”が記載されています。”access_log”、”ssl_access_log”のIndexを分けるため、以下のように修正し「保存」をクリックします。

4.”ssl_access_log”を処理するトリガーは不要ですので削除します。

generate_presigned_url3

Lambda関数の作成

“access_log”用のLambda関数を参考に”ssl_access_log”用のLambda関数は新規に作成します。
コード内のIndexとトリガー以外は全て同じで良いです。

先ほどテキストにコピーしておいたコードをコード入力欄に張り付け、Indexは”ssl_access_log”用に以下のようなIndexにしました。

トリガーは”ssl_access_log”用に設定しました。※ロググループ”apache-ssl_access_log”を指定。
generate_presigned_url3

Kibanaで確認

Amazon ESにストリーミングしたApacheログをKibanaで確認します。

1.Amazon ESドメインのKibanaのリンクをクリックします。

generate_presigned_url3

2.Indexを設定する画面が表示されるので[index name or pattern]に”apache-*”(Index共通部分のワイルドカード)を入力し、「Create」をクリックします。

generate_presigned_url3

3.メニューの「Discover」をクリックするとストリーミングされたApacheログがまとめてグラフ表示されます。

generate_presigned_url3

[Available Fields]の”@log_group”でフィルタをかけることで”access_log”,”ssl_access_log”のどちらかのみ表示させることも可能です。
generate_presigned_url3

以上です。それではまた次回。

参考URL

・CloudWatch Logs サブスクリプションフィルタの使用
http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/SubscriptionFilters.html#LambdaFunctionExample

  • このエントリーをはてなブックマークに追加

関口 直行

株式会社システムサポート 東京支社 クラウドコンサルティング事業部所属
クラウドソリューションアーキテクト

AWS Summit Tokyoで事例公開された案件などのプロジェクトリーダーを担当
AWS認定ソリューションアーキテクト-プロフェッショナルレベル

株式会社システムサポート 東京支社 クラウドコンサルティング事業部所属
クラウドソリューションアーキテクト

AWS Summit Tokyoで事例公開された案件などのプロジェクトリーダーを担当
AWS認定ソリューションアーキテクト-プロフェッショナルレベル


ニュース&ブログ

トピックス

∧