全部產品
Search
文件中心

Simple Log Service:Logstore和MySQL聯集查詢分析

更新時間:Jun 30, 2024

Log Service支援通過Join文法將Logstore和MySQL資料庫進行聯集查詢,並把查詢結果儲存到MySQL資料庫中。

前提條件

已建立ExternalStore。具體操作,請參見關聯MySQL資料來源

操作步驟

  1. 登入Log Service控制台

  2. 在Project列表地區,單擊目標Project。

    image

  3. 在控制台左側,單擊日誌儲存,在日誌庫列表中單擊目標Logstore。

    image

  4. 執行查詢分析語句。

    支援的Join文法有INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL 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)
    重要
    • 僅支援Logstore與MySQL資料庫小表(資料量小於20 MB)進行聯集查詢。

    • 查詢和分析語句中,Logstore必須寫在join關鍵字前面,ExternalStore寫在join關鍵字後面。

    • 查詢和分析語句中,必須寫ExternalStore名稱,系統自動替換成MySQL資料庫名+表名。請勿直接填寫MySQL表名。

  5. 儲存查詢結果到MySQL資料庫中。

    說明

    MySQL資料庫表的欄位是varchar,需要將日誌庫的欄位轉換為MySQL表的欄位。例如MySQL表的欄位detailvarchar(60),在Logstore中將索引content用cast函數轉換:cast(content as varchar(60))。cast函數請參見cast函數

    Log Service支援通過Insert文法將查詢結果插入到MySQL資料庫中。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, '')
    #建立ExternalStore。
    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()
    #擷取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()

ExternalStoreConfig方法參數說明:

參數

說明

externalStoreName

ExternalStore名稱,必須小寫。

storeType

資料來源類型,固定為rds-vpc。

region

地區。詳細說明如下:

  • 如果是RDS MySQL資料庫,則配置region為RDS執行個體所在地區。

  • 如果是專用網路下ECS上自建的MySQL資料庫,則配置region為ECS執行個體所在地區。

重要

RDS執行個體或ECS執行個體必須與Log ServiceProject處於同一地區。

vpc-id

VPC ID。詳細說明如下:

  • 如果是專用網路下的RDS MySQL資料庫,則配置vpc-id為RDS執行個體所屬專用網路的ID。

  • 如果是專用網路下的ADB MySQL資料庫,則配置vpc-id為ADB執行個體所屬專用網路的ID。

  • 如果是專用網路下ECS上自建的MySQL資料庫,則配置vpc-id為ECS執行個體所屬專用網路的ID。

  • 如果資料庫host可以通過公網訪問,則vpc-id無需提供

host

資料庫地址。詳細說明如下:

  • 如果是專用網路下的RDS MySQL資料庫,則配置host為RDS執行個體的內網地址(內網網域名稱或內網IP地址)。

  • 如果是專用網路下的ADB MySQL資料庫,則配置host為ADB執行個體的內網地址(內網網域名稱或內網IP地址)。

  • 如果是專用網路下ECS上自建的MySQL資料庫,則配置host為ECS的私網IP地址。

  • 如果資料庫通過公網可以訪問,則配置對應的公網網域名稱或公網IP地址。

instanceId

資料庫執行個體id。固定為''

port

連接埠號碼。詳細說明如下:

  • 如果是RDS MySQL資料庫,則配置port為RDS執行個體的連接埠號碼。

  • 如果是專用網路下ECS上自建的MySQL資料庫,則配置port為ECS上MySQL的服務連接埠。

username

資料庫使用者名稱。

password

資料庫密碼。

database

資料庫。

table

資料庫表。