##Fluentdとは
##セットアップ
- Railsのログと、ウェブサーバの標準的なログを、S3に集約する構成
- fluentdのエージェントのインストールは、下記URLから、各ディストリビューション別にチュートリアル閲覧可能
- http://docs.treasuredata.com/articles/td-agent#install-td-agent
###conf
td-agent.conf
<match *.**>
type forest
subtype s3
<template>
aws_key_id xxx #IAMでS3への書き込み権限をもったものを指定(後述)
aws_sec_key xxx #IAMでS3への書き込み権限をもったものを指定(後述)
s3_bucket fluentd-logging
path others/
buffer_path /var/log/td-agent/buffer/${tag}
time_slice_format ${tag}/%Y%m%d%H
time_slice_wait 10m
flush_interval 1m
format_json true
include_time_key true
include_tag_key true
buffer_chunk_limit 256m
</template>
</match>
<source>
type forward
</source>
<source>
type config_expander
<config>
type tail
format apache2
path /var/log/httpd/access_log
pos_file /var/log/td-agent/apache2.access_log.pos
tag ${hostname}/apache.access
</config>
</source>
<source>
type config_expander
<config>
type tail
format /^\[[^ ]* (?<time>[^\]]*)\] \[(?<level>[^\]]*)\] \[pid (?<pid>[^\]]*)\] \[client (?<client>[^\]]*)\] (?<message>.*)$/
path /var/log/httpd/error_log
pos_file /var/log/td-agent/apache2.error_log.pos
tag ${hostname}/apache.error
</config>
</source>
<source>
type config_expander
<config>
type tail
format syslog
path /var/log/messages
pos_file /var/log/td-agent/syslog.messages.pos
tag ${hostname}/syslog.messages
</config>
</source>
<source>
type config_expander
<config>
type tail
format syslog
path /var/log/cron
pos_file /var/log/td-agent/syslog.cron.pos
tag ${hostname}/syslog.cron
</config>
</source>
<source>
type config_expander
<config>
type tail
format syslog
path /var/log/secure
pos_file /var/log/td-agent/syslog.secure.pos
tag ${hostname}/syslog.secure
</config>
</source>
gem 'act-fluent-logger-rails', '0.0.4' #まだ自社環境が Rails3系だったので、0.0.4を指定
config/fluent-logger.yml
development:
fluent_host: '0.0.0.0'
fluent_port: 24224
tag: 'rails.log'
messages_type: 'string'
staging:
fluent_host: '0.0.0.0'
fluent_port: 24224
tag: 'rails.log'
messages_type: 'string'
production:
fluent_host: '0.0.0.0'
fluent_port: 24224
tag: 'rails.log'
messages_type: 'string'
environments/production.rb
config.log_level = :info
config.logger = ActFluentLoggerRails::Logger.new
##権限の変更
- ログの収集のために権限を設定: http://dev.classmethod.jp/cloud/amazon-linux-fluentd-setup-plugin/
- IAMロールで、特定のS3バケットへの書き込み権限を設定: https://github.com/fluent/fluent-plugin-s3#iam-policy
##ハマり所
- S3へのアップロードタイミング
- flush_intervalを指定しないと、下記のタイミングでアップロードされる
WARNING: By default, files are created on an hourly basis (around xx:10). This means that when you first import records using the plugin, no file is created immediately. The file will be created when the time_slice_format condition has been met. To change the output frequency, please modify the time_slice_format value. To write files every minute, please use %Y%m%d%H%M for the time_slice_format.
##収集の設計を考える
###収集ポイント
####Railsアプリケーションログ
- https://github.com/fluent/fluent-logger-ruby
- https://github.com/actindi/act-fluent-logger-rails (0.0.4までが Rails3.* 系)
####Apache
- access_log: http://docs.fluentd.org/articles/apache-to-s3
- error_log: http://www.stormacq.com/storing-apache-access-and-error-logs-to-amazon-s3-with-fluentd/
###ログ集約
- Apacheのログ集約設定 参考になりそう https://gist.github.com/vananasian/4215057
###活用
- とりあえずつっこんで、後でEMRでがんばる
- Redshiftはなんか難しそう。高そう..
- MongoDBなら、Capping Collectionで、DB上でデータベースの上限を決めれるので、「直近のDBは高速で検索」「それ以前のデータはS3(さらに以前のデータはGlacier)で管理だけ」だと、良い感じな気がする。その方が設計方針もだんだんと決めれそう
- あとは、elasticsearchでという選択肢も。これも簡単そう。
##またあとで
- 分析を見越した各ログフォーマットの調整
- 実際になにでデータ分析するか