これは「初老丸の独り Advent calendar 2015」の七日目の記事です。
tl;dr
引き続き、Amazon ES を使う。
CloudWatch Logs との連携を試してみる。
CloudWatch Logs との連携
連携の概要
- CloudWatch Logs のログを直接というわけにはいかない
- Subscription Filter を指定する
- Lambda を介して Amazon ES に転送される
ざっくり手順
ざっくりとした手順は以下の通り。
- CloudWatch Logs の Log Group の作成
- Log Group に Log Stream を作成
- Log Stream にログが入ってくる...
- Log Group を選択して [Start Streaming to Amazon Elasticsearch Service] を選択
- Amazon ES のドメインを選択、Lambda Function 用の IAM role を作成(既存の role を選択するか新規作成する)
- Log Format を選択(今回は JSON を選ぶ)
- 確認して Start Streaming
- Amazon ES にインデックスが作成されていることを確認する
CloudWatch Logs にログを突っ込むまで
今回は fluentd を利用して Apache のアクセスログを CloudWatch Logs に放り込むことにする。
$ fluent-gem install fluent-plugin-cloudwatch-logs --no-ri --no-rdoc -V $ cat fluentd.conf <source> type tail path /tmp/log/apache2/access.log format apache2 pos_file /tmp/apache.access.log.pos tag apache.access </source> <match apache.access> type copy <store> type stdout </store> <store> type cloudwatch_logs log_group_name apache-log log_stream_name apache-access-log auto_create_stream true </store> </match> $ export AWS_REGION="ap-northeast-1" $ export AWS_ACCESS_KEY_ID="YOUR_ACCESS_KEY" $ export AWS_SECRET_ACCESS_KEY="YOUR_SECRET_ACCESS_KEY" $ fluentd -c fluentd.conf -l debug.log &
しばらくすると apache-access-log-demo にログが放り込まれてきている(はず)。
Amazon ES への転送設定開始
ロググループを指定してアクションから [Start Streaming to Amazon Elasticsearch Service] を選択する。
Amazon ES のドメインと Lambda Function 用の IAM role を作成
[Create new IAM role] を選択すると以下のような IAM role が作成される。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:*:*:*" ] }, { "Effect": "Allow", "Action": "es:ESHttpPost", "Resource": "arn:aws:es:*:*:*" } ] }
Lambda function も以下のように自動的に作成されている。
ログフォーマットを指定
今回は Fluentd でシリアライズされたログが CloudWatch Logs に入っているのでそのまま JSON を選択。
確認して Start Streaming
念のために Subscription filter を AWS CLI で確認する。
$ aws logs describe-subscription-filters --log-group-name apache-log { "subscriptionFilters": [ { "filterName": "ElasticsearchStream_oreno-es", "destinationArn": "arn:aws:lambda:ap-northeast-1:xxxxxxxxxxxxxxxxxx:function:LogsToElasticsearch_oreno-es", "creationTime": 1449390986860, "filterPattern": "", "logGroupName": "apache-log" } ] }
Amazon ES でインデックスを確認
Streaming が開始するとインデックスが作成されている。
そして Kibana3 で
Amazon ES には Kibana4 と Kibana3 が同梱されているので、今回は Kibana3 でポチポチ。
久しぶりの Kibana3 は個人的には敷居が高かった...
以上
とりあえず 7 日目までキタけど、CloudWatch Logs との連携は思った以上に簡単だった。