El origen de datos de LogHub (SLS) proporciona sincronización bidireccional de datos entre Simple Log Service (SLS) y otros orígenes de datos en DataWorks.
Funciones
Simple Log Service (SLS) es compatible con los siguientes escenarios de sincronización de datos:
Sincronización de datos entre LogHub y orígenes como MaxCompute en distintas regiones.
Sincronización de datos entre LogHub y orígenes como MaxCompute en distintas cuentas de Alibaba Cloud.
Sincronización de datos entre LogHub y orígenes como MaxCompute dentro de la misma cuenta de Alibaba Cloud.
Sincronización de datos entre LogHub y orígenes como MaxCompute en cuentas de nube pública y de China Finance Cloud.
Limitación
Cuando Data Integration ejecuta una escritura sin conexión en LogHub (SLS), pueden duplicarse los datos si se vuelve a ejecutar una tarea después de un failover. Esto ocurre porque LogHub (SLS) no es idempotente.
Tipos de campo compatibles
Data Integration admite los siguientes tipos de campo de LogHub (SLS) para lectura y escritura.
|
Tipo de campo |
Lectura sin conexión (LogHub (SLS) Reader) |
Escritura sin conexión (LogHub (SLS) Writer) |
Lectura en tiempo real |
|
STRING |
Compatible |
Compatible |
Compatible |
A continuación se muestran los detalles:
-
Al escribir datos en LogHub (SLS) en modo sin conexión
Todos los tipos de datos se convierten a STRING antes de escribirse en LogHub (SLS). En la siguiente tabla se muestran las conversiones de tipo de datos que realiza LogHub (SLS) Writer.
Tipo interno de Data Integration compatible
Tipo de dato al escribir en LogHub (SLS)
LONG
STRING
DOUBLE
STRING
STRING
STRING
DATE
STRING
BOOLEAN
STRING
BYTES
STRING
-
Al leer datos de LogHub (SLS) en modo de tiempo real
Se incluyen automáticamente los siguientes campos de metadatos.
Campo de sincronización en tiempo real de LogHub (SLS)
Tipo de dato
Descripción
__time__
STRING
Campo reservado de SLS: __time__ especifica la hora del registro cuando se escriben los datos. El valor es una marca de tiempo UNIX en segundos.
__source__
STRING
Campo reservado de SLS: __source__ especifica el dispositivo de origen del registro.
__topic__
STRING
Campo reservado de SLS: __topic__ especifica el nombre del tema.
__tag__:__receive_time__
STRING
Hora en la que el registro llega al servidor. Después de habilitar la función para registrar direcciones IP públicas, el servidor anexa este campo al registro original al recibirlo. El valor es una marca de tiempo UNIX en segundos.
__tag__:__client_ip__
STRING
Dirección IP pública del dispositivo de origen del registro. Después de habilitar la función para registrar direcciones IP públicas, el servidor anexa este campo al registro original al recibirlo.
__tag__:__path__
STRING
Ruta del archivo de registro que recopila Logtail. Logtail anexa este campo al registro automáticamente.
__tag__:__hostname__
STRING
Nombre de host de la máquina de origen desde la cual Logtail recopila datos. Logtail anexa este campo al registro automáticamente.
Crear un origen de datos
Configurar un origen de datos
Antes de desarrollar una tarea de sincronización de datos, debe crear el origen de datos correspondiente en DataWorks. Para conocer el procedimiento, consulte Create a data source. Para ver la descripción detallada de los parámetros de configuración, consulte la información sobre herramientas que se muestra en la página de configuración.
Crear un origen de datos entre cuentas de Alibaba Cloud
En el siguiente ejemplo se describe cómo usar la cuenta B para configurar una tarea de sincronización en Data Integration que sincronice datos de LogHub de la cuenta A hacia MaxCompute de la cuenta B. Las consideraciones especiales para escenarios entre cuentas son las siguientes:
-
Cree un origen de datos de LogHub con el AccessKey ID y el AccessKey Secret de la cuenta A.
De esta manera, la cuenta B puede sincronizar datos de todos los proyectos de SLS de la cuenta A.
-
Cree un origen de datos de LogHub con el AccessKey ID y el AccessKey Secret del usuario de RAM A1 de la cuenta A.
-
La cuenta A otorga al usuario de RAM A1 los permisos generales de SLS, que corresponden a las políticas
AliyunLogFullAccessyAliyunLogReadOnlyAccess. Para obtener más información, consulte Create a RAM user and grant permissions.NotaDespués de adjuntar las políticas del sistema
AliyunLogFullAccessyAliyunLogReadOnlyAccessa un usuario de RAM, dicho usuario puede consultar todos los recursos de SLS de la cuenta de Alibaba Cloud. -
La cuenta A otorga al usuario de RAM A1 un permiso personalizado en SLS.
Inicie sesión en la página con la cuenta A y haga clic en Create Permission Policy.
Para obtener información sobre la autorización correspondiente, consulte Access control overview y RAM custom authorization examples.
Después de autorizar al usuario de RAM A1 con la siguiente política, la cuenta B solo podrá sincronizar datos de los proyectos de SLS project_name1 y project_name2 a través de dicho usuario.
{ "Version": "1", "Statement": [ { "Action": [ "log:Get*", "log:List*", "log:CreateConsumerGroup", "log:UpdateConsumerGroup", "log:DeleteConsumerGroup", "log:ListConsumerGroup", "log:ConsumerGroupUpdateCheckPoint", "log:ConsumerGroupHeartBeat", "log:GetConsumerGroupCheckPoint" ], "Resource": [ "acs:log:*:*:project/project_name1", "acs:log:*:*:project/project_name1/*", "acs:log:*:*:project/project_name2", "acs:log:*:*:project/project_name2/*" ], "Effect": "Allow" } ] }
-
Desarrollo de tareas de sincronización de datos
Para conocer el punto de entrada y el procedimiento para configurar una tarea de sincronización, consulte las siguientes guías de configuración.
Cuando se utiliza un origen de datos de LogHub como origen, puede filtrar los datos en LogHub mediante la sintaxis de consulta de LogHub o instrucciones SPL (SLS Processing Language, la sintaxis que usa SLS para procesar registros) durante la configuración de la tarea. Para obtener detalles sobre la sintaxis, consulte Appendix: LogHub data filtering.
Guía de configuración de tareas de sincronización sin conexión de una sola tabla
-
Para conocer el procedimiento, consulte Configure a single-table offline synchronization task in the codeless UI y Configure a single-table offline synchronization task by using a script.
NotaCuando configure un nodo de sincronización en modo de interfaz sin código, el formato de los parámetros debe coincidir con el formato de configuración de parámetros de script mode.
Para ver todos los parámetros y el script de demostración en modo de script, consulte Script mode parameters a continuación.
Guía de configuración de tareas de sincronización en tiempo real de una sola tabla
Para conocer el procedimiento, consulte Configure a single-table real-time synchronization task.
Guía de configuración de sincronización en tiempo real de bases de datos completas y otras sincronizaciones a nivel de base de datos
Para conocer el procedimiento, consulte Configure a full-database real-time synchronization task.
Preguntas frecuentes
A field contains data in LogHub but appears empty after synchronization
Fields retrieved during field mapping from LogHub are not as expected
Para conocer más problemas comunes sobre Data Integration, consulte Data Integration FAQ.
Apéndice 1: Script de demostración y descripción de parámetros
Configurar una tarea de sincronización por lotes con el editor de código
Si desea configurar una tarea de sincronización por lotes con el editor de código, debe establecer los parámetros relacionados en el script según los requisitos unificados de formato de scripts. Para obtener más información, consulte Script mode configuration. La siguiente información describe los parámetros que debe configurar para los orígenes de datos cuando configura una tarea de sincronización por lotes con el editor de código.
Script de demostración de Reader
Demostración de lectura desde un logstore
{
"type":"job",
"version":"2.0",// The version number.
"steps":[
{
"stepType":"LogHub",// The plug-in name.
"parameter":{
"datasource":"",// The data source.
"column":[// The columns.
"col0",
"col1",
"col2",
"col3",
"col4",
"__category__",
"__source__",
"__topic__", // The log topic.
"__machineUUID__", // The unique identifier of the collection machine.
"__tag__:__hostname__", // The hostname.
"__tag__:__path__", // The path.
"__time__" // The event time.
],
"beginDateTime":"",// The start time for data consumption.
"batchSize":"",// The number of data entries queried from SLS at a time.
"endDateTime":"",// The end time for data consumption.
"fieldDelimiter":",",// The column delimiter.
"logstore":""// The name of the destination Logstore.
},
"name":"Reader",
"category":"reader"
},
{
"stepType":"stream",
"parameter":{},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"// The number of error records.
},
"speed":{
"throttle":true,// If throttle is set to false, the mbps parameter does not take effect, which means throttling is disabled. If throttle is set to true, throttling is enabled.
"concurrent":1 // The number of concurrent threads.
"mbps":"12",// The throttling rate. 1 mbps = 1 MB/s.
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}
Demostración de lectura desde un logstore después de procesar datos con SPL
{
"type":"job",
"version":"2.0",// The version number.
"steps":[
{
"stepType":"LogHub",// The plug-in name.
"parameter":{
"datasource":"",// The data source.
"column":[// The columns.
"col100",
"col1"
],
"beginDateTime":"",// The start time for data consumption.
"batchSize":"",// The number of data entries queried from SLS at a time.
"endDateTime":"",// The end time for data consumption.
"fieldDelimiter":",",// The column delimiter.
"logstore":"",// The name of the destination Logstore.
"query":"* | where regexp_like(col0, '[0-9]+') | project col100=col0, col1 " // SPL
},
"name":"Reader",
"category":"reader"
},
{
"stepType":"stream",
"parameter":{},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"// The number of error records.
},
"speed":{
"throttle":true,// If throttle is set to false, the mbps parameter does not take effect, which means throttling is disabled. If throttle is set to true, throttling is enabled.
"concurrent":1 // The number of concurrent threads.
"mbps":"12",// The throttling rate. 1 mbps = 1 MB/s.
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}
Demostración de lectura desde un logstore después de extender campos con SPL
{
"type":"job",
"version":"2.0",// The version number.
"steps":[
{
"stepType":"LogHub",// The plug-in name.
"parameter":{
"datasource":"",// The data source.
"column":[// The columns.
"col0",
"col1",
"col2",
"col3",
"col4",
"__category__",
"__source__",
"__topic__", // The log topic.
"__machineUUID__", // The unique identifier of the collection machine.
"__tag__:__hostname__", // The hostname.
"__tag__:__path__", // The path.
"__time__", // The event time.
"col100",
"col101"
],
"beginDateTime":"",// The start time for data consumption.
"batchSize":"",// The number of data entries queried from SLS at a time.
"endDateTime":"",// The end time for data consumption.
"fieldDelimiter":",",// The column delimiter.
"logstore":"",// The name of the destination Logstore.
"query":"* | where regexp_like(col0, '[0-9]+') | extend col100=cast(col2 as BIGINT), extend col101=date_parse(col3, '%Y-%m-%d %H:%i') ",// SPL
},
"name":"Reader",
"category":"reader"
},
{
"stepType":"stream",
"parameter":{},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"// The number of error records.
},
"speed":{
"throttle":true,// If throttle is set to false, the mbps parameter does not take effect, which means throttling is disabled. If throttle is set to true, throttling is enabled.
"concurrent":1 // The number of concurrent threads.
"mbps":"12",// The throttling rate. 1 mbps = 1 MB/s.
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}
Parámetros del script de Reader
Parámetro | Descripción | Obligatorio | Valor predeterminado |
endPoint | El endpoint de Simple Log Service es la URL que se usa para acceder a un proyecto y a sus datos de registro. Depende de la región de Alibaba Cloud donde reside el proyecto y del nombre del proyecto. Para consultar los endpoints de servicio de cada región, consulte Endpoints. | Sí | Ninguna |
accessId | El AccessKey ID que se usa para acceder a Simple Log Service e identifica al usuario. | Sí | Ninguna |
accessKey | El AccessKey que se usa para acceder a Simple Log Service y realizar la autenticación del usuario. | Sí | Ninguna |
project | Nombre del proyecto de destino de Simple Log Service. Un proyecto es la unidad de gestión de recursos en Simple Log Service y sirve para aislar y gestionar recursos. | Sí | Ninguna |
logstore | Nombre del logstore de destino. Un logstore es la unidad de Simple Log Service para recopilar, almacenar y consultar datos de registro. | Sí | Ninguna |
batchSize | Número de entradas de datos recuperadas de Simple Log Service en una sola consulta. | No | 128 |
column | Nombres de columna de cada entrada de datos. Puede configurar los campos de metadatos de Simple Log Service como columnas de sincronización. Simple Log Service admite metadatos como el tema del registro, el identificador único de la máquina de recopilación, el nombre de host, la ruta y la hora del registro. Nota Los nombres de columna distinguen entre mayúsculas y minúsculas. Para obtener más información, consulte la sección configurable column values a continuación. | Sí | Ninguna |
beginDateTime | Hora de inicio del consumo de datos, es decir, el momento en que los datos de registro llegan a LogHub (SLS). Este parámetro define el límite izquierdo (inclusivo) del intervalo de tiempo. Establezca este parámetro con una cadena de tiempo en formato yyyyMMddHHmmss (por ejemplo, 20180111013000). Puede usar este parámetro junto con los parámetros de programación de DataWorks. Por ejemplo, en Scheduling Settings, en el lado derecho de la página de edición del nodo, establezca Nota
| Sí | Ninguna |
endDateTime | Hora de fin del consumo de datos, que corresponde al límite derecho (exclusivo) del intervalo de tiempo. Establezca este parámetro con una cadena de tiempo en formato yyyyMMddHHmmss (por ejemplo, 20180111013010). Puede usar este parámetro junto con los parámetros de programación de DataWorks. Por ejemplo, en Scheduling Settings, en el lado derecho de la página de edición del nodo, establezca endDateTime=${yyyymmdd} en Parameter y luego configure Log End Time como ${endDateTime}000000. Esto indica que la hora de fin del registro es 00:00:00 del día posterior a la fecha de negocio. Para obtener más información, consulte Scheduling parameters. Importante
| Sí | Ninguna |
query | Filtra los datos en LogHub mediante la sintaxis de consulta de LogHub o instrucciones SPL (SLS Processing Language es la sintaxis que usa SLS para procesar registros). | Sí | Ninguna |
Si faltan datos al leer desde LogHub, compruebe en la consola de LogHub si el campo de metadatos receive_time se encuentra dentro del intervalo de tiempo configurado para la tarea.
Crear particiones por campos de negocio personalizados
El filtro de tiempo de las tareas de sincronización sin conexión de LogHub (SLS) siempre se basa en __tag__:__receive_time__. No se admite el filtrado ni la creación de particiones directamente por campos de negocio personalizados como start_time. Para dividir los datos en particiones en MaxCompute mediante un campo de negocio personalizado, aplique la siguiente solución alternativa:
Configure una tarea de sincronización sin conexión para sincronizar todos los datos de LogHub (SLS) hacia una tabla de preparación de MaxCompute (sin especificar un campo de partición).
-
Cree un nodo SQL de MaxCompute y ejecute la siguiente instrucción para escribir los datos en la tabla de particiones de destino mediante un campo de negocio personalizado (como
start_time):INSERT OVERWRITE TABLE target_table PARTITION(start_time) SELECT col1, col2, start_time FROM temp_table; Use parámetros de programación para pasar valores de partición de forma dinámica e implementar la creación automática de particiones por día o por hora.
Script de demostración de Writer
{
"type": "job",
"version": "2.0",// The version number.
"steps": [
{
"stepType": "stream",
"parameter": {},
"name": "Reader",
"category": "reader"
},
{
"stepType": "LogHub",// The plug-in name.
"parameter": {
"datasource": "",// The data source.
"column": [// The columns.
"col0",
"col1",
"col2",
"col3",
"col4",
"col5"
],
"topic": "",// The selected topic.
"batchSize": "1024",// The number of records to submit at a time.
"logstore": ""// The name of the destination LogService Logstore.
},
"name": "Writer",
"category": "writer"
}
],
"setting": {
"errorLimit": {
"record": ""// The number of error records.
},
"speed": {
"throttle":true,// If throttle is set to false, the mbps parameter does not take effect and bandwidth is not throttled. If throttle is set to true, bandwidth is throttled.
"concurrent":3, // The number of concurrent threads.
"mbps":"12"// The throttling rate. 1 mbps = 1 MB/s.
}
},
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
}
}
Parámetros del script de Writer
LogHub (SLS) Writer obtiene los datos generados por Reader a través del framework de Data Integration y luego convierte uno por uno todos los tipos de datos compatibles a STRING. Cuando se alcanza el batchSize especificado, los datos se envían a LogHub (SLS) en un solo lote mediante el SDK de Java de LogService.
Parámetro | Descripción | Obligatorio | Valor predeterminado |
endpoint | El endpoint de Log Service es la URL que se usa para acceder a un proyecto y a sus datos de registro. Depende de la región de Alibaba Cloud y del nombre del proyecto. Para consultar los endpoints de cada región, consulte Service endpoints. | Sí | Ninguna |
accessKeyId | El AccessKeyId que se usa para acceder a Log Service. | Sí | Ninguna |
accessKeySecret | El AccessKeySecret que se usa para acceder a Log Service. | Sí | Ninguna |
project | Nombre del proyecto de destino de Log Service. | Sí | Ninguna |
logstore | Nombre del logstore de destino. Un logstore es la unidad de Log Service para recopilar, almacenar y consultar datos de registro. | Sí | Ninguna |
topic | Nombre del topic en el SLS de destino. | No | Cadena vacía |
batchSize | Número de registros de datos sincronizados con LogHub (SLS) a la vez. Valor predeterminado: 1,024. Valor máximo: 4,096. Nota El tamaño de los datos de una sola escritura por lotes en LogHub (SLS) no debe superar los 5 MB. Ajuste el número de registros enviados por lote según el tamaño individual de sus registros. | No | 1,024 |
column | Nombre de la columna de cada registro de datos. | Sí | Ninguna |
Apéndice 2: Filtrado con sintaxis SPL de LogHub
Cuando se utiliza LogHub como origen de datos, puede usar la sintaxis de consulta de LogHub o instrucciones SPL (SLS Processing Language) para filtrar los datos en LogHub durante la configuración de la tarea. La sintaxis se describe a continuación:
Para obtener más información sobre SPL, consulte SPL overview.
Escenario | Instrucción SQL | Instrucción SPL |
Filtrado de datos | |
|
Procesamiento y selección de campos | Seleccione campos específicos y cambie su nombre: |
|
Transformación de datos (llamada a funciones SQL) | Convertir tipos de datos, analizar sintácticamente marcas de tiempo y más: | Convertir tipos de datos, analizar sintácticamente marcas de tiempo y más: |
Extracción de campos | Extracción mediante expresiones regulares: Extracción JSON: |
|
Apéndice 3: Valores de columna configurables
La lógica de lectura de todos los campos se activa únicamente cuando column contiene exactamente un elemento que es * o "*". De lo contrario, cada elemento de column se procesa en el orden de coincidencia normal. Por ejemplo, si configura ["*", "__time__"], el carácter * no activa la lógica de lectura de todos los campos. En su lugar, se interpreta como un nombre de campo normal, lo que normalmente devuelve null.
El orden de coincidencia normal es: campos normales de contenido del registro → asignación de metacampos integrados de Reader → constantes entre comillas simples → __tag__:<tagKey> → null. Si un campo normal de contenido del registro tiene el mismo nombre que un metacampo o una clave LogTag, el campo normal de contenido del registro tiene prioridad.
A continuación se muestran los campos que se usan con mayor frecuencia y que se recomiendan para las configuraciones orientadas al usuario en los ajustes de column de LogHub Reader, según las definiciones de campos reservados de SLS. Que un campo tenga valor o no depende del contenido real del registro, de los metadatos de LogGroup y de los LogTags recuperados.
|
Configuración |
Comportamiento |
|
Nombre de campo normal, como |
Lee el valor de los campos de contenido (contents) de cada entrada de registro mediante la clave. Los nombres de campo distinguen entre mayúsculas y minúsculas. |
|
|
Lee |
|
|
Lee el valor |
|
|
Lee el valor |
|
|
Lee el valor |
|
|
Lee el valor |
|
|
Lee |
|
|
Lee |
|
|
Lee |
|
|
Lee |
|
|
Lee otros LogTags especificados, como |
|
|
Si este campo existe como campo de contenido del registro, se lee como un nombre de campo normal. |
|
|
Devuelve una cadena constante (el contenido después de quitar las comillas simples externas). |
|
|
Solo surte efecto cuando |
|
Campos sin coincidencia |
Devuelve |
Ejemplo de configuración:
"column": [
"content",
"__time__",
"__source__",
"__tag__:__receive_time__",
"'constant_value'"
]