A fonte de dados LogHub (SLS) oferece sincronização bidirecional de dados entre o Simple Log Service (SLS) e outras fontes de dados no DataWorks.
Recursos
O Simple Log Service (SLS) suporta os seguintes cenários de sincronização de dados:
Sincronização de dados entre o LogHub e fontes como o MaxCompute em diferentes regiões.
Sincronização de dados entre o LogHub e fontes como o MaxCompute em diferentes contas Alibaba Cloud.
Sincronização de dados entre o LogHub e fontes como o MaxCompute na mesma conta Alibaba Cloud.
Sincronização de dados entre o LogHub e fontes como o MaxCompute entre contas da nuvem pública e da China Finance Cloud.
Limitação
Quando o Data Integration realiza uma gravação offline no LogHub (SLS), pode ocorrer duplicação de dados se uma tarefa for reexecutada após um failover. Isso acontece porque o LogHub (SLS) não é idempotente.
Tipos de campo suportados
O Data Integration suporta os seguintes tipos de campo do LogHub (SLS) para leitura e gravação.
|
Tipo de campo |
Leitura offline (LogHub (SLS) Reader) |
Gravação offline (LogHub (SLS) Writer) |
Leitura em tempo real |
|
STRING |
Suportado |
Suportado |
Suportado |
Detalhes:
-
Ao gravar dados no LogHub (SLS) no modo offline
Todos os tipos de dados são convertidos para STRING antes da gravação no LogHub (SLS). A tabela a seguir lista as conversões de tipo de dados realizadas pelo LogHub (SLS) Writer.
Tipo interno do Data Integration suportado
Tipo de dados ao gravar no LogHub (SLS)
LONG
STRING
DOUBLE
STRING
STRING
STRING
DATE
STRING
BOOLEAN
STRING
BYTES
STRING
-
Ao ler dados do LogHub (SLS) no modo em tempo real
Os seguintes campos de metadados são incluídos automaticamente.
Campo de sincronização em tempo real do LogHub (SLS)
Tipo de dados
Descrição
__time__
STRING
Campo reservado do SLS: __time__ especifica o horário do log quando os dados são gravados. O valor é um timestamp UNIX em segundos.
__source__
STRING
Campo reservado do SLS: __source__ especifica o dispositivo de origem do log.
__topic__
STRING
Campo reservado do SLS: __topic__ especifica o nome do tópico.
__tag__:__receive_time__
STRING
Horário em que o log chega ao servidor. Após ativar o recurso de registro de endereços IP públicos, o servidor anexa este campo ao log bruto no momento do recebimento. O valor é um timestamp UNIX em segundos.
__tag__:__client_ip__
STRING
Endereço IP público do dispositivo de origem do log. Após ativar o recurso de registro de endereços IP públicos, o servidor anexa este campo ao log bruto no momento do recebimento.
__tag__:__path__
STRING
Caminho do arquivo de log coletado pelo Logtail. O Logtail anexa automaticamente este campo ao log.
__tag__:__hostname__
STRING
Nome do host da máquina de origem de onde o Logtail coleta dados. O Logtail anexa automaticamente este campo ao log.
Crie uma fonte de dados
Configure uma fonte de dados
Antes de desenvolver uma tarefa de sincronização de dados, crie a fonte de dados correspondente no DataWorks. Para obter o procedimento, consulte Create a data source. Para descrições detalhadas dos parâmetros de configuração, consulte as dicas de ferramenta exibidas na página de configuração.
Crie uma fonte de dados entre contas Alibaba Cloud
O exemplo a seguir descreve como usar a Conta B para configure uma tarefa de sincronização no Data Integration, a fim de sincronizar dados do LogHub da Conta A para o MaxCompute da Conta B. As observações especiais para cenários entre contas são:
-
Crie uma fonte de dados LogHub usando o AccessKey ID e o AccessKey Secret da Conta A.
Neste caso, a Conta B pode sincronizar dados de todos os projetos SLS pertencentes à Conta A.
-
Crie uma fonte de dados LogHub usando o AccessKey ID e o AccessKey Secret do usuário RAM A1 pertencente à Conta A.
-
A Conta A concede ao usuário RAM A1 as permissões gerais no SLS, que correspondem às políticas
AliyunLogFullAccesseAliyunLogReadOnlyAccess. Para mais informações, consulte Create a RAM user and grant permissions.NotaApós anexar as políticas de sistema
AliyunLogFullAccesseAliyunLogReadOnlyAccessa um usuário RAM, esse usuário poderá consultar todos os recursos SLS da conta Alibaba Cloud. -
A Conta A concede ao usuário RAM A1 uma permissão personalizada no SLS.
Faça login na página usando a Conta A e clique em Create Permission Policy.
Para informações sobre a autorização relevante, consulte Access control overview e RAM custom authorization examples.
Após autorizar o usuário RAM A1 com base na política a seguir, a Conta B poderá sincronizar dados apenas dos projetos SLS project_name1 e project_name2 por meio do usuário RAM A1.
{ "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" } ] }
-
Desenvolvimento de tarefas de sincronização de dados
Para informações sobre o ponto de entrada e o procedimento de configuração de uma tarefa de sincronização, consulte os guias de configuração a seguir.
Quando uma fonte de dados LogHub é usada como origem, filtre os dados no LogHub utilizando a sintaxe de consulta do LogHub ou instruções SPL (SLS Processing Language, a sintaxe usada pelo SLS para processar logs) durante a configuração da tarefa. Para detalhes sobre a sintaxe, consulte Appendix: LogHub data filtering.
Guia de configuração de tarefa de sincronização offline de tabela única
-
Para obter o procedimento, consulte Configure a single-table offline synchronization task in the codeless UI e Configure a single-table offline synchronization task by using a script.
NotaAo configurar um nó de sincronização no modo codeless UI, o formato do parâmetro deve ser consistente com o formato de configuração de parâmetros em script mode.
Para os parâmetros completos e demonstração de script no modo script, consulte Script mode parameters abaixo.
Guia de configuração de tarefa de sincronização em tempo real de tabela única
Para obter o procedimento, consulte Configure a single-table real-time synchronization task.
Guia de configuração de sincronização em tempo real de banco de dados completo e outras sincronizações no nível de banco de dados
Para obter o procedimento, consulte Configure a full-database real-time synchronization task.
Perguntas frequentes
A field contains data in LogHub but appears empty after synchronization
Fields retrieved during field mapping from LogHub are not as expected
Para mais problemas comuns sobre o Data Integration, consulte Data Integration FAQ.
Apêndice 1: Demonstração de script e descrição de parâmetros
Configure uma tarefa de sincronização em lote usando o editor de código
Para configure uma tarefa de sincronização em lote usando o editor de código, defina os parâmetros relacionados no script conforme os requisitos unificados de formato de script. Para mais informações, consulte Script mode configuration. As informações a seguir descrevem os parâmetros necessários para fontes de dados ao configure uma tarefa de sincronização em lote via editor de código.
Demonstração de script do Reader
Demonstração de leitura de um 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"
}
]
}
}
Demonstração de leitura de um Logstore após processamento de dados com 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"
}
]
}
}
Demonstração de leitura de um Logstore após extensão de campos com 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 do script do Reader
Parâmetro | Descrição | Obrigatório | Valor padrão |
endPoint | O endpoint do Simple Log Service é a URL usada para acessar um projeto e seus dados de log. Ele está relacionado à região da Alibaba Cloud onde o projeto reside e ao nome do projeto. Para os endpoints de service de cada região, consulte Endpoints. | Sim | Nenhum |
accessId | O AccessKey ID usado para acessar o Simple Log Service, que identifica o usuário. | Sim | Nenhum |
accessKey | A AccessKey usada para acessar o Simple Log Service para autenticação do usuário. | Sim | Nenhum |
project | Nome do projeto de destino no Simple Log Service. Um projeto é a unidade de gerenciamento de recursos no Simple Log Service, usada para isolar e gerencie recursos. | Sim | Nenhum |
logstore | Nome do Logstore de destino. Um Logstore é a unidade no Simple Log Service para coleta, armazenamento e consulta de dados de log. | Sim | Nenhum |
batchSize | Número de entradas de dados recuperadas do Simple Log Service em uma única consulta. | Não | 128 |
column | Nomes das colunas em cada entrada de dados. Configure campos de metadados do Simple Log Service como colunas de sincronização. O Simple Log Service suporta metadados como tópico de log, identificador único da máquina de coleta, nome do host, caminho e horário do log. Nota Os nomes das colunas diferenciam maiúsculas de minúsculas. Para mais informações, consulte a seção configurable column values abaixo. | Sim | Nenhum |
beginDateTime | Horário inicial para consumo de dados, correspondente ao momento em que os dados de log chegam ao LogHub (SLS). Este parâmetro especifica o limite esquerdo (inclusivo) do intervalo de tempo. Defina este parâmetro como uma string de tempo no formato yyyyMMddHHmmss (por exemplo, 20180111013000). Use este parâmetro em conjunto com os parâmetros de agendamento do DataWorks. Por exemplo, em Scheduling Settings no lado direito da página de edição do nó, defina Nota
| Sim | Nenhum |
endDateTime | Horário final para consumo de dados, correspondente ao limite direito (exclusivo) do intervalo de tempo. Defina este parâmetro como uma string de tempo no formato yyyyMMddHHmmss (por exemplo, 20180111013010). Use este parâmetro em conjunto com os parâmetros de agendamento do DataWorks. Por exemplo, em Scheduling Settings no lado direito da página de edição do nó, defina endDateTime=${yyyymmdd} em Parameter e, em seguida, defina Log End Time como ${endDateTime}000000. Isso indica que o horário final do log é 00:00:00 no dia seguinte à data comercial. Para mais informações, consulte Scheduling parameters. Importante
| Sim | Nenhum |
query | Filtra dados no LogHub usando a sintaxe de consulta do LogHub ou instruções SPL (SLS Processing Language é a sintaxe usada pelo SLS para processar logs). | Sim | Nenhum |
Se houver dados ausentes durante a leitura do LogHub, verifique no console do LogHub se o campo de metadados receive_time está dentro do intervalo de tempo configurado para a tarefa.
Particionamento por campos comerciais personalizados
O filtro de tempo para tarefas de sincronização offline do LogHub (SLS) baseia-se sempre em __tag__:__receive_time__. Não há suporte para filtragem ou particionamento direto por campos comerciais personalizados, como start_time. Para particionar dados no MaxCompute por um campo comercial personalizado, use a seguinte solução alternativa:
Configure uma tarefa de sincronização offline para sincronizar todos os dados do LogHub (SLS) para uma tabela de staging do MaxCompute (sem especificar um campo de partição).
-
Crie um nó SQL do MaxCompute e execute a seguinte instrução para gravar dados na tabela particionada de destino por um campo comercial personalizado (como
start_time):INSERT OVERWRITE TABLE target_table PARTITION(start_time) SELECT col1, col2, start_time FROM temp_table; Use parâmetros de agendamento para passar valores de partição dinamicamente e implementar o particionamento automático por dia ou por hora.
Demonstração de script do 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 do script do Writer
O LogHub (SLS) Writer obtém dados gerados pelo Reader através do framework Data Integration e converte todos os tipos de dados suportados para STRING individualmente. Quando o batchSize especificado é atingido, os dados são enviados ao LogHub (SLS) em um único lote usando o LogService Java SDK.
Parâmetro | Descrição | Obrigatório | Valor padrão |
endpoint | O endpoint do Log Service é a URL usada para acessar um projeto e seus dados de log. Ele é determinado pela região da Alibaba Cloud e pelo nome do projeto. Para endpoints de cada região, consulte Service endpoints. | Sim | Nenhum |
accessKeyId | O AccessKeyId usado para acessar o Log Service. | Sim | Nenhum |
accessKeySecret | O AccessKeySecret usado para acessar o Log Service. | Sim | Nenhum |
project | Nome do projeto de destino no Log Service. | Sim | Nenhum |
logstore | Nome do Logstore de destino. Um Logstore é a unidade no Log Service para coleta, armazenamento e consulta de dados de log. | Sim | Nenhum |
topic | Nome do topic no SLS de destino. | Não | String vazia |
batchSize | Número de registros de dados sincronizados com o LogHub (SLS) por vez. Valor padrão: 1.024. Valor máximo: 4.096. Nota O tamanho dos dados para uma única gravação em lote no LogHub (SLS) não deve exceder 5 MB. Ajuste o número de registros enviados por lote com base no tamanho individual dos seus registros. | Não | 1.024 |
column | Nome da coluna em cada registro de dados. | Sim | Nenhum |
Apêndice 2: Filtragem com sintaxe SPL do LogHub
Quando o LogHub é usado como fonte de dados, utilize a sintaxe de consulta do LogHub ou instruções SPL (SLS Processing Language) para filtrar dados no LogHub durante a configuração da tarefa. A sintaxe é descrita a seguir:
Para mais informações sobre SPL, consulte SPL overview.
Cenário | Instrução SQL | Instrução SPL |
Filtragem de dados | |
|
Processamento e seleção de campos | Selecionar campos específicos e renomeá-los: |
|
Transformação de dados (chamar funções SQL) | Converter tipos de dados, analisar timestamps e mais: | Converter tipos de dados, analisar timestamps e mais: |
Extração de campos | Extração por expressão regular: Extração JSON: |
|
Apêndice 3: Valores de coluna configuráveis
A lógica de leitura de todos os campos é acionada apenas quando column contém exatamente um elemento que seja * ou "*". Caso contrário, cada elemento de column é processado na ordem normal de correspondência. Por exemplo, se você configure ["*", "__time__"], o * não aciona a lógica de leitura de todos os campos. Em vez disso, ele é correspondido como um nome de campo normal, o que geralmente resulta em null.
A ordem normal de correspondência é: campos de conteúdo de log normal → mapeamento de campo de metadados interno do Reader → constantes entre aspas simples → __tag__:<tagKey> → null. Se um campo de conteúdo de log normal tiver o mesmo nome que um campo de metadados ou chave LogTag, o campo de conteúdo de log normal terá prioridade.
A tabela a seguir lista os campos comumente usados e recomendados para configurações voltadas ao usuário nas definições de column do LogHub Reader, com base nas definições de campos reservados do SLS. A existência de valor em um campo depende do conteúdo real do log, dos metadados do LogGroup e dos LogTags recuperados.
|
Configuração |
Comportamento |
|
Nome de campo normal, como |
Lê o valor dos campos de conteúdo (contents) de cada entrada de log pela chave. Os nomes dos campos diferenciam maiúsculas de minúsculas. |
|
|
Lê |
|
|
Lê o |
|
|
Lê o |
|
|
Lê a |
|
|
Lê o |
|
|
Lê |
|
|
Lê |
|
|
Lê |
|
|
Lê |
|
|
Lê outros LogTags especificados, como |
|
|
Se este campo existir como um campo de conteúdo de log, poderá ser lido como um nome de campo normal. |
|
|
Gera uma string constante (o conteúdo após remover as aspas simples externas). |
|
|
Tem efeito apenas quando |
|
Campos não correspondidos |
Gera |
Exemplo de configuração:
"column": [
"content",
"__time__",
"__source__",
"__tag__:__receive_time__",
"'constant_value'"
]