ログストリーミング : Coralogix

Fastly の リアルタイムログストリーミング 機能によって Coralogix にログファイルを送信することができます。Coralogix は 動的アラート比率ベースのアラートフローの異常検出、そして 脅威発見機能などで異常な動作を検出できる分析プラットフォームを提供しています。

前提条件

まだ Coralogix のアカウントをお持ちでない場合、Coralogix の Web サイトの登録手順に従ってアカウントを登録する必要があります。登録が完了したら、Coralogix のダッシュボードの Settings セクションにある Send Your Logs エリアに移動し、固有の秘密鍵をメモします。この秘密鍵は、お客様が送信したデータをお客様のアカウントと関連付けるために、Coralogix によって使用されます。Fastly でエンドポイントを設定する際に必要となります。

Coralogix をログエンドポイントとして追加

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

  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 フィールドに Coralogix の地域 FluentD API URL を入力します。詳細については、Coralogix のドキュメントをご参照ください。たとえば、米国の Coralogix アカウントの地域 FluentD API URL は ですhttps://api.coralogix.us/logs/rest/singles
    • Maximum logs フィールドは、0 (デフォルト) のままにしておきます。
    • Maximum bytes フィールドに、2000000 を入力します。
  4. Create an HTTPS endpoint ページの Advanced options リンクをクリックします。Advanced options が表示されます。
  5. Create an HTTPS endpoint ページの Advanced options に次のように入力します。
    • Content type フィールドに application/json を入力します。
    • Custom header name フィールドに private_key を入力します。
    • Custom header value フィールドに、Coralogix の秘密鍵を入力します。
    • メソッド コントロールから、投稿 OR ブログ記事 を選択します。
    • JSON log entry フォーマット コントロールから、Array of JSON を選択します。
    • Select a log line フォーマット コントロールはデフォルトのままにします。
    • 残りのフィールドは空白のままにします。
  6. Create ボタンをクリックすると、新しいログエンドポイントが作成されます。
  7. Activate ボタンをクリックして設定変更をデプロイします。

警告を無視しても問題ありません。

推奨されるログ形式とフィールド設定

以下のログ形式を使用します。

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
{
  "timestamp":%{time.start.msec}V,
  "applicationName":"fastly",
  "subsystemName":"%{req.service_id}V",
  "severity": 3,
  "json": {
    "time": {
        "start":"%{begin:%Y-%m-%dT%H:%M:%S%Z}t",
        "end":"%{end:%Y-%m-%dT%H:%M:%S%Z}t",
        "elapsed":%D
    },
    "cdn_server": {
        "ip_ipaddr":"%A",
        "code":"%{server.datacenter}V",
        "hostname":"%{server.hostname}V",
        "region_code":"%{server.region}V",
        "is_cacheable":%{if(fastly_info.state ~"^(HIT|MISS)$", "true", "false")}V,
        "cache_status":"%{regsub(fastly_info.state, "^(HIT-(SYNTH)|(HITPASS|HIT|MISS|PASS|ERROR|PIPE)).*", "\\2\\3")}V",
        "is_h2":%{if(fastly_info.is_h2, "true", "false")}V,
        "is_h2_push":%{if(fastly_info.h2.is_push, "true", "false")}V,
        "h2_stream_id":"%{fastly_info.h2.stream_id}V"
    },
    "client": {
        "city_name":"%{client.geo.city.utf8}V",
        "country_code":"%{client.geo.country_code}V",
        "country_name":"%{client.geo.country_name}V",
        "continent_code":"%{client.geo.continent_code}V",
        "region":"%{client.geo.region}V",
        "ip_ipaddr":"%h",
        "name":"%{client.as.name}V",
        "number":"%{client.as.number}V",
        "connection_speed":"%{client.geo.conn_speed}V",
        "location_geopoint": {
            "lat":%{client.geo.latitude}V,
            "lon":%{client.geo.longitude}V
        }
    },
    "response": {
        "status":%>s,
        "content_type":"%{Content-Type}o",
        "age":"%{Age}o",
        "cache_control":"%{Cache-Control}o",
        "expires":"%{Expires}o",
        "last_modified":"%{Last-Modified}o",
        "tsv":"%{TSV}o",
        "header_size":%{resp.header_bytes_written}V,
        "body_size":%B
    },
    "request": {
        "host":"%{req.http.host}V",
        "is_ipv6":%{if(req.is_ipv6, "true", "false")}V,
        "backend":"%{req.backend}V",
        "service_id":"%{req.service_id}V",
        "url":"%{cstr_escape(req.url)}V",
        "url_ext":"%{req.url.ext}V",
        "header_size":%{req.header_bytes_read}V,
        "body_size":%{req.body_bytes_read}V,
        "method":"%m",
        "protocol":"%H",
        "referer":"%{Referer}i",
        "user_agent":"%{User-Agent}i",
        "accept_content":"%{Accept}i",
        "accept_language":"%{Accept-Language}i",
        "accept_encoding":"%{Accept-Encoding}i",
        "accept_charset":"%{Accept-Charset}i",
        "connection":"%{Connection}i",
        "dnt":"%{DNT}i",
        "forwarded":"%{Forwarded}i",
        "via":"%{Via}i",
        "cache_control":"%{Cache-Control}i",
        "x_requested_with":"%{X-Requested-With}i",
        "x_att_device_id":"%{X-ATT-Device-Id}i",
        "x_forwarded_for":"%{X-Forwarded-For}i"
    },
    "socket": {
        "cwnd":%{client.socket.cwnd}V,
        "pace":%{client.socket.pace}V,
        "nexthop":"%{client.socket.nexthop}V",
        "tcpi_rcv_mss":%{client.socket.tcpi_rcv_mss}V,
        "tcpi_snd_mss":%{client.socket.tcpi_snd_mss}V,
        "tcpi_rtt":%{client.socket.tcpi_rtt}V,
        "tcpi_rttvar":%{client.socket.tcpi_rttvar}V,
        "tcpi_rcv_rtt":%{client.socket.tcpi_rcv_rtt}V,
        "tcpi_rcv_space":%{client.socket.tcpi_rcv_space}V,
        "tcpi_last_data_sent":%{client.socket.tcpi_last_data_sent}V,
        "tcpi_total_retrans":%{client.socket.tcpi_total_retrans}V,
        "tcpi_delta_retrans":%{client.socket.tcpi_delta_retrans}V,
        "ploss":%{client.socket.ploss}V
    }
  }
}

以下の推奨形式の最初の5つのフィールドは必須です。

  • timestamp: このフィールドの形式は変更しないでください。
  • applicationName: このフィールドにはアプリケーションの名前を入力してください。
  • subsystemName: このフィールドにサブシステムの名前を入力してください。これは、コンポーネントを分離するために使用されます。例では req.service_id を使用していますが、これは人間可読ではありません。サブシステムを識別するのに分かりやすい、意味のあるサブシステム名を使用してください。
  • severity: 重大度を指定し、以下の選択肢を使用してすべてのログに適用することができます: 1 (デバッグ)、2 (冗長化)、3 (情報)、4 (警告)、5 (エラー)、6 (危機的)。これは後から、後述の抽出ルールを使って変更することができます。
  • json (object): 必要に応じてフィールドを追加または削除してください。静的フィールドを追加することができます。Fastly VCL リファレンス に記載されているフィールドを含む、ネスト化された JSON 形式がサポートされています。

    ネストされたフィーresponse.statusルドの指定は、リクエストのサービスを特定するための便利な方法です。Coralogix 解析ルールを使用すると、ログのステータスコード値でCoralogixインターフェイスの重大度フィールドにデータを入力するように JSON 抽出ルールを設定することができます。具体的には、HTTP ステータスコードを重大度の値を自動的にマッピングすることができます。例えば、2xx ステータスコードは Coralogix の深刻度を "INFO" とし、4xx ステータスコードは Coralogix の深刻度を "ERROR" とします。

    Coralogix Web コントロールパネルでは、以下のように表示されます。

    新しい Coralogix ルールの作成

Coralogix ダッシュボードとアラートの設定

Coralogixは、ダッシュボードやアラートを介して Fastly と自社サービスを統合するためのチュートリアルを提供しています。サービスの概要、ビジターの内訳、サービスの質など、Fastly のデータを使って作成されたデータダッシュボードの例が掲載されています。

チュートリアルでは、Fastly からのログの受信問題、オリジンでの障害、エラー率やキャッシュミスの増加、様々な異常や疑わしいリクエスト、Web サイトの改ざんなどの状況に応じてユーザー定義アラート設定する方法も説明されています。

Back to Top