Skip to content

Instantly share code, notes, and snippets.

@ShinsukeYokota
Created December 5, 2012 12:09
Show Gist options
  • Save ShinsukeYokota/4215057 to your computer and use it in GitHub Desktop.
Save ShinsukeYokota/4215057 to your computer and use it in GitHub Desktop.
fluentdでapacheのログ集約
■fluentdでapacheのログ集約
複数台あるAPIサーバのログをADMサーバのmongodbに保存する
ホスト:AWS/EC2インスタンス
OS:ScientificLinux6.1
【AWS】
## EC2のセキュリティグループの設定変更
ADMサーバが所属するセキュリティグループで、
APIが所属するセキュリティグループからの
TCP/24224
UDP/24224
のinboundを許可する
【API】
## Apacheの設定変更
# アクセスログの内容はcombinedioにレスポンスタイムを足したもの
# ELB配下にいるのでリモートホストのIPアドレスを取得できるように環境変数X-Forwarded-Forを使う
[api] vi /etc/httpd/conf/httpd.conf
------------
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>
CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/www.example.jp/access_log/access_log.%Y%m%d 86400 540" combinedio
------------
------------
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O %D" combinedx
</IfModule>
CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/www.example.jp/access_log/access_log.%Y%m%d 86400 540" combinedx
------------
## fluentd(td-agent)のインストール
# yumレポジトリを登録して
[api] cat <<__EOT__ > /etc/yum.repos.d/td.repo
[treasuredata]
name=TreasureData
baseurl=http://packages.treasure-data.com/redhat/$basearch
gpgcheck=0
__EOT__
# インストール
[api] yum install td-agent
## fluentdの設定
# バックアップ
[api] cp -p /etc/td-agent/td-agent.conf{,.orig}
# 設定上書き
[api] cat <<__EOT__ > /etc/td-agent/td-agent.conf
## File input
<source>
type tail
format /^(?<host>[^ ]*) [^ ]* (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)" (?<received_byte>[^ ]*) (?<sent_byte>[^ ]*) (?<response_time_micro_sec>[^ ]*))?$/
time_format %d/%b/%Y:%H:%M:%S %z
path /var/log/httpd/www.example.jp/access_log/access_log
pos_file /var/log/td-agent/pos/apache.access.api.pos
tag apache.access.api
</source>
<source>
type tail
format /^\[[^ ]* (?<time>[^\]]*)\] \[(?<level>[^\]]*)\] (?<message>.*)$/
time_format %b %d %H:%M:%S %Y
path /var/log/httpd/www.example.jp/error_log/error_log
pos_file /var/log/td-agent/pos/apache.error.api.pos
tag apache.error.api
</source>
## Forwarding
<match apache.**>
type forward
buffer_type file
buffer_path /var/log/td-agent/buffer/apache
flush_interval 60s
<server>
name example-adm
host adm.example.jp
port 24224
</server>
</match>
__EOT__
## 設定に合わせていろいろ準備
# pos, bufferファイル置場作成
[api] sudo -u td-agent mkdir /var/log/td-agent/{pos,buffer}
# apacheのログ(日付月ファイル)のシンボリックリンクを定期的に作成する処理
[api] cat <<__EOT__ > /usr/local/bin/set_daily_symlink.sh
#!/bin/sh
LINK=$1
FILE=${LINK}.`date '+%Y%m%d'`
if [ ! -e $LINK -o -L $LINK ];then
/bin/ln -sf $FILE $LINK
fi
__EOT__
[api] chmod a+x /usr/local/bin/set_daily_symlink.sh
[api] cat <<__EOT__ >> /etc/cron.d/httpd
# make symbolic link which is used by fluentd
5 0 * * * root /usr/local/bin/set_daily_symlink.sh /var/log/httpd/www.example.jp/access_log/access_log > /dev/null 2>&1
5 0 * * * root /usr/local/bin/set_daily_symlink.sh /var/log/httpd/www.example.jp/error_log/error_log > /dev/null 2>&1
__EOT__
[api] /usr/local/bin/set_daily_symlink.sh /var/log/httpd/www.example.jp/access_log/access_log
[api] /usr/local/bin/set_daily_symlink.sh /var/log/httpd/www.example.jp/error_log/error_log
## fluentd起動
[api] /etc/init.d/td-agent start
[api] chkconfig td-agent on
【ADM】
## fluentd(td-agent)のインストール
# yumレポジトリを登録して
[adm] cat <<__EOT__ > /etc/yum.repos.d/td.repo
[treasuredata]
name=TreasureData
baseurl=http://packages.treasure-data.com/redhat/$basearch
gpgcheck=0
__EOT__
# インストール
[adm] yum install td-agent
## fluentdの設定
# バックアップ
[adm] cp -p /etc/td-agent/td-agent.conf{,.orig}
# 設定上書き
[adm] cat <<__EOT__ > /etc/td-agent/td-agent.conf
## built-in TCP input
<source>
type forward
</source>
## MongoDB output
<match apache.access.api>
type mongo
database apache
collection access
host 127.0.0.1
port 27017
buffer_type file
buffer_path /var/log/td-agent/buffer/apache.access.api
flush_interval 10s
</match>
<match apache.error.api>
type mongo
database apache
collection error
host 127.0.0.1
port 27017
buffer_type file
buffer_path /var/log/td-agent/buffer/apache.error.api
flush_interval 10s
</match>
__EOT__
## 設定に合わせていろいろ準備
# pos, bufferファイル置場作成
[adm] sudo -u td-agent mkdir /var/log/td-agent/{pos,buffer}
## mongodbインストール、起動
# yumレポジトリを登録して
[adm] cat <<__EOT__ > /etc/yum.repos.d/10gen.repo
[10gen]
name=10gen Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
gpgcheck=0
__EOT__
# インストール
[adm] yum install mongo-10gen.x86_64 mongo-10gen-server.x86_64
# 起動
[adm] /etc/init.d/mongod start
[adm] chkconfig mongod on
## fluentd起動設定変更
# mongodbより後に起動するようにしないと、起動に失敗する
[adm] vi /etc/init.d/td-agent
------------
# chkconfig: - 80 20
------------
------------
# chkconfig: - 99 20
------------
## fluentd起動
[adm] /etc/init.d/td-agent start
[adm] chkconfig td-agent on
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment