Appelez l'API CreateScheduledSQL pour créer une tâche SQL planifiée.
Le SDK Simple Log Service ne met plus à jour les API liées au SQL planifié. Utilisez le SDK Alibaba Cloud pour gérer le SQL planifié :
Sur la page de débogage de l'API CreateScheduledSQL dans l'OpenAPI Explorer d'Alibaba Cloud, cliquez sur l'onglet SDK Example dans le panneau de droite. Sélectionnez votre langage cible (Java, TypeScript, Go, PHP, Python, .NET, C++, etc.) pour afficher l'exemple de code SDK correspondant. Cliquez sur Run Example pour un débogage en ligne ou sur Download Full Project.
Prérequis
Simple Log Service est activé. Pour plus d'informations, consultez la rubrique Activer Simple Log Service.
Le SDK Simple Log Service pour Java est initialisé. Pour plus d'informations, consultez la rubrique Initialiser le SDK Simple Log Service pour Java.
Informations générales
Simple Log Service propose la fonctionnalité SQL planifié pour analyser périodiquement les données, stocker les données agrégées et effectuer des projections et des filtrages. Le SQL planifié prend en charge la syntaxe standard SQL92 ainsi que la syntaxe de requête et d'analyse de Simple Log Service. Il s'exécute périodiquement selon des règles de planification et écrit les résultats dans une base de données de destination (Logstore ou Metricstore).
La console Simple Log Service offre une interface visuelle pour créer des tâches SQL planifiées. Pour plus de détails, consultez la rubrique Créer une tâche SQL planifiée.
Par ailleurs, Simple Log Service met à disposition les classes ScheduledSQL, JobSchedule et ScheduledSQLConfiguration afin de simplifier la création de tâches SQL planifiées via le SDK Java.
ScheduledSQL : Crée une tâche SQL planifiée.
JobSchedule : Crée une configuration de planification pour la tâche SQL planifiée.
ScheduledSQLConfiguration : Crée la configuration de base de la tâche SQL planifiée.
Description des paramètres
Paramètres de requête
|
Nom |
Type |
Obligatoire |
Description |
Exemple |
|
project |
String |
Oui |
Nom du projet. |
ali-test-project |
|
scheduledSql |
Object |
Oui |
Configuration de la tâche SQL planifiée. |
- |
ScheduledSQL
Le tableau suivant décrit les paramètres.
|
Nom du paramètre |
Type |
Obligatoire |
Description |
Exemple |
|
name |
String |
Oui |
Nom de la tâche SQL planifiée. Respectez les règles de nommage suivantes :
|
export-123-456 |
|
displayName |
String |
Oui |
Nom d'affichage de la tâche SQL planifiée. Dans la console Simple Log Service, choisissez pour afficher la liste des noms d'affichage. |
my-scheduled-sql-job |
|
description |
String |
Non |
Description de la tâche SQL planifiée. |
this is a scheduled sql job. |
|
configuration |
Object |
Oui |
Configuration du SQL planifié. |
- |
|
schedule |
Object |
Oui |
Configuration de la planification de la tâche. |
- |
JobSchedule
Appelez JobSchedule jobSchedule = new JobSchedule(); pour créer une configuration de planification pour la tâche SQL planifiée. Le tableau suivant décrit les paramètres.
|
Nom du paramètre |
Type |
Obligatoire |
Description |
Exemple |
|
type |
String |
Oui |
Fréquence de planification de la tâche SQL planifiée. Chaque planification crée une instance d'exécution. L'intervalle détermine l'heure planifiée pour chaque instance.
|
FixedRate |
|
interval |
String |
Non |
Spécifie l'intervalle fixe lorsque le paramètre type est défini sur FixedRate.
|
50m |
|
cronExpression |
String |
Non |
Spécifie l'expression cron lorsque le paramètre type est défini sur Cron. La précision minimale d'une expression cron est d'une minute, au format 24 heures. Par exemple, Pour configurer un fuseau horaire, sélectionnez le mode Cron. Pour obtenir la liste des fuseaux horaires courants, consultez la rubrique Format du fuseau horaire. |
N/A |
|
runImmediately |
boolean |
Non |
Indique si la tâche planifiée doit être exécutée immédiatement. |
False |
|
timeZone |
String |
Non |
Fuseau horaire pour l'expression cron. La valeur par défaut est vide, ce qui signifie UTC+8. |
+0800 |
|
delay |
int |
Non |
Délai après l'heure planifiée avant le début de l'exécution. Valeurs valides : 0 à 120. Unité : secondes. Si l'écriture des données dans un Logstore subit des retards ou d'autres problèmes similaires, vous pouvez utiliser l'exécution différée pour garantir l'intégrité des données. |
10 |
ScheduledSQLConfiguration
Appelez ScheduledSQLConfiguration scheduledSQLConfiguration = generateConfig(); pour créer la configuration de la tâche SQL planifiée. Le tableau suivant décrit les paramètres.
|
Nom du paramètre |
Type |
Obligatoire |
Description |
Exemple |
|
script |
String |
Oui |
Instruction de requête et d'analyse. |
*|select count(1) |
|
sqlType |
String |
Oui |
Type de SQL. Définissez la valeur sur searchQuery. |
searchQuery |
|
resourcePool |
String |
Oui |
Type de pool de ressources. Définissez la valeur sur enhanced. Simple Log Service fournit des pools de ressources améliorés pour l'analyse des données. |
enhanced |
|
roleArn |
String |
Oui |
ARN du rôle RAM utilisé pour lire les données depuis le Logstore source. Pour savoir comment obtenir un ARN, consultez la rubrique Accorder à un rôle RAM personnalisé les autorisations d'accès au LogStore source. |
|
|
destRoleArn |
String |
Oui |
ARN du rôle RAM utilisé pour écrire les données dans le Logstore de destination. Pour savoir comment obtenir un ARN, consultez les rubriques suivantes :
|
|
|
sourceLogstore |
String |
Oui |
Nom du Logstore source. |
source-logstore |
|
destEndpoint |
String |
Oui |
Endpoint du Logstore de destination. Remarque
Pour plus d'informations, consultez la rubrique Endpoints. |
|
|
destProject |
String |
Oui |
Nom du projet de destination. |
my-project |
|
destLogstore |
String |
Oui |
Nom du Logstore de destination. Avertissement
Ne définissez pas la base de données de destination identique à la base de données source. Cela pourrait entraîner une boucle d'écriture des journaux, générant des frais de stockage et de trafic supplémentaires. Vous êtes responsable de toute consommation de ressources et des frais qui en résultent. |
my-logstore |
|
dataFormat |
String |
Oui |
Mode d'écriture.
|
log2log |
|
fromTimeExpr |
String |
Oui |
Expression de début pour la fenêtre temporelle SQL. Pour plus d'informations, consultez la rubrique Syntaxe des expressions temporelles. |
@m - 12s |
|
toTimeExpr |
String |
Oui |
Expression de fin pour la fenêtre temporelle SQL. Pour plus d'informations, consultez la rubrique Syntaxe des expressions temporelles. |
@m |
|
maxRetries |
Long |
Oui |
Nombre maximal de tentatives automatiques en cas d'échec de l'opération d'analyse SQL. Si le nombre de tentatives dépasse cette valeur, l'instance d'exécution se termine avec un statut d'échec. |
10 |
|
maxRunTimeInSeconds |
Long |
Oui |
Durée totale maximale des tentatives en secondes en cas d'échec de l'opération d'analyse SQL. Si la durée des tentatives dépasse cette valeur, l'instance d'exécution se termine avec un statut d'échec. |
60 |
|
fromTime |
Long |
Oui |
Heure de début de la planification. Important
Les instances d'exécution sont créées uniquement dans cette plage de temps. Aucune nouvelle instance n'est créée en dehors de cette plage. |
1653965045 |
|
toTime |
Long |
Oui |
Heure de fin de la planification. Définissez la valeur sur 0 pour qu'il n'y ait pas d'heure de fin. |
1653968045 |
|
parameters |
Object |
Oui |
Lorsque le paramètre dataFormat est défini sur log2metric ou metric2metric, configurez les paramètres SQL. Pour plus de détails, consultez les sections Log2MetricParameters et Metric2MetricParameters. |
|
parameters
-
Lors de la configuration d'une tâche SQL planifiée d'un Logstore vers un Metricstore, vous devez également configurer les paramètres supplémentaires suivants :
Tableau 1. Log2MetricParameters
Nom du paramètre
Exemple
Description
metricKeys
"[\"a\", \"b\", \"c\"]"Colonnes de métriques, correspondant aux colonnes de métriques dans la configuration SQL de la console.
Simple Log Service agrège les données en fonction de votre instruction de requête et d'analyse. Vous pouvez sélectionner une ou plusieurs colonnes de type numérique parmi les résultats de la requête comme colonnes de métriques. Pour plus d'informations, consultez la rubrique Métriques.
labelKeys
"[\"d\", \"e\", \"f\"]"Colonnes d'étiquettes, correspondant aux étiquettes (Labels) dans la configuration SQL de la console.
Simple Log Service agrège les données en fonction de votre instruction de requête et d'analyse. Vous pouvez sélectionner une ou plusieurs colonnes parmi les résultats de la requête comme étiquettes. Pour plus d'informations, consultez la rubrique Métriques.
hashLabels
"[\"d\", \"f\"]"Correspond à Rehash dans la configuration SQL de la console.
Après avoir activé l'option Rehash, vous pouvez configurer des hash columns pour écrire les données ayant la même valeur de colonne dans un seul shard. Cela améliore la localité des données et l'efficacité des requêtes.
Les hash columns disponibles dépendent de vos résultats de requête et d'analyse. Vous pouvez sélectionner une ou plusieurs colonnes parmi les résultats comme colonnes de hachage. Par exemple, si vous définissez les hash columns sur status, toutes les données ayant la même valeur status sont écrites dans le même shard.
addLabels
"[\"m\":\"h\", \"n\":\"i\"]"Correspond à Additional Labels (Étiquettes supplémentaires) dans la configuration SQL de la console.
Ajoutez des étiquettes statiques sous forme de paires clé-valeur pour identifier les attributs des métriques.
Par exemple, définissez label_key sur app et label_value sur ingress-nginx.
timeKey
time
Correspond à Time Column (Colonne temporelle) dans la configuration SQL de la console.
-
Si vous sélectionnez une colonne temporelle parmi les résultats de la requête (avec des valeurs d'horodatage Unix, telles que
atime:1627025331), le système utilise cette colonne comme horodatage de la métrique. -
Si vous sélectionnez empty (vide), le système utilise l'heure de début de la plage temporelle de la requête comme horodatage de la métrique.
-
-
Lors de la configuration d'une tâche SQL planifiée d'un Metricstore vers un autre Metricstore, vous devez également configurer les paramètres supplémentaires suivants :
Tableau 2. Metric2MetricParameters
Nom du paramètre
Exemple
Description
metricName
my-metric
Saisissez un nouveau nom de métrique si vous souhaitez renommer la métrique. Pour plus d'informations, consultez la rubrique Métriques.
ImportantNous vous recommandons de renommer uniquement lors de l'analyse d'une seule métrique.
Si vous analysez plusieurs métriques et les renommez, toutes les métriques partageront le même nouveau nom.
hashLabels
"{\"m\":\"h\", \"n\":\"i\"}"Correspond à Rehash dans la configuration SQL de la console.
Après avoir activé l'option Rehash, vous pouvez configurer des hash columns pour écrire les données ayant la même valeur d'étiquette dans un seul shard. Cela améliore la localité des données et l'efficacité des requêtes.
Les hash columns disponibles dépendent des étiquettes existantes dans les données de la métrique. Par exemple, si les données de la métrique incluent les étiquettes
{"alert_id":"alert-1608815762-545495","alert_name":"Alert recovery closed","status":"inactive"}, les hash columns valides sont alert_id, alert_name et status. Si vous définissez les hash columns sur status, toutes les données ayant la même valeur status sont écrites dans le même shard.addLabels
"{\"m\":\"h\", \"n\":\"i\"}"Correspond à Additional Labels (Étiquettes supplémentaires) dans la configuration SQL de la console.
Ajoutez des étiquettes statiques sous forme de paires clé-valeur pour identifier les attributs des métriques.
Par exemple, définissez label_key sur app et label_value sur ingress-nginx.
Paramètres de réponse
Pour la description des paramètres de réponse, consultez la rubrique Créer une tâche SQL planifiée.
Exemple de code
Cet exemple crée un fichier App.java qui stocke les résultats d'analyse planifiés d'un Logstore source dans un Logstore de destination. Exemple de code :
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();
}
}
}
Références
-
Pour les API de gestion des tâches SQL planifiées, consultez :
Alibaba Cloud Simple Log Service SDK for Java sur GitHub.