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

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

関連記事

ec2のメモリ状態をwatchとfreeで監視する

English 日本語 概要 みなさんこんにちはcandleです。今回はec2のメモリをリアルタイムで監視する方法を紹介します。 ec2サーバはt2.microだとメモリが1GBしかなく、その上でco …

sshコマンドをaliasかssh configを使って短縮する

概要 みなさんこんにちはcandleです。今回はsshの接続先のホスト名を短くする方法です。 ssh接続は非常に強力なネットワークツールですが、接続先の指定がやや面倒ですね。それを単純にする方法をまと …

macにmemcachedをインストールする方法と動作確認

概要 memcachedはrailsやphpのセッションを保持しておく時に使うソフトというかサーバ的なものです。一般にSNSやログイン式のサービスを提供する時はセッションというのを持ちます。セッション …

AWS環境でELB(ロードバランサー)とEC2サーバでapacheを使っている場合にhttpからhttpsにリダイレクトする方法

概要 みなさんこんにちはcandleです。今回はマニアックな記事ですが、恐らくスタートアップ企業などではわりと使う内容だと思うのでまとめておきます。 この方法が全てのサービス上でベストなやり方なのかど …

pythonのfabricでファイルを分割しfabfileに読み込む方法

概要 皆さんこんにちはcandleです。今回はfabricで分割したpythonファイルを読み込んでみましょう。 fabricはfabfile.pyというファイルに実行したいコマンドを書くのですが、 …

  • English
  • 日本語

プロフィール


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

スポンサードリンク

アーカイブ