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

Simple Log Service:LogstoreおよびMySQLデータベースでのクエリおよび分析操作の結合

最終更新日:Aug 26, 2024

Simple Log Serviceでは、JOIN構文を使用してLogstoreおよびMySQLデータベースからデータを照会できます。 クエリ結果はデータベースに保存されます。

前提条件

外部ストアが作成されます。 詳細については、「Simple Log ServiceとMySQLデータベースの関連付け」をご参照ください。

手順

  1. Simple Log Serviceコンソール.

  2. [プロジェクト] セクションで、管理するプロジェクトをクリックします。

    image

  3. 左側のナビゲーションウィンドウで、[ログストレージ] をクリックします。 Logstoreリストで、管理するLogstoreをクリックします。

    image

  4. クエリ文を実行します。

    Simple Log Serviceは、次のJOIN構文をサポートしています。

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

    次のサンプルコードは、JOINクエリ操作の例を示しています。 詳細については、「LogstoreをMySQLデータベースに関連付けてクエリと分析を実行する」をご参照ください。

    method:postlogstorelogs | select count(1) , histogram(logstore) from log  l join join_meta m on l.projectid = cast( m.ikey as varchar)
    重要
    • JOIN構文は、LogstoreとMySQLデータベースの小さなテーブルでのみ使用できます。 小さなテーブルには、20 MB未満のデータを保存できます。

    • クエリステートメントでは、Logstoreの名前がjoinキーワードの前にあり、外部ストアの名前がjoinキーワードの後にある必要があります。

    • クエリ文で外部ストアの名前を指定する必要があります。 システムがステートメントを実行すると、名前がデータベース名とテーブル名の組み合わせに置き換えられます。 テーブル名のみを入力しないでください。

  5. クエリ結果をMySQLデータベースに保存します。

    説明

    MySQLデータベーステーブルのフィールドがvarchar型の場合、Logstoreのフィールドをvarchar型のフィールドに変換する必要があります。 たとえば、テーブルには、型がvarchar(60) として定義されているdetailフィールドが含まれ、Logstoreにはインデックス付きのcontentフィールドが含まれます。 この場合、cast(content as varchar(60)) 関数を使用して、コンテンツフィールドのタイプをvarchar(60) に変換する必要があります。 キャスト関数の詳細については、「キャスト関数」をご参照ください。

    Simple Log Serviceでは、insertステートメントを使用してクエリ結果をデータベースに挿入できます。 次のサンプルコードは、INSERTステートメントの例を示しています。

    method:postlogstorelogs | insert into method_output  select cast(method as varchar(65535)),count(1) from log group by method

サンプル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, '')
    # Create an external store. 
    res = client.create_external_store(project,
                                       ExternalStoreConfig(externalStoreName="rds_store", region="cn-chengdu",
                                                           storeType="rds-vpc",
                                                           vpcId="vpc-2vctx8reuqswmk********",
                                                           instanceId="",
                                                           host='rm-2vc6x67972iv********.mysql.cn-chengdu.rds.aliyuncs.com',
                                                           port="3306", username="root", password="Gs516945070",
                                                           database="gstest", table="test"))
    res.log_print()
    # Retrieve the details of the external store. 
    res = client.get_external_store(project,"rds_store")
    res.log_print()
    res = client.list_external_store(project,"")
    res.log_print()
    # Use the JOIN syntax to query data. 
    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()
     # Save the query results to the MySQL database. 
    req = GetLogsRequest(project,logstore,From,To,"","* |  insert into rds_store select count(1) from  "+ logstore )
    res = client.get_logs(req)
    res.log_print()

次の表に、ExternalStoreConfigメソッドのパラメーターを示します。

パラメーター

説明

externalStoreName

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

storeType

データソースのタイプ。 値をrds-vpcに設定します。

region

地域

  • ApsaraDB RDSインスタンスに作成されたMySQLデータベースを使用する場合は、RDSインスタンスが存在するリージョンにregionを設定します。

  • VPCタイプのECSインスタンスでホストされている自己管理型MySQLデータベースを使用する場合、regionをElastic Compute Service (ECS) インスタンスが存在するリージョンに設定します。

重要

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

vpc-id

仮想プライベートクラウド (VPC) のID。

  • VPCタイプのRDSインスタンスに作成されたMySQLデータベースを使用する場合は、vpc-idをRDSインスタンスが属するVPCのIDに設定します。

  • VPCタイプのAnalyticDBインスタンスに作成されたMySQLデータベースを使用する場合、AnalyticDBインスタンスが属するvpcのidにVPC-IDを設定します。

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

  • MySQLデータベースにインターネット経由でアクセスできる場合は、vpc-idを設定する必要はありません。

ホスト

MySQLデータベースのアドレス。

  • VPCタイプのRDSインスタンスに作成されたMySQLデータベースを使用する場合は、hostを内部エンドポイントまたはRDSインスタンスのプライベートIPアドレスに設定します。

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

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

  • MySQLデータベースにインターネット経由でアクセスできる場合は、ホストをパブリックエンドポイントまたはデータベースのパブリックIPアドレスに設定します。

instanceId

データベースが属するインスタンスのID。 値を ''に設定します。

ポート

ポート番号

  • RDSインスタンスに作成されたMySQLデータベースを使用する場合は、portをRDSインスタンスのポートに設定します。

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

ユーザー名

MySQLデータベースへのログインに使用するアカウントのユーザー名。

パスワード

MySQLデータベースへのログインに使用するアカウントのパスワード。

データベース

MySQLデータベースの名前。

テーブル

MySQLデータベースで使用するテーブルの名前。