joppotjoppotコピペで絶対動く。2014年9月1日Tweet概要みなさんこんにちはcandleです。今回はELB越しのapacheのアクセスをカスタムログを使用した場合にfluentdで如何にして取るかを紹介します。fluentdがapacheのaccess_logを取得するのは簡単なのですが、ELB越しのデータを取得し、それをカスタムログに収めた場合は、fluentdのフォーマットは自分で書くしかありません。fluentdの正規表現は複雑です。linuxかCentOSでapacheサーバとfluentdサーバが同一サーバ上で構築されている。動作確認だけしたい場合はvagrantやvmでも可能です。ロードバラサーを使ってEC2にアクセスが来ていること。前提がやや複雑になりましたが、様はEC2とELBを使ってapacheとfluentdサーバの環境ができていいれば可能です。apacheのカスタムログを設定するapacheはデフォルトでaccess_logにウェブサーバへのアクセスを記録するのですが、残念ならが、ロードバランサーを挟むと、apacheはアクセスは全てロードバラサから来たものと判断するので、有効なアクセスログが集まりません。そこで、カスタマイズを使うのですが、カスタマイズすると、今度はfluentdがapacheのログを取得しようとすると、フォーマットが合わずに取得できなくなってしまうので、独自フォーマットを作る必要があります。それをやっていきます。apacheのカスタムログの設定から。サーバにsshでアクセスして、/etc/httpd/conf/httpd.confをエディタで開きます。LogFormatの記述がある500行目辺りに下の内容を貼り付けます。env=!nolog設定は次の様になっています。%{X-Forwarded-Proto}iを加えています。rotatelogsを使って/var/log/httpd/myservice/の中に「acccess_log.年月日」というファイルを生成してカスタムログを保存します。普通のaccess_logのように1つのファイルで管理しないかというと、ロードバラサを使っているサービスとも成るとものすごいサービスかもしれません。なった時、1つのファイルにだけ書き込んでいては大変です。そこで、アクセスログを年月日で分割して管理するのです。カスタムログの設定を見ると、/var/log/httpd/フォルダの中にmyserviceとうフォルダを作っていますね。先にこのフォルダを作っておきます。/var/log/httpd/myservice/apacheのカスタムログの設定ができました。apacheのカスタムログができるか確認するapacheを起動して、サーバにアクセスして、カスタムログができるか確認しましょう。start起動したのでサーバにアクセスします。カスタムログのパスに移動します。/var/log/httpd/myservice/ls中身を確認しましょう。詳しいデータは出てきませんが。一応うまくいっているっぽいです。AWSのEC2上で同じ設定をして、ロードバラサ経由でサーバにアクセスすれば、問題なくデータがとれます。IPアドレスなどの関係でちょっと例を出すことはできませんが、恐らくできます。fluentdでapacheのカスタムログを取得する設定fluentdの設定ファイルをまだ作成していない場合は下のコマンドで作成しましょう。./一般にapacheの/var/log/httpdの中は権限がrootのみに与えられており、ログインユーザーからはアクセス出来ないようになっています。fluentdをログインユーザーとして実行する場合はfluentdは/var/log/httpd/の中にアクセスできません。本番環境を考えるとfluentdは自動起動になっていると思うのでrootユーザでfluentdが起動されているから問題はないでしょう。練習の段階ではわざわざfluentdを自動起動にするとテストが面倒なので、httpdの中の権限を変更します。/var/log/httpd/次に、やや面倒ですが、テストの段階では/var/log/httpd/myservice/にその日のファイルがapacheのカスタムログによって作成されてから下のコマンドでログインユーザーからアクセスできるようにしましょう。'+%Y%m%d'`&quot;先ほども書きましたが、apacheの独自のログフォーマットを作成した場合は、fluentd側もそれに対応した正規表現でフォーマットを作る必要があります。下のソースがfluentdでapacheのカスタムログを取得する記述です。/etc/fluent/fluent.confを開いてコピペしましょう。gzip&lt;/match&gt;ソースはpathでapacheのカスタムログがある場所を参照します。取得したデータはcustom_apache.accessというタグを付けます。posファイルを/var/log/fluent/に置いて、取ってきたデータをformatの正規表現に従って、ソートします。ちなみにtime_formatを上の様に設定しないとエラーがでます。実際あれがなにをやっているか自分もわかりません。matchのところで取得し、ソートしたデータを受け取って、/var/log/fluent/にcustom_apache_accessという形で日にち別でファイルを分けて保存します。/var/log/にfluentフォルダがない場合は先に作成しておきましょう。/var/log/fluent/fluentdの設定は以上です。fluentdとapacheを動かしてログを取るでは、実際にサーバを起動してロードバラサ越しのアクセスログをとってみましょう。始めにapacheを起動します。start次に、fluentdを起動します。-vvするとfluentdが待機モードになるので、その画面は置いておいておきます。ブラウザでサーバにアクセスしましょう。コンソールの別のウィンドウを開いて、custom_apache_accessのログがfluentdでとれているか確認します。/var/log/fluent/もしも「custom_apache_access.20140822.bfa130598788113a4」みたいなのが作られていれば成功です。中身を見てみて、jsonになっているか確認します。先ほども書いた様に、この記事中はローカルのvagrant環境で動いているので、カスタムログの肝心のところは空ですが、AWSの本番環境ではしっかりログが取れています。出来ましたでしょうか?まとめ今回の記事はかなり難しい処理をまとめています。私もこれだけやるのに1周間位かかりました。わからない点や質問などがあればコメント欄にお願いします。スポンサードリンク「為になったなぁ」と思ったら、シェアお願いします。コメントをキャンセルメールアドレスが公開されることはありません。みなさんこんにちはcandleです。今回はCentOSのapacheサーバー上にcakephpを導入してみましょう。みなさんこんにちはcandleです。今回はapacheのアクセスログとエラーログをfluentdを使って取得して見たいと思います。皆さんこんにちはcandleです。railsのキャッシュを管理したいと思います。みなさんこんにちはcandleです。最近SSL通信で根幹に関わるセキュリティホールが見つかったのは記憶に新しいですね。みなさんこんにちはcandleです。今回はec2のデフォルトで入っているvimを削除してみたいと思います。emacs使いの私としてはvimは、まぁ、いらないと考えました。Sansフォントウェイトのcss書き方まとめプロフィールベンチャー企業のCTOをやってます。大学時代にプログラミングを始め、javaから入門し、C++へて、PHPへと進み、会社ではRailsを使用。環境設定スポンサードリンクjoppotコピペで絶対動く。