joppot

コピペで絶対動く。説明を妥協しない

サーバ

CentOSのfluentdでapacheのaccess logとerror logを取得する

投稿日:2014年8月21日 更新日:


09jfa

概要

みなさんこんにちは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

準備ができたので、ブラウザでサーバにアクセスしてみます。

Hello

これで、apacheのアクセスログがとれているはずです。ログがある場所に移動します。

cd /var/log/fluent/
ls

下のようにファイルが生成されています。

apachelogs

ファイルの最後にposと付いているのは置いておいて、重要なのはapache_access.201408. …..というファイルです。
ここにapacheのアクセスログの内容が保存されています。

access_log_re

apacheのerror_logが作成されていないのはエラーがapacheに出ていないからです。
railsとかphpのソースをわざと間違えればapacheのエラーがでます。

ckeckerrorlog

どうでしょうか。

mainerrorlog


まとめ

apacheのアクセスログとエラーログはfluentdの中では割と簡単に取れる部類のものですね。

スポンサードリンク

「為になったなぁ」と思ったら、シェアお願いします。

-サーバ
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

MAMPでSSLを使ったhttps通信を行う

概要 みなさんこんにちはcandleです。最近SSL通信で根幹に関わるセキュリティホールが見つかったのは記憶に新しいですね。 今回扱う、https通信というのは公開鍵暗号方式を使ったセキュアな通信のこ …

centosのfluentdをdaemon toolsを使って自動起動する

概要 みなさんこんにちはcandleです。今回は、fluentdの自動起動を試したいと思います。 centosかつfluentdかつdaemon toolsって誰に需要があるのか分からない記事ですがよ …

awsのec2上でredmineをnginxで使用する方法

概要 みなさんこんにちはcandleです。今回はredmineをec2上で使用する方法を紹介します。 redmineはrailsで作られたwebアプリケーションです。railsで作られているということ …

fluentdのs3 pluginを使用して日付区切りでログデータをS3に送信する

概要 みなさんこんにちはcandleです。今回はfluentdのs3プラグインを使用して、railsなどのログを日単位でS3に投げる方法を紹介します。もちろん、応用して年単位とか月単位、時間単位で区切 …

AMIMOTO AMIのnginx上でvirtual hostを設定してphpサービスをリリースする

概要 みなさんこんにちはcandleです。今回はAMIMOTO AMIのnginx上でバーチャルホストを使う場合の設定をやってみたいと思います。 AMIMOTO AMIは高速でwordpressを作成 …

  • English
  • 日本語

ベンチャー企業のCTOをやってます。大学時代にプログラミングを始め、javaから入門し、C++へて、PHPへと進み、会社ではRailsを使用。自動化が大好きなプログラマー