🤺

【PoC 用】Cloudflare R2 に Logpush

2024/08/08に公開

Cloudflare の Logpush でログを一時的に R2 吐いて確認する手順です。
PoC でも使えます。(この記事は API じゃなくダッシュボードでいきます)

Step 1. R2 バケット

R2 > 概要 > バケットを作成する

作成

バケット名は任意、位置情報は自動

作成完了

Step 2. R2 API トークン

R2 > 概要 > R2 API トークンの管理

作成

権限はオブジェクト読み取りと書き込み、バケットは全部 or Step 1 での作成分

作成完了(シークレットをコピー)

アクセスキー IDシークレットアクセスキーをメモしておく

Step 3. 採取するログ(データセット)決定

あらかじめ、どのログ(データセット)を取るか、決めておく
データセットの一覧

Step 4. Logpush ジョブ

分析とログ > Logpush > Logpush ジョブを作成する

宛先ストレージ

R2 オブジェクトストレージを選択

宛先バケットと認証情報

パスはデータセットと関連する名前にするとわかりやすい
コピーした R2 アクセスキーとシークレットを入力

対象データセット

対象のデータセットを選択

ジョブを構成

PoC の場合、ログのフィールドはすべてを選択し、全部取ってみる(本番で調整)

作成完了

確認

rclone を使ってログを確認する例

rclone インストール
rclone 設定 (Step 2 の認証情報が必要になります)

$ cat ~/.config/rclone/rclone.conf
[r2]
type = s3
provider = Cloudflare
access_key_id = <アクセスキーID>
secret_access_key = <シークレットアクセスキー>
endpoint = <https://アカウントID.r2.cloudflarestorage.com/>

対話型で設定ファイルを作る例
$ rclone config
No remotes found, make a new one?
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n

Enter name for new remote.
name> r2

Option Storage.
Type of storage to configure.
Choose a number from below, or type in your own value.
 1 / 1Fichier
   \ (fichier)
 2 / Akamai NetStorage
   \ (netstorage)
 3 / Alias for an existing remote
   \ (alias)
 4 / Amazon S3 Compliant Storage Providers including AWS, Alibaba, ArvanCloud, Ceph, ChinaMobile, Cloudflare, DigitalOcean, Dreamhost, GCS, HuaweiOBS, IBMCOS, IDrive, IONOS, LyveCloud, Leviia, Liara, Linode, Magalu, Minio, Netease, Petabox, RackCorp, Rclone, Scaleway, SeaweedFS, StackPath, Storj, Synology, TencentCOS, Wasabi, Qiniu and others
   \ (s3)
 5 / Backblaze B2
   \ (b2)
 6 / Better checksums for other remotes
   \ (hasher)
 7 / Box
   \ (box)
 8 / Cache a remote
   \ (cache)
 9 / Citrix Sharefile
   \ (sharefile)
10 / Combine several remotes into one
   \ (combine)
11 / Compress a remote
   \ (compress)
12 / Dropbox
   \ (dropbox)
13 / Encrypt/Decrypt a remote
   \ (crypt)
14 / Enterprise File Fabric
   \ (filefabric)
15 / FTP
   \ (ftp)
16 / Google Cloud Storage (this is not Google Drive)
   \ (google cloud storage)
17 / Google Drive
   \ (drive)
18 / Google Photos
   \ (google photos)
19 / HTTP
   \ (http)
20 / Hadoop distributed file system
   \ (hdfs)
21 / HiDrive
   \ (hidrive)
22 / ImageKit.io
   \ (imagekit)
23 / In memory object storage system.
   \ (memory)
24 / Internet Archive
   \ (internetarchive)
25 / Jottacloud
   \ (jottacloud)
26 / Koofr, Digi Storage and other Koofr-compatible storage providers
   \ (koofr)
27 / Linkbox
   \ (linkbox)
28 / Local Disk
   \ (local)
29 / Mail.ru Cloud
   \ (mailru)
30 / Mega
   \ (mega)
31 / Microsoft Azure Blob Storage
   \ (azureblob)
32 / Microsoft Azure Files
   \ (azurefiles)
33 / Microsoft OneDrive
   \ (onedrive)
34 / OpenDrive
   \ (opendrive)
35 / OpenStack Swift (Rackspace Cloud Files, Blomp Cloud Storage, Memset Memstore, OVH)
   \ (swift)
36 / Oracle Cloud Infrastructure Object Storage
   \ (oracleobjectstorage)
37 / Pcloud
   \ (pcloud)
38 / PikPak
   \ (pikpak)
39 / Proton Drive
   \ (protondrive)
40 / Put.io
   \ (putio)
41 / QingCloud Object Storage
   \ (qingstor)
42 / Quatrix by Maytech
   \ (quatrix)
43 / SMB / CIFS
   \ (smb)
44 / SSH/SFTP
   \ (sftp)
45 / Sia Decentralized Cloud
   \ (sia)
46 / Storj Decentralized Cloud Storage
   \ (storj)
47 / Sugarsync
   \ (sugarsync)
48 / Transparently chunk/split large files
   \ (chunker)
49 / Uloz.to
   \ (ulozto)
50 / Union merges the contents of several upstream fs
   \ (union)
51 / Uptobox
   \ (uptobox)
52 / WebDAV
   \ (webdav)
53 / Yandex Disk
   \ (yandex)
54 / Zoho
   \ (zoho)
55 / premiumize.me
   \ (premiumizeme)
56 / seafile
   \ (seafile)
Storage> 4

Option provider.
Choose your S3 provider.
Choose a number from below, or type in your own value.
Press Enter to leave empty.
 1 / Amazon Web Services (AWS) S3
   \ (AWS)
 2 / Alibaba Cloud Object Storage System (OSS) formerly Aliyun
   \ (Alibaba)
 3 / Arvan Cloud Object Storage (AOS)
   \ (ArvanCloud)
 4 / Ceph Object Storage
   \ (Ceph)
 5 / China Mobile Ecloud Elastic Object Storage (EOS)
   \ (ChinaMobile)
 6 / Cloudflare R2 Storage
   \ (Cloudflare)
 7 / DigitalOcean Spaces
   \ (DigitalOcean)
 8 / Dreamhost DreamObjects
   \ (Dreamhost)
 9 / Google Cloud Storage
   \ (GCS)
10 / Huawei Object Storage Service
   \ (HuaweiOBS)
11 / IBM COS S3
   \ (IBMCOS)
12 / IDrive e2
   \ (IDrive)
13 / IONOS Cloud
   \ (IONOS)
14 / Seagate Lyve Cloud
   \ (LyveCloud)
15 / Leviia Object Storage
   \ (Leviia)
16 / Liara Object Storage
   \ (Liara)
17 / Linode Object Storage
   \ (Linode)
18 / Magalu Object Storage
   \ (Magalu)
19 / Minio Object Storage
   \ (Minio)
20 / Netease Object Storage (NOS)
   \ (Netease)
21 / Petabox Object Storage
   \ (Petabox)
22 / RackCorp Object Storage
   \ (RackCorp)
23 / Rclone S3 Server
   \ (Rclone)
24 / Scaleway Object Storage
   \ (Scaleway)
25 / SeaweedFS S3
   \ (SeaweedFS)
26 / StackPath Object Storage
   \ (StackPath)
27 / Storj (S3 Compatible Gateway)
   \ (Storj)
28 / Synology C2 Object Storage
   \ (Synology)
29 / Tencent Cloud Object Storage (COS)
   \ (TencentCOS)
30 / Wasabi Object Storage
   \ (Wasabi)
31 / Qiniu Object Storage (Kodo)
   \ (Qiniu)
32 / Any other S3 compatible provider
   \ (Other)
provider> 6

Option env_auth.
Get AWS credentials from runtime (environment variables or EC2/ECS meta data if no env vars).
Only applies if access_key_id and secret_access_key is blank.
Choose a number from below, or type in your own boolean value (true or false).
Press Enter for the default (false).
 1 / Enter AWS credentials in the next step.
   \ (false)
 2 / Get AWS credentials from the environment (env vars or IAM).
   \ (true)
env_auth> 1

Option access_key_id.
AWS Access Key ID.
Leave blank for anonymous access or runtime credentials.
Enter a value. Press Enter to leave empty.
access_key_id> <アクセスキーID>

Option secret_access_key.
AWS Secret Access Key (password).
Leave blank for anonymous access or runtime credentials.
Enter a value. Press Enter to leave empty.
secret_access_key> <シークレットアクセスキー>

Option region.
Region to connect to.
Choose a number from below, or type in your own value.
Press Enter to leave empty.
 1 / R2 buckets are automatically distributed across Cloudflare's data centers for low latency.
   \ (auto)
region>

Option endpoint.
Endpoint for S3 API.
Required when using an S3 clone.
Enter a value. Press Enter to leave empty.
endpoint> <https://アカウントID.r2.cloudflarestorage.com/>

Edit advanced config?
y) Yes
n) No (default)
y/n> n

Configuration complete.
Options:
- type: s3
- provider: Cloudflare
- access_key_id: <アクセスキーID>
- secret_access_key: <シークレットアクセスキー>
- endpoint: <https://アカウントID.r2.cloudflarestorage.com/>
Keep this "r2" remote?
y) Yes this is OK (default)
e) Edit this remote
d) Delete this remote
y/e/d> y

Current remotes:

Name                 Type
====                 ====
r2                   s3

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q
余談 Object 権限の書き込み時

no_check_bucket = true追記 するのが良さ気

rclone でログの確認

Logpush ジョブで作成された日付のディレクトリとファイル名が確認できる✅

$ rclone tree r2:logs
/
├── gateway_dns
│   ├── 00010101
│   │   └── test.txt.gz
│   └── 20240808
│       ├── 20240808T053011Z_20240808T053011Z_10729623.log.gz
ログファイルの中身を確認する → ndjson のログが保存されている✅

$ rclone cat r2:logs/gateway_dns/20240808/20240808T053011Z_20240808T053011Z_10729623.log.gz --s3-decompress | jq  '.'
{
  "ApplicationID": 0,
  "CNAMECategoryIDs": [
    26,
    81,
    155
  ],
  "CNAMECategoryNames": [
    "Technology",
    "Content Servers",
    "Technology"
  ],
  "ColoCode": "NRT",
  :
  : 


$ rclone cat r2:logs/gateway_dns/20240808/20240808T053011Z_20240808T053011Z_10729623.log.gz --s3-decompress | jq  '.QueryName'
"www.cloudflarestatus.com"

Cloudflare だけで済ませたい場合は Logs Engine や将来的には Log Explorer もあり。

ダッシュボードからダウンロード

R2 > 概要 から対象のバケットをクリック、ドリルダウン、見つけたファイルをダウンロード
1.

2.

3.

以上
手っ取り早く R2 に Logpush し、ログを確認する方法の一例でした。

Discussion