Chame a API CreateScheduledSQL para criar uma tarefa de SQL agendada.
O SDK do Simple Log Service não recebe mais atualizações de APIs relacionadas à SQL agendada. Use o Alibaba Cloud SDK para gerenciar tarefas de SQL agendada:
Na página de depuração da API CreateScheduledSQL no Alibaba Cloud OpenAPI Explorer, clique na aba SDK Example no painel à direita. Selecione a linguagem desejada (Java, TypeScript, Go, PHP, Python, .NET, C++, etc.) para visualizar o código de exemplo do SDK correspondente. Clique em Run Example para depuração online ou em Download Full Project.
Pré-requisitos
O Simple Log Service está ativado. Para mais informações, consulte Activate Simple Log Service.
O SDK do Simple Log Service para Java está inicializado. Para mais detalhes, consulte Inicializar o SDK do Simple Log Service para Java.
Informações gerais
O Simple Log Service oferece o recurso de SQL agendada para analisar dados periodicamente, armazenar dados agregados e executar projeções e filtragens. A SQL agendada suporta a sintaxe padrão SQL92 e a sintaxe de consulta e análise do Simple Log Service. Ela é executada periodicamente com base em regras de agendamento e grava os resultados em um banco de dados de destino (Logstore ou Metricstore).
O console do Simple Log Service disponibiliza uma interface visual para criar tarefas de SQL agendada. Para mais detalhes, consulte Criar uma tarefa de SQL agendada.
Além disso, o Simple Log Service fornece as classes ScheduledSQL, JobSchedule e ScheduledSQLConfiguration para simplificar a criação de tarefas de SQL agendada por meio do SDK para Java.
ScheduledSQL: Cria a tarefa de SQL agendada.
JobSchedule: Define a configuração de agendamento da tarefa.
ScheduledSQLConfiguration: Estabelece a configuração básica da tarefa de SQL agendada.
Descrição dos parâmetros
Parâmetros da solicitação
|
Nome |
Tipo |
Obrigatório |
Descrição |
Exemplo |
|
project |
String |
Sim |
Nome do projeto. |
ali-test-project |
|
scheduledSql |
Object |
Sim |
Configuração da tarefa de SQL agendada. |
- |
ScheduledSQL
A tabela a seguir descreve os parâmetros.
|
Nome do parâmetro |
Tipo |
Obrigatório |
Descrição |
Exemplo |
|
name |
String |
Sim |
Nome da tarefa de SQL agendada. Siga estas regras de nomenclatura:
|
export-123-456 |
|
displayName |
String |
Sim |
Nome de exibição da tarefa de SQL agendada. No console do Simple Log Service, escolha para visualizar a lista de nomes de exibição. |
my-scheduled-sql-job |
|
description |
String |
Não |
Descrição da tarefa de SQL agendada. |
this is a scheduled sql job. |
|
configuration |
Object |
Sim |
Configuração da SQL agendada. |
- |
|
schedule |
Object |
Sim |
Configuração de agendamento da tarefa. |
- |
JobSchedule
Execute JobSchedule jobSchedule = new JobSchedule(); para criar a configuração de agendamento da tarefa de SQL agendada. A tabela abaixo detalha os parâmetros.
|
Nome do parâmetro |
Tipo |
Obrigatório |
Descrição |
Exemplo |
|
type |
String |
Sim |
Frequência de execução da tarefa de SQL agendada. Cada agendamento gera uma instância de execução. O intervalo define o horário agendado para cada instância.
|
FixedRate |
|
interval |
String |
Não |
Define o intervalo fixo quando o type é FixedRate.
|
50m |
|
cronExpression |
String |
Não |
Especifica a expressão cron quando o type é Cron. A precisão mínima de uma expressão cron é de um minuto, no formato de 24 horas. Por exemplo, Para configurar um fuso horário, selecione o modo Cron. Para obter uma lista de fusos horários comuns, consulte Formato de fuso horário. |
N/A |
|
runImmediately |
boolean |
Não |
Define se a tarefa agendada deve ser executada imediatamente. |
False |
|
timeZone |
String |
Não |
Fuso horário da expressão cron. O valor padrão é vazio, o que corresponde a UTC+8. |
+0800 |
|
delay |
int |
Não |
Atraso após o horário agendado antes do início da execução. Valores válidos: 0 a 120. Unidade: segundos. Se os dados gravados em um Logstore sofrerem atrasos ou problemas semelhantes, use a execução com atraso para garantir a integridade dos dados. |
10 |
ScheduledSQLConfiguration
Execute ScheduledSQLConfiguration scheduledSQLConfiguration = generateConfig(); para definir a configuração da tarefa de SQL agendada. A tabela a seguir descreve os parâmetros.
|
Nome do parâmetro |
Tipo |
Obrigatório |
Descrição |
Exemplo |
|
script |
String |
Sim |
Instrução de consulta e análise. |
*|select count(1) |
|
sqlType |
String |
Sim |
Tipo de SQL. Defina como searchQuery. |
searchQuery |
|
resourcePool |
String |
Sim |
Tipo de pool de recursos. Defina como enhanced. O Simple Log Service oferece pools de recursos aprimorados para análise de dados. |
enhanced |
|
roleArn |
String |
Sim |
ARN da função do RAM usada para ler dados do Logstore de origem. Para obter instruções sobre como adquirir um ARN, consulte Conceder permissões a uma função personalizada do RAM para acessar o LogStore de origem. |
|
|
destRoleArn |
String |
Sim |
ARN da função do RAM usada para gravar dados no Logstore de destino. Para saber como obter um ARN, consulte os itens a seguir:
|
|
|
sourceLogstore |
String |
Sim |
Nome do Logstore de origem. |
source-logstore |
|
destEndpoint |
String |
Sim |
Endpoint do Logstore de destino. Nota
Para mais detalhes, consulte Endpoints. |
|
|
destProject |
String |
Sim |
Nome do projeto de destino. |
my-project |
|
destLogstore |
String |
Sim |
Nome do Logstore de destino. Aviso
Não defina o banco de dados de destino como sendo o mesmo da origem. Essa configuração pode causar a gravação de logs em loop, resultando em custos extras de armazenamento e tráfego. Você é responsável por qualquer consumo de recursos e taxas decorrentes. |
my-logstore |
|
dataFormat |
String |
Sim |
Modo de gravação.
|
log2log |
|
fromTimeExpr |
String |
Sim |
Expressão inicial da janela de tempo da SQL. Para mais informações, consulte Sintaxe de expressão de tempo. |
@m - 12s |
|
toTimeExpr |
String |
Sim |
Expressão final da janela de tempo da SQL. Para mais detalhes, consulte Sintaxe de expressão de tempo. |
@m |
|
maxRetries |
Long |
Sim |
Número máximo de tentativas automáticas caso a operação de análise SQL falhe. Se o número de tentativas exceder esse valor, a instância de execução terminará com status de falha. |
10 |
|
maxRunTimeInSeconds |
Long |
Sim |
Duração total máxima das novas tentativas, em segundos, caso a análise SQL falhe. Se o tempo de tentativa ultrapassar esse limite, a instância de execução será encerrada com falha. |
60 |
|
fromTime |
Long |
Sim |
Horário de início do agendamento. Importante
As instâncias de execução são criadas apenas dentro deste intervalo de tempo. Nenhuma nova instância será gerada fora desse período. |
1653965045 |
|
toTime |
Long |
Sim |
Horário de término do agendamento. Defina como 0 para não haver limite de tempo final. |
1653968045 |
|
parameters |
Object |
Sim |
Quando o dataFormat for log2metric ou metric2metric, configure os parâmetros da SQL. Para detalhes, consulte Log2MetricParameters e Metric2MetricParameters. |
|
parameters
-
Ao configurar uma tarefa de SQL agendada de um Logstore para um Metricstore, também é necessário definir os seguintes parâmetros adicionais:
Tabela 1. Log2MetricParameters
Nome do parâmetro
Exemplo
Descrição
metricKeys
"[\"a\", \"b\", \"c\"]"Colunas de métrica, correspondentes às colunas de métrica na configuração de SQL do console.
O Simple Log Service agrega dados com base na sua instrução de consulta e análise. É possível selecionar uma ou mais colunas do tipo numérico nos resultados da consulta como colunas de métrica. Para mais informações, consulte Métricas.
labelKeys
"[\"d\", \"e\", \"f\"]"Colunas de rótulo, correspondentes aos Rótulos (Labels) na configuração de SQL do console.
O Simple Log Service agrega dados conforme sua instrução de consulta e análise. Você pode escolher uma ou mais colunas dos resultados da consulta para atuar como rótulos. Para mais detalhes, consulte Métricas.
hashLabels
"[\"d\", \"f\"]"Corresponde à opção Rehash na configuração de SQL do console.
Após ativar a chave Rehash, configure as colunas de hash para gravar dados com o mesmo valor de coluna em um único shard. Isso melhora a localidade dos dados e a eficiência das consultas.
As colunas de hash disponíveis dependem dos resultados da sua consulta e análise. Selecione uma ou mais colunas dos resultados para usar como colunas de hash. Por exemplo, se você definir as colunas de hash como status, todos os dados com o mesmo valor de status serão gravados no mesmo shard.
addLabels
"[\"m\":\"h\", \"n\":\"i\"]"Corresponde aos Rótulos Adicionais (Additional Labels) na configuração de SQL do console.
Adicione rótulos estáticos como pares chave-valor para identificar atributos da métrica.
Por exemplo, defina label_key como app e label_value como ingress-nginx.
timeKey
time
Corresponde à Coluna de Tempo (Time Column) na configuração de SQL do console.
-
Se você selecionar uma coluna de tempo nos resultados da consulta (com valores de timestamp Unix, como
atime:1627025331), o sistema usará essa coluna como timestamp da métrica. -
Caso selecione empty, o sistema utilizará o horário inicial do intervalo de consulta como timestamp da métrica.
-
-
Para configurar uma tarefa de SQL agendada de um Metricstore para outro Metricstore, defina também os parâmetros adicionais listados abaixo:
Tabela 2. Metric2MetricParameters
Nome do parâmetro
Exemplo
Descrição
metricName
my-metric
Insira um novo nome de métrica caso deseje renomeá-la. Para mais informações, consulte Métricas.
ImportanteRecomendamos renomear apenas ao analisar uma única métrica.
Se você analisar múltiplas métricas e renomeá-las, todas compartilharão o mesmo novo nome.
hashLabels
"{\"m\":\"h\", \"n\":\"i\"}"Corresponde à opção Rehash na configuração de SQL do console.
Ao ativar a chave Rehash, configure as colunas de hash para gravar dados com o mesmo valor de rótulo em um único shard. Essa prática aumenta a localidade dos dados e otimiza a eficiência das consultas.
As colunas de hash disponíveis dependem dos rótulos existentes nos dados da métrica. Por exemplo, se os dados da métrica incluírem os rótulos
{"alert_id":"alert-1608815762-545495","alert_name":"Alert recovery closed","status":"inactive"}, as colunas de hash válidas são alert_id, alert_name e status. Caso defina as colunas de hash como status, todos os dados com o mesmo valor de status serão direcionados ao mesmo shard.addLabels
"{\"m\":\"h\", \"n\":\"i\"}"Corresponde aos Rótulos Adicionais (Additional Labels) na configuração de SQL do console.
Adicione rótulos estáticos como pares chave-valor para identificar atributos da métrica.
Por exemplo, defina label_key como app e label_value como ingress-nginx.
Parâmetros de resposta
Para descrições dos parâmetros de resposta, consulte Criar uma tarefa de SQL agendada.
Código de exemplo
Este exemplo cria um arquivo App.java que armazena resultados de análises agendadas de um Logstore de origem em um Logstore de destino. Código de exemplo:
import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.common.*;
import com.aliyun.openservices.log.exception.LogException;
import com.aliyun.openservices.log.request.CreateScheduledSQLRequest;
public class App {
// This example retrieves the AccessKey ID and AccessKey secret from environment variables.
static String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
static String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// Set project and Logstore names.
static String sourceProject="aliyun-test-sourceProject";
static String destProject="aliyun-test-destProject";
static String sourceLogstore = "logstore-name";
static String destLogstore = "project-name";
static String roleArn = "acs:ram::11111111:role/aliyunlogetlrole";
// Set the Simple Log Service endpoint. This example uses the China (Hangzhou) region. Replace it with your region.
static String endpoint = "http://cn-hangzhou.log.aliyuncs.com";
static String destEndpoint = "http://cn-hangzhou-intranet.log.aliyuncs.com";
static long fromTime = 1648105200; //2022-03-23 15:00:00
private static String script = "* | select a,b,c from log";
private static ScheduledSQLBaseParameters generateParams(String dataFormat) {
if (dataFormat.equalsIgnoreCase("log2log")) {
return null;
} else if (dataFormat.equalsIgnoreCase("log2metric")) {
Log2MetricParameters params = new Log2MetricParameters();
params.setMetricKeys("[\"a\", \"b\", \"c\"]");
params.setLabelKeys("[\"d\", \"e\", \"f\"]");
params.setHashLabels("[\"d\", \"f\"]");
params.setAddLabels("{\"m\":\"h\", \"n\":\"i\"}");
params.setTimeKey("time");
return params;
} else if (dataFormat.equalsIgnoreCase("metric2metric")) {
Metric2MetricParameters params = new Metric2MetricParameters();
params.setMetricName("name");
params.setHashLabels("[\"d\", \"f\"]");
params.setAddLabels("{\"m\":\"h\", \"n\":\"i\"}");
return params;
}
return null;
}
private static ScheduledSQLConfiguration generateConfig() {
ScheduledSQLConfiguration scheduledSQLConfiguration = new ScheduledSQLConfiguration();
scheduledSQLConfiguration.setScript(script);
scheduledSQLConfiguration.setSqlType("searchQuery");
scheduledSQLConfiguration.setResourcePool("enhanced");
scheduledSQLConfiguration.setRoleArn(roleArn);
scheduledSQLConfiguration.setDestRoleArn(roleArn);
scheduledSQLConfiguration.setSourceLogstore(sourceLogstore);
scheduledSQLConfiguration.setDestEndpoint(destEndpoint);
scheduledSQLConfiguration.setDestProject(destProject);
scheduledSQLConfiguration.setDestLogstore(destLogstore);
scheduledSQLConfiguration.setDataFormat("log2log");
scheduledSQLConfiguration.setFromTimeExpr("@m-1m");
scheduledSQLConfiguration.setToTimeExpr("@m");
scheduledSQLConfiguration.setMaxRetries(20);
scheduledSQLConfiguration.setMaxRunTimeInSeconds(600);
scheduledSQLConfiguration.setFromTime(fromTime);
scheduledSQLConfiguration.setToTime(0L);
ScheduledSQLBaseParameters params = generateParams(scheduledSQLConfiguration.getDataFormat());
scheduledSQLConfiguration.setParameters(params);
return scheduledSQLConfiguration;
}
private static ScheduledSQL generateScheduledSQL() {
ScheduledSQL scheduledSQLStructure = new ScheduledSQL();
scheduledSQLStructure.setName("job-name");
scheduledSQLStructure.setDisplayName("display-name");
scheduledSQLStructure.setDescription("desc-name");
ScheduledSQLConfiguration scheduledSQLConfiguration = generateConfig();
scheduledSQLStructure.setConfiguration(scheduledSQLConfiguration);
JobSchedule jobSchedule = new JobSchedule();
jobSchedule.setType(JobScheduleType.FIXED_RATE);
jobSchedule.setInterval("1m");
jobSchedule.setDelay(10);
jobSchedule.setRunImmediately(false);
scheduledSQLStructure.setSchedule(jobSchedule);
return scheduledSQLStructure;
}
public static void main(String[] args) {
Client client = new Client(endpoint, accessId, accessKey);
ScheduledSQL scheduledSQL = generateScheduledSQL();
CreateScheduledSQLRequest request = new CreateScheduledSQLRequest(sourceProject, scheduledSQL);
try {
client.createScheduledSQL(request);
} catch (LogException e) {
e.printStackTrace();
}
}
}
Referências
-
Para APIs de gerenciamento de tarefas de SQL agendada, consulte:
SDK do Alibaba Cloud Simple Log Service para Java no GitHub.