joppot

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

サーバ

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

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

Pocket

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

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

関連記事

vagrantで取得したlet’s encryptのssl証明書をec2のnginxで使用する

概要 みなさんこんにちはcandleです。今回は取得したvagrantのubuntuで取得したlet’s encryptを実際に使用してみます。 もしも、まだ取得してない人は前回の記事を確 …

出力fluentdから収集fluentdへforwardを使ってログデータを送信する方法

概要 みなさんこんにちはcandleです。今回はfluentdサーバを2台使って、ログの収集を行ってみたいと思います。サーバ2台はどのような環境でも良いのですが、私が今回説明する環境は1つはMac P …

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

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

ruby on railsで出力されるlog(ログ)のフォーマットを変更する

概要 みなさんこんにちはcandleです。今回はrailsのログに関する記事です。railsは決まった記述でログを出力します。 webアプリケーションを実行中におかしな挙動が合った場合はこのログをもと …

railsのaws-sdk gemを使ってs3のファイルを削除する

by martinak15 概要 みなさんこんにちはcandleです。今回はs3にアップロードされている画像ファイルをrailsのaws-sdk gemを使用して削除してみたいと思います。 記事中で開 …

  • English
  • 日本語

プロフィール


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

スポンサードリンク

アーカイブ