背景信息

日志服务支持Logstore中的日志数据和RDS数据库进行联合查询,以及把查询结果保存到RDS中。

操作步骤

  1. 创建RDS VPC,并设置白名单。
    1. 创建RDS,并指定VPC环境。创建成功后,得到VPC ID和RDS实例ID。
    2. 设置RDS白名单:100.104.0.0/16
      详细步骤请参考 RDS用户指南设置白名单章节。
  2. 创建External Store。
    通过以下语句创建External Store,请将参数替换为您的实际参数值。
    {
    "externalStoreName":"storeName",
    "storeType":"rds-vpc",
    "parameter":
       {
       "region":"cn-qingdao",
       "vpc-id":"vpc-m5eq4irc1pucp*******"
       "instance-id":"i-m5eeo2whsn*******"
       "host":"localhost",
       "port":"3306",
       "username":"root",
       "password":"****",
       "db":"scmc"
       "table":"join_meta"
       }
    }
    表 1. 参数说明
    参数 说明
    region 您的服务所在区域。
    vpc-id VPC的ID。
    instance-id RDS实例ID。
    host ECS实例ID。
    port ECS实例端口。
    username 用户名。
    password 密码。
    db 数据库。
    table 数据表。
    说明 目前仅支持北京(cn-beijing)、青岛(cn-qingdao)和杭州(cn-hangzhou)区域。
  3. Join查询。
    在日志服务控制台 查询页面执行Join语句。
    支持的Join语法:
    • INNER JOIN
    • LEFT JOIN
    • RIGHT JOIN
    • FULL JOIN
    [ INNER ] JOIN
    LEFT [ OUTER ] JOIN
    RIGHT [ OUTER ] JOIN
    FULL [ OUTER ] JOIN
    说明
    • Join仅支持Logstore Join小表。
    • 在Join顺序中,Logstore必须写在前部,External Store写在后部。
    • Join中必须写External Store的名称,会自动替换成RDS的db+表名。不能直接填写RDS表名。
    Join语法样例:
    method:postlogstorelogs | select count(1) , histogram(logstore) from log  l join join_meta m on l.projectid = cast( m.ikey as varchar)
  4. 保存查询结果到RDS中。
    支持通过Insert语法把查询结果插入到RDS中。
    method:postlogstorelogs | insert into method_output  select cast(methodasvarchar(65535)),count(1)fromloggroupbymethod

操作样例

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)
#创建external store
    res = client.create_external_store(project,ExternalStoreConfig("rds_store","region","rds-vpc","vpc id","实例id","实例ip","实例端口","用户名","密码","数据库","数据库表"));
    res.log_print()
    #获取external store详情
    res = client.get_external_store(project,"rds_store");
    res.log_print()
    res = client.list_external_store(project,"");
    res.log_print();
    # JOIN查询
    req = GetLogStoreLogsRequest(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();
     # 查询结果写入RDS
    req = GetLogStoreLogsRequest(project,logstore,From,To,""," insert into rds_store select count(1) from  "+ logstore );
    res = client.get_logs(req)
    res.log_print();