【AWS Data Lake】ニアリアルタイムデータ分析環境・スピードレイヤを構築してみた(ハンズオン1)
こんにちは。DA事業本部の春田です。
管理のしやすさや拡張性の高さで注目を集めている、次世代のデータ分析基盤Data Lakeについて、ハンズオンにトライしてみました。
本記事では、Lab1~Lab3のニアリアルタイムデータ分析環境(スピードレイヤ)を構築していきます。
Lab1: はじめの準備
はじめにハンズオン共通で使用するVPC、EC2、IAM Roleを設定していきます。まずEC2で使用するキーペアを作成します。
上で作成したキーペア datalake-handson-haruta
を用いて、CloudFormationからEC2インスタンスを作成します。
EC2の構築が完了したら、 datalake-handson-haruta
の公開鍵でSSHログインし、 /root/es-demo/testapp.log
にログが吐き出されているかを確認します。ログは2分おきに10件前後、10分おきに300件出力される仕様です。
ログが吐き出されていることが確認できたので、IAM Roleのアタッチに移ります。この場ではポリシーなしで作成します。
作成したIAM Roleを先程のEC2インスタンスにアタッチします。
最後に、EC2にFluentdをインストールして下準備完了です。
Lab2: アプリケーションログをリアルタイムで可視化
最初のLabでは、EC2で吐き出されているログをFluentdでElasticsearch Service(以降、ES)に送信し、Kibanaでログデータの可視化を行います。まずは、ESの起動を行います。
起動の際には、無料枠の t2.small.elasticsearch
インスタンスを選択する点と、パブリックアクセスを許可する点に注意です。
ESの起動が完了したら、EC2にアタッチ済みのIAM Role handson-minilake
に対して、 AmazonESFullAccess
ポリシーをアタッチします。
ポリシーのアタッチが完了したら、EC2にログインし、FluentdからESにログデータを送信するための設定を行います。FluentdのESプラグインをインストールし、用意されているconfファイルを用いて張り替えていきます。
これで準備完了です。ES付属のKibanaに入り、ダッシュボードを作成していきます。Indexパターンを設定するほか、用意されているJSONファイルで可視化の画面を作成します。
ダッシュボードが完成しました。中身を確認してみます。
ログデータがいい感じに可視化されています。(※まもなくLab3に移ってしまったので、一時点のデータしか取れていません。)Lab1のアーキテクチャを現場で構築する場合は、Fluentdの設定とKibanaのダッシュボードの作成に手間がかかりそうですが、インフラの部分は簡単に構築できそうですね。
Lab3: アプリケーションログのリアルタイム可視化とアラーム
Lab3: アプリケーションログのリアルタイム可視化とアラーム
より使いやすくするために、EC2とESの間にCloudWatchをはさみ、アラーム機能を追加します。まずは、IAM RoleにEC2からCloudWatchにアクセスするための CloudWatchLogsFullAccess
ポリシーを追加します。
EC2に入り、Fluentdを設定し直します。FluentdのCloudWatch Logsプラグインをインストールし、用意されているconfファイルで張り替えていきます。
ログにエラーが出続けてないか確認できたら、CloudWatch Logsの設定を行います。
先ほど設定したログは正常に出力されているようです。このログストリームをESに流せるように設定していきます。
ログを裏で流すのは自動で作成されるLambdaです。このLambdaがESに接続するために必要なIAM Roleを、この場で新規作成します。
ストリーミングが開始したら、Kibanaで先ほどと同じような設定を行い、ダッシュボードを作成します。
Discoverからindexに cwl-*
を選択すれば、グラフが表示されます。
設定が完了しました。ダッシュボードも問題なく反映されています。
最後に、メトリクスがしきい値を超えたらメールを送信するような通知機能をCloudWatch Alarmsで作成します。ロググループ minilake_group
からメトリクスフィルタを作成し、アラームを設定していきます。
通知を受信するSNSトピックはこの場で作成します。
設定が完了しました。アラーム状態になると、以下のようにメールが飛んできます。
このようにログストリームの間に一段CloudWatchをかませるだけで、ElastAlert等でESを監視せずとも、シンプルに通知機能を実装することができます。
最後に
今回は、AWS上でニアリアルタイムデータ分析環境を作成してみました。さすがはAWSと言ったところで、インフラの構築は簡単にできてしまいました。上記のような環境を実際に構築する場合には、FluentdとKibanaの知識があれば1日かからずともできてしまいそうですね!
長くなってしまったので、Lab4~Lab6は別記事に上げております。
興味ある方はぜひお試しください。