アクセスログアップロード機能の利用¶
[更新: 2024年11月27日]
ウェブアクセラレータのアクセスログアップロード機能の利用方法に関するページです。
概要(アクセスログアップロード機能とは)¶
アクセスログアップロード機能とは、ユーザーからのリクエスト内容や応答ステータスなどを記録したアクセスログを、 指定先のオブジェクトストレージに定期的に自動アップロードする機能です。
仕様と詳細¶
機能仕様¶
デフォルト設定 | アップロード無効 |
---|---|
ログ提供形式 | JSONファイル (gzip圧縮) |
ログファイルの生成間隔 | 1時間(※1) |
ログファイルのアップロード間隔 | 1時間(※2) |
ログファイルのフォーマット | JSON Lines 形式(※3)(※4) |
ログファイルのアップロード先 | さくらのクラウド オブジェクトストレージ |
ログファイルのアップロード方法 | 指定したアクセスキーを用いたオブジェクトのアップロード(PUT Object) |
※1 XX時00分00秒~XX時59分59秒の期間のログを、XX時台のログとして取得します。
※2 基本的には約1時間ごとにアップロードが実行されますが、アップロードに失敗した場合は例外となります。
詳細については、 アクセスログのアップロードの再試行と通知 をご参照ください。
※3 1行ごとに1つのJSONオブジェクトを記述し、各オブジェクトを改行で区切る JSON Lines 形式です。
※4 JSON Lines 形式からcombined形式などの別の形式へ変換する場合は、 アクセスログの形式変換 をご参照ください。
機能利用に関する注意事項¶
- メンテナンスの影響で、アクセスログが一部欠落する可能性があります。必ずしも全てのアクセスログが記録されることを保証するものではありませんので、ご了承ください。
- アクセス時刻はミリ秒単位でアクセスログに記録されます。そのため同じミリ秒に発生したアクセスについては、ログの順序が前後する可能性があります。
- 「さくらのクラウド オブジェクトストレージ」の リソース制限 が行われた場合、アップロードが失敗します。 オブジェクト・総ディスク使用量の確認 などの手順を参考に、必要に応じてリソース状況のモニタリングを行ってください。
機能利用の事前準備¶
- 本機能の設定前にオブジェクトストレージの ご利用手順 を参照の上、サイト、バケットの作成及びパーミッション設定によるアクセスキーの発行 を行ってください。
- 本機能では、アップロード先のバケットに対してWRITE 権限を指定した アクセスキー が必要です。
注意
オブジェクトストレージの権限設定について
アクセスログが外部に公開されないように、アップロード先のオブジェクトストレージの権限設定にご注意ください。
アクセスログのアップロード実行スケジュール¶
アクセスログのアップロードは、アクセスログアップロード設定を有効化した時間帯に基づき約1時間ごとにアップロードが実行されます。詳細は下記の例示をご参照ください。
但しアップロードが失敗した場合、アップロード時刻が遅れることがあります。詳細は アクセスログのアップロードの再試行と通知 をご参照ください。
例1 アクセスログアップロード設定を 13:48 に有効化した場合
- 初回は13時台(13:00~13:59)のアクセスログが 14:00 以降にアップロードされます。
- 以降、約1時間ごとにアップロード実行されます。
例2 アクセスログアップロード設定を 17:48 に無効化した場合
- 17時台(17:00~17:59)のアクセスログはアップロードされません。
- 以降、アップロードは実行されません。
アクセスログのアップロードの再試行と通知¶
アップロード再試行と強制無効化について
アクセスログのアップロードに失敗した場合、約1時間ごとに自動でアップロードが再試行されます。
再試行は最大3回行われ、3回連続で失敗した場合はアクセスログアップロードは強制的に無効化されます。
アクセスログアップロードが強制的に無効化された場合は、原因を確認して解消した後、再度アクセスログアップロードを有効にしてください。
メール通知について
下記のいずれかの状況で、クラウドアカウントのメール通知先(※)に通知されます。
- アクセスログアップロード初回失敗
- アクセスログアップロード再開
- アクセスログアップロード強制無効化
※ クラウドアカウントの登録メールアドレスが未登録の場合は、さくらインターネットの会員IDの登録メールアドレス宛に通知されます。
アクセスログの格納情報¶
アクセスログアップロード設定に指定したオブジェクトストレージのバケットに対して、下記の格納先にアクセスログがアップロードされます。
/sakura-webaccelerator/【サイトの公開ドメイン名(※1)】/【年(※2)】/【月(※2)】/【日(※2)】/access-【年(※2)】【月(※2)】【日(※2)】T【時(※2)】.log.gz
※1 公開ドメイン名が、国際化ドメイン名(英数字(ASCII)以外の文字を含むドメイン名)の場合、サイト情報画面の「Punycode」に表示されるASCII FQDNの値。
※2 アクセスログが出力された日付。年は、4桁。月・日・時は、2桁。
例1 サイトの公開ドメイン名が「www.example.jp」で、
2024年01月02日12時台(12時00分00秒~12時59分59秒)のアクセスログの格納先
/sakura-webaccelerator/www.example.jp/2024/01/02/access-20240102T12.log.gz
例2 サイトの公開ドメイン名が「日本語.example.jp」で、
2024年01月02日12時台(12時00分00秒~12時59分59秒)のアクセスログの格納先
(ASCII FQDNは「xn–wgv71a119e.example.jp」)
/sakura-webaccelerator/xn--wgv71a119e.example.jp/2024/01/02/access-20240102T12.log.gz
注釈
ログの切り替わり時刻はわずかに前後する可能性があります。
例:12時台のアクセスログとして基本的には 12時00分00秒~12時59分59秒 のログが格納されますが、前後の時刻(12時00分00秒以前、12時59分59秒以降)が格納される可能性があります。
注釈
複数のサイトのアクセスログの出力先として、同一のオブジェクトストレージのバケットを設定することも可能です。
アクセスログの出力項目¶
アクセスログには、下記の内容が出力されます。
アクセスログの出力例
{"time": "2024-09-01T15:30+09:00", "http_host": "www.example.jp", "scheme": "http", "remote_addr": "192.0.2.1", "remote_port": "57856","request": "GET /image/sample.jpg HTTP/2.0", "status": "200", "bytes_sent": "1052", "bytes_sent": "1052", "body_bytes_sent": "1024","referer": "https://example.jp/", "x_cache": "HIT", "msec": "1725185400000.000", "request_id": "e2ae8922ffbc0e399174de821e05e2f9", "user_agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"}
アクセスログの出力項目
項目 | 説明 |
---|---|
time | アクセス時刻(ISO 8601の形式)(※1)。 例: "time": "2024-09-01T15:30+09:00" |
http_host | Host リクエストヘッダーの値。 例: "http_host": "www.example.jp" |
scheme | アクセスが発生したプロトコル。http または https と出力。 例: "scheme": "http" |
remote_addr | 接続元IPアドレス(※2)。 例: "remote_addr": "192.0.2.1" |
remote_port | 接続元ポート番号。 例: "remote_port": "57856" |
remote_user | Basic認証のユーザー名。Basic認証以外の場合は空文字列を出力。 例: "remote_user": "" |
request | リクエスト内容。HTTPメソッド、リクエストURI、HTTPバージョンをスペース区切りで出力。 例: "request": "GET /image/sample.jpg HTTP/2.0" |
status | 応答ステータスコード。 例: "status": "200" |
bytes_sent | 応答サイズ(byte単位)。HTTPヘッダーおよびレスポンスボディの合計値。 例: "bytes_sent": "1052" |
body_bytes_sent | レスポンスボディのサイズ(byte単位)。 例: "body_bytes_sent": "1024" |
referer | Referer リクエストヘッダーの値。 例: "referer": "https://example.jp/" |
x_cache | ウェブアクセラレータのキャッシュ状態の判定。HIT または MISS または 空文字列 を出力。 ・ HIT :有効期限内のキャッシュが存在し、キャッシュから配信された場合。 ・ MISS :キャッシュが存在しない、または有効期限切れで更新が必要になりオリジンからコンテンツ取得を試みた場合。 ・空文字列 :ウェブアクセラレータの機能仕様による応答拒否(例:アクセス制御リスト(ACL)機能、CORS機能など)。 例: "x_cache": "HIT" |
msec | アクセス時刻(Unixエポック時間のミリ秒単位の形式)(※1)。 例: "msec": "1725185400000.000" |
request_id | リクエストを識別するためにウェブアクセラレータで付与されているリクエストID。 例: "request_id": "e2ae8922ffbc0e399174de821e05e2f9" |
user_agent | User-Agent リクエストヘッダーの値。 例: "user_agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0" |
※1 接続元からリクエストを受け取った時刻。
※2 基本的に「ウェブアクセラレータ」への接続元IPアドレスとなります。但し、プロキシやVPNなどの中継サーバを経由して接続が行われている場合、中継サーバのIPアドレスとなります。
設定手順¶
アクセスログアップロード機能の設定¶
1. 対象サイトの「設定」ボタンをクリックします
2. 「アクセスログ」タブをクリックします
3. 各項目を選択・入力します
各項目の説明は以下の通りです。
アクセスログアップロード設定 | 有効を選択 |
---|---|
S3エンドポイント | オブジェクトストレージのS3エンドポイントを入力(自動入力) |
S3リージョン | オブジェクトストレージのS3リージョンを入力(自動入力) |
バケット名 | オブジェクトストレージのバケット名を入力 |
アクセスキーID | オブジェクトストレージのAPIのアクセスキーIDを入力 |
シークレットアクセスキー | オブジェクトストレージのAPIのシークレットアクセスキーを入力 |
4. 入力が完了したら「保存」をクリックします
5. 確認画面の内容に問題なければ「保存」ボタンをクリックします
6. 保存が完了すると、以下の通知が右下に表示されます
以降指定したオブジェクトストレージにアクセスログがアップロードされます。
アクセスログアップロード設定の削除¶
注意
アクセスログアップロード設定の削除について
アクセスログアップロード設定の削除を行うと保存された設定が全て削除されます。
(アップロードされたアクセスログ自体は削除されません。)
一時的に機能を止めたい場合は、アクセスログアップロード設定の有効のチェックボックスを外して保存してください。
入力された情報を削除せずにアップロードの停止のみ行うことができます。
1. 対象サイトの「設定」ボタンをクリックします
2. 「アクセスログ」タブをクリックします
3. ページ下部の「削除」をクリックします
4. 確認画面の内容に問題なければ「削除」ボタンをクリックします
5. 削除が完了すると、以下の通知が右下に表示されます
アクセスログのダウンロード¶
アクセスログのアップロード先である「さくらのクラウド オブジェクトストレージ」のバケットから、下記のいずれかのツールを用いて、アクセスログをダウンロードする方法について紹介します。
- WinSCP
- AWS CLI
- s3cmd
1. アクセスキーの用意
パーミッション設定によるアクセスキーの発行 をご参照の上、 アップロード先のバケットに対してREAD 権限を指定した アクセスキー を用意します。
2. ツールの設定
<WinSCPの場合>
WinSCPの起動後、「新しいサイト」 > 「セッション」項目より下記を設定し、「ログイン」を押します。
転送プロトコル | Amazon S3 |
---|---|
ホスト名 | 設定したオブジェクトストレージのS3エンドポイントを入力 |
ポート番号 | 443 |
アクセスキーID | 1.で準備したアクセスキーを入力 |
シークレットキー | 1.で準備したシークレットアクセスキーを入力 |
リモートディレクトリ(設定 > 環境 > ディレクトリ) | アップロード先に指定した バケット名 を設定 |
<AWS CLIの場合>
AWS CLIをご利用の場合は、 AWS CLIでの利用例 の 初期設定 の手順をご確認ください。
<s3cmdの場合>
% s3cmd --version
s3cmd version 2.4.0
% s3cmd --configure
(以下、入力が必要な部分を除き省略しています)
Access Key: <アクセスキー>
Secret Key: <シークレットキー>
Default Region [US]: <Enter>
S3 Endpoint [s3.amazonaws.com]: s3.isk01.sakurastorage.jp
DNS-style bucket+hostname:port template for accessing a bucket [%(bucket)s.s3.amazonaws.com]: %(bucket).s3.isk01.sakurastorage.jp
Encryption password: <適宜設定>
Path to GPG program [/usr/bin/gpg]: <Enter>
Use HTTPS protocol [Yes]: <Enter>
HTTP Proxy server name: <Enter>
New settings:
Access Key: <アクセスキー>
Secret Key: <シークレットキー>
Default Region: US
S3 Endpoint: s3.isk01.sakurastorage.jp
DNS-style bucket+hostname:port template for accessing a bucket: %(bucket).s3.isk01.sakurastorage.jp
: (省略)
Test access with supplied credentials? [Y/n] <nを入力してEnter>
Save settings? [y/N] <yを入力してEnter>
3. アクセスログの一覧の確認
<WinSCPの場合の確認例>
対象の日付の配下に移動します。
<AWS CLIの場合の確認例>
aws s3 ls s3://【アップロード先に指定したバケット名】/sakura-webaccelerator/www.example.jp/2024/09/01/
<s3cmd の場合の確認例>
s3cmd ls s3://【アップロード先に指定したバケット名】/sakura-webaccelerator/www.example.jp/2024/09/01/
4. アクセスログのダウンロード
<WinSCPの場合のダウンロード例>
対象のログを右クリックし、「ダウンロード」ー「ダウンロード」を選択します。
「OK」を押下しファイルを特定のフォルダにダウンロードします。
<AWS CLIの場合のダウンロード例>
aws s3 cp s3://【アップロード先に指定したバケット名】/sakura-webaccelerator/www.example.jp/2024/09/01/access-20240901T13.log.gz
<s3cmd の場合のダウンロード例>
s3cmd get s3://【アップロード先に指定したバケット名】/sakura-webaccelerator/www.example.jp/2024/09/01/access-20240901T13.log.gz
5. gzip(gz)圧縮の解凍
ダウンロードしたアクセスログファイルは、gzip(.gz)形式で圧縮されています。gunzip などのツールで展開してご利用ください。
アクセスログの分析例¶
アクセス数の多いコンテンツ(URI)のランキング作成¶
以下の方法を使用して、JSON Lines形式のアクセスログからアクセス数の多いURIのランキングを作成します。
結果の出力例:
300 /image/sample1.jpg
200 /image/sample2.jpg
100 /api/data
アクセス数の多いコンテンツ(URI)のランキング作成(jqコマンドを使用する場合)
Linuxなどで利用できる JSON処理ツール jq を利用して、JSON Lines形式のアクセスログからアクセス数の多いURIのランキングを作成します。
コマンド:
jq -r '.request | split(" ")[1]' 【アクセスログのファイル名(フルパスまたは相対パスで指定)】 | sort | uniq -c | sort -rn > 【出力先のランキングのファイル名(フルパスまたは相対パスで指定)】
アクセス数の多いコンテンツ(URI)のランキング作成(Powershellを使用する場合)
PowerShell を利用して、JSON Lines形式のアクセスログから、アクセス数の多いURIのランキングを作成します。
スクリプト:
$jsonLogs = Get-Content -Path "【アクセスログのファイル名(フルパスまたは相対パスで指定)】" | ForEach-Object { $_ | ConvertFrom-Json }
$uriCount = $jsonLogs | ForEach-Object {
$_.request -split " " | Select-Object -Index 1
} | Group-Object | Sort-Object -Property Count -Descending
$uriCount | ForEach-Object {
"{0} {1}" -f $_.Count, $_.Name
} | Out-File -FilePath 【出力先のランキングのファイル名(フルパスまたは相対パスで指定)】 -Encoding utf8
アクセスログの形式変換¶
combined形式への変換¶
以下の方法を使用して、JSON Lines形式のアクセスログをcombined形式に変換することができます。
combined形式への変換の例
変換前:
{"time": "2024-09-01T15:30+09:00", "http_host": "www.example.jp", "scheme": "http", "remote_addr": "192.0.2.1", "remote_port": "57856", "request": "GET /image/sample.jpg HTTP/2.0", "status": "200", "bytes_sent": "1052", "bytes_sent": "1052", "body_bytes_sent": "1024", "referer": "https://example.jp/", "x_cache": "HIT", "msec": "1725185400000.000", "request_id": "e2ae8922ffbc0e399174de821e05e2f9", "user_agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"}
変換後:
192.0.2.1 - - [2024-09-01T15:30+09:00] "GET /image/sample.jpg HTTP/2.0" 200 1024 "https://example.jp/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"
combined形式への変換(jqコマンドを使用する場合)
Linuxなどで利用できる JSON処理ツール jq を利用して、JSON Lines形式のアクセスログをcombined形式に変換することができます。
変換コマンド:
jq -r '"\(.remote_addr) - - [\(.time)] \"\(.request)\" \(.status) \((.body_bytes_sent | if . == "0" then "-" else . end)) \"\(.referer)\" \"\(.user_agent)\""' 【変換前のアクセスログのファイル名(フルパスまたは相対パスで指定)】 > 【出力先の変換後のアクセスログのファイル名(フルパスまたは相対パスで指定)】
combined形式への変換(PowerShellを使用する場合)
PowerShell を利用して、JSON Lines形式のアクセスログをcombined形式に変換することができます。
変換コマンド:
Get-Content 【変換前のアクセスログのファイル名(フルパスまたは相対パスで指定)】 | ConvertFrom-Json | ForEach-Object {
$bodyBytesSent = if ($_.body_bytes_sent -eq "0") { "-" } else { $_.body_bytes_sent }
'{0} - - [{1}] "{2}" {3} {4} "{5}" "{6}"' -f $_.remote_addr, $_.time, $_.request, $_.status, $bodyBytesSent, $_.referer, $_.user_agent
} | Out-File -FilePath 【出力先の変換後のアクセスログのファイル名(フルパスまたは相対パスで指定)】 -Encoding utf8
Common Log Format (CLF) 形式への変換¶
以下の方法を使用して、JSON Lines形式のアクセスログをCommon Log Format (CLF) 形式に変換することができます。
Common Log Format (CLF) 形式への変換の例
変換前:
{"time": "2024-09-01T15:30+09:00", "http_host": "www.example.jp", "scheme": "http", "remote_addr": "192.0.2.1", "remote_port": "57856", "request": "GET /image/sample.jpg HTTP/2.0", "status": "200", "bytes_sent": "1052", "bytes_sent": "1052", "body_bytes_sent": "1024", "referer": "https://example.jp/", "x_cache": "HIT", "msec": "1725185400000.000", "request_id": "e2ae8922ffbc0e399174de821e05e2f9", "user_agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"}
変換後:
192.0.2.1 - - [2024-09-01T15:30+09:00] "GET /image/sample.jpg HTTP/2.0" 200 1024
Common Log Format (CLF) 形式への変換(jqコマンドを使用する場合)
Linuxなどで利用できる JSON処理ツール jq を利用して、JSON Lines形式のアクセスログをCommon Log Format (CLF) 形式に変換することができます。
変換コマンド:
jq -r '"\(.remote_addr) - - [\(.time)] \"\(.request)\" \(.status) \((.body_bytes_sent | if . == "0" then "-" else . end))"' 【変換前のアクセスログのファイル名(フルパスまたは相対パスで指定)】 > 【出力先の変換後のアクセスログのファイル名(フルパスまたは相対パスで指定)】
Common Log Format (CLF) 形式への変換(PowerShellを使用する場合)
PowerShell を利用して、JSON Lines形式のアクセスログをCommon Log Format (CLF) 形式に変換することができます。
変換コマンド:
Get-Content 【変換前のアクセスログのファイル名(フルパスまたは相対パスで指定)】 | ConvertFrom-Json | ForEach-Object {
$bodyBytesSent = if ($_.body_bytes_sent -eq "0") { "-" } else { $_.body_bytes_sent }
'{0} - - [{1}] "{2}" {3} {4}' -f $_.remote_addr, $_.time, $_.request, $_.status, $bodyBytesSent
} | Out-File -FilePath 【出力先の変換後のアクセスログのファイル名(フルパスまたは相対パスで指定)】 -Encoding utf8