Todos os produtos
Search
Central de documentação

Simple Log Service:Associar uma fonte de dados MySQL

Última atualização: Jul 03, 2026

Este tópico descreve como criar um external store para associar o Simple Log Service (SLS) a um banco de dados MySQL.

Pré-requisitos

  • Dados coletados no Simple Log Service. Para mais informações, consulte Coleta de dados.

  • CLI do Log Service instalada e endpoint e par de AccessKey configurados.

  • Dados armazenados em um banco de dados ApsaraDB RDS for MySQL, AnalyticDB for MySQL ou MySQL autogerenciado em uma instância Elastic Compute Service (ECS) da Alibaba Cloud.

  • Banco de dados MySQL em uma Virtual Private Cloud (VPC) da Alibaba Cloud. A instância ApsaraDB RDS for MySQL, AnalyticDB for MySQL ou ECS deve estar na mesma região do projeto SLS.

    Importante

    Não é possível conectar-se diretamente a um banco de dados MySQL por endereço IP público.

Informações básicas

O recurso de external store do Simple Log Service (SLS) permite associar o SLS a um banco de dados ApsaraDB RDS for MySQL, AnalyticDB for MySQL ou MySQL autogerenciado em uma instância ECS. Também é possível gravar resultados de consultas e análises no banco de dados MySQL para processamento posterior.

Procedimento

1. Configure uma lista de permissões

ApsaraDB RDS for MySQL

Adicione os blocos CIDR 100.104.0.0/16, 11.194.0.0/16 e 11.201.0.0/16 à lista de permissões. Para mais informações, consulte Configure uma lista de permissões de endereços IP.

MySQL autogerenciado no ECS

Adicione regras de grupo de segurança para permitir acesso dos blocos CIDR 100.104.0.0/16, 11.194.0.0/16 e 11.201.0.0/16. Para mais informações, consulte Adicionar uma regra de grupo de segurança.

AnalyticDB for MySQL

Adicione os blocos CIDR 100.104.0.0/16, 11.194.0.0/16 e 11.201.0.0/16 à lista de permissões. Para mais informações, consulte Configure uma lista de permissões.

2. Crie um external store

  1. Faça login no servidor onde a CLI está instalada. Na linha de comando, execute o comando touch para criar o arquivo de configuração /home/shell/config.json. Adicione o script abaixo ao arquivo config.json. Substitua os valores de region, vpc-id, host, port, username, password, db e table pelos valores reais.

    1. Parâmetros

      Exemplo

      {
          "externalStoreName":"sls_join_meta_store",
          "storeType":"rds-vpc",
          "parameter":{
              "region":"cn-qingdao",
              "vpc-id":"vpc-m5eq4irc1pucp*******",
              "host":"rm-bp1******rm76.mysql.rds.aliyuncs.com",
              "port":"3306",
              "username":"user",
              "password":"****",
              "db":"scmc",
              "table":"join_meta"
          }
      }

      externalStoreName

      Nome do external store. Use apenas letras minúsculas.

      storeType

      Tipo da fonte de dados. Defina este parâmetro como rds-vpc.

      region

      Região do banco de dados.

      • Para ApsaraDB RDS for MySQL, defina region como a região da instância RDS.

      • Para AnalyticDB for MySQL, defina region como a região da instância AnalyticDB for MySQL.

      • Para MySQL autogerenciado em instância ECS dentro de uma VPC, defina region como a região da instância ECS.

      Importante

      A instância ApsaraDB RDS for MySQL, AnalyticDB for MySQL ou ECS deve estar na mesma região do projeto SLS.

      vpc-id

      ID da VPC.

      • Para instância ApsaraDB RDS for MySQL em VPC, defina vpc-id como o ID da VPC da instância.

      • Para instância AnalyticDB for MySQL em VPC, defina vpc-id como o ID da VPC da instância.

      • Para MySQL autogerenciado em instância ECS dentro de uma VPC, defina vpc-id como o ID da VPC da instância.

      host

      Ao usar um endpoint interno para banco de dados em VPC, o SLS resolve o nome para um endereço IP privado e o armazena em cache durante a criação do external store. Se esse IP mudar posteriormente (por exemplo, devido à migração da instância), o acesso ao external store será interrompido porque o IP em cache não é atualizado automaticamente. Para resolver, atualize ou recrie o external store.
      • Para ApsaraDB RDS for MySQL em VPC, defina host como o endereço interno da instância RDS. Pode ser um endpoint interno ou um IP privado.

      • Para AnalyticDB for MySQL em VPC, defina host como o endereço interno da instância AnalyticDB for MySQL. Pode ser um endpoint interno ou um IP privado.

      • Para MySQL autogerenciado em instância ECS dentro de uma VPC, defina host como o endereço IP privado da instância ECS.

      port

      Número da porta.

      • Para ApsaraDB RDS for MySQL, defina port como o número da porta da instância RDS.

      • Para AnalyticDB for MySQL, defina port como o número da porta da instância AnalyticDB for MySQL.

      • Para MySQL autogerenciado em instância ECS, defina port como a porta de serviço do MySQL na instância ECS.

      username

      Nome de usuário da conta do banco de dados.

      password

      Senha da conta do banco de dados.

      db

      Nome do banco de dados.

      table

      Nome da tabela do banco de dados. Formatos suportados:

      1. table_name, como test.

      2. schema_name.table_name, como public.test.

  1. Execute o comando a seguir para criar o external store. Substitua project_name pelo nome do seu projeto. Este exemplo usa log-rds-demo.

    aliyunlog log create_external_store --project_name="log-rds-demo" --config="file:///home/shell/config.json" 
  2. O comando create_external_store não retorna saída em caso de sucesso. Para verificar a criação, execute o comando aliyunlog log get_external_store --project_name="log-rds-demo" --store_name="sls_join_meta_store" --format-output=json e visualize os detalhes do external store. Exemplo de resposta:

    {
        "externalStoreName":"sls_join_meta_store",
        "storeType":"rds-vpc",
        "parameter":{
             "db": "scmc",
             "host": "rm-bp1******rm76.mysql.rds.aliyuncs.com",
             "port": "3306",
             "region": "cn-qingdao",
             "table": "join_meta",
             "username": "user",
             "vpc-id": "vpc-m5eq4irc1pucp*******"
        }
    }

3. Usar o external store

Execute consulta e análise

  • Uso do external store

    Após associar a fonte de dados externa, acesse o console SLS. No projeto log-rds-demo, clique em qualquer logstore. Em seguida, execute a instrução de consulta e análise * | select * from sls_join_meta_store para consultar dados da tabela MySQL associada.

    Na aba Charts, o resultado da consulta é uma tabela com colunas id e name. Dois registros de exemplo são (123, 'Bob') e (124, 'Lucy').

  • Uso de JOIN para associar um logstore a uma tabela MySQL

    • A tabela MySQL em uma operação JOIN deve ter tamanho inferior a 20 MB.
    • Na instrução de consulta e análise, especifique o LogStore antes da palavra-chave join e o ExternalStore após a palavra-chave join .
    • Use o nome do external store na consulta. O SLS mapeia automaticamente esse nome para o banco de dados e a tabela configurados. Não use o nome da tabela MySQL diretamente.

    Cláusulas JOIN suportadas: INNER JOIN, LEFT JOIN, RIGHT JOIN e FULL JOIN.

    [ INNER ] JOIN
    LEFT [ OUTER ] JOIN
    RIGHT [ OUTER ] JOIN
    FULL [ OUTER ] JOIN
    * | select count(1) from log l join sls_join_meta_store m on l.projectid = cast( m.ikey as varchar)

Salve resultados de consulta no MySQL

Se um campo na tabela MySQL de destino for do tipo varchar , converta o campo correspondente do logstore para um tipo varchar compatível. Por exemplo, se o campo detail na tabela MySQL for varchar(60) , use a função cast no campo content do logstore: cast(content as varchar(60)) . Para mais informações sobre a função cast, consulte função de conversão de tipos .

Use a sintaxe INSERT para salvar resultados de consulta em um banco de dados MySQL:

* | insert into sls_join_meta_store  select cast(method as varchar(65535)),count(1) from log group by method

Operações via SDK

Código de exemplo em 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********",
                                                           host='rm-2vc6x67972iv********.mysql.cn-chengdu.rds.aliyuncs.com',
                                                           port="3306", username="root", password="123456",
                                                           database="test_database", table="test"))
    res.log_print()
    # Get 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()
    # Run a JOIN query.
    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()
     # Write the query and analysis 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()

Operações relacionadas

  • Atualize um external store MySQL.

    aliyunlog log update_external_store --project_name="log-rds-demo" --config="file:///home/shell/config.json" 
  • Exclua um external store MySQL.

    aliyunlog log delete_external_store --project_name="log-rds-demo" --store_name=sls_join_meta_store

Referências