Ver.1.00.03
1. アクセスログ提供機能について
本ガイドラインではCDNextのアクセスログ提供機能について説明します。 またアクセスログの収集、結合を行うシェルスクリプトのサンプルも記載しておりますので、ご活用ください。
■ はじめに
CDNext管理画面からアクセスログ出力設定を行うと、FTPサーバー及びCDNext管理画面からアクセスログファイルを取得できるようになります。
Step 1 CDNext: アクセスログ出力設定
該当CDNホストのアクセスログ出力設定、ログ取得用FTPユーザー設定を行います。 詳細は、「CDNext利用マニュアル」内、「アクセスログ提供機能」をご参照ください。
Step2 FTPサーバー: アクセスログの取得
ログ取得用 FTPユーザーで、FTPサーバーにログインし、アクセスログを取得します。 ここでは、FTPサーバーから取得できるアクセスログについて説明します。
1-1 ログ取得用 FTPサーバー情報
■接続情報
ログ取得用 FTPサーバーには、FTP/FTPS/SFTPで接続することができます。 それぞれのプロトコルの仕様は以下の通りです。
| No | プロトコル | 説明 |
|---|---|---|
| 1 | FTP (File Transfer Protocol) |
ファイル転送を行うプロトコルです。 |
| 2 | FTPS (File Transfer Protocol over SSL/TLS) | FTPをSSL または TLSで暗号化するプロトコルです。 TCP 21番ポートに接続してください。 FFFTP、 WinSCP などで利用可能です。 ※2020/3/20よりTLS1.0/1.1の通信を無効化します。 |
| 3 | SFTP (SSH File Transfer Protocol) | SSH を用いてファイル転送を行うプロトコルです。 TCP 2122番ポートに接続してください。 管理画面より公開鍵を登録することで、鍵交換による利用が可能です。 WinSCP、Linux、Unix コマンドなどで利用可能です。 |
■ログイン情報
アクセスログを取得するためには、FTPサーバーへのログインが必要です。
ログインに必要な情報は以下の通りです。
| No | 項目 | 値 |
|---|---|---|
| 1 | ホスト名(必須) | cdnext-log-store.stream.co.jp |
| 2 | ユーザー名(必須) | 「ログ取得用 FTPユーザー管理」で設定した「ユーザーID」 を指定します |
| 3 | パスワード | 「ログ取得用 FTPユーザー管理」で設定した「パスワード」を指定します。パスワードを使用しない場合、秘密鍵の設定が必要です。 |
| 4 | 秘密鍵 | 「ログ取得用 FTPユーザー管理」で設定した「SFTP公開鍵」のペアとなる秘密鍵を指定します。 |
※FTPサーバーには、「ログ取得用 FTPユーザー管理」で設定した「アクセス許可IPリスト」のネットワークに接続している端末からのみアクセスすることができます。
■留意事項
お客様側のセキュリティポリシーにより、お客様のネットワークから外部へのFTPアクセスが制限されている場合は、弊社下記FTPサーバへのIPアドレス又はFQDNを許可するようにご設定ください。
※IPアドレスは予告なく変更されますのでFQDNへの通信許可を強く推奨いたします。
[FQDN]
cdnext-log-store.stream.co.jp
[IPアドレス]
210.150.45.68/24
202.79.246.153/24
■ディレクトリ構造
アクセスログは、VHOST IDごと (= CDNホストごと)、日時ごと、アクセスログフォーマットごとに出力されます。以下は、FTPサーバーのディレクトリ構造を簡単に表した図です。
■凡例
| No | 文字列 | 意味 |
|---|---|---|
| 1 | <%VHOST ID%> | CDNホストの「設定」 画面 「FQDN」 タブ内の「CNAME情報」項目に表示される32桁の文字列です。CDNホスト1つにつき、1つのVHOST IDがあります。 例)0123456789abcdef0123456789abcdef |
| 2 | <%日付%>_<%ファイルリスト%>_<%フォーマット%>.txt |
ファイルリストです。 |
| 3 | <%日付%> | アクセスログ出力処理が行われた8桁の日付です。 例)20170216 |
| 4 | <%時%> | アクセスログ出力処理が行われた2桁の時間です。 例)22 |
| 5 | <%フォーマット%> | アクセスログのフォーマットです。ltsv、combined、legacyのいずれかになります。 |
| 6 | <%n%>、<%m%> | アクセスログ出力処理の際、アクセス状況、設備状況に応じて付与される3桁の数字です。 例)012 |
※次ページより 「ファイルリスト」 「アクセスログ」 について説明します。
1-2 アクセスログダウンロード方法 (CDNext管理画面TOPページ)
CDNext管理画面TOPページからアクセスログをダウンロードするには、下記手順に従って機能有効化作業を行う必要があります。
操作説明:アクセスログダウンロード機能有効化手順
機能有効化後、下記手順に従ってアクセスログをダウンロードします。
操作説明:アクセスログダウンロード手順
補足
■アクセスログダウンロード仕様について
- アクセスログダウンロード可能日時は過去100日間となります。
- 「CDNホスト選択」で選択されたホストの「ログ」項目における「アクセスログ出力」のチェックボックスがONになっていないと、当機能からアクセスログをダウンロード出来ません。
- 「CDNホスト選択」で選択されたホストにおいて、アクセスログが存在しない場合はアクセスログをダウンロード出来ません。
- アクセスログのフォーマットは該当のCDNホスト 「ログ」 項目における「出力フォーマット」で選択されたフォーマットに準拠したものとなります。
1-3 ファイルリスト
■ファイルリストとは
ファイルリストとは、VHOST ID ディレクトリ配下のアクセスログのファイル一覧が記載されたテキストファイルです。アクセスログは、アクセス負荷や障害等により、出力遅延、削除、リカバリが発生する場合があります。ファイルリストには、アクセスログの出力、削除、リカバリについて記載されており、VHOST ID ごと (= CDN ホストごと)、日ごと、アクセスログフォーマットごとに出力されます。アクセスログ収集バッチ作成時等にご活用ください。
■ファイルリストの種類
下記3種類があります。「記載内容」の項目をタブ区切りしたデータが1レコードとなります。レコードの区切りは、改行(LF)です。
| No | 種類 | 出力 | 記載内容 | 例 |
|---|---|---|---|---|
| 1 | 設置ファイルリスト | アクセスログと一緒に必ず出力 |
|
20170216_file_list_ltsv.txt |
| 2 | 削除ファイルリスト | 弊社で削除作業実施時に出力 |
|
20170216_file_list_delete_ltsv.txt |
| 3 | リカバリファイルリスト | 弊社でリカバリ作業実施時に出力 |
|
20170216_file_list_recovery_ltsv.txt |
■ファイルリスト例
例)20170216_file_list_ltsv.txt
(省略)
20170216/22/0123456789abcdef0123456789abcdef_2017021622_001_ltsv-012.log.gz 2017/02/17 00:01:12
20170216/22/0123456789abcdef0123456789abcdef_2017021622_001_ltsv-013.log.gz 2017/02/17 00:01:12
20170216/22/0123456789abcdef0123456789abcdef_2017021622_001_ltsv-014.log.gz 2017/02/17 00:01:12
20170216/22/0123456789abcdef0123456789abcdef_2017021622_001_Itsv-015.log.gz 2017/02/17 00:01:12
20170216/22/0123456789abcdef0123456789abcdef_2017021622_001_ltsv-016.log.gz 2017/02/17 00:01:12
20170216/22/0123456789abcdef0123456789abcdef_2017021622_001_ltsv-017.log.gz 2017/02/17 00:01:12
20170216/22/0123456789abcdef0123456789abcdef_2017021622_001_Itsv-018.log.gz 2017/02/17 00:01:12
20170216/22/0123456789abcdef0123456789abcdef_2017021622_001_ltsv-019.log.gz 2017/02/17 00:01:12
20170216/22/0123456789abcdef0123456789abcdef_2017021622_001_Itsv-020.log.gz 2017/02/17 00:01:12
20170216/22/0123456789abcdef0123456789abcdef_2017021622_001_ltsv-021.log.gz 2017/02/17 00:01:12
(省略)■ファイルリストの活用方法例
ファイルリストを参照いただくと柔軟なアクセスログ収集が可能となります。ぜひご活用ください。
| No | アクセスログの収集運用 | 活用方法例 |
|---|---|---|
| 1 | 翌日午後12時(=確定出力時刻)以降に、前日分のアクセスログを収集する場合 | ファイルリストを参照せずに、アクセスログを収集 |
| 2 | 毎時、アクセスログを収集する場合 | 設置ファイルリストを確認し、新たに出力されたアクセスログを収集 削除ファイルリスト、リカバリファイルリストを確認し、すでに収集したアクセスログを差し替える |
1-4 アクセスログ
■アクセスログとは
CDN ホストにエンドユーザーがアクセスすると、CDNサーバーにアクセスログが出力されます。アクセスログには、エンドユーザーのリクエスト元 IP アドレス、アクセス日時をはじめ、様々な情報が出力されます。アクセス解析にご活用ください。
■アクセスログフォーマット
CDNext で出力可能なアクセスログフォーマットは以下の通りです。ご利用用途にあわせて、フォーマットをお選びください。
| No | アクセスログフォーマット | 説明 |
|---|---|---|
| 1 | LTSV | J-Stream CDNext独自のLTSVフォーマットです |
| 2 | J-Stream独自 | 旧 J-Stream WEB-CDNサービスのログフォーマットです。 |
| 3 | Apache combined | RefererとUser-Agentを含む、Apache HTTPサーバーのログフォーマットです。 |
■アクセスログレコードのサンプル
それぞれのフォーマットで出力されるレコードのサンプルです。
マニュアルの表示上の都合のため、以下ご了承ください。
※LTSV のフィールド区切り文字 (タブ文字) を <%TAB% > と表示しています
※適宜、途中改行をしています
※国情報ログ出力、ログプライバシーデータマスク機能が無効な場合の出力になります
• LTSV
c-ip:198.51.100.1<%TAB%>vhost-id:0123456789abcdef0123456789abcdef<%TAB%> req-id:0123456789abcdef0123456789abcdef/1.2.3.4:12/12345/12345/12345/12345<%TAB%>c-user:-<%TAB%> date-time:[04/Dec/2017:10:01:42 +0900]<%TAB%>method:GET<%TAB%> origin-uri:http://origin.example.com/dir1/dir2/filename.ext?query_key=value<%TAB%> proto:HTTP/1.1<%TAB%>status:404<%TAB%>sc-bytes:495<%TAB%> c-referer:"http://referer.example.com/dir/file?query_key=value"<%TAB%> time-taken:0.001<%TAB%>length:225<%TAB%>cache-status:HIT/F<%TAB%> request:"GET https://hostname.example.com/dir1/dir2/filename.ext?query_key=value HTTP/1.1"<%TAB%> content-type:"text/html; charset=iso-8859-1"<%TAB%>x-forwarded:"198.51.100.2,unknown"<%TAB%> user-agent:"MobileSafari/604.1 CFNetwork/889.9 Darwin/17.2.0"<%TAB%> last-modified:"Fri, 24 Feb 2017 11:35:21 GMT"<%TAB%>etag:"¥x223-549451ff2a722¥x22"<%TAB%> vary:"Accept-Encoding, Accept-Language"<%TAB%>user-add-key:"|Vary;Accept-Encoding=gzip"<%TAB%> cache-key:0123456789abcdef0123456789abcdef<%TAB%>user-data:""J-Stream独自
198.51.100.1 -- [04/Dec/2017:10:00:10 +0900] "GET http://origin.example.com/dir1/dir2/filename.ext?query_key=value HTTP/1.1" 200 123830 "http://referer.example.com/dir/file?query_key=value" 0.040 123328 MISS/S GET https://hostname.example.com/dir1/dir2/filename.ext?query_key=value 192.168.51.70:8080 "text/html" "198.51.100.2,unknown" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299" • Apache combined
198.51.100.1 -- [04/Dec/2017:10:00:11 +0900] "GET http://origin.example.com/dir1/dir2/filename.ext?query_key=value HTTP/2.0" 304 170 "http://referer.example.com/dir/file?query_key=value" "Mozilla/5.0 (Linux; Android 7.1.1; 507SH Build/S1116) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36"
※次ページより、それぞれの「アクセスログフォーマット」のフィールドについて説明します。
1-5 アクセスログフォーマット
■LTSV
エンドユーザーのリクエスト情報を 「キー:値」のペアで、タブ区切りにしたデータが1レコードとなります。レコードの区切りは、改行(LF)です。
各フィールドの意味は以下の通りです。
| No | フィールド | 説明 | 例 |
|---|---|---|---|
| 1 | {c-ip} | クライアントIP | c-ip:198.51.100.1 |
| 2 | {vhost-id} | VHOST ID 英数32桁 | vhost-id:0123456789abcdef0123456789abcdef |
| 3 | {req-id} | リクエストに一意なID | req-id:0123456789abcdef0123456789abcdef/1.2.3.4:12/12345/12345/12345/12345 |
| 4 | {c-user} | ユーザー名(基本認証時に出力) ※ログプライバシーデータマスク有効時は※1の値が出力 |
c-user:username ※1 DATA MASKED |
| 5 | {date-time} | リクエスト処理日時 | date-time:[28/Feb/2017:13:00:46 +0900] |
| 6 | {method} | リクエストのメソッド | method:GET |
| 7 | {origin-uri} | オリジンURL | origin-uri:http://origin.example.com/dir1/dir2/filename.ext?query_key=value |
| 8 | {proto} | HTTPプロトコル | proto:HTTP/1.1 |
| 9 | {status} | HTTPステータス | status:200 |
| 10 | {sc-bytes} | HTTPヘッダを含む転送バイト数 | sc-bytes:1234 |
| 11 | {c-referer} | リファラ、空の場合は"-" | c-referer:"http://referer.example.com/dir/file?query_key=value" |
| 12 | {time-taken} | リクエスト処理時間(s) | time-taken:0.006 |
| 13 | {length} | 応答コンテンツサイズ(byte) | length:1234 |
| 14 | {cache-status} | キャッシュステータス | cache-status: HIT/F |
| 15 | {request} | メソッド リクエストURL プロトコル | request:"GET https://hostname.example.com/dir1/dir2/filename.ext?query_key=value HTTP/1.1" |
| 16 | {content-type} | コンテンツのMIME type | content-type:"text/html" |
| 17 | {x-forwarded} | リクエストに付与されたX-Forwarded-For 空の場合は"-" | x-forwarded:"198.51.100.2, unknown" |
| 18 | {user-agent} | ユーザーエージェント 空の場合は"-" | user-agent: "Mozilla ..." |
| 19 | {last-modified} | オリジンがコンテンツに付与したLast-Modified 空の場合は"-" | last-modified:"Fri, 24 Feb 2017 11:35:21 GMT" |
| 20 | {etag} | オリジンがコンテンツに付与したEtag 空の場合は"-" |
etag:"¥x223-549451ff2a722¥x22" |
| 21 | {vary} | オリジンがコンテンツに付与したVary 空の場合は"-" | vary:"Accept-Encoding, Accept-Language" |
| 22 | {user-add-key} | 同一URLで別キャッシュとなる指定条件 空の場合は"" | user-add-key:"|Vary; Accept-Encoding=gzip" |
| 23 | {cache-key} | CDNext内部利用情報 (キャッシュキー) | cache-key:0123456789abcdef0123456789abcdef |
| 24 | {user-data} | ログプライバシーデータマスクが有効の場合 ※1の値が出力 国情報ログ出力が有効の場合 ※2の値が出力 |
※1 user-data:"data_masked:1" ※2 user-data:"geo:JP" |
■ J-Stream 独自
エンドユーザーのリクエスト情報をスペース区切りにしたデータが1レコードとなります。レコードの区切りは、改行(LF)です。
各フィールドの意味は以下の通りです。
| No | ログフィールド | 説明 | 例 |
|---|---|---|---|
| 1 | {c-ip} | クライアントIP | 198.51.100.1 |
| 2 | - | 常に"-" | - |
| 3 | {c-user} | ユーザー名 (基本認証時に出力) ※ログプライバシーデータマスク有効時は※1の値が出力 |
username ※1 DATA MASKED |
| 4 | {date-time} | リクエスト処理日時 | [28/Feb/2017:13:00:46 +0900] |
| 5 | "{method} {origin-uri} {proto}" | メソッド オリジンURL プロトコル | "GET http://origin.example.com/dir1/dir2/filename.ext?query_key=value HTTP/1.1" |
| 6 | {status} | HTTPステータス | 200 |
| 7 | {sc-bytes) | HTTPヘッダを含む転送バイト数 | 1234 |
| 8 | {c-referer} | リファラ、空の場合は"-" | "http://referer.example.com/dir/file?query_key=value" |
| 9 | {time-taken} | リクエスト処理時間(s) | 0.006 |
| 10 | {length} | 応答コンテンツサイズ(byte) | 1234 |
| 11 | {cache-status} | キャッシュステータス | HIT/F |
| 12 | {request-method} | リクエストのメソッド | GET |
| 13 | {request} | リクエストのメソッド/URI/プロトコル | https://hostname.example.com/dir1/dir2/filename.ext?query_key=value |
| 14 | {upstream} | CDNext内部利用情報 | 192.168.x.x:8080 |
| 15 | {content-type} | コンテンツのMIME type | "text/html" |
| 16 | {x-forwarded} | リクエストに付与されたX-Fowarded-For 空の場合は"-" | "198.51.100.2, unknown" |
| 17 | {user-agent} | ユーザーエージェント 空の場合は"-" | "Mozilla ..." |
■Apache combined
エンドユーザーのリクエスト情報をスペース区切りにしたデータが1レコードとなります。レコードの区切りは、改行(LF)です。
各フィールドの意味は以下の通りです。
| No | ログフィールド | 説明 | 例 |
|---|---|---|---|
| 1 | {c-ip} | クライアントIP | 198.51.100.1 |
| 2 | - | 常に "-" | - |
| 3 | {c-user} | ユーザー名(基本認証時に出力) ※ログプライバシーデータマスク有効時は※1 の値が出力 |
username ※1 __DATA_MASKED__ |
| 4 | {date-time} | リクエスト処理日時 | [28/Feb/2017:13:00:46 +0900] |
| 5 | {request} | メソッド リクエストURL プロトコル | "GET https://hostname.example.com/dir1/dir2/filename.ext?query_key=value HTTP/1.1" |
| 6 | {status} | HTTPステータス | 200 |
| 7 | {sc-bytes} | HTTPヘッダを含む転送バイト数 %O相当(byte) | 1234 |
| 8 | {c-referer} | リファラ、空の場合は"-" | "http://referer.example.com/dir/file?query" |
| 9 | {user-agent} | ユーザーエージェント 空の場合は"-" | "Mozilla ..." |
■アクセスログ追加フィールドについて
下記フィールドはCDNホスト設定のログタブから選択することで追加されます。
各フィールドの意味は以下の通りです。
| No | ログフィールド | 説明 | 例 |
|---|---|---|---|
| 1 | {tls-proto} | TLS接続時のプロトコルバージョンとなります。 | TLSv1.3 |
| 2 | {tls-cipher} | TLS接続時のTLS暗号スイートとなります。 | TLS_AES_128_GCM_SHA256 |
| 3 | {c-port} | クライアント接続のアクセス元ポート番号となります。 | 1024 |
| 4 | {cmcd} | CMCDv1対応のメディアプレーヤーから送出されたデータがクエリ文字列で送出する形式で記録されます。データはURLエンコードされています。 | 例1)sid%3D%226e2fb550-c457-11e9-bb97-0800200c9a66%22 例2)br%3D3200%2Cbs%2Cd%3D4004%2Cmtp %3D25400%2Cot%3Dv%2Crtp%3D15000% 2Csid%3D%226e2fb550-c457-11e9-bb97- 0800200c9a66%22%2Ctb%3D6000 |
1-6 アクセスログ提供機能における留意事項
ここでは、アクセスログ提供機能における留意事項について説明します。
■アクセスログの確定出力について
アクセスログ出力設定を行った CDN ホストのアクセスログは、およそ2時間後から、FTP サーバーの所定のディレクトリに出力されます。アクセス負荷や障害等により、出力遅延、削除、リカバリが発生する場合がありますが、翌日の午後12時までには確定出力します。もし、翌日の午後12時までに確定出力ができない場合には、「アカウント管理者」のメールアドレス宛に通知が行われます。
■アクセスログの利用シーンについて
アクセスログは、障害によるレコード欠損、レコード重複を除き、99.999% の精度を目標としてベストエフォートで提供しています。特にトレンド分析や速報データとして最適です。
■アクセスログ出力について
アクセスが無い場合、ディレクトリ、アクセスログ、ファイルリストは出力されません。
■ディレクトリ名、ファイル名に含まれる日時情報について
アクセスログレコードのタイムスタンプをもとに生成されます。
■ディレクトリ、ファイルの保持期間について
アクセスログは出力後 100 日間、参照することができますのでその間に取得してください。
80 日間、アクセスログ出力が行われないと VHOST ID ディレクトリは削除されます。ご注意ください。
1-7 アクセスログ処理スクリプトサンプル
アクセスログの収集、結合を行うスクリプトのサンプルです。
適宜ご参考ください。
※動作を保証するものではありませんので、動作確認のうえご活用ください
■Unix 系 OS 向け(bash)
# ログインユーザー名
FTP_LOGIN_USERNAME="clNNN_name"
# ログインパスワード
FTP_LOGIN_PASSWORD="password"
# 対象 CDN ホストの VHOST ID
# 例)0123456789abcdef0123456789abcdef
TARGET_VHOST_ID="vhost_id"
# 対象日付
# 例)20170426
TARGET_DATE="yyyymmdd"
# ファイル取得
wget -nv ftp://cdnext-log-store.stream.ne.jp/any/${TARGET_VHOST_ID}/${TARGET_DATE}/ ¥
--user ${FTP_LOGIN_USERNAME} --password ${FTP_LOGIN_PASSWORD} -r -P ${TARGET_DATE}
# 取得ファイルログ行数確認
find ${TARGET_DATE}/ -type f -print0 | xargs -r0 zcat |wc -l
# ファイル結合
find ${TARGET_DATE}/ -type f | sort | xargs cat ${TARGET_DATE}.gz
# 結合後ファイルログ行数確認
zcat ${TARGET_DATE}.gz |wc -l
# 日時昇順でソート(LTSV 向け)
# zcat ${TARGET_DATE}.gz | sort -k5,5 sorted.log
# 日時昇順でソート(J-Stream 独自、Apache combined 向け)
# zcat ${TARGET_DATE}.gz | sort -k4,4 sorted.log■Windows 系 OS 向け(cmd.exe)
※Unix コマンドが使用可能になる Gow(Gnu On Windows)を併用しています。
rem ログインユーザー名
set FTP_LOGIN_USERNAME=clNNN_name
rem ログインパスワード
set FTP_LOGIN_PASSWORD=password
rem 対象 CDN ホストの VHOST ID
rem 例)0123456789abcdef0123456789abcdef
set TARGET_VHOST_ID=vhost_id
rem 対象日付
set TARGET_DATE=yyyymmdd
rem ファイル取得
wget -nv ftp://cdnext-log-store.stream.ne.jp/any/%TARGET_VHOST_ID%/%TARGET_DATE%/ ^
--user %FTP_LOGIN_USERNAME% --password %FTP_LOGIN_PASSWORD% -r -P %TARGET_DATE%
rem 取得ファイルログ行数確認
dir /B /S *.gz | sed -e "s/¥¥/¥//g" | sort | xargs gzip -cd | wc -l
rem ファイル結合
dir /B /S *.gz | sed -e "s/¥¥/¥//g" | sort | xargs gzip -cd | gzip -c %TARGET_DATE%.gz
rem 結合後ファイルログ行数確認
gzip -cd %TARGET_DATE%.gz | wc -l