Logstore では、変換されたデータを異なるアカウント間の複数のターゲット Logstore へ送信することができます。
変換されたデータは、2つの方法を使って送信することができます。アカウント間の複数のターゲット Logstore へ送信する方法と、ターゲット Logstore へ動的に送信する方法があります。
次の表では、これら 2 種類の方法それぞれのメリットとデメリットについて示しています。
方法 | メリット | デメリット |
---|---|---|
複数のターゲット Logstore を設定します。 | 異なるアカウントの Logstore をターゲット Logstore として設定することができます。 | 複数のターゲット Logstore の設定や使用は複雑です。 ターゲット Logstore は静的に指定されます。 現在、指定できるターゲット Logstore は最大 20個です。 |
いくつかのターゲット Logstore を設定し、コード内のプロジェクトと logstore フィールドをリセットします。 | ターゲット Logstore のプロジェクトと logstore フィールドは、動的に取得し、 LOG ドメイン固有言語 (DSL) ルールで設定することができます。 変換したデータは、20 個以上のターゲット Logstore へ送信することができます。 | 使用される AccessKey は、各ターゲット Logstore の設定によるものであり、動的に変更することはできません。 最大 20 個の異なるアカウントのターゲット Logstore を指定することができます。 |
注 現在、データ変換タスクは、同じリージョンでのみ送信することができます。
シナリオ 1: アカウント間で、複数のターゲット Logstore を送信する。
- 生ログ
""" All the following logs are stored in the same Logstore. The logical name of this Logstore defaults to target0. """ "Log 1" http_host: m1.abcd.com http_status: 200 request_method: GET request_uri: /pic/icon.jpg scheme: https "Log 2" http_host: m2.abcd.com http_status: 301 request_method: POST request_uri: /data/data.php scheme: http "Log 3" http_host: m3.abcd.com http_status: 404 request_method: GET request_uri: /category/abc/product_id scheme: https "Log 4" http_host: m4.abcd.com http_status: 504 request_method: GET request_uri: /data/index.html scheme: https
- 送信する目的
- ソース Logstore
target0
のhttp_status
が2XX
のログイベントを保持し、そのトピックをsuccess_event
に設定します。 http_status
が3XX
のログイベントをターゲット Logstoretarget1
へ送信し、そのトピックをredirection_event
に設定します。http_status
が4XX
のログイベントをターゲット Logstoretarget2
へ送信し、そのトピックをunauthorized_event
に設定します。http_status
が5XX
のログイベントをターゲット Logstoretarget3
へ送信し、そのトピックをinternal_server_error_event
に設定します。
- ソース Logstore
- LOG DSL オーケストレーション
e_switch(e_match("status", r"2\d+"), e_set("__topic__", "success_event"), e_match("status", r"3\d+"), e_compose(e_set("__topic__", "redirection_event"), e_output("target1")), e_match("status", r"4\d+"), e_compose(e_set("__topic__", "unauthorized_event"), e_output("target2")), e_match("status", r"5\d+"), e_compose(e_set("__topic__", "internal_server_error_event`"), e_output("target3")) )
- 変換結果
""" Source Logstore: target0 """ __topic__: success_event http_host: m1.abcd.com http_status: 200 request_method: GET request_uri: /pic/icon.jpg scheme: https """ Target Logstore: target1 """ __topic__: redirection_event http_host: m2.abcd.com http_status: 301 request_method: POST request_uri: /data/data.php scheme: http """ Target Logstore: target2 """ __topic__: unauthorized_event http_host: m3.abcd.com http_status: 404 request_method: GET request_uri: /category/abc/product_id scheme: https """ Target Logstore: target3 """ __topic__: internal_server_error_event http_host: m4.abcd.com http_status: 504 request_method: GET request_uri: /data/index.html scheme: https
- target0 や target1 などといったさまざなな Logstore の論理名を、LOG DSL ルールコードで設定します。 さらに、AccessKey を使って、異なるアカウントの複数プロジェクトや Logstore を設定します。
e_output
関数を呼び出した後、対応するログイベントはソース Logstore から削除されます。 e_output 関数を呼び出した後にソース Logstore のログイベントを保持したい場合は、代わりにe_coutput
関数を呼び出します。
シナリオ 2: ターゲット Logstore へ動的に送信する。
- 生ログ
"project1 logstore1" __tag__:type: dynamic_dispatch host: a.b.c.com project: project1 logstore: logstore1 http_status: 200 request_method: GET request_uri: /pic/icon.jpg scheme: https "project1 logstore2" __tag__:type: dynamic_dispatch host: m.n.q.com project: project1 logstore: logstore2 http_status: 301 request_method: POST request_uri: /data/data.php scheme: http "project2 logstore1" __tag__:type: dynamic_dispatch host: e.f.d.com project: project2 logstore: logstore1 http_status: 404 request_method: GET request_uri: /category/abc/product_id scheme: https "project2 logstore2" __tag__:type: dynamic_dispatch host: p.q.t.com project: project2 logstore: logstore2 http_status: 504 request_method: GET request_uri: /data/index.html scheme: https
- 送信する目的
- プロジェクトと logstore フィールドのさまざまな値に基づいて動的にログイベントを送信します。
- 値が
dynamic_dispatch
に設定されている、タグ__tag:__type
をログイベントへ追加します。
- LOG DSL オーケストレーション
e_output(project=v("project"), logstore=v("logstore"), tags={"type": "dynamic_dispatch"})
- ターゲット Logstore への動的な送信に使用するデフォルトの AccessKey は、LOG DSL ルールの設定項目で設定された 1 つ目のターゲット Logstore に対応する AccessKey です。
e_output
関数はログイベント送信のプロジェクトフィールドや logstore フィールドの値を動的に抽出するため、前述の変換ルールは 、1 つ目のターゲット Logstore のプロジェクトフィールドや logstore フィールドから影響は受けません。
- 変換結果
"project1 logstore1" __tag__:type: dynamic_dispatch host: a.b.c.com project: project1 logstore: logstore1 http_status: 200 request_method: GET request_uri: /pic/icon.jpg scheme: https "project1 logstore2" __tag__:type: dynamic_dispatch host: m.n.q.com project: project1 logstore: logstore2 http_status: 301 request_method: POST request_uri: /data/data.php scheme: http "project2 logstore1" __tag__:type: dynamic_dispatch host: e.f.d.com project: project2 logstore: logstore1 http_status: 404 request_method: GET request_uri: /category/abc/product_id scheme: https "project2 logstore2" __tag__:type: dynamic_dispatch host: p.q.t.com project: project2 logstore: logstore2 http_status: 504 request_method: GET request_uri: /data/index.html scheme: https
シナリオ 3: アカウント間でターゲット Logstore を動的に送信する。
注 このシナリオは、シナリオ 1 と 2 を組み合わせたものです。
- 生ログ
""" project1 belongs to account 1. It has two Logstores: logstore1 and logstore2. project2 belongs to account 2. It has two Logstores: logstore1 and logstore2. """ "Log 1" host: a.b.c.com project: project1 logstore: logstore1 http_status: 200 request_method: GET request_uri: /pic/icon.jpg scheme: https "Log 2" host: m.n.q.com project: project1 logstore: logstore2 http_status: 301 request_method: POST request_uri: /data/data.php scheme: http "Log 3" host: e.f.d.com project: project2 logstore: logstore1 http_status: 404 request_method: GET request_uri: /category/abc/product_id scheme: https "Log 4" host: p.q.t.com project: project2 logstore: logstore2 http_status: 504 request_method: GET request_uri: /data/index.html scheme: https
- 送信する目的
- プロジェクトや logstore フィールドのさまざまな値に基づいて、ログイベントを動的に送信します。
- 異なるアカウントのターゲット Logstore へデータを送信します。 project1 はアカウント 1 に、project2 はアカウント 2に属しています。
- LOG DSL オーケストレーション
e_switch(e_match(v("project"), "project1"), e_output(name="target0", project=v("project"), logstore=v("logstore")), e_match(v("project"), "project2"), e_output(name="target1", project=v("project"), logstore=v("logstore")))
- タスク設定項目で、ターゲット Logstore target0 と target1 にそれぞれ対応するアカウント 1 と アカウント 2 の AccessKey を設定します。
e_output
関数はログイベント送信のプロジェクトフィールドや logstore フィールドの値を動的に抽出するため、前述の変換ルールは 、ターゲット Logstore target0 と target1 のプロジェクトフィールドや logstore フィールドから影響は受けません。
- 変換結果
""" Account 1 project1 logstore1 """ host: a.b.c.com project: project1 logstore: logstore1 http_status: 200 request_method: GET request_uri: /pic/icon.jpg scheme: https """ Account 1 project1 logstore2 """ host: m.n.q.com project: project1 logstore: logstore2 http_status: 301 request_method: POST request_uri: /data/data.php scheme: http """ Account 2 project2 logstore1 """ host: e.f.d.com project: project2 logstore: logstore1 http_status: 404 request_method: GET request_uri: /category/abc/product_id scheme: https """ Account 2 project2 logstore2 """ host: p.q.t.com project: project2 logstore: logstore2 http_status: 504 request_method: GET request_uri: /data/index.html scheme: https