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

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

関連記事

React + S3 + Route53 + CloudFrontでSSL使ってHTTPS化

概要 みさんさんこんにちはcandleです。今回はS3にデプロイしたReact webの通信をSSL化してみたいと思います。 最近はAPIサーバとReactフロントエンドを分離してwebサービスを提供 …

wordpressをnginxでsubdirectoryに配置する

概要 みなさんこんにちはcandleです。 今回はnginxを使って、サブディレクトリにwordpressを配置してルーティングを行う方法を紹介します。 実はこれ、結構苦労しました。わりと文献はあるの …

gemを使ってcentosにfluentdサーバを構築する

概要 みなさんこんにちはcandleです。今回はfluentdサーバをcentos上に構築したいと思います。 fluentdサーバといえば、railsやphpと連帯して、ユーザーのサービスサイト内での …

CentOS6.5にcomposerをインストールする

概要 みなさんこんにちはcandleです。cakephpではphpのライブラリ管理ツールcomposerと連帯して、便利に必要なライブラリを導入できます。 例えば、cakephpの標準テストツールph …

railsのfluent-logger gemを使ってユーザーのアクセスをfluentdサーバに収集する

概要 みなさんこんにちはcandleです。前回からfluentd関連の記事を続けていますが、今回辺りから実用的な使い方を書いていきたいと思います。 fluentdと言えば、ビックデータで扱うようなデー …

  • English
  • 日本語

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