:::: MENU ::::

JIRA/Confluence/BitbucketServerのユーザーアクセスログ出力とログフォーマット変更とFluentdによるパース

出力時のログフォーマットを忘れることが多いため記事にしておく。
書いてて思ったのだが、これ思いっきりフォーマット変えるとツールのログ診断使えなくるかも。

2019/07/04更新:現時点での最新バージョンに対応

JIRA

log4j

log4j で出力したいときは下記 URL を参考にすればよい。

How to Enable User Access Logging - Atlassian Documentation

Tomcat

Tomcat Valve で出力したいときは下記 URL を参考にする。

Audit Confluence Using the Tomcat Valve Component - Atlassian Documentation

だが、例で載っているフォーマットはパースしにくくてあとで困ることになるので、
普通に Apache2 ライクなものにしておく。いまなら LTSV のほうが汎用的かな?

[JRASERVER-59405] Add thread name to Tomcat access.log logger - Atlassian JIRA
の提案を受け入れて、かつ X-Forward-for を追記したものにする。

pattern="%a %{jira.request.id}r %{jira.request.username}r %t "%m %U%q %H" %s %b %D "%{Referer}i" "%{User-Agent}i" "%{jira.request.assession.id}r" %{X-Forwarded-For}i %{X-Forwarded-Proto}i"

これで ${JIRA_INSTALL}/log/access_log.%Y-%m-%d.log というファイルで出力される。

fluentd の format は以下のような感じ

format /^(?<remote>[^ ]*) (?<request.id>[^ ]*) (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<code>[^ ]*) (?<size>[^ ]*) (?<response.time>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)" "(?<ssession.id>[^\"]*)" (?<client>[^\"]*)?, (?<proxy>[^\"]*) (?<forwarded-proto>[^\"]*))?/

Confluence

log4j

JIRA と一緒

Tomcat

JIRA と一緒だけど jira.request.id に当たるものが見当たらなかったので削除、
jira.request.assession.id は User session id で代替。

Apache Tomcat Configuration Reference (6.0.53) - The Valve Component

pattern="%t %{X-AUSERNAME}o "%{User-Agent}i" %h "%r" %b %D %s "%{Referer}i" %I %{X-Forwarded-For}i"

fluentd の format は以下のような感じ

format /^\[(?<time>[^\]]*)\] (?<user>[^ ]*) "(?<agent>[^\"]*)" (?<remote>[^ ]*) "(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)?" (?<size>[^ ]*) (?<response.time>[^ ]*) (?<code>[^ ]*) "(?<referer>[^\"]*)" (?<tomcat.thread>[^ ]*) (?<client>[^,]*)(?:, +(?<proxy>[^ ]*) +\S*)?/

Bitbucket Server

Tomcat

Bitbucket Server はたしかデフォルトでアクセスログは吐かれていたはず。
ただ他のツールと初期のフォーマットがまるで違います。
Tomcat の valve 設定して他と合わせてほうが綺麗かも。

How to read the Bitbucket Server Log Formats - Atlassian Documentation
Configure Bitbucket Server Logging - Atlassian Documentation

nginx 等でプロキシさせている場合はアクセス元の IP を呼び出す用の設定が必要。
Log the original IP address when Bitbucket Server is behind a load balancer - Atlassian Documentation

Bitbucket Server のデフォルトログ用の fluentd の format は以下のような感じ

format /^(?<client>[^(,| )]*)(?:,+(?<proxy>[^\|]*))? \| (?<protocol>[^ ]*) \| (?<request.id>[^ ]*) \| (?<user>[^ ]*) \| (?<time>[^\|]*) \| "?(?<method>\S+)(?: +(?<path>[^ ]*) +\S*)(?: +(?<git.action>[^ ]*))?(?: '+(?<git.repo>[^']*)')?"? \| "(?<referer>[^\"]*)"(?: +"(?<agent>[^\"]*)")? \| (?<code>[^ ]*) \| (?<byte.read>[^ ]*) \| (?<byte.written>[^ ]*) \| (?<labels>[^\|]*) \| (?<response.time>[^ ]*) \| (?<session.id>[^\ ]*) \|/