ログストリーミング:Hydrolix

Fastly の リアルタイムログストリーミング 機能は、クラウドベースの時系列データプラットフォームである Hydrolix にログファイルを送信することができます。Hydrolix は、Fastly の HTTPS ログエンドポイント を通じて、Fastly のログ保存と分析のためのネイティブ統合を提供します。Hydrolix は、これらのログをリアルタイムで取り込み、照会することができます。

前提条件

まだ Hydrolix のアカウントをお持ちでない場合、Hydrolix Web サイト でサインアップする必要があります。また、対象となる Hydrolix 環境について以下のことを知っておく必要があります。

Hydrolix をログエンドポイントとして追加する

以下の手順で、Hydrolix をログエンドポイントとして追加します。

  1. リモートログストリーミングの設定に関するガイドの情報をご参照ください。
  2. HTTPS Create endpoint ボタンをクリックしてください。Create an HTTPS endpoint ページが表示されます。
  3. Create an HTTPS endpoint フィールドに次のように入力します。
    • Name フィールドに分かりやすいエンドポイントの名前を入力します。
    • Placement セクションでは、生成される VCL にログコールが配置される場所を選択します。有効な値は Format Version Defaultwaf_debug (waf_debug_log)None です。詳細については、ログ配置の変更に関するガイドをご参照ください。
    • Log format フィールドで、プレースホルダーとして入力されているログ形式を、以下の推奨されるログ形式とフィールド設定に示すように適切に変更してください。
    • URL フィールドには、https://<hydrolix-instance>.hydrolix.live/ingest/event と入力し、<hydrolix-instance> を Hydrolix インスタンスの名前に置き換えて入力します。
    • Maximum logs フィールドは、0(デフォルト) のままにしておきます。
    • Maximum bytes フィールドに、0 を入力します。
  4. Create an HTTPS endpoint ページの Advanced options リンクをクリックします。Advanced options が表示されます。
  5. Create an HTTPS endpoint ページの Advanced options に次のように入力します。
    • Content type フィールドに application/json を入力します。
    • Custom header name フィールドに x-hdx-table を入力します。
    • Custom header value フィールドには、Hydrolix のプロジェクト名とテーブル名に置き換えて <hydrolix-project-name>.<hydrolix-table-name> と入力します。
    • Method コントロールから、POST を選択します。
    • JSON log entry format コントロールから、Newline delimited を選択します。
    • Select a log line formatPlacement コントロールの設定はデフォルトのままにしておきます。
    • TLS hostname フィールドに、サーバーの証明書を検証するためのホスト名を任意で入力します。これは、証明書のサブジェクト代替名(SAN)フィールドの1つと同じである必要があります。コモンネーム(CN)はサポートされていません。
    • TLS CA certificate フィールド、TLS client certificate フィールド、TLS client key フィールドはすべて空にしておきます。
  6. Create ボタンをクリックすると、新しいログエンドポイントが作成されます。
  7. Activate ボタンをクリックして設定変更をデプロイします。

推奨されるログ形式

この例では、以下のようなログフォーマットを使用します。このフォーマットは、TransformView の設定も併せて変更する限り、任意の値でカスタマイズすることができます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
  "timestamp":"%{begin:%Y-%m-%dT%H:%M:%S}t",
  "time_elapsed":%{time.elapsed.usec}V,
  "is_tls":%{if(req.is_ssl, "true", "false")}V,
  "client_ip":"%{req.http.Fastly-Client-IP}V",
  "geo_city":"%{client.geo.city}V",
  "geo_country_code":"%{client.geo.country_code}V",
  "request":"%{req.request}V",
  "host":"%{req.http.Fastly-Orig-Host}V",
  "url":"%{json.escape(req.url)}V",
  "request_referer":"%{json.escape(req.http.Referer)}V",
  "request_user_agent":"%{json.escape(req.http.User-Agent)}V",
  "request_accept_language":"%{json.escape(req.http.Accept-Language)}V",
  "request_accept_charset":"%{json.escape(req.http.Accept-Charset)}V",
  "cache_status":"%{regsub(fastly_info.state, "^(HIT-(SYNTH)|(HITPASS|HIT|MISS|PASS|ERROR|PIPE)).*", "\\2\\3") }V"
}

Hydrolix ストリーミングインテイクの設定

projecttable のセットアップが完了し、Fastly が Hydrolix インスタンスにログを送信するように設定されたら、インジェスト・トランスフォーム・スキーマ を定義し、Fastly のログストリーミング・インジェスト・パイプラインを設定します。

トランスフォームスキーマの作成

以下は上記の推奨されるログ形式で使用するための推奨トランスフォームスキーマです。<table uuid> を、対象となる Hydrolix テーブルの UUID に必ず置き換えてください。この変換をデフォルトとして設定する必要があるので、"is_default"true に設定します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
{
    "name": "fastly_transform",
    "type": "json",
    "table": "<table uuid>",
    "description": "fastly https logs",
    "settings": {
        "is_default": true,
        "output_columns": [
                            {
                                "position": 0,
                                "name": "timestamp",
                                "type": "datetime",
                                "format": "2006-01-02T15:04:05",
                                "treatment": "primary"
                            },
                            {
                                "position": 1,
                                "name": "time_elapsed",
                                "type": "uint64",
                                "treatment": "tag"
                            },
                            {
                                "position": 2,
                                "name": "is_tls",
                                "type": "bool",
                                "treatment": "tag"
                            },
                            {
                                "position": 3,
                                "name": "client_ip",
                                "type": "string",
                                "treatment": "tag"
                            },
                            {
                                "position": 4,
                                "name": "geo_city",
                                "type": "string",
                                "treatment": "tag"
                            },
                            {
                                "position": 5,
                                "name": "geo_country_code",
                                "type": "string",
                                "treatment": "tag"
                            },
                            {
                                "position": 6,
                                "name": "request",
                                "type": "string",
                                "treatment": "tag"
                            },
                            {
                                "position": 7,
                                "name": "host",
                                "type": "string",
                                "treatment": "tag"
                            },
                            {
                                "position": 8,
                                "name": "url",
                                "type": "string",
                                "treatment": "tag"
                            },
                            {
                                "position": 9,
                                "name": "request_referer",
                                "type": "string",
                                "treatment": "tag"
                            },
                            {
                                "position": 10,
                                "name": "request_user_agent",
                                "type": "string",
                                "treatment": "tag"
                            },
                            {
                                "position": 11,
                                "name": "request_accept_language",
                                "type": "string",
                                "treatment": "tag"
                            },
                            {
                                "position": 12,
                                "name": "request_accept_charset",
                                "type": "string",
                                "treatment": "tag"
                            },
                            {
                                "position": 13,
                                "name": "cache_status",
                                "type": "string",
                                "treatment": "tag"
                            }
                        ]
        }
    }

トランスフォームスキーマが定義されると、Hydrolix は受信する Fastly ログデータを受け入れるように設定されます。

ビューの活用

Hydrolix は、1つのデータセットに対して様々なクエリフォーマットをサポートしています。データセットのクエリデータ構造 (ビュー) によって、クエリデータをカスタマイズしたり、ユーザーのアクセスを特定の列に制限することができます。

Hydrolix は、トランスフォームの作成時にデフォルトビューを自動的に生成し、これを使用してすぐにデータセットを照会することができます。追加の設定は必要ありません。しかし、ビューのコンセプトと、この機能がもたらすメリットをよく理解しておくことを推奨します。より詳細な情報は Hydrolix の Web サイト でご覧いただけます。

参考資料

Hydrolix では、Fastly のデータをシステム内からクエリして分析するためのチュートリアルを提供しています。

Back to Top