Log Service (SLS) prend en charge l'acheminement des données de journal vers MaxCompute (ODPS) pour le stockage et l'analyse. Créez une tâche d'acheminement de données MaxCompute (nouvelle version) pour configurer le pipeline de données.
Prérequis
Vous avez créé un projet et un Logstore dans Log Service (SLS) et configuré la collecte de données. Pour plus d'informations, consultez les rubriques Gérer un projet, Créer un Logstore de base et Présentation de la collecte de données.
Vous avez créé une table partitionnée MaxCompute (ODPS) dans la même région que le projet Log Service (SLS). Pour plus d'informations, consultez la rubrique Créer une table.
Notes d'utilisation
Pour connaître les régions qui prennent en charge l'acheminement des données vers MaxCompute (ODPS), consultez la rubrique Régions prises en charge.
-
Si la valeur d'un champ de type
charouvarchardépasse la longueur spécifiée, la partie excédentaire est tronquée lors de l'acheminement vers MaxCompute (ODPS).Par exemple, si la limite de longueur est de 3 et que la valeur du champ est
012345, la valeur devient012après l'acheminement vers MaxCompute (ODPS). Si la valeur d'un champ de type
string,charouvarcharest une chaîne vide, sa valeur devient Null après l'acheminement vers MaxCompute (ODPS).La valeur d'un champ de type
datetimedoit être au formatYYYY-MM-DD HH:mm:ss. Plusieurs espaces sont autorisés entreDDetHH. Un format invalide ne provoque pas d'erreur d'acheminement, mais la valeur devient Null après l'acheminement vers MaxCompute (ODPS).Si la valeur d'un champ de type
dateest dans un format invalide, la tâche d'acheminement de données ne signale pas d'erreur, mais la valeur devient Null après l'acheminement vers MaxCompute (ODPS).Pour un champ décimal, si sa valeur dépasse l'échelle définie, le système l'arrondit. Si la valeur dépasse la précision définie, le système rejette l'intégralité du journal en tant que donnée erronée et incrémente le compteur d'erreurs.
Par défaut, le système rejette les données erronées lors de l'acheminement des données.
-
Si un champ spécifié dans la configuration d'acheminement n'existe pas dans un journal, sa valeur dans MaxCompute (ODPS) devient la valeur par défaut ou Null.
Si vous avez spécifié une valeur par défaut lors de la création de la table MaxCompute (ODPS), le champ reçoit la valeur par défaut.
Si vous n'avez pas spécifié de valeur par défaut mais que la colonne autorise les valeurs Null, la valeur du champ devient Null.
En raison des limitations de MaxCompute (ODPS), la concurrence maximale d'acheminement des données est de 64 opérations d'écriture. Le débit maximal pour une seule partition est de 10 Mo/s.
Procédure
Connectez-vous à la console Simple Log Service.
Dans la section Projects, cliquez sur le projet souhaité.
Dans l'onglet , cliquez sur l'icône > à gauche du Logstore cible, puis choisissez .
Placez le pointeur sur MaxCompute (ODPS) et cliquez sur l'icône +.
-
Dans le panneau Data Shipping to MaxCompute, configurez les paramètres suivants et cliquez sur OK.
Après la création d'une tâche d'acheminement de données, une nouvelle tâche achemine généralement les données vers MaxCompute en environ 10 minutes. Vous pouvez ensuite interroger les données dans MaxCompute (ODPS). Pour plus d'informations, consultez la rubrique Comment vérifier l'intégrité des données après leur acheminement de Log Service vers MaxCompute ?
| log_source | log_time | log_topic | time | ip | thread | log_extract_others | log_partition_time | status | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+ | 10.10.*.* | 1642942213 | | 24/Jan/2022:20:50:13 +0800 | 10.10.*.* | 414579208 | {"url":"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1","user-agent":"aliyun-sdk-java"} | 2022_01_23_20_50 | 200 | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+
Mappage du modèle de données
Pour acheminer les journaux de Log Service (SLS) vers une table MaxCompute (ODPS), vous devez mapper les modèles de données des deux services. La section suivante décrit les règles de mappage et fournit des exemples.
Une table MaxCompute (ODPS) doit contenir au moins une colonne de données et une colonne de clé de partition.
Nous vous recommandons d'utiliser les champs réservés Log Service (SLS) suivants : __partition_time__, __source__ et __topic__.
Une table MaxCompute (ODPS) peut comporter un maximum de 60 000 partitions. Si cette limite est dépassée, les données ne peuvent pas être écrites dans la table.
Le champ réservé système __extract_others__ était précédemment nommé _extract_others_. L'ancien nom est toujours pris en charge pour des raisons de compatibilité.
Les valeurs des colonnes de clé de partition MaxCompute (ODPS) ne peuvent pas être des mots réservés ou des mots-clés MaxCompute (ODPS). Pour plus d'informations, consultez la rubrique Mots réservés et mots-clés.
Les partitions d'une table partitionnée MaxCompute (ODPS) ne peuvent pas être vides. Vous devez mapper un champ spécifique, tel qu'un champ réservé système ou un champ de journal, à une colonne de clé de partition. La valeur du champ mappé ne peut pas être vide ou nulle. Si un champ de journal est de type chaîne, il doit être convertible vers le type de données de la colonne de clé de partition. Si la conversion échoue et entraîne une clé de partition vide, le système rejette le journal lors de l'acheminement.
Dans Log Service (SLS), un champ de journal ne peut être mappé qu'à une seule colonne d'une table MaxCompute (ODPS), qu'il s'agisse d'une colonne de données ou d'une colonne de clé de partition. La redondance des champs n'est pas prise en charge.
Le tableau suivant montre un exemple de relation de mappage entre les colonnes MaxCompute (ODPS) et les champs Log Service (SLS). Pour plus d'informations sur les champs réservés Log Service (SLS), consultez la rubrique Champs réservés.
Type de colonne MaxCompute | Nom de la colonne (MaxCompute) | Type de données (MaxCompute) | Nom du champ de journal (Log Service) | Type de champ (Log Service) | Description |
Colonne de données | log_source | string | __source__ | Champ réservé | Source du journal. |
log_time | bigint | __time__ | Champ réservé | Heure du journal au format timestamp Unix. Cela correspond au champ time du modèle de données. | |
log_topic | string | __topic__ | Champ réservé | Sujet du journal. | |
time | string | time | Champ de journal | Champ analysé à partir du contenu du journal, correspondant à une paire clé-valeur dans le modèle de données. Dans de nombreux cas, la valeur du champ | |
ip | string | ip | Champ de journal | Champ analysé à partir du contenu du journal. | |
thread | string | thread | Champ de journal | Champ analysé à partir du contenu du journal. | |
log_extract_others | string | __extract_others__ | Champ réservé | Le système sérialise les autres champs de journal non mappés en un objet JSON plat clé-valeur. Les objets JSON imbriqués ne sont pas pris en charge. | |
Colonne de clé de partition | log_partition_time | string | __partition_time__ | Champ réservé | Log Service (SLS) calcule cette valeur à partir du champ __time__ du journal, puis l'aligne. La granularité de la partition est configurable. |
status | string | status | Champ de journal | Champ analysé à partir du contenu du journal. Les valeurs de ce champ peuvent être énumérées pour garantir que le nombre de partitions ne dépasse pas la limite. |
Format de partition temporelle
L'acheminement de données MaxCompute (nouvelle version) prend en charge deux formats de partition temporelle : StrfTimeFormat et SimpleDateFormat. Le format de partition temporelle prend effet uniquement lorsque le champ de la colonne de clé de partition MaxCompute est défini sur __receive_time__ ou __partition_time__.
StrfTimeFormat
strftime est une fonction standard de la bibliothèque C UNIX qui formate les dates et les heures. Elle utilise des codes de format commençant par le caractère % pour convertir une partition temporelle en chaîne. Par exemple, %Y_%m_%d représente l'année, le mois et le jour.
Si vous créez une nouvelle tâche d'acheminement de données MaxCompute (ODPS), vous devez utiliser StrfTimeFormat.
|
Format de partition temporelle |
Exemple de partition de table |
|
%Y_%m_%d_%H_%M_00 |
2024_12_27_20_30_00 |
|
%Y_%m_%d_%H_%M |
2024_12_27_20_30 |
|
%Y_%m_%d_%H |
2024_12_27_20 |
|
%Y_%m_%d |
2024_12_27 |
|
%Y_%m |
2024_12 |
|
%Y |
2024 |
|
%Y%m%d%H%M |
202412272030 |
|
%Y%m%d%H |
2024122720 |
|
%Y%m%d |
20241227 |
|
%Y%m |
202412 |
SimpleDateFormat
Format temporel selon la syntaxe Java SimpleDateFormat, par exemple yyyy-MM-dd HH:mm. Pour plus d'informations, consultez Class SimpleDateFormat.
SimpleDateFormat est pris en charge pour la rétrocompatibilité lors de la migration depuis une version antérieure. Pour les nouvelles tâches MaxCompute, utilisez StrfTimeFormat.
Les tâches de migration héritée prennent en charge les formats de partition suivants :
|
Format de temps de partition |
Exemple de partition de table |
|
yyyy-MM-ddHH:mm |
2024-12-2720-30 |
|
yyyy_MM_dd_HH_mm |
2024_12_27_20_30 |
|
yyyy_MM_dd_HH |
2024_12_27_20 |
|
yyyy-MM-dd HH:mm |
2024-12-27 20:30 |
|
yyyyMMddHHmm |
202412272030 |
|
yyyyMMddHH |
2024122720 |
|
yyyyMMdd |
20241227 |
|
yyyy_MM-dd_HH_mm |
2024_12-27_20_30 |
|
yyyy-MM-dd |
2024-12-27 |
Informations de référence
Il est recommandé d'utiliser __receive_time__ comme champ de partitionnement. Si les exigences métier imposent un partitionnement strict par heure de journal, __partition_time__ peut être utilisé à la place ; toutefois, vous devez accepter explicitement les risques associés, notamment l'écrasement des anciennes partitions par des données arrivant en retard, l'écriture d'horodatages anormaux dans des partitions futures et les retards dans l'exhaustivité des partitions.
-
Le champ __partition_time__
Une méthode courante pour filtrer les données dans MaxCompute consiste à utiliser l'heure du journal comme colonne de clé de partition.
-
Format
Le champ __partition_time__ est dérivé du champ __time__ de Log Service (SLS). Il génère une chaîne temporelle basée sur le fuseau horaire et le format de partition temporelle. Pour éviter de dépasser la limite de partitions pour une seule table MaxCompute, la valeur de la clé de partition de date est alignée sur des intervalles de 1 800 secondes (une demi-heure).
Par exemple, si l'heure du journal dans Log Service est 27/Jan/2022 20:50:13 +0800, SLS calcule le champ réservé __time__ comme 1643287813 (horodatage Unix). Le tableau suivant montre les valeurs de la colonne de clé de partition temporelle pour différentes configurations.
Format de temps de partition
__partition_time__
%Y_%m_%d_%H_%M_00
2022_01_27_20_30_00
%Y_%m_%d_%H_%M
2022_01_27_20_30
%Y%m%d
20220127
-
Utilisation
L'utilisation de __partition_time__ pour filtrer les données évite une analyse complète de la table. Par exemple, pour interroger les données de journal du 26 décembre 2024 :
select * from {ODPS_TABLE_NAME} where log_partition_time >= "2024_12_26" and log_partition_time < "2024_12_27";
-
-
Le champ
__receive_time__Une méthode courante pour filtrer les données dans MaxCompute consiste à utiliser l'heure d'arrivée du journal comme colonne de clé de partition.
-
Format
Format de temps de partition
__receive_time__
%Y_%m_%d_%H_%M_00
2022_01_27_20_30_00
%Y_%m_%d_%H_%M
2022_01_27_20_30
%Y%m%d
20220127
-
-
Les champs __extract_others__ et __extract_others_all__
Le champ __extract_others__ contient tous les champs non mappés des champs de journal, à l'exception de __topic__, __tag__:* et __source__.
Le champ __extract_others_all__ contient tous les champs non mappés des champs de journal, y compris __topic__, __tag__:* et __source__.
pour le développer.