データが Simple Log Service の Logstore と ApsaraDB RDS for MySQL データベースの両方に保存されている場合、Simple Log Service のデータ変換機能を使用して、内部エンドポイント経由でデータベースにアクセスし、データエンリッチメントを行うことができます。
仕組み
次の図は、Simple Log Service のデータ変換が ApsaraDB RDS for MySQL データベースにアクセスしてデータエンリッチメントを行う仕組みを示しています。
ソリューション概要
このソリューションは、次の 3 つのステップで構成されています:
-
データ変換ジョブの詳細パラメータ設定の取得:まず、ApsaraDB RDS コンソールにログインして ApsaraDB RDS for MySQL インスタンスの情報を取得します。次に、OpenAPI Explorer を使用して API オペレーションを呼び出し、詳細パラメータ設定を取得します。
-
ソース Logstore でデータ変換ジョブを開始:データ変換ルールを設定して、データをエンリッチメントします。
-
変換結果を送信先 Logstore に保存:エンリッチメントされたデータを送信先 Logstore に保存します。
前提条件
-
ソース Logstore に生ログデータが含まれていること。
-
ApsaraDB RDS for MySQL インスタンスと Simple Log Service プロジェクトが同じリージョンにあること。
ステップ 1:詳細パラメータ設定の取得
-
ApsaraDB RDS コンソールにログインします。
-
ホワイトリストを設定します。詳細については、「ホワイトリストの設定」をご参照ください。
-
左側のナビゲーションバーで、 をクリックし、グループ名を入力して、IP アドレスホワイトリストを
100.104.0.0/16に設定します。
左側のナビゲーションウィンドウで、インスタンス をクリックします。ターゲットインスタンスを見つけて、その ID をクリックします。
-
-
インスタンス ID と内部ポートを取得します。
-
左側のナビゲーションウィンドウで、基本情報 をクリックします。基本情報 ページで、インスタンス ID を見つけてコピーします。
-
左側のナビゲーションウィンドウで、データベースの接続 をクリックします。データベースの接続 ページで、内部ポート: を見つけてコピーします。
-
-
ターゲットインスタンスの
VpcIdとVpcCloudInstanceIdを取得します。-
OpenAPI Explorer ページを開きます。 ページで、DBInstanceId インスタンス ID テキストボックスを見つけ、コピーしたターゲットインスタンス ID を入力します。API オペレーションの詳細については、「インスタンス詳細のクエリ」をご参照ください。
-
操作 をクリックし、[呼び出し結果] ページで
VpcIdとVpcCloudInstanceIdをコピーします。"VSwitchId": "xxx", "TipsLevel": 0, "PayType": "Postpaid", "LockMode": "Unlock", "DeletionProtection": false, "DBInstanceStorageType": "general_essd", "InsId": 1, "VpcId": "xxx", "ConnectionMode": "Standard", "VpcCloudInstanceId": "xxx", "RegionId": "cn-hangzhou", "ConnectionString": "xxx", "ExpireTime": ""
-
ステップ 2:データ変換ジョブの開始
-
Simple Log Service コンソールにログインします。
-
データ変換ページに移動します。
-
[プロジェクト] セクションで、ターゲットプロジェクトをクリックします。
-
タブで、ターゲット Logstore をクリックします。
-
クエリと分析ページで、データ処理 をクリックします。
-
データ変換ページで、[データ変換 (旧バージョン) に切り替え] をクリックします。
-
-
詳細パラメータ設定を追加します。
-
ページの右上隅で、Advanced を選択し、データのプレビュー をクリックします。
-
プレビュー設定の追加 パネルで、詳細設定 をクリックし、次のパラメーターを追加します。
重要表内のすべての設定パラメーターにおいて、
your_nameはカスタマイズ可能ですが、一貫性を保つ必要があります。また、処理ルール内のyour_nameとも一致させる必要があります。パラメーター
値
説明
config.vpc.vpc_id.your_name
vpc-uf6mskb0b****n9yj
ターゲットインスタンスの VPC ID。
手順については、「ターゲットインスタンスの VpcId の取得」をご参照ください。
config.vpc.instance_id.your_name
rm-uf6e61k****ahd7-2024091513
ターゲットインスタンスの ID。
手順については、「ターゲットインスタンスの VpcCloudInstanceId の取得」をご参照ください。
同じ Alibaba Cloud リージョン内の自己管理 MySQL データベースの場合、
config.vpc.instance_ip.your_nameパラメーターを使用して VPC 内のデータベースの IP アドレスを指定します。config.vpc.instance_port.your_name
3306
ターゲットインスタンスの内部ポート。
手順については、「ターゲットインスタンスの内部ポートの取得」をご参照ください。
-
設定を確認後、OK をクリックします。
-
-
変換ルールを編集します。
-
エディターに、次の文を追加します。
次のコードは構文の例です。データエンリッチメント関数とリソース関数の詳細については、「ApsaraDB RDS for MySQL データベースのデータを使用したデータエンリッチメント」および「リソース関数」をご参照ください。
/* e_table_map() データエンリッチメント関数。 res_rds_mysql() プル関数。ApsaraDB RDS for MySQL データベースからテーブルコンテンツまたは SQL 実行結果をプルします。 str_format() 文字列フォーマット関数。res_local() の `your_name` は、詳細パラメータ設定の `your_name` と一致する必要があります。 field マッチングフィールド。Logstore のログデータと ApsaraDB RDS for MySQL テーブルのデータをマッチングするための基準となるフィールド。このフィールドの値が両方のソースで同一である場合にのみ、マッチングは成功します。 output_fields 出力フィールド。マッチングが成功した場合、これらのフィールドの値が返され、新しいログエントリが生成されます。 */ e_table_map( res_rds_mysql( str_format("{}:{}", res_local("config.vpc.instance_id.your_name"), res_local("config.vpc.instance_port.your_name")), "database_username", "database_password", "database_name", table="table_name" ), "field", "output_fields" )変換文は次のとおりです:
次のルールは、Simple Log Service Logstore の
process_time_in_msフィールドを、RDS MySQL データベーステーブルのprocess_time_in_msフィールドと照合します。マッチングが成功するのは、process_time_in_msフィールドの値が同一である場合のみです。マッチングが成功すると、ルールは RDS MySQL データベーステーブルからmodelおよびpurchase_priceフィールドとその値を取得し、Logstore のデータと組み合わせて新しいデータを生成します。e_table_map( res_rds_mysql( str_format("{}:{}", res_local("config.vpc.instance_id.test"), res_local("config.vpc.instance_port.test")), "xxx", "xxx","xxx xxx", "database", table="bicycles", primary_keys="process_time_in_ms"), "process_time_in_ms", ["model","purchase_price"] )
-
-
Transformation Results を表示します。
メインテーブルでは、ログは `__default__` 出力ターゲットにルーティングされ、`remote_addr` や `request_method` のような元のキーと値のフィールドが保持されます。これは、変換ルールがこれらのログにマッチせず、元の状態でデフォルトのターゲットにディスパッチされたことを意味します。
正常に一致したログレコードには、`model` (XTC 800)、`purchase_price` (3000.00)、`process_time_in_ms` (788) などのキーフィールドが含まれます。完全なログエントリは次のとおりです:
__source__ :127.0.0.1 __tag__:__receive_time__ :1725962982 __tag__:_container_ip_ :183.227.33.184 __tag__:_container_name_ :container3 __tag__:_image_name_ :image3 __tag__:_path_ :/home/local __topic__ :tomcat_access_log body_bytes_sent :6344 model :XTC 800 process_time_in_ms :788 purchase_price :3000.00 referer :www.phn.mock.com remote_addr :202.92.0.182 remote_user :v-0 request_method :GET request_protocol :HTTP/2.0 request_uri :/request/path-3/file-1 status :200 time :10/Sep/2024:09:09:35 user_agent :Mozilla/5.0 (Windows NT 6.1) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.3 Safari/534.24右上隅にある データのプレビュー をクリックしてデータを処理します。
ステップ 3:変換結果の保存
-
右下隅にある [変換ジョブとして保存 (旧バージョン)] をクリックします。
[データ変換ジョブの作成] ダイアログボックスで、まず [ジョブ名] (プレフィックスは `etl-`)、[表示名]、[ジョブの説明] を入力します。[権限付与方法] には [デフォルトロール] を選択します。次に、[ストレージターゲット] セクションで、[ターゲット名]、[ターゲットリージョン]、[ターゲットプロジェクト]、[ターゲット Logstore] を設定し、権限付与に [デフォルトロール] を選択します。最後に、[処理範囲 (データ受信時間)] セクションで、[すべて]、[特定の時間から]、または [特定の時間範囲] などの時間範囲を選択します。
-
左側のナビゲーションウィンドウの Logstores で、変換結果が保存される送信先 Logstore をクリックします。ページの右上隅で、データの時間範囲を選択します。
時間範囲を選択した後、Rawデータ タブをチェックして、変換結果が保存されたことを確認します。
処理されたログには、新しい model (XTC 800) と purchase_price (3000.00) フィールドが含まれています。これにより、変換結果が送信先 Logstore に書き込まれたことが確認できます。
付録:AnalyticDB for MySQL および PolarDB for MySQL へのアクセス
Simple Log Service は、ApsaraDB RDS for MySQL に加えて、AnalyticDB for MySQL および PolarDB for MySQL データベースにも内部エンドポイント経由でアクセスできます。必要な設定は以下のとおりです:
-
AnalyticDB for MySQL データベース
パラメーターの詳細設定 を構成する際、config.vpc.instance_id.your_name の値を AnalyticDB for MySQL インスタンス ID の末尾に -controller を付けたものに設定します。その他の設定については、このドキュメントをご参照ください。
また、`config.vpc.vpc_id.your_name` を対応する VPC ID に、`config.vpc.instance_port.your_name` を `3306` に設定する必要もあります。
-
PolarDB for MySQL の場合は、ApsaraDB RDS for MySQL と同じ設定を使用します。