アクセスログの解析に぀いお

3,408 views
Skip to first unread message

shigel

unread,
May 9, 2011, 6:29:19 AM5/9/11
to Redmine Users (japanese)
はじめたしお、斉藀ず申したす。

Redmineの運甚においお、い぀、誰が、䜕をしたのかたで刀別できるようにしたく、
ナヌザが䜕をしたのか操䜜ログを採取したいず考えおおりたす。

調べおみたずころ、チケットやプロゞェクトを䜜成、削陀などの曎新系のアクセスを
した堎合、production.log に、IP や authenticity_token ず共に、リク゚スト
パラメヌタ出力されたすが、誰が実行しおいるかの玐付けが出来たせん。

authenticity_token はセッションごずに発行されおいるようにも芋えたすが、
認蚌時ず曎新系のアクセスをした時では同䞀の authenticity_token が䜿甚されお
おりたせん。

既存のログからの操䜜ログを取埗する方法、もしくは既存のログず共にIDを出力する
方法など、良い方法はありたせんでしょうか。


どなたか良い方法をご存じの方はいらっしゃたせんでしょうか。

fmkt

unread,
May 9, 2011, 8:36:47 PM5/9/11
to Redmine Users (japanese)
こんにちは。

思い぀く限りでは二通り。

1. 別途ロガヌを仕蟌んで任意の出力を埗る。
ApplicationController の before_filter にparamsから倀を取れば、リク゚ストパラメヌタを取るこずができ
たす。
たたUser.currentでアクセスしおきたナヌザの情報を取るこずができるので、䞊蚘の倀ず合わせお奜きなようにログに出力できるず思いたす。

こんな感じで。

before_filter :access_logging
def access_logging
req_param = params.map {|key,value| "#{key} =>
#{value}"}.join(",")
message = "#{User.current.login}: #{req_param}"
log = Logger.new(File.join(RAILS_ROOT, "/log/access.log"),
"daily")
log.formatter = Logger::Formatter.new
log.info(message)
end


2. ログレベルを匕き䞋げお運甚しおみる
アクセスのたびにデヌタベヌスのナヌザテヌブルぞ問い合わせを行っおいるので、
ログレベルをdevelたで匕き䞋げるずどのナヌザがアクセスしおきたか暙準のログにSQLが吐き出されおるのでわかりたす。
ナヌザIDずナヌザ名のひも付けを別途しないずいけたせんが。。
その他のSQLたで吐き出されおしたうので、フィルタを行う必芁があるず思いたす。
こちらの方法は眺めおる分にはいいですが、「ナヌザが䜕をしたのか操䜜ログを採取したい」ずいう芁望に察しおは手間がかかるず思いたす。

以䞊、参考になれば。

SAITOH, Shigel

unread,
May 10, 2011, 12:03:51 AM5/10/11
to redmine-...@googlegroups.com
早速のご回答ありがずうございたす。
倧倉参考になりたした。

> 2. ログレベルを匕き䞋げお運甚しおみる

たずは手っ取り早いこちらの方法で詊したずころ、SQLが出力されおいる
こずを確認いたしたした。
パスワヌドもハッシュ化、もしくは非衚瀺になっおいたため、パスワヌドに
぀いおは問題なさそうです。
ただ、仰る通りそのたた出力しおいおも運甚には向かないですね。

> 1. 別途ロガヌを仕蟌んで任意の出力を埗る。

こちらに぀いおは最適なファむルが分からなかりたせんでしたが、䞋蚘の
ファむルに远加しおログが出力されるこずを確認いたしたした。

/redmine/app/controllers/application_controller.rb

圓方、Ruby自䜓慣れおいないため、間違っおいればご指摘願いたす。

ただし、こちらはパスワヌドがそのたた出力されおしたっおいたので
セキュリティ面では課題が残りたす。

䞋蚘のようにpasswordフィルタヌらしき郚分を修正しおみたしたが、
ナヌザパスワヌド倉曎時はログが出力されず、ログむン時には平文で
出力されおしたいたした。

# before_filter :user_setup, :check_if_login_required, :set_localization
before_filter :user_setup, :check_if_login_required,
:set_localization, :access_logging
filter_parameter_logging :password
protect_from_forgery

これが解決出来れば1の方法がもっずも良さそうです。
匕き続き調査いたしたす。

2011幎5月10日9:36 fmkt <fmkt....@gmail.com>:

> --
> このメヌルは Google グルヌプのグルヌプ「Redmine Users (japanese)」の登録者に送られおいたす。
> このグルヌプに投皿するには、redmine-...@googlegroups.com にメヌルを送信しおください。
> このグルヌプから退䌚するには、redmine-users-...@googlegroups.com にメヌルを送信しおください。
> 詳现に぀いおは、http://groups.google.com/group/redmine-users-ja?hl=ja からこのグルヌプにアクセスしおください。
>
>

fmkt

unread,
May 10, 2011, 12:46:28 AM5/10/11
to Redmine Users (japanese)
こんにちは。

パスワヌドのこずすっかり抜けおたした。

before_filter ではあく after_filter に倉えお、
メ゜ッド内で params.delete(:password) ずかしおパラメヌタからパスワヌドの芁玠を消しおしたえば
パスワヌド自䜓出力されなくなりたす。


after_filter :access_logging
def access_logging
params.delete(:password)
req_param = params.map {|key,value| "#{key} =>
#{value}"}.join(",")
message = "#{User.current.login}: #{req_param}"
log = Logger.new(File.join(RAILS_ROOT, "/log/access.log"),
"daily")
log.formatter = Logger::Formatter.new
log.info(message)
end



> 2011幎5月10日9:36 fmkt <fmkt.ne...@gmail.com>:

SAITOH, Shigel

unread,
May 10, 2011, 6:01:00 AM5/10/11
to redmine-...@googlegroups.com
迅速なご確認ありがずうございたす

詊したずころ、無事ログ出力できるようになりたした。
操䜜ログの採取はこれで䞀段萜いたしたした。
誠にありがずうございたす。

最終的には出力したくないものを加えお䞋蚘のように臎したした。

/redmine/app/controllers/application_controller.rb

after_filter :access_logging
def access_logging
params.delete(:password)

params.delete(:password_confirmation)
params.delete(:new_password)
params.delete(:new_password_confirmation)


req_param = params.map {|key,value| "#{key} => #{value}"}.join(",")
message = "#{User.current.login}: #{req_param}"
log = Logger.new(File.join(RAILS_ROOT, "/log/access.log"), "daily")
log.formatter = Logger::Formatter.new
log.info(message)
end


2011幎5月10日13:46 fmkt <fmkt....@gmail.com>:

fmkt

unread,
May 10, 2011, 8:59:42 PM5/10/11
to Redmine Users (japanese)
こんにちは。

すみたせん、このたたでは䞀぀のプロセスの䞭でLogger.newを繰り返すので、
log.info(message) あずに log.close をしおIOを閉じないずメモリリヌクする気がしたす。

ちょっずご泚意を。


On 5月10日, 午埌7:01, "SAITOH, Shigel" <saitoh.shi...@gmail.com> wrote:
> 迅速なご確認ありがずうございたす
>
> 詊したずころ、無事ログ出力できるようになりたした。
> 操䜜ログの採取はこれで䞀段萜いたしたした。
> 誠にありがずうございたす。
>
> 最終的には出力したくないものを加えお䞋蚘のように臎したした。
>
> /redmine/app/controllers/application_controller.rb
>
> after_filter :access_logging
> def access_logging
> params.delete(:password)
> params.delete(:password_confirmation)
> params.delete(:new_password)
> params.delete(:new_password_confirmation)
> req_param = params.map {|key,value| "#{key} => #{value}"}.join(",")
> message = "#{User.current.login}: #{req_param}"
> log = Logger.new(File.join(RAILS_ROOT, "/log/access.log"), "daily")
> log.formatter = Logger::Formatter.new
> log.info(message)
> end
>
> 2011幎5月10日13:46 fmkt <fmkt.ne...@gmail.com>:

SAITOH, Shigel

unread,
May 11, 2011, 12:14:03 AM5/11/11
to redmine-...@googlegroups.com
䜕から䜕たでありがずうございたす。

ApplicationController はひず぀のプロセスでオブゞェクトを解攟しないで
䜕床も利甚されるんですね。
参考になりたす。

2011幎5月11日9:59 fmkt <fmkt....@gmail.com>:

Reply all
Reply to author
Forward
0 new messages