O Log Service (SLS) permite enviar dados de log para o MaxCompute (ODPS) para armazenamento e análise. Crie uma tarefa de envio de dados para o MaxCompute (nova versão) para configurar o pipeline de dados.
Pré-requisitos
Você já criou um projeto e um logstore no Log Service (SLS) e configurou a coleta de dados. Para mais informações, consulte Manage a project, Create a basic logstore e Data collection overview.
Você já criou uma tabela particionada do MaxCompute (ODPS) na mesma região do projeto do Log Service (SLS). Para mais informações, consulte Create a table.
Observações de uso
Para obter informações sobre as regiões que suportam o envio de dados para o MaxCompute (ODPS), consulte Supported regions.
-
Se o valor de um campo do tipo
charouvarcharexceder o comprimento especificado, a parte excedente será truncada durante o envio para o MaxCompute (ODPS).Por exemplo, se o limite de comprimento for 3 e o valor do campo for
012345, o valor se tornará012após o envio para o MaxCompute (ODPS). Caso o valor de um campo do tipo
string,charouvarcharseja uma string vazia, seu valor se tornará Null após o envio para o MaxCompute (ODPS).O valor de um campo do tipo
datetimedeve estar no formatoYYYY-MM-DD HH:mm:ss. Múltiplos espaços são permitidos entreDDeHH. Um formato inválido não causa erro de envio, mas o valor se tornará Null após o envio para o MaxCompute (ODPS).Se o valor de um campo do tipo
dateestiver em um formato inválido, a tarefa de envio de dados não reportará erro, porém o valor se tornará Null após o envio para o MaxCompute (ODPS).Para um campo decimal, se o valor exceder a escala definida, o sistema fará o arredondamento. Se o valor exceder a precisão definida, o sistema descartará todo o log como dados incorretos e incrementará a contagem de erros.
Por padrão, o sistema descarta dados incorretos durante o envio de dados.
-
Quando um campo especificado na configuração de envio não existe em um log, seu valor no MaxCompute (ODPS) assume o valor padrão ou Null.
Se você definiu um valor padrão ao criar a tabela do MaxCompute (ODPS), o campo receberá esse valor padrão.
Caso nenhum valor padrão tenha sido definido, mas a coluna aceite valores Null, o valor do campo se tornará Null.
Devido às limitações do MaxCompute (ODPS), a concorrência máxima de envio de dados é de 64 operações de escrita. O throughput máximo para uma única partição é de 10 MB/s.
Procedimento
Faça login no Simple Log Service console.
Na seção Projects, clique em no projeto desejado.
Na aba , clique em no ícone > à esquerda do logstore alvo e escolha .
Passe o ponteiro do mouse sobre MaxCompute (ODPS) e clique em no ícone +.
-
No painel Data Shipping to MaxCompute, configure os parâmetros a seguir e clique em OK.
Após criar uma tarefa de envio de dados, uma nova tarefa geralmente envia dados para o MaxCompute em aproximadamente 10 minutos. Em seguida, você pode consultar os dados no MaxCompute (ODPS). Para mais informações, consulte How do I check the integrity of data after it is shipped from Log Service to 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 | +------------+------------+-----------+-----------+-----------+-----------+------------------+--------------------+-----------+
Mapeamento de modelo de dados
Para enviar logs do Log Service (SLS) para uma tabela do MaxCompute (ODPS), é necessário mapear os modelos de dados dos dois serviços. A seção a seguir descreve as regras de mapeamento e fornece exemplos.
Uma tabela do MaxCompute (ODPS) deve conter pelo menos uma coluna de dados e uma coluna de chave de partição.
Recomendamos o uso dos seguintes campos reservados do Log Service (SLS): __partition_time__, __source__ e __topic__.
Uma tabela do MaxCompute (ODPS) pode ter no máximo 60.000 partições. Se esse limite for excedido, não será possível gravar dados na tabela.
O campo reservado do sistema __extract_others__ era anteriormente denominado _extract_others_. O nome antigo ainda é suportado para fins de compatibilidade.
Os valores das colunas de chave de partição do MaxCompute (ODPS) não podem ser palavras reservadas ou palavras-chave do MaxCompute (ODPS). Para mais informações, consulte Reserved words and keywords.
As partições em uma tabela particionada do MaxCompute (ODPS) não podem estar vazias. É necessário mapear um campo específico, como um campo reservado do sistema ou um campo de log, para uma coluna de chave de partição. O valor do campo mapeado não pode estar vazio ou nulo. Se um campo de log for do tipo string, ele deve ser conversível para o tipo de dados da coluna de chave de partição. Se a conversão falhar e resultar em uma chave de partição vazia, o sistema descartará o log durante o envio.
No Log Service (SLS), um campo de log pode ser mapeado para apenas uma coluna em uma tabela do MaxCompute (ODPS), seja uma coluna de dados ou uma coluna de chave de partição. A redundância de campos não é suportada.
A tabela a seguir mostra um exemplo da relação de mapeamento entre colunas do MaxCompute (ODPS) e campos do Log Service (SLS). Para mais informações sobre campos reservados do Log Service (SLS), consulte Reserved fields.
|
Tipo de coluna do MaxCompute |
Nome da coluna (MaxCompute) |
Tipo de dados (MaxCompute) |
Nome do campo de log (Log Service) |
Tipo de campo (Log Service) |
Descrição |
|
Coluna de dados |
log_source |
string |
__source__ |
Campo reservado |
Origem do log. |
|
log_time |
bigint |
__time__ |
Campo reservado |
Horário do log no formato de timestamp Unix. Corresponde ao campo de tempo no modelo de dados. |
|
|
log_topic |
string |
__topic__ |
Campo reservado |
Tópico do log. |
|
|
time |
string |
time |
Campo de log |
Campo analisado a partir do conteúdo do log, correspondendo a um par chave-valor no modelo de dados. Em muitos casos, o valor do campo |
|
|
ip |
string |
ip |
Campo de log |
Campo analisado a partir do conteúdo do log. |
|
|
thread |
string |
thread |
Campo de log |
Campo analisado a partir do conteúdo do log. |
|
|
log_extract_others |
string |
__extract_others__ |
Campo reservado |
O sistema serializa outros campos de log não mapeados em um objeto JSON chave-valor plano. Objetos JSON aninhados não são suportados. |
|
|
Coluna de chave de partição |
log_partition_time |
string |
__partition_time__ |
Campo reservado |
O Log Service (SLS) calcula este valor a partir do campo __time__ do log e depois o alinha. A granularidade da partição é configurável. |
|
status |
string |
status |
Campo de log |
Campo analisado a partir do conteúdo do log. Os valores deste campo podem ser enumerados para garantir que o número de partições não exceda o limite. |
Formato de partição de tempo
O envio de dados para o MaxCompute (nova versão) suporta dois formatos de partição de tempo: StrfTimeFormat e SimpleDateFormat. O formato de partição de tempo só entra em vigor quando o campo na coluna de chave de partição do MaxCompute estiver definido como __receive_time__ ou __partition_time__.
StrfTimeFormat
strftime é uma função padrão da biblioteca C do UNIX que formata datas e horas. Ela usa códigos de formato iniciados com o caractere % para converter uma partição de tempo em uma string. Por exemplo, %Y_%m_%d representa o ano, mês e dia.
Ao criar uma nova tarefa de envio de dados para o MaxCompute (ODPS), você deve usar StrfTimeFormat.
|
Formato de partição de tempo |
Exemplo de partição de tabela |
|
%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
Formato de tempo na sintaxe SimpleDateFormat do Java, como yyyy-MM-dd HH:mm. Para mais informações, consulte Class SimpleDateFormat.
O SimpleDateFormat é suportado para compatibilidade com versões anteriores durante a migração de uma versão mais antiga. Para novas tarefas do MaxCompute, use StrfTimeFormat.
Tarefas de migração legada suportam os seguintes formatos de partição:
|
Formato de tempo de partição |
Exemplo de partição de tabela |
|
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 |
Informações de referência
Recomenda-se o uso de __receive_time__ como campo de particionamento. Se os requisitos de negócio exigirem particionamento estrito pelo horário do log, __partition_time__ pode ser usado; no entanto, você deve aceitar explicitamente os riscos associados, incluindo dados atrasados sobrescrevendo partições mais antigas, timestamps anômalos gravando em partições futuras e atrasos na completude das partições.
-
O campo __partition_time__
Uma forma comum de filtrar dados no MaxCompute é usar o horário do log como coluna de chave de partição.
-
Formato
O campo __partition_time__ é derivado do campo __time__ no Log Service (SLS). Ele gera uma string de tempo com base no fuso horário e no formato de tempo da partição. Para evitar exceder o limite de partições de uma única tabela do MaxCompute, o valor da chave de partição de data é alinhado em intervalos de 1.800 segundos (meia hora).
Por exemplo, se o horário do log no Log Service for 27/Jan/2022 20:50:13 +0800, o SLS calcula o campo reservado __time__ como 1643287813 (timestamp Unix). A tabela a seguir mostra os valores da coluna de chave de partição de tempo para diferentes configurações.
Formato de tempo de partição
__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
-
Uso
Usar __partition_time__ para filtrar dados evita uma varredura completa da tabela. Por exemplo, para consultar dados de log de 26 de dezembro de 2024:
select * from {ODPS_TABLE_NAME} where log_partition_time >= "2024_12_26" and log_partition_time < "2024_12_27";
-
-
O campo
__receive_time__Uma maneira comum de filtrar dados no MaxCompute é usar o horário de chegada do log como coluna de chave de partição.
-
Formato
Formato de tempo de partição
__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
-
-
Os campos __extract_others__ e __extract_others_all__
O campo __extract_others__ contém todos os campos não mapeados dos campos de log, excluindo __topic__, __tag__:* e __source__.
O campo __extract_others_all__ contém todos os campos não mapeados dos campos de log, incluindo __topic__, __tag__:* e __source__.
para expandi-lo.