要件
前回の記事を読んでくださった @repeatedly さんから
@inokara 読ませて頂きました.td-agentにはs3プラグインは同梱されているはずなのですが,なぜ見つからなかったのか気になる所です…
— Mr. Fiber✅さん (@repeatedly) 2013年4月21日
というご指摘を頂きましたので、改めて検証しつつ、セットアップを chef のレシピで書いてみました。
手順
- 今回は knife ec2 を使って全ての設定を行います。
- Chef は Hosted Chef を使うので、Hosted Chef が利用出来る状態になっておくことが前提となります。
knife ec2 の準備
knife ec2 のセットアップ
sudo gem install knife-ec2 --no-ri --no-rdoc
AWS のアクセスキーとシークレットキーの設定
vim ~/.chef/knife.rb
knife[:solo_path] = '/tmp/chef-solo' knife[:aws_access_key_id] = "xxxxxxx" knife[:aws_secret_access_key] = "xxxxxxxxxxxxxxx"
確認
knife ec2 server list -u inokara --region ap-northeast-1
cookbook の作成
こちらに公開致しました。
Apache インストール
package "httpd" do action :install end directory "/var/log/httpd" do mode "00755" end service "httpd" do supports :status => true, :restart => true, :reload => true action [ :enable, :start ] end
td-agent をインストールする為の yum リポジトリ設定
cookbook_file "/etc/yum.repos.d/td.repo" do source "td.repo" mode 00644 end
以下のファイルを files/default/td.repo に設定する。
[treasuredata] name=TreasureData baseurl=http://packages.treasure-data.com/redhat/$basearch gpgcheck=0
td-agent インストール
package "td-agent" do action :install end cookbook_file "/etc/td-agent/td-agent.conf" do mode "00644" source "td-agent.conf" action :create end directory "/var/log/fluent" do mode "00775" action :create end directory "/tmp/td-agent" do mode "00777" end service "td-agent" do supports :status => true, :restart => true, :reload => true action [ :enable, :start ] end
td-agent.conf
td-agent.conf を file/default/td-agent.conf として用意する
<source> type tail format apache path /var/log/httpd/access_log tag apache.access pos_file /tmp/td-agent/apache.pos </source> <match apache.access> type s3 aws_key_id ${your_key_id} aws_sec_key ${your_sec_key} s3_bucket ${your_bucket} s3_endpoint s3-ap-northeast-1.amazonaws.com path logs/ buffer_path /var/log/fluent/s3 time_slice_format %Y%m%d/ip-%H time_slice_wait 10m #flush_interval 5s </match>
- 下記の三つは適宜設定します。
- aws_key_id ${your_key_id}
- aws_sec_key ${your_sec_key}
- s3_bucket ${your_bucket
レッツクッキング
Hosted Chef に cookbook を登録
cd ${your_cookbook_path} knife cookbook upload ${cookbook_name} -o ./
レッツクッキング
knife ec2 コマンドを使ってインスタンスの作成後に Apache と td-agent のインストールを行なってしまいます。
knife ec2 server create -r 'recipe[fluentd_apache::repos_setting],recipe[fluentd_apache::apache_install],recipe[fluentd_apache::fluentd_install]' -Z ap-northeast-1a -I ami-4e6cd34f -f t1.micro -G quick-start-4 -i ~/.ssh/${your_aws_ssh_key_file} -x ec2-user -VV -S ${your_aws_ssh_key_name}
オプション | ざっくりとした解説 |
---|---|
-r 'recipe...' | Hosted Chef に登録した cookbook のレシピを設定 |
-Z... | AWS の Availability Zone を指定 |
-I... | AWS の AMI を指定 |
-f... | AWS の flavor を指定 |
-G... | AWS の Security Group を指定 |
-i ... | AWS の秘密鍵ファイルパスを指定 |
-x ... | AWS のインスタンス ssh ユーザー名を指定 |
-S ... | AWS の秘密鍵名を指定 |
尚、今回は .chef/knife.rb に region の設定が無い場合に以下のエラーが出て泣きそうになりました。
ERROR: You have not provided a valid image (AMI) value. Please note the short option for this value recently changed from '-i' to '-I'.
ということでこちらを参考に knife.rb に以下のようなリージョン設定を行いました。
knife[:region] = 'ap-northeast-1'
まとめ
- td-agent は前回の記事同様に S3 プラグインは同梱されている
- td-agent に関しては S3 以外にも様々なプラグインがあるので試してみる
- cookbook は美しくはないが、とりあえず目的は達成されていると思われる