第12章 ログ¶
この章ではログを説明します。サービスはログに始まりログに終わる。 ログは金であり法である正義の味方です。
ログはグローバルと仮想ホストに区分されます。 すべてのログは記録有無を設定することができ共通の属性を持つ。
<XXX Type="time" Unit="1440" Retention="10" Compression="OFF">ON</XXX>
Type (デフォルト: time)
,Unit (デフォルト: 1440分)
ログローテート条件を設定します。time
設定されたunit
時間(単位:分)ごとにログファイルをローテートします。size
設定されたunit
サイズ(単位:MB)ごとにログファイルをローテートします。both
コンマ(、)で区切って時間とサイズを同時に設定します。 たとえばUnit = "1440、100"である場合時間が24時間(1440分)または100MBの場合ログファイルをローテートします。
Retention (デフォルト: 10個)
単位のログファイルを最大n個の維持です。Compression (デフォルト: OFF)
ログがローテートされる圧縮を行う。 たとえばaccess_20140715_0000.logファイルがローテートされるとaccess_20140715_0000.log.gzに圧縮されて保存されます。
Type
が "time" 、 Unit
が10の場合ログは10分毎にローテートされます。 たとえばサービスを2:18分に開始してもログは10分の2:20、2:30、2:40にローテートされます。 同様に一日に一回毎日0時0分にローテートする1440(60分X 24時間)で Unit
値に設定します。
time
の設定でログは一日に一度無条件ローテートされるので Unit
の最大値は1440を超えることができない。
最大値は24時間(Unit = 1440)時間ごとにログがローテートするように設定した場合は次の図のようにログが記録されます。
Installログ¶
インストール/アップデート時にすべての内容がinstall.logに記録されます。 このログは別の設定がない。
#DownloadURL: http://foobar.com/ston/ston.2.0.0.rhel.2.6.32.x64.tar.gz
#DownloadTime: 13 sec
#Target: STON 2.0.0
#Date: 2014.03.03 16:48:35
Prepare for STON 2.0.0 install process
Stopping STON...
STON stopped
[Copying files]
`./fuse.conf' -> `/etc/fuse.conf'
`./libfuse.so.2' -> `/usr/local/ston/libfuse.so.2'
`./libtbbmalloc_proxy.so' -> `/usr/local/ston/libtbbmalloc_proxy.so'
`./start-stop-daemon' -> `/usr/sbin/start-stop-daemon'
`./libtbbmalloc_proxy.so.2' -> `/usr/local/ston/libtbbmalloc_proxy.so.2'
`./libtbbmalloc.so' -> `/usr/local/ston/libtbbmalloc.so'
`./libtbbmalloc.so.2' -> `/usr/local/ston/libtbbmalloc.so.2'
`./libtbb.so' -> `/usr/local/ston/libtbb.so'
`./libtbb.so.2' -> `/usr/local/ston/libtbb.so.2'
`./stond' -> `/usr/local/ston/stond'
`./stonx' -> `/usr/local/ston/stonx'
`./stonr' -> `/usr/local/ston/stonr'
`./stonu' -> `/usr/local/ston/stonu'
`./stonapi' -> `/usr/local/ston/stonapi'
`./server.xml.default' -> `/usr/local/ston/server.xml.default'
`./vhosts.xml.default' -> `/usr/local/ston/vhosts.xml.default'
`./ston_format.sh' -> `/usr/local/ston/ston_format.sh'
`./ston_diskinfo.sh' -> `/usr/local/ston/ston_diskinfo.sh'
`./wm.sh' -> `/usr/local/ston/wm.sh'
[Exporting config files]
#Export so directory
/usr/local/ston/ to ld.so.conf
#Export sysctl to /etc/sysctl.conf
vm.swappiness=0
vm.min_free_kbytes=524288
#Export sudoers for WM
Defaults !requiretty
winesoft ALL=NOPASSWD: /etc/init.d/ston stop, /etc/init.d/ston start, /bin/ps -ef
[Configuring STON daemon script]
STON deamon activate in run-level 2345.
[Installing sub-packages]
curl installed.
libjpeg installed.
libgomp installed.
rrdtool installed.
[Installing WM]
Stopping WM...
WM stopped
`./wm.server_default.xml' -> `/usr/local/ston/wm/tmp/conf/server_default.xml'
`./wm.vhost_default.xml' -> `/usr/local/ston/wm/tmp/conf/vhost_default.xml'
WM configuration found. Current WM port : 8500
PHP module for Legacy(CentOS 5.5) installed
`./libphp5.so.5.5' -> `/usr/local/ston/wm/modules/libphp5.so'
WM installation almost complete. Changing WM privileges.
Installation successfully complete
Infoログ¶
Infoログはグローバル設定(server.xml)に設定します。
# server.xml - <Server><Cache>
<InfoLog Type="size" Unit="1" Retention="5">ON</InfoLog>
<InfoLog> (デフォルト: ON, Type: size, Unit: 1)
STONの動作と設定の変更について記録します。
Denyログ¶
Denyログはグローバル設定(server.xml)に設定します。
# server.xml - <Server><Cache>
<DenyLog Type="size" Unit="1" Retention="5">ON</DenyLog>
<DenyLog> (デフォルト: ON, Type: size, Unit: 1)
サーバーアクセス制御 によってアクセスブロックされたIPアドレスを記録します。
#Fields: date time c-ip deny 2012.11.15 07:06:10 1.1.1.1 AP 2012.11.15 07:06:26 2.2.2.2 GIN 2012.11.15 07:06:30 3.3.3.3 3.3.3.1-255
すべてのフィールドはスペースで区切られ各フィールドの意味は次のとおりです。
date
日time
時間c-ip
クライアントのIPアドレスdeny
ブロック条件
OriginErrorログ¶
OriginErrorログはグローバル設定(server.xml)に設定します。
# server.xml - <Server><Cache>
<OriginErrorLog Type="size" Unit="5" Retention="5" Warning="OFF">ON</OriginErrorLog>
<OriginErrorLog> (デフォルト: OFF, Type: size, Unit: 5, Warning: OFF)
すべての仮想ホストのオリジンサーバーで発生した障害だけ記録します。 障害は接続障害と伝送障害を意味しオリジンサーバー排除/復旧の結果が記録されます。
#Fields: date time vhostname level s-domain s-ip cs-method cs-uri time-taken sc-error sc-resinfo 2012.11.15 07:06:10 [example.com] [ERROR] 192.168.0.13 192.168.0.13 GET /Upload/ProductImage/stock/1716439_SM.jpg 20110 Connect-Timeout - 2012.11.15 07:06:26 [example.com] [ERROR] 192.168.0.13 192.168.0.13 GET /Upload/ProductImage/stock/1716439_SM.jpg 20110 Connect-Timeout - 2012.11.15 07:06:30 [example.com] [ERROR] 192.168.0.13 192.168.0.13 GET /Upload/ProductImage/stock/1716439_SM.jpg 20110 Connect-Timeout - #2012.11.15 07:06:30 [example.com] 192.168.0.13 excluded from service #2012.11.15 07:06:31 [example.com] Origin server list: 192.168.0.14 #2012.11.15 07:11:11 [example.com] 192.168.0.13 recovered back in service #2012.11.15 07:11:12 [example.com] Origin server list: 192.168.0.13
すべてのフィールドはスペースで区切られ各フィールドの意味は次のとおりです。
date
障害が発生した日付time
障害発生時間vhostname
[仮想ホスト]level
[障害レベル(ErrorまたはWarning)]s-domain
オリジンサーバーのドメインs-ip
オリジンサーバーのIPcs-method
STONがオリジンサーバーに送信HTTP Methodcs-uri
STONがオリジンサーバーに送信URItime-taken
障害が発生するまでにかかった時間sc-error
障害の種類sc-resinfo
障害発生時サーバーの応答情報( "、"文字で区切ら)
Warning
属性がON
であれば次の例のように不正なHTTP通信が発生した場合に記録します。2012.11.15 07:09:03 [example.com] [WARNING] 10.10.10.10 121.189.63.219 GET /716439_SM.jpg 20110 PartialResponseOnNormalRequest Res=206,Len=2635 2012.11.15 07:09:03 [example.com] [WARNING] 10.10.10.10 121.189.63.219 GET /716439_SM.jpg 20110 ClosedWithoutResponse -
不正なHTTP通信の場合は以下の通りです。
ClosedWithoutResponse
元サーバーによる接続終了。 HTTP応答を受けなかった。ClosedWhenDownloading
元サーバーによる接続終了。 Content-Lengthだけダウンロードしていなかった。NotPartialResponseOnRangeRequest
Range要求をしたが応答コードが206ではない。DifferentContentLengthOnRangeRequest
要求されたRangeとContent-Lengthが異なる。PartialResponseOnNormalRequest
Rangeリクエストがないのに応答コードが206です。
SysLog送信¶
syslog プロトコルを使用してログをUDPでリアルタイム転送します。 すべてのログに対してsyslogに送信されるように設定することができます。
# server.xml - <Server><Cache>
<InfoLog SysLog="OFF">ON</InfoLog>
<DenyLog SysLog="OFF">ON</DenyLog>
<OriginErrorLog SysLog="OFF">ON</OriginErrorLog>
SysLog
OFF (デフォルト)
syslogを使用しません。ON
このタグの下位に設定された<SysLog>
にログを送信します。
以下は <OriginErrorLog>
が記録されるときにsyslogを設定する例です。
# server.xml - <Server><Cache>
<OriginErrorLog SysLog="ON">
<SysLog Priority="local3.info" Dest="192.168.0.1:514" />
<SysLog Priority="user.alert" Dest="192.168.0.2" />
<SysLog Priority="mail.debug" Dest="log.example.com" />
</OriginErrorLog>
<OriginErrorLog>
のSysLog
属性をON
に設定します。<OriginErrorLog>
の下位に<SysLog>
タグを生成します。 n台のサーバーに同時に送信可能です。<SysLog>
のPriority
属性を設定します。 この表現は syslogの Facility Levels と Severity levels の組み合わせで構成します。<SysLog>
のDest
属性を設定します。 syslog受信サーバーを意味し受信ポートが514である場合省略可能です。
上記の設定で記録されたsysログの例は以下の通りです。 syslogのtagはSTON / {ログ名}に記録されます。
Mar 12 11:24:24 192.168.0.1 STON/ORIGINERROR: 2013-03-12 14:09:20 [ERROR] [example.com] - 192.168.0.14 GET /1.gifd 1996 Connect-Timeout -
Mar 12 11:24:24 192.168.0.1 STON/ORIGINERROR: 2013-03-12 14:09:22 [ERROR] [example.com] - 192.168.0.14 GET /favicon.ico 1995 Connect-Timeout -
Mar 12 11:24:24 192.168.0.1 STON/ORIGINERROR: 2013-03-12 14:09:24 [ERROR] [example.com] - 192.168.0.14 GET /1.gifd22 2020 Connect-Timeout -
Mar 12 11:24:24 192.168.0.1 STON/ORIGINERROR: #2013 .03.12 14:09:24 [example.com] 192.168.0.14:102 excluded from service
Mar 12 11:24:24 192.168.0.1 STON/ORIGINERROR: #2013 .03.12 14:09:24 [example.com] Origin server list:
仮想ホスト別のログ保存¶
仮想ホストごとにログは別々に記録されます。 ログが OFF
に設定されていてもローカルファイルにのみ書かれていないだけなので
Log Trace は正常に動作します。
# server.xml - <Server><VHostDefault>
# vhosts.xml - <Vhosts><Vhost>
<Log Dir="/cache_log">
... (省略) ...
</Log>
<Log>
Dir
属性にログが記録されるディレクトリを設定します。 ログは設定したディレクトリの下位の仮想ホストのディレクトリに生成されます。
DNSログ¶
元サーバーのアドレスがDomainに設定された場合Resolving結果を記録します。
# server.xml - <Server><VHostDefault><Log>
# vhosts.xml - <Vhosts><Vhost><Log>
<Dns Type="size" Unit="10" Retention="10" SysLog="OFF" Compression="OFF">ON</Dns>
#Fields: date time domain ttl ip-list ip-count time-taken result
2014-07-30 12:10:33 example.com 157 173.194.127.15,173.194.127.23,173.194.127.24,173.194.127.31 4 5007 success
2014-07-30 12:10:38 example.com 152 173.194.127.23,173.194.127.24,173.194.127.31,173.194.127.15 4 9 success
2014-07-30 12:11:03 example.com 127 173.194.127.31,173.194.127.15,173.194.127.23,173.194.127.24 4 15007 success
2014-07-30 12:12:53 example.com 17 173.194.127.15,173.194.127.23,173.194.127.24,173.194.127.31 4 6 success
2014-07-30 12:23:16 test.com 0 - 0 10008 fail
2014-07-30 12:23:21 test.com 0 - 0 5007 fail
2014-07-30 12:23:26 test.com 0 - 0 5011 fail
2014-07-30 12:24:38 example.com 152 173.194.127.23,173.194.127.24,173.194.127.31,173.194.127.15 4 9 success
2014-07-30 12:25:03 example.com 127 173.194.127.31,173.194.127.15,173.194.127.23,173.194.127.24 4 15007 success
すべてのフィールドはスペースで区切られ各フィールドの意味は次のとおりです。
date
日time
時間domain
対象Domainttl
レコードの有効時間(Time To Live)ip-list
IPリストip-count
IP数time-taken
実行時間result
successまたはfail
Accessログ¶
すべてのクライアントからのHTTPトランザクションを記録します。 ログ記録の時点ではHTTPトランザクションが完了した時点で転送完了または送信停止時点を意味します。
# server.xml - <Server><VHostDefault><Log>
# vhosts.xml - <Vhosts><Vhost><Log>
<Access Type="time" Unit="1440" Retention="10" XFF="on" Form="ston" Local="Off">ON</Access>
XFF
ON (デフォルト)
クライアントが送信したXFF(X-Forwarded-For)ヘッダの値とクライアントのIPアドレスをのように記録します。 ない場合はOFF
と同じです。OFF
クライアントのIPアドレスを記録します。TrimCIP
XFFヘッダがない場合はクライアントのIPアドレスをある場合(クライアントのIPアドレスを除く)XFFヘッダだけを記録します。
Form
ston (デフォルト)
W3C標準+拡張フィールドapache
Apache形式iis
IIS形式custom
admin-log-access-custom
Local
OFF (デフォルト)
ローカル通信(Loopback)は記録しません。ON
ローカル通信(Loopback)も記録します。
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-bytes time-taken cs-referer sc-resinfo cs-range sc-cachehit cs-acceptencoding session-id sc-content-length
2012.06.27 16:52:24 220.134.10.5 GET /web/h.gif - 80 - 61.50.7.9 Chrome/19.0.1084.56 200 98141 5 - Bypass+gzip+SSL3 - TCP_HIT gzip+deflate 7 1273735
2012.06.27 16:52:26 220.134.10.5 GET /favicon.ico - 80 - 61.50.7.9 Chrome/19.0.1084.56 200 949 2 - - - TCP_HIT gzip+deflate 35 14875
2012.06.27 17:00:06 220.168.0.13 GET /setup.Eexe - 80 - 61.168.0.102 Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/536.11+(KHTML,+like+Gecko)+Chrome/20.0.1132.57+Safari/536.11 206 20971800 7008 - - 398458880-419430399 TCP_HIT - 41 89764358
すべてのフィールドはスペースで区切られ各フィールドの意味は次のとおりです。
date
HTTPトランザクションが完了した日付time
HTTPトランザクションが完了した時刻s-ip
サーバのIPcs-method
クライアントが送信したHTTP Methodcs-uri-stem
クライアントが送信したURLの中でQueryStringを除いた部分cs-uri-query
クライアントが送信したURLの中でQueryStrings-port
サーバーのポートcs-username
クライアントusernamec-ip
クライアントのIPアドレス。 XFFの設定が "ON"であればX-Forwarded-Forヘッダの値とクライアントのIPアドレスを記録します。cs(User-Agent)
クライアントが送信したHTTP User-Agentsc-status
サーバーの応答コードsc-bytes
サーバーが送信Bytes(ヘッダ+コンテンツ)time-taken
HTTPトランザクションが完了するまでかかった合計時間(ミリ秒)cs-referer
クライアントが送信したHTTP Referersc-resinfo
付加情報。 "+"の文字に区分されます。 圧縮されたコンテンツをサービスした場合圧縮オプション(gzipまたはdeflate)が指定されます。 安全な通信であればSSLプロトコルのバージョン(SSL3、TLS1、TLS1.1、TLS1.2)が指定されます。 バイパスした通信であれば "Bypass"が指定されている。cs-range
クライアントが送信したRangeヘッダを記録します。sc-cachehit
キャッシュHIT結果cs-acceptencoding
クライアントが送信されるAccept-Encodingヘッダsession-id
HTTPクライアントセッションID (unsigned int64)sc-content-length
サーバの応答Content-Lengthヘッダの値
Accessログは送信成功/失敗したかに関係なくすべてのHTTPトランザクションを記録します。 HTTPトランザクションはクライアントがHTTP要求を送信するときに開始されます。 STONがクライアントに応答を送信する前にHTTP接続が終了した場合HTTPトランザクションも終了されたものとみなす。 ログには sc-status
と sc-bytes
が0に記録されます。 主STONがオリジンサーバーからの応答を受信する前にクライアントが接続を終了する場合このようなログが記録されます。
ユーザー定義のAccessログのフォーマット¶
Accessログの形式をユーザー定義のログに設定します。
# server.xml - <Server><VHostDefault><Log>
# vhosts.xml - <Vhosts><Vhost><Log>
<Access Form="custom">ON</Access>
<AccessFormat>%a %A %b id=%{userid}C %f %h %H "%{user-agent}i" %m %P "%r" %s %t %T %X %I %O %R %e %S %K</AccessFormat>
<Access>
のForm
属性をcustom
に設定します。<AccessFormat>
カスタムログ形式。
上の例の場合は次のようにAccessログが記録されます。 (#Fieldsは記録しません。)
192.168.0.88 192.168.0.12 163276 id=winesoft; image.jpg example.com HTTP "STON" GET 80 "GET /ston/image.jpg?type=png HTTP/1.1" 200 2014-04-03 21:21:54 1 C 204 163276 1 2571978 TCP_MISS HTTP/1.1
192.168.0.88 192.168.0.12 63276 id=winesoft; vod.mp4 example.com HTTP "STON" POST 80 "GET /ston/vod.mp4?start=10 HTTP/1.1" 200 2014-04-03 21:21:54 12 C 304 363276 2 2571979 TCP_REFRESH_HIT HTTP/1.1
192.168.0.88 192.168.0.12 3634276 id=ston; news.html example.com HTTPS "STON" GET 443 "GET /news.html HTTP/1.1" 200 2014-04-03 21:21:54 30 X 156 2632576 1 2571980 TCP_MISS HTTP/1.1
192.168.0.88 192.168.0.12 6332476 id=winesoft; style.css example.com HTTP "STON" HEAD 80 "GET /style.css HTTP/1.1" 200 2014-04-03 21:21:54 10 X 234 653276 2 2571981 TCP_REFRESH_HIT HTTP/1.1
192.168.0.88 192.168.0.12 6276 id=ston; ui.js example.com HTTP "STON" GET 80 "GET /ui.js HTTP/1.1" 200 2014-04-03 21:21:54 1 X 233 63276 1 2571982 TCP_MISS HTTP/1.1
192.168.0.88 192.168.0.12 626 id=winesoft; hls.m4u8 example.com HTTP "STON" GET 80 "GET /hls.m4u8 HTTP/1.1" 200 2014-04-03 21:21:54 2 X 124 6312333276 2 2571983 TCP_REFRESH_HIT HTTP/1.1
Apacheのログ形式 をベースに開発されいくつかの拡張フィールドがあります。 各フィールドの区切り文字には制限がありませんSpaceを使用する場合はUser-AgentのようにSpaceが含まれているフィールドは二重引用符("...")で囲んで設定します。
%...a
クライアントのIP192.168.0.66
%...A
サーバーのIPアドレス192.168.0.14
%...b
HTTPヘッダ以外の送らバイト数1024
%...{foobar}C
サーバが受信した要求のクッキーFoobarの値%{id=}c に入力するとCookieのid=に相当する値を記録
%...D
リクエストを処理するのにかかった時間(MS)3000
%...f
ファイル名/mp4/iu.mp4 なら iu.mp4を記録
%...h
HostNameexample.com
%...H
リクエストプロトコルhttp または https
%...{foobar}i
サーバが受信した要求からfoobar:ヘッダの内容%{User-Agent}i として入力する場合User-Agentの値を記録
%...m
リクエストMethodGET または POST または HEAD
%...P
Server PORT80
%...q
QueryStringId=10&value=20
%...r
リクエストの最初の行(Request Line)GET /img.jpg HTTP/1.1
%...s
の応答コード200
%...t
STON デフォルトの時間形式2014-01-01 15:27:02
%...{format}t
Formatで定義されている日付形式%{%Y-%m-%d %H:%M:%S}T と入力すると 2014-08-07 06:12:23 に記録した。
%...T
TimeTaken(秒単位)10
%...U
ShortURI/img/img.jpg
%...u
FullURI/img/img.jpg?session=1232&id=37
%...X
トランザクションが完了したときの状態X
応答が完了する前に終了C
応答が完了した
C
%...I
リクエストヘッダを含む受信バイト2048
%...O
レスポンスヘッダを含む送信バイト2048
%...R
応答時間(MS)2
%...e
Session-ID1
%...S
キャッシュHIT結果TCP_HIT
%...K
リクエストHTTPのバージョンHTTP/1.1
%...y
リクエストのHTTPヘッダサイズ488
%...z
応答のHTTPヘッダサイズ362
設定したフィールドの値が存在しない場合 - で表記します。 形式が間違ってたらSTONデフォルトフォーマット(Form = "ston")で動作します。
上の表では各フィールドの…には (e.g. “%h %U %r %b) 何も明示しなかったり記録条件を明示することができます。(条件を満たしていない場合 - で記録)。 条件はHTTPステータスコードのリストに設定するか!でNOT条件を設定することができます。
次の例では 400(Bad Request) エラーまたは 501(Not Implemented) エラーの場合にのみUser-agentを記録します。
"%400,501{User-agent}i"
次の例では正常な状態ではなくすべてのリクエストでRefererをログに残す。
"%!200,304,302{Referer}i"
Originログ¶
オリジンサーバーのすべてのHTTPトランザクションを記録します。 記録時点ではHTTPトランザクションが完了した時点で転送完了または送信停止時点を意味します。
# server.xml - <Server><VHostDefault><Log>
# vhosts.xml - <Vhosts><Vhost><Log>
<Origin Type="time" Unit="1440" Retention="10" Local="Off">ON</Origin>
#Fields: date time cs-sid cs-tcount c-ip cs-method s-domain cs-uri s-ip sc-status cs-range sc-sock-error sc-http-error sc-content-length cs-requestsize sc-responsesize sc-bytes time-taken time-dns time-connect time-firstbyte time-complete cs-reqinfo cs-acceptencoding sc-cachecontrol s-port sc-contentencoding session-id session-type
2012.06.27 17:40:00 357 899 192.168.0.13 GET i.example.com /t/2.gif 115.71.9.136 200 - - - 3874 197 271 3874 20 0 0 17 3 - gzip+deflate - 80 gzip 7 cache
2012.06.27 17:40:00 357 900 192.168.0.13 GET i.example.com /ex1.gif 115.71.9.136 200 - - - 5673 223 272 5673 24 0 0 21 3 - - - 80 - 8 cache
2012.06.27 17:40:00 357 901 192.168.0.13 GET i.example.com /exB.jpg 115.71.9.136 200 - - - 8150 189 273 8150 13 0 0 9 4 Bypass - - 80 - 7 cache
#[ERROR:01] 2012.06.27 17:40:01 220.73.216.5 220.73.216.5 GET /web/nmb/img/main/v1/h1.gif 1824 Connect-Timeout - 11 cache
2012.06.27 17:40:00 357 901 192.168.0.13 GET i.example.com /exB1.jpg 115.71.9.136 200 - - - 8150 189 273 8150 13 0 0 9 4 - max-age=3600 80 - 12 cache
2012.06.27 17:40:00 357 901 192.168.0.13 GET i.example.com /exB2.jpg 115.71.9.136 200 - - - 8150 189 273 8150 13 0 0 9 4 - no-cache 80 - 35 cache
2012.06.27 17:40:00 357 901 192.168.0.13 GET i.example.com /exB3.jpg 115.71.9.136 200 - - - 8150 189 273 8150 13 0 0 9 4 - - 80 - 35 cache
オリジンサーバーで障害が発生した場合#[ERROR:xx]で始まるエラーログが記録されます。 すべてのフィールドはスペースで区切られ各フィールドの意味は次のとおりです。
date
HTTPトランザクションが完了した日付time
HTTPトランザクションが完了した時刻cs-sid
セッションの一意のID。 同じセッションで処理された(再された)HTTPトランザクションは同じ値を持つ。cs-tcount
トランザクション数。 このHTTPトランザクションが現在のセッションで何番目に処理されたトランザクションであることを記録します。 同じcs-sid
値を持つトランザクションであればこの値は重複することができない。c-ip
STONのIPcs-method
元サーバーに送信HTTP Methods-domain
オリジンサーバーのドメインcs-uri
元サーバーに送信URIs-ip
オリジンサーバーのIPsc-status
オリジンサーバーHTTP応答コードcs-range
オリジンサーバーに送信されるRange要求値sc-sock-error
ソケットエラーコード(1 =送信失敗、2 =伝送遅延、3 =接続の終了)sc-http-error
オリジンサーバーが4xxまたは5xx応答を与えてくれたときに応答コードを記録sc-content-length
オリジンサーバーが送信したContent Lengthcs-requestsize (単位: Bytes)
オリジンサーバーに送信されるHTTPリクエストヘッダサイズsc-responsesize (単位: Bytes)
オリジンサーバーが応答したHTTPヘッダーのサイズsc-bytes (単位: Bytes)
受信したコンテンツサイズ(ヘッダを除く)time-taken (単位: ms)
HTTPトランザクションが完了するまでにかかった合計時間。 セッションの再利用がない場合はソケット接続時間まで含んでいる。time-dns (単位: ms)
DNSクエリにかかった時間time-connect (単位: ms)
オリジンサーバーとソケットEstablishedまでかかった時間time-firstbyte (単位: ms)
要求を送信し応答が来るまでかかった時間time-complete (単位: ms)
最初の応答から完了するまでにかかった時間cs-reqinfo
付加情報。 "+"の文字で区切られている。 バイパスした通信であれば "Bypass", Privateバイパスなら "PrivateBypass"に記録されます。cs-acceptencoding
オリジンサーバーに圧縮されたコンテンツを要求すると "gzip+deflate"に記録されます。sc-cachecontrol
元サーバーが送信したcachecontrolヘッダs-port
オリジンサーバーのポートsc-contentencoding
元サーバーが送信されるContent-Encodingヘッダsession-id
オリジンサーバー要求を発生させたHTTPクライアントセッションID(unsigned int64)session-type
オリジンサーバーに要求されたセッションのタイプcache
キャッシュ用途に使用されたセッションrecovery
障害の検知と復旧 で復旧の目的で使用されたセッションhealthcheck
Health-Checker が使用セッション
Monitoringログ¶
5分平均の統計を記録します。
# server.xml - <Server><VHostDefault><Log>
# vhosts.xml - <Vhosts><Vhost><Log>
<Monitoring Type="size" Unit="10" Retention="10" Form="json">ON</Monitoring>
Form
ログ形式を指定します。 (json
またはxml
)
FileSystemログ¶
第19章 File System を使用して発生するすべてのFile I / Oトランザクションを記録します。
# server.xml - <Server><VHostDefault><Log>
# vhosts.xml - <Vhosts><Vhost><Log>
<FileSystem Type="time" Unit="1440" Retention="10">ON</FileSystem>
File I/O トランザクションの終了時に記録されます。 トランザクションの終了時点ではcs-methodの形態に依存します。
#Fields: date time cs-method cs-path sc-status sc-bytes response-time time-taken sc-cachehit attr session-id
2012.06.27 16:52:24 ATTR /t 200 0 100 100 TCP_HIT FOLDER 1
2012.06.27 16:52:24 ATTR /t/2.gif 200 0 100 100 TCP_HIT FILE 1
2012.06.27 16:52:24 OPEN /file.txt 200 0 100 2000 TCP_HIT FILE 2
2012.06.27 16:52:24 READ /file.txt 200 1024768 100 2000 TCP_HIT FILE 2
date
File I/Oトランザクションが完了した日付time
File I/Oトランザクションが完了した時刻cs-method
File I/Oアクセスを形成します。 次の3つのいずれかを持つ。ATTR
getattr関数を呼び出します。 関数が返されたときのログ記録OPEN
ファイルは開かれたがREADしません。 ファイルが閉じられるときにログ記録READ
ファイルを開きREADした。 ファイルが閉じられるときにログ記録
cs-path
アクセスパスsc-status
応答コード。 通常のサービス(200)を除いた処理に失敗コードは次のとおりです。200
通常のサービス301
バイパスが必要302
サービス拒否303
Redirect必要400
不正な要求401
仮想ホストが見つからなかった402
元からの初期化に失敗し500
オブジェクトの初期化に失敗し501
オブジェクトOpen失敗502
保存パスの作成に失敗し503
メモリの初期化に失敗し504
Emergency状態600
ファイルサービス待機中Timeout601
ファイルのデータサービス待機中Timeout602
ファイルサービス待機中のファイルの初期化に失敗し603
ファイルのデータサービス待機中のデータの初期化に失敗し701
誤ったOffset702
ファイルの特定の領域をロードに失敗し703
Not enough memory704
元セッションの作成に失敗し
sc-bytes
Readされたサイズresponse-time
関数の呼び出し ~ サービスオブジェクトを接続するのに必要された時間time-taken
関数の呼び出し ~ File I / O Transactionが完了されかかった時間sc-cachehit
キャッシュHITの結果attr
FILE または FOLDERsession-id
File I/O セッション ID (unsigned int64)注釈
session-id
はClient(HTTPまたはFile I / O)Contextが作成されるときに割り当てられる。 一般的なファイル処理過程であるOpen - > Read - > CloseではOpen時点でClient Contextが作成されClose時点で破壊されます。 一方getattr関数はアトミック(Atomic)関数なので毎回Client Contextが作成/破壊され常に新しいsession-idを割り当てられる。
FTP転送¶
ログがローテートされる指定されたFTPクライアントを使用してログをアップロードします。
FTPクライアント¶
FTPクライアントを設定します。 ローテートされたログをリアルタイムでFTPサーバにアップロードします。
FTPクライアントは上図のようSTON外部に存在します。 STONはローカルに存在するログをFTPクライアントキューに入力するだけでFTPの動作には関与しません。 FTPクライアントは自分の設定に応じてアップロードを行う。
FTPクライアントはグローバル設定(server.xml)に設定します。
# server.xml - <Server>
<Ftp Name="backup1">
<Mode>Passive</Mode>
<Address>ftp.winesoft.co.kr:21</Address>
<Account>
<ID>test</ID>
<Password>12345abc</Password>
</Account>
<ConnectTimeout>10</ConnectTimeout>
<TransferTimeout>600</TransferTimeout>
<TrafficCap>0</TrafficCap>
<DeleteUploaded>OFF</DeleteUploaded>
<BackupOnFail>OFF</BackupOnFail>
<UploadPath>/log_backup/%v/%s-%e.%p.log</UploadPath>
<Transfer Time="Rotate" />
</Ftp>
<Ftp Name="backup2">
<Mode>Active</Mode>
<Address>192.168.0.14:21</Address>
<Account>
<ID>test</ID>
<Password>qwerty</Password>
</Account>
<ConnectTimeout>3</ConnectTimeout>
<TransferTimeout>100</TransferTimeout>
<TrafficCap>10240</TrafficCap>
<DeleteUploaded>ON</DeleteUploaded>
<BackupOnFail>ON</BackupOnFail>
<Transfer Time="Static">04:00</Transfer>
</Ftp>
<Ftp>
FTPクライアントを設定します。Name
属性に固有の名前を設定します。Mode (デフォルト: Passive)
接続モード (Passive
またはActive
)Address
FTPアドレス。Account
FTPアカウント。 もしパスワード(例えばqwerty)を暗号化したい場合は次のAPIを使用します。/command/encryptpassword?plain=qwerty
暗号化されたパスワードは次のように設定します。
<Password Type="enc">dXR9k0xNUZVVYQsK5Bi1cg==</Password>
ConnectTimeout
接続待機時間TransferTimeout
送信待機時間TrafficCap (単位: KB)
0より大きい値に設定した場合の転送の最大帯域幅を設定します。DeleteUploaded (デフォルト: OFF)
送信完了後にログを削除します。BackupOnFail (デフォルト: OFF)
送信失敗時のログが削除されないようにログを次のパスにバックアップします。/usr/local/ston/stonb/backup/
バックアップされたログは再送信せず管理者が削除するまで削除されない。
UploadPath
アップロードパスを設定します。 別に設定しない場合は "/仮想ホスト/" にアップロードします。 example.comのログは/example.com/ディレクトリにアップロードされます。%{time format}s
ログの開始時間%{time format}e
ログ終了時刻%p
prefix%v
仮想ホスト名%h
機器HOST名
例えば次のように設定した場合
# server.xml - <Server><Ftp> <UploadPath>/log_backup/%v/%s-%e.%p.log</UploadPath>
アップロードパスは次のとおりです。
/log_backup/example.com/200140722_0000-200140722_2300.access.log
Transfer
ログ転送時間を指定します。Type
属性に基づいて値の形式が違ってくる。Rotate (デフォルト)
ローテートされるとすぐに送信します。 値を持たない。Static
一日一回指定した時間に送信します。 たとえば04:00に設定とすれば午前4時に送信を開始します。Interval
一定時間間隔で送信します。 たとえば4に設定した場合4時間間隔でログを送信します。
転送時間を設定した場合その時点でログがローテートされないように適切にログ管理ポリシーを設定する必要があります。
FTPクライアントはcurlを使用します。
FTPのログ¶
FTPのログは/usr/local/ston/sys/stonb/stonb.logに統合して保存されます。
#Fields: date time local-path cs-url file-size time-taken sc-status sc-error-msg
2014-04-23 17:10:20 /ston_log/winesoft.co.kr/origin_20140423_080000.log ftp://ftp.winesoft.co.kr:21/winesoft.co.kr/origin_20140423_080000.log 381 10006 fail "curl: (7) couldn't connect to host"
2014-04-23 17:10:20 /ston_log/winesoft.co.kr/access_20140423_1700.log ftp://192.168.0.14:21/winesoft.co.kr/access_20140423_1700.log 260 60 success "-"
2014-04-23 17:11:00 /ston_log/winesoft.co.kr/origin_20140423_080000.log ftp://ftp.winesoft.co.kr:21/winesoft.co.kr/origin_20140423_080000.log 381 10008 fail "curl: (7) couldn't connect to host"
2014-04-23 17:11:00 /ston_log/winesoft.co.kr/filesystem_20140423_080000.log ftp://192.168.0.14:21/winesoft.co.kr/filesystem_20140423_080000.log 179 60 success "-"
すべてのフィールドはスペースで区切られ各フィールドの意味は次のとおりです。
date
日time
時間local-path
転送ログのローカルパスcs-url
転送FTPアドレスfile-size
転送ファイルサイズtime-taken (単位: ms)
伝送所要時間sc-status
伝送成功/失敗(successまたはfail)sc-error-msg
送信失敗時curlエラーメッセージ
ログFTP転送¶
ログがローテートされる指定されたFTPクライアントを介してアップロードします。 コンマ(、)で区切って複数のFTPクライアントを同時に使用することができます。
# server.xml - <Server><VHostDefault>
# vhosts.xml - <Vhosts><Vhost>
<Log>
<Access Ftp="backup1, backup2">ON</Access>
<Origin Ftp="backup_org">ON</Origin>
<Monitoring Ftp="backup1">ON</Monitoring>
<FileSystem Ftp="backup2">ON</FileSystem>
</Log>
Ftp
使用 FTP クライアント
ftp://{FTPサーバーアドレス}/{仮想ホスト名}/{ローテートされたログ名}でログをアップロードします。 たとえばftp.dummy.comサーバーに仮想ホストexample.comのローテートされたログ(access_20140424_0000.log)をアップロードするアドレスは ftp://ftp.dummy.com/example.com/access_20140424_0000.logになる。