要件
- Apache のアクセスログを fluentd を使って捌く
- ストレージを S3 ではなく redis を使う
環境
fluent-plugin-redis のインストール
まず普通に gem でインストール
gem install fluent-plugin-redis
/etc/td-agent/td-agent.conf の設定
<source> type tail format apache path /var/log/httpd/access_log tag redis.access pos_file /tmp/td-agent/apache.pos </source> <match redis.**> type redis host localhost port 6379 # database number is optional. db_number 0 # 0 is default </match>
/etc/init.d/td-agent restart
さくっとココまで来れました。これは順調と思いきや...
/etc/init.d/td-agent restart
こんなエラー...
2013-04-27 02:50:17 +0900 [error]: config error file="/etc/td-agent/td-agent.conf" error="Unknown output plugin 'redis'. Run 'gem search -rd fluent-plugin' to find plugins"
どうやら fluent-plugin-redis が認識されていない模様...fluent の gem 環境を確認してみる。
/usr/lib64/fluent/ruby/bin/gem environment
RubyGems Environment: - RUBYGEMS VERSION: 1.8.23 - RUBY VERSION: 1.9.3 (2012-04-20 patchlevel 194) [x86_64-linux] - INSTALLATION DIRECTORY: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1 - RUBY EXECUTABLE: /usr/lib64/fluent/ruby/bin/ruby - EXECUTABLE DIRECTORY: /usr/lib64/fluent/ruby/bin - RUBYGEMS PLATFORMS: - ruby - x86_64-linux - GEM PATHS: - /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1 - /root/.gem/ruby/1.9.1 - GEM CONFIGURATION: - :update_sources => true - :verbose => true - :benchmark => false - :backtrace => false - :bulk_threshold => 1000 - REMOTE SOURCES: - http://rubygems.org/
td-agent が参照する gem は通常の gem とは異なるんだな(という認識)ということで、改めて td-agent が参照する gem を使って fluent-plugin-redis をインストール
/usr/lib64/fluent/ruby/bin/gem install fluent-plugin-redis
エラーは続くよどこまでも
td-agent が参照する gem を使って fluent-plugin-redis も無事に終わり、改めて td-agent の再起動を行うと...
/etc/init.d/td-agent restart
今度は新たな問題が発生。正常に td-agent は起動するものの /var/log/td-agent/td-agent.log に以下のようなログが出力される。
2013-04-27 08:14:08 +0900 [warn]: before_shutdown failed error="getaddrinfo: Name or service not known" 2013-04-27 08:14:08 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/redis-2.2.2/lib/redis/connection/ruby.rb:26:in `initialize' 2013-04-27 08:14:08 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/redis-2.2.2/lib/redis/connection/ruby.rb:26:in `new' 2013-04-27 08:14:08 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/redis-2.2.2/lib/redis/connection/ruby.rb:26:in `block in connect' 2013-04-27 08:14:08 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/1.9.1/timeout.rb:68:in `timeout' 2013-04-27 08:14:08 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/redis-2.2.2/lib/redis/connection/ruby.rb:128:in `with_timeout' 2013-04-27 08:14:08 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/redis-2.2.2/lib/redis/connection/ruby.rb:25:in `connect' 2013-04-27 08:14:08 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/redis-2.2.2/lib/redis/client.rb:227:in `establish_connection' 2013-04-27 08:14:08 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/redis-2.2.2/lib/redis/client.rb:23:in `connect' 2013-04-27 08:14:08 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/redis-2.2.2/lib/redis/client.rb:247:in `ensure_connected' 2013-04-27 08:14:08 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/redis-2.2.2/lib/redis/client.rb:137:in `block in process' 2013-04-27 08:14:08 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/redis-2.2.2/lib/redis/client.rb:206:in `logging' 2013-04-27 08:14:08 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/redis-2.2.2/lib/redis/client.rb:136:in `process' 2013-04-27 08:14:08 +0900 [warn]: /usr/lib64/fluent/ruby/lib/ruby/gems/1.9.1/gems/redis-2.2.2/lib/redis/client.rb:100:in `call_pipelined' ... 続く
client.rb の connetct 辺りで落ちているようなので、どうやら redis 自体に繋がっていなさそうなログ。一か八か、td-agent.conf の redis のセクションを以下のように修正した。
<match redis.**> type redis host 127.0.0.1 # host localhost から修正 port 6379 # database number is optional. db_number 0 # 0 is default </match>
上記のように修正した後、改めて td-agent を再起動する...
まとめ
- memcached やMongoDB 自体、よく理解出来ていない上での redis ということで、「ただ触ってみただけ」な感じになってしまったのはまだまだ。
- td-agent のプラグインは下記のように確認することが出来そう
# /usr/lib64/fluent/ruby/bin/gem list| grep fluent | grep plugin fluent-plugin-flume (0.1.1) fluent-plugin-mongo (0.7.0) fluent-plugin-redis (0.2.0) fluent-plugin-s3 (0.3.1) fluent-plugin-scribe (0.10.10) fluent-plugin-td (0.10.14) fluent-plugin-webhdfs (0.1.4)
- 引き続き、幾つかのプラグインを試しつつ、現場でのログ分析の手順等について考えていきたいなーっと。
- chef でのセットアップ cookbook についても近日公開する予定。