概要
みなさんこんにちはcandleです。今回はapacheのアクセスログとエラーログをfluentdを使って取得して見たいと思います。
前提
一台のサーバ上にapacheサーバとfluentdサーバが構築されている
サーバはLanの中のハードでもvagrantでもvirtual machineでもvpsでもなんでも良いです。
私はvagrantのCentOS6.5を使用します。実際今回の題材はamazon linuxでも使えます。
fluentdの設定ファイルを作る
fluentdの設定ファイルをまだ作成していない場合は下のコマンドで作成しましょう。
sudo mkdir /etc/fluent/ sudo chown root:`whoami` /etc/fluent/ sudo chmod 775 /etc/fluent/ cd /etc/fluent/ fluentd --setup ./
これで作成出来ました。
fluentdのapacheのaccess logを取得する設定
fluent.confをエディタで開きます。エディタはemacsでもvimでもなんでも良いです。
下の内容を貼り付けて保存します。
<source> type tail path /var/log/httpd/access_log tag apache.access pos_file /var/log/fluent/access_log.pos format apache2 </source> <match apache.access> type file path /var/log/fluent/apache_access time_slice_format %Y%m%d time_slice_wait 1s compress gzip </match>
fluentdのapacheのerror logを取得する設定
access_logはformatにapache2というのがあるのですが、error_logはないので、独自のフォーマットを作ります。これはqiitaのとある記事に載っていたのを使わせてもらっています。
<source> type tail path /var/log/httpd/error_log tag apache.error pos_file /var/log/fluent/error_log.pos format /^\[[^ ]* (?<time>[^\]]*)\] \[(?<level>[^\]]*)\] (?<message>.*)$/ </source> <match apache.error> type file path /var/log/fluent/apache_error time_slice_format %Y%m%d time_slice_wait 1s compress gzip </match>
エラーログの設定は以上です。
fluentdの実行の用意をする
fluentdのログを保存するフォルダを作っておきましょう。
sudo mkdir /var/log/fluent/ sudo chown root:`whoami` /var/log/fluent/ sudo chmod 770 /var/log/fluent/
一般にapacheというかhttpdのaccess_logとerror_logは権限がrootのみに与えられており、ログインユーザーからはアクセス出来ないようになっています。もしも、fluentdをログインユーザーとして実行する場合はfluentdはaccess_logにアクセスできません。
もちろん、本番環境を考えるとfluentdは自動起動になっていると思うのでrootユーザでfluentdが起動されているから問題はないでしょう。しかし、練習の段階ではわざわざfluentdを自動起動にするとテストが面倒なので、httpdのaccess_logとerror_logの権限を変更しておきます。
sudo chown root:`whoami` /var/log/httpd/ sudo chmod 750 /var/log/httpd/ sudo chown root:`whoami` /var/log/httpd/access_log /var/log/httpd/error_log
準備が出来ました。
fluentdを実行してみる
それでは実際にapacheのログが取れるか試してみます。
まずは、apacheを起動します。
sudo service httpd start
次に、fluentdを起動します。
fluentd -c /etc/fluent/fluent.conf -vv
準備ができたので、ブラウザでサーバにアクセスしてみます。
これで、apacheのアクセスログがとれているはずです。ログがある場所に移動します。
cd /var/log/fluent/ ls
下のようにファイルが生成されています。
ファイルの最後にposと付いているのは置いておいて、重要なのはapache_access.201408. …..というファイルです。
ここにapacheのアクセスログの内容が保存されています。
apacheのerror_logが作成されていないのはエラーがapacheに出ていないからです。
railsとかphpのソースをわざと間違えればapacheのエラーがでます。
どうでしょうか。
まとめ
apacheのアクセスログとエラーログはfluentdの中では割と簡単に取れる部類のものですね。