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

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

最終更新日:Nov 09, 2025

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

前提条件

  • データは Simple Log Service で収集されます。詳細については、「データ収集」をご参照ください。

  • Simple Log Service コマンドラインインターフェイス (CLI) がインストールされ、エンドポイントと AccessKey ペアで構成されていること。詳細については、「Simple Log Service CLI のインストール」および「エンドポイントと AccessKey ペアの構成」をご参照ください。

  • データが ApsaraDB RDS for MySQL データベース、AnalyticDB for MySQL データベース、または ECS インスタンス上の自己管理 MySQL データベースに保存されていること。

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

    重要

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

背景情報

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

手順

1. ホワイトリストの構成

RDS for MySQL データベース

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

ECS インスタンス上の自己管理 MySQL データベース

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

AnalyticDB for MySQL データベース

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

2. ExternalStore の作成

  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

      ExternalStore の名前。名前は小文字である必要があります。

      storeType

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

      region

      データベースインスタンスが存在するリージョン。詳細は次のとおりです。

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

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

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

      重要

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

      vpc-id

      データベースインスタンスが存在する VPC の ID。詳細は次のとおりです。

      • RDS PostgreSQL インスタンスが Virtual Private Cloud (VPC) 内にある場合は、vpc-id をその VPC の ID に設定します。

      • Virtual Private Cloud (VPC) 内の ADB PostgreSQL データベースの場合、vpc-id をその VPC の ID に設定します。

      • Alibaba Cloud Hologres データベースが Virtual Private Cloud (VPC) 内にある場合は、vpc-id を VPC の ID に設定します。

      host  

      データベースのアドレス。詳細は次のとおりです。

      VPC では、外部テーブルを作成した後にデータベースインスタンスの IP アドレスが変更されると、外部テーブルへのアクセスが影響を受けます。たとえば、これはデータベースインスタンスが移行された場合に発生する可能性があります。この問題は、構成で内部エンドポイントを使用している場合でも発生します。外部テーブルが作成されると、バックエンドはドメイン名を IP アドレスに解決し、その IP アドレスをバックエンド構成に保存します。ドメイン名に対応する IP アドレスは自動的にリフレッシュされません。この場合、外部テーブルを更新または再作成する必要があります。
      • ApsaraDB RDS for MySQL データベースを使用する場合は、host パラメーターを RDS インスタンスの内部アドレスに設定します。内部アドレスは、内部エンドポイントまたはプライベート IP アドレスにすることができます。

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

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

      • データベースがインターネット経由でアクセス可能な場合は、このパラメーターをパブリックドメイン名またはパブリック 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. コマンドラインで次のコマンドを実行して、ExternalStore を作成します。project_name は Simple Log Service プロジェクトの名前です。必要に応じて置き換えてください。このトピックでは、例として log-rds-demo を使用します。

    aliyunlog log create_external_store --project_name="log-rds-demo" --config="file:///home/shell/config.json" 
  2. ExternalStore 情報をクエリします。コマンドが成功した場合、応答は返されません。aliyunlog log get_external_store --project_name="log-rds-demo" --store_name="sls_join_meta_store" --format-output=json コマンドを実行して、ApsaraDB RDS for MySQL 外部データソースの詳細をクエリできます。次の情報が返されます。

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

3. 外部ストアの使用

クエリ分析の実行

  • 外部ストアの使用

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

    image

  • JOIN を使用して Simple Log Service を MySQL テーブルに関連付ける

    • Logstore は、サイズが 20 MB 未満の MySQL データベーステーブルとのみ結合できます。
    • クエリ文では、Logstore は join キーワードの前に配置し、ExternalStore は join キーワードの後に配置する必要があります。
    • クエリ文では、ExternalStore 名を指定する必要があります。システムは自動的に名前を MySQL データベース名とテーブル名に置き換えます。MySQL テーブル名を直接指定しないでください。

    サポートされている JOIN 構文には、INNER JOIN、LEFT JOIN、RIGHT JOIN、および FULL JOIN があります。

    [ INNER ] JOIN
    LEFT [ OUTER ] JOIN
    RIGHT [ OUTER ] JOIN
    FULL [ OUTER ] JOIN

    次の例は、JOIN 構文を示しています。

    method:postlogstorelogs | select count(1) , histogram(logstore) from log  l join sls_join_meta_store m on l.projectid = cast( m.ikey as varchar)

クエリと分析の結果を MySQL データベースに保存する

MySQL データベーステーブルのフィールドは varchar 型です。Logstore のフィールドを MySQL テーブルのフィールドと一致するように変換する必要があります。たとえば、MySQL テーブルの detail フィールドが varchar(60) の場合、cast 関数を使用して Logstore の content インデックスを変換します: cast(content as varchar(60))。cast 関数の詳細については、「型変換関数」をご参照ください。

Simple Log Service では、INSERT 構文を使用してクエリ結果を MySQL データベースに挿入できます。次の例は、INSERT 構文を示しています。

method:postlogstorelogs | insert into join_meta  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, '')
    # ExternalStore を作成します。
    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()
    # ExternalStore の詳細を取得します。
    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

関連情報