Log Service支援通過Join文法將Logstore和MySQL資料庫進行聯集查詢,並把查詢結果儲存到MySQL資料庫中。
前提條件
已建立ExternalStore。具體操作,請參見關聯MySQL資料來源。
操作步驟
在Project列表地區,單擊目標Project。
在控制台左側,單擊日誌儲存,在日誌庫列表中單擊目標Logstore。
執行查詢分析語句。
支援的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表名。
儲存查詢結果到MySQL資料庫中。
說明MySQL資料庫表的欄位是varchar,需要將日誌庫的欄位轉換為MySQL表的欄位。例如MySQL表的欄位
detail
為varchar(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執行個體或ECS執行個體必須與Log ServiceProject處於同一地區。 |
vpc-id | VPC ID。詳細說明如下:
|
host | 資料庫地址。詳細說明如下:
|
instanceId | 資料庫執行個體id。固定為 |
port | 連接埠號碼。詳細說明如下:
|
username | 資料庫使用者名稱。 |
password | 資料庫密碼。 |
database | 資料庫。 |
table | 資料庫表。 |