AWS データ分析環境の構築
EC2環境構築
CloudFormationを使用し、VPCを作成。作成されたVPCにログを出力するEC2を構築していきます。
CloudFormationの画面に移動し、スタックの作成を行います。
今回使用するyamlファイルは参考資料のGitのほうにあるのでそれを利用します。
実行が終わるとEC2が出来上がり、/root/esdemo/testapp.logにログ出力が始まります。
実行がうまくいけば下のようにEC2のコンソール画面にインスタンスが一つ立っているのでSSH接続します。
SSH接続を行い以下のようにコマンドを打つとログが出力されます。
$ sudo su -
# tail -f /root/es-demo/testapp.log
このようにして可視化を行うことが出来ます。
IAMロールの作成とEC2へのアタッチ
IAMのコンソール画面に移動しロールを選択し作成を行います。
AWSサービスを選択し「EC2」を選択。アクセス権限ポリシー、タグの追加画面は何もせず次に行き、ロール名を入力し作成を行います。
作成したIAMロールをEC2へアタッチするためにEC2のコンソール画面に移動し、先ほど作成したインスタンスを選択します。選択した後、アクションボタンから「インスタンスの設定」→「IAMロールを変換」をクリックします。そして先ほど作成したIAMロールをアタッチします。
Fluentdのインストール
Fluentdはログデータを収集しJSONに変換して出力する機能を提供するオープンソースソフトウェアです。これを使用する事でログの収集を効率よく行うことが出来ます。
EC2にSSHでログインし以下のコマンドを実行します。
$ sudo su -
#yum -y install redhat-lsb-core gcc
# rpm -ivh http://packages.treasuredata.com.s3.amazonaws.com/3/redhat/6/x86_64/td-agent-3.1.1-0.el6.x86_64.rpm
# vi /etc/init.d/td-agent (好きなエディタで大丈夫です)
TD_AGENT_USER=td-agent → TD_AGENT_USER=root
# chkconfig td-agent on
Elasticsearch Service の設定
マネジメントコンソール画面からElasticsearch Serviceを選択します。
新しいドメインの作成を行い、デプロイタイプを「開発およびテスト」を選択します。
ドメインの設定ではドメイン名を入力しインスタンスタイプは「t2.small.elasticsearch」を選択しました。
アクセスとセキュリティの設定においてネットワーク構成をパブリックアクセスにします。
ドメインアクセスポリシーにおいて「カスタムアクセスポリシー」を選択し、タイプに「IPv4アドレス」プリンシパルに「*」を入力、アクションに「許可」を選択して構築を行います。
構築するのに少し時間が掛かります。
IAMロールの設定
先程作成したIAMロールに以下のようにポリシーを設定します。
IAMの画面からロールをクリックします。そして先ほど作成したロールを選択します。
そのロールのアクセス権限タブにある「ポリシーをアタッチします」をクリックします。
[AmazonESFullAccess]を検索しアタッチします。
Fluentdの設定
FluentdからElasticsearch Serviceにログデータを送信するための設定を行います。
まずElasticsearch Serviceを選択しダッシュボードから先ほど作成したドメイン名をクリック。
エンドポイントにあるURLの文字列を控えておきます。
続いてそのままElasticsearch Serviceのところから「アクション」を選択し「アクセスポリシーの変更」を選択します。
ドメインアクセスポリシーにおいてカスタムアクセスポリシーを選択し、以下の内容を設定し画面一番下の送信をクリックします。
タイプに「IAM ARN」を選択、プリンシパルに「*」を入力、アクションに「許可を選択」
送信が終わったらEC2にログインしElasticsearchのプラグインをインストールします。
$ sudo su -
#Elasticsearch のプラグインをインストール
# td-agent-gem install -v 2.6.0 fluent-plugin-elasticsearch
#プラグインのインストールの確認
# td-agent-gem list | grep plugin-elasticsearch
#td-agent.confを書き直します。
# vi /etc/td-agent/td-agent.conf
td-agent.confを書き直す内容は以下になります。
<source>
@type tail
path /root/es-demo/testapp.log
pos_file /var/log/td-agent/testapp.log.pos
format /^\[(?<timestamp>[^ ]* [^ ]*)\] (?<alarmlevel>[^ ]*) *? (?<host>[^ ]*) * (?<user>[^ ]*) * (?<number>.*) \[(?<text>.*)\]$/
time_format %d/%b/%Y:%H:%M:%S %z
types size:integer, status:integer, reqtime:float, runtime:float, time:time
tag testappec2.log
</source>
<match testappec2.log>
type_name testappec2log
@type elasticsearch
include_tag_key true
tag_key @log_name
host ここに先程控えたURLを記入します。https:// は含めないです。
port 443
scheme https
logstash_format true
logstash_prefix testappec2log
flush_interval 10s
retry_limit 5
buffer_type file
buffer_path /var/log/td-agent/buffer/testapp.log.buffer
reload_connections false
</match>
編集が終わったら以下のコマンドを入力し動作を確認します。
#td-agent のプロセスを起動します。
# /etc/init.d/td-agent start
#Fluentd のログを確認
# tail -f /var/log/td-agent/td-agent.log
Elasticsearch Serviceの設定
マネジメントコンソール画面からElasticsearch Serviceを選択します。
まず作成したドメインの「ドメインのステータス」が「アクティブ」で「検索可能なドキュメント」の件数が1件以上になっていることを確認し選択します。
Kibanaの右のURLをクリックします。
[Welcome to Elastic Kibana] 画面が表示されるため、 [Explore on my own] を選択し、 Kibana の画面を開きます。
[Create index pattern] をクリックし、 [Create index pattern] 画面において、 [Index pattern] に「 testappec2log-* 」を入力し、右側の [Next step] をクリックします。
[Time Filter field name] において、 [@timestamp] を選択し、画面右下の [Create index pattern] をクリックします。
Kibana の画面の左ペインからkibana_managementアイコンをクリックし、 [Saved Objects] をクリックします。画面右上の [Import] をクリックします。
[Saved Objects] 画面において、[Import] アイコンをクリックし「 2-visualization.json 」を選択し、 [Import] をクリックします。続いての画面において、 [New index patten] に対して、「 testappec2log-* 」を選択し、 [Confirm all changes] をクリックし、インポートを完了します。問題なくインポートが完了したら、 [Done] をクリックすると、元の画面に戻ります。(この2-visualization.jsonファイルは参考資料のGitにあるのでそれを参照してください。 )
続いて、再度 [Saved Objects] 画面において、[Import] アイコンをクリックし、 Asset 資料の「 2-dashboard.json 」を選択し、 [Import] をクリックし、インポートします。問題なくインポートが完了したら、 [Done] をクリックすると、元の画面に戻ります。(この2-dashboard.jsonファイルも参考資料のGitにあるのでそれを参照してください。 )
以上のような設定を行うことが出来るとKibana の画面で以下のような値が表示されます。
<参考資料>
https://github.com/aws-samples/amazon-s3-datalake-handson/tree/master/JP
Fluentdに関して
AWSのIAMロールとポリシーの違い