日志服务支持通过Join语法将Logstore和MySQL数据库进行联合查询,并把查询结果保存到MySQL数据库中。

前提条件

已创建ExternalStore。具体操作,请参见关联MySQL数据源

操作步骤

  1. 登录日志服务控制台
  2. 在Project列表区域,单击目标Project。
  3. 日志存储 > 日志库页签中,单击目标Logstore。
  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数据库中。
    日志服务支持通过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, token)
    #创建ExternalStore。
    res = client.create_external_store(project,ExternalStoreConfig("rds_store","region","rds-vpc","vpc id","实例id","实例ip","实例端口","用户名","密码","数据库","数据库表"));
    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();