すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:MySQL データソースの関連付け

最終更新日:Jun 23, 2026

このトピックでは、外部ストアを作成して Simple Log Service (SLS) と MySQL データベースを関連付ける方法について説明します。

前提条件

  • Simple Log Service でデータを収集済みであること。詳細については、「データ収集」をご参照ください。

  • Log Service CLI をインストールし、エンドポイントと AccessKey ペアを設定済みであること。

  • ApsaraDB RDS for MySQL データベース、AnalyticDB for MySQL データベース、または Alibaba Cloud Elastic Compute Service (ECS) インスタンス上の自己管理型 MySQL データベースにデータを保存済みであること。

  • MySQL データベースが Alibaba Cloud Virtual Private Cloud (VPC) 内にあること。ApsaraDB RDS for MySQL インスタンス、AnalyticDB for MySQL インスタンス、または ECS インスタンスは、SLS プロジェクトと同じリージョンにある必要があります。

    重要

    パブリック IP アドレスを使用して MySQL データベースに直接接続することはできません。

背景情報

SLS の外部ストア機能を使用すると、SLS を ApsaraDB RDS for MySQL データベース、AnalyticDB for MySQL データベース、または ECS インスタンス上の自己管理型 MySQL データベースに関連付けることができます。また、クエリと分析の結果を MySQL データベースに書き込んで、さらに処理することもできます。

操作手順

1. ホワイトリストの設定

ApsaraDB RDS for MySQL

CIDR ブロック 100.104.0.0/16、11.194.0.0/16、および 11.201.0.0/16 をホワイトリストに追加します。詳細については、「IP アドレスホワイトリストの設定」をご参照ください。

ECS 上の自己管理型 MySQL

セキュリティグループルールを追加して、CIDR ブロック 100.104.0.0/16、11.194.0.0/16、および 11.201.0.0/16 からのアクセスを許可します。詳細については、「セキュリティグループルールの追加」をご参照ください。

AnalyticDB for MySQL

CIDR ブロック 100.104.0.0/16、11.194.0.0/16、および 11.201.0.0/16 をホワイトリストに追加します。詳細については、「ホワイトリストの設定」をご参照ください。

2. 外部ストアの作成

  1. CLI がインストールされているサーバーにログインします。コマンドラインで touch コマンドを実行して、設定ファイル /home/shell/config.json を作成します。次のスクリプトを config.json ファイルに追加します。regionvpc-idhostportusernamepassworddb、および table の値は、実際の値に置き換える必要があります。

    1. パラメーター

      {
          "externalStoreName":"sls_join_meta_store",
          "storeType":"rds-vpc",
          "parameter":{
              "region":"cn-qingdao",
              "vpc-id":"vpc-m5eq4irc1pucp*******",
              "host":"rm-bp1******rm76.mysql.rds.aliyuncs.com",
              "port":"3306",
              "username":"user",
              "password":"****",
              "db":"scmc",
              "table":"join_meta"
          }
      }

      externalStoreName

      外部ストアの名前。名前は小文字にする必要があります。

      storeType

      データソースのタイプ。このパラメーターを rds-vpc に設定します。

      region

      データベースが配置されているリージョン。

      • ApsaraDB RDS for MySQL データベースを使用する場合は、region を RDS インスタンスのリージョンに設定します。

      • AnalyticDB for MySQL データベースを使用する場合は、region を AnalyticDB for MySQL インスタンスのリージョンに設定します。

      • VPC 内の ECS インスタンスで自己管理型 MySQL データベースを使用する場合は、region を ECS インスタンスのリージョンに設定します。

      重要

      ApsaraDB RDS for MySQL インスタンス、AnalyticDB for MySQL インスタンス、または ECS インスタンスは、SLS プロジェクトと同じリージョンにある必要があります。

      vpc-id

      VPC ID。

      • VPC 内の ApsaraDB RDS for MySQL インスタンスを使用する場合は、vpc-id をインスタンスが配置されている VPC の ID に設定します。

      • VPC 内の AnalyticDB for MySQL インスタンスを使用する場合は、vpc-id をインスタンスが配置されている VPC の ID に設定します。

      • VPC 内の ECS インスタンスで自己管理型 MySQL データベースを使用する場合は、vpc-id をインスタンスが配置されている VPC の ID に設定します。

      host  

      VPC 内のデータベースに内部エンドポイントを使用する場合、SLS は外部ストアの作成時にそれをプライベート IP アドレスに解決してキャッシュします。この IP アドレスが後で変更された場合 (インスタンスの移行など)、キャッシュされた IP は自動的に更新されないため、外部ストアへのアクセスが中断されます。これを解決するには、外部ストアを更新または再作成する必要があります。
      • VPC 内の ApsaraDB RDS for MySQL データベースを使用する場合は、host を RDS インスタンスの内部アドレスに設定します。アドレスは、内部エンドポイントまたはプライベート IP アドレスにすることができます。

      • VPC 内の AnalyticDB for MySQL データベースを使用する場合は、host を AnalyticDB for MySQL インスタンスの内部アドレスに設定します。アドレスは、内部エンドポイントまたはプライベート IP アドレスにすることができます。

      • VPC 内の ECS インスタンスで自己管理型 MySQL データベースを使用する場合は、host を ECS インスタンスのプライベート IP アドレスに設定します。

      port

      ポート番号。

      • ApsaraDB RDS for MySQL データベースを使用する場合は、port を RDS インスタンスのポート番号に設定します。

      • AnalyticDB for MySQL データベースを使用する場合は、port を AnalyticDB for MySQL インスタンスのポート番号に設定します。

      • ECS インスタンスで自己管理型 MySQL データベースを使用する場合は、port を ECS インスタンス上の MySQL のサービスポートに設定します。

      username

      データベースアカウントのユーザー名。

      password

      データベースアカウントのパスワード。

      db

      データベースの名前。

      table

      データベーステーブルの名前。次のフォーマットがサポートされています:

      1. table_name (例:test)

      2. schema_name.table_name (例:public.test)

  1. 次のコマンドを実行して、外部ストアを作成します。project_name をご利用のプロジェクト名に置き換えます。この例では log-rds-demo を使用します。

    aliyunlog log create_external_store --project_name="log-rds-demo" --config="file:///home/shell/config.json" 
  2. create_external_store コマンドは、成功した場合、出力を返しません。作成を検証するには、aliyunlog log get_external_store --project_name="log-rds-demo" --store_name="sls_join_meta_store" --format-output=json コマンドを実行して、外部ストアの詳細を表示します。次の応答は一例です:

    {
        "externalStoreName":"sls_join_meta_store",
        "storeType":"rds-vpc",
        "parameter":{
             "db": "scmc",
             "host": "rm-bp1******rm76.mysql.rds.aliyuncs.com",
             "port": "3306",
             "region": "cn-qingdao",
             "table": "join_meta",
             "username": "user",
             "vpc-id": "vpc-m5eq4irc1pucp*******"
        }
    }

3. 外部ストアの使用

クエリと分析の実行

  • 外部ストアの使用

    外部データソースを関連付けた後、SLS コンソールに移動します。log-rds-demo という名前のプロジェクトで、任意の Logstore をクリックします。次に、クエリと分析のステートメント * | select * from sls_join_meta_store を実行して、関連付けられた MySQL テーブルからデータをクエリします。

    [グラフ] タブでは、クエリ結果は idname の列を持つテーブルになります。2 つのレコード例は (123, '田中') と (124, '鈴木') です。

  • JOIN を使用した Logstore と MySQL テーブルの関連付け

    • JOIN 操作の MySQL テーブルは 20 MB 未満である必要があります。
    • クエリと分析のステートメントでは、Logstore は join キーワードの前に指定し、ExternalStore は join キーワードの後に指定する必要があります。
    • クエリでは外部ストア名を使用してください。SLS はこの名前を設定済みのデータベースとテーブルに自動的にマッピングします。MySQL テーブル名を直接使用しないでください。

    サポートされている JOIN 句には、INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN があります。

    [ INNER ] JOIN
    LEFT [ OUTER ] JOIN
    RIGHT [ OUTER ] JOIN
    FULL [ OUTER ] JOIN
    * | select count(1) from log l join sls_join_meta_store m on l.projectid = cast( m.ikey as varchar)

クエリ結果の MySQL への保存

ターゲットの MySQL テーブルのフィールドが varchar 型の場合、Logstore の対応するフィールドを互換性のある varchar 型にキャストする必要があります。たとえば、MySQL テーブルの detail フィールドが varchar(60) の場合、Logstore の content フィールドに cast 関数を使用します: cast(content as varchar(60))。cast 関数の詳細については、「型変換関数」をご参照ください。

INSERT 構文を使用して、クエリ結果を MySQL データベースに保存できます:

* | insert into sls_join_meta_store  select cast(method as varchar(65535)),count(1) from log group by method

SDK 操作

Python サンプルコード

# encoding: utf-8
from __future__ import print_function
from aliyun.log import *
from aliyun.log.util import base64_encodestring
from random import randint
import time
import os
from datetime import datetime
    endpoint = os.environ.get('ALIYUN_LOG_SAMPLE_ENDPOINT', 'cn-chengdu.log.aliyuncs.com')
    accessKeyId = os.environ.get('ALIYUN_LOG_SAMPLE_ACCESSID', '')
    accessKey = os.environ.get('ALIYUN_LOG_SAMPLE_ACCESSKEY', '')
    logstore = os.environ.get('ALIYUN_LOG_SAMPLE_LOGSTORE', '')
    project = "ali-yunlei-chengdu"
    client = LogClient(endpoint, accessKeyId, accessKey, '')
    # 外部ストアを作成します。
    res = client.create_external_store(project,
                                       ExternalStoreConfig(externalStoreName="rds_store", region="cn-chengdu",
                                                           storeType="rds-vpc",
                                                           vpcId="vpc-2vctx8reuqswmk********",
                                                           host='rm-2vc6x67972iv********.mysql.cn-chengdu.rds.aliyuncs.com',
                                                           port="3306", username="root", password="123456",
                                                           database="test_database", table="test"))
    res.log_print()
    # 外部ストアの詳細を取得します。
    res = client.get_external_store(project,"rds_store")
    res.log_print()
    res = client.list_external_store(project,"")
    res.log_print()
    # JOIN クエリを実行します。
    req = GetLogsRequest(project,logstore,From,To,"","* | select count(1) from  "+ logstore +"  s join  meta m on  s.projectid = cast(m.ikey as varchar)")
    res = client.get_logs(req)
    res.log_print()
     # クエリと分析の結果を MySQL データベースに書き込みます。
    req = GetLogsRequest(project,logstore,From,To,"","* |  insert into rds_store select count(1) from  "+ logstore )
    res = client.get_logs(req)
    res.log_print()

関連操作

  • MySQL 外部ストアの更新

    aliyunlog log update_external_store --project_name="log-rds-demo" --config="file:///home/shell/config.json" 
  • MySQL 外部ストアの削除

    aliyunlog log delete_external_store --project_name="log-rds-demo" --store_name=sls_join_meta_store

参考