O LogHub Shipper for Tablestore (LogHub Shipper) limpa e converte dados no Log Service e, em seguida, grava esses dados em tabelas de dados no Tablestore. O Tablestore publica o LogHub Shipper no Alibaba Cloud Container Hub por meio de imagens docker e o executa em instâncias do Elastic Compute Service (ECS) com base no Alibaba Cloud Container Service for Kubernetes (ACK).
Introdução
O Log Service armazena dados no formato json e usa grupos de logs como unidade básica para operações de leitura e gravação de dados. Para obter mais informações sobre grupos de logs, consulte Terms. Portanto, não é possível consultar e analisar logs no Log Service com base em condições específicas. Por exemplo, você não pode consultar e analisar dados de log de um aplicativo nas últimas 12 horas.
O LogHub Shipper converte dados de log no Log Service em dados estruturados e, em seguida, grava os dados em tabelas de dados no Tablestore em tempo real. Isso proporciona serviços online precisos e de alto desempenho em tempo real.
Exemplos de dados
Por exemplo, o Log Service contém dados de log no seguinte formato:
{"__time__":1453809242,"__topic__":"","__source__":"47.100.XX.XX","ip":"47.100.XX.XX","time":"26/Jan/2016:19:54:02 +0800","url":"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=U0U***45A&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=pD12XYLmGxKQ%2Bmkd6x7hAgQ7b1c%3D HTTP/1.1","status":"200","user-agent":"aliyun-sdk-java"}
O LogHub Shipper grava os dados em uma tabela de dados do Tablestore cujas colunas de chave primária são IP e time no seguinte formato.
|
IP |
time |
source |
status |
user-agent |
url |
|
47.100.XX.XX |
26/Jan/2016:19:54:02 +0800 |
47.100.XX.XX |
200 |
aliyun-sdk-java |
POST /PutData… |
Dessa forma, você pode recuperar dados históricos de um IP específico com base em um ponto no tempo específico na tabela de dados do Tablestore de maneira eficiente e precisa.
O LogHub Shipper oferece regras flexíveis de mapeamento de dados. configure os mapeamentos entre os campos dos dados de log e as colunas de atributo das tabelas de dados para converter os dados de maneira eficiente.
Termos
Termos dos serviços relacionados
Antes de usar o LogHub Shipper, você precisa entender os termos dos serviços relacionados. A tabela a seguir descreve esses termos.
| Service | Termo |
| Log Service |
|
| Tablestore | |
| ECS | Pay-as-you-go and Subscription |
| ACK | Node, Application, Service, and Container
Ao configurar o número de contêineres em um único LogHub Shipper, especifique um valor menor ou igual ao número de shards no Logstore correspondente. |
| Resource Access Management (RAM) | RAM user
Recomendamos que você autorize o usuário do RAM do LogHub Shipper apenas a ler dados de Logstores e gravar dados no Tablestore. |
Tabelas de dados
As tabelas de dados armazenam dados de log que passaram por limpeza e conversão.
Ao usar tabelas de dados, observe os seguintes itens:
crie manualmente uma tabela de dados para armazenar os dados de log limpos e convertidos. O LogHub Shipper não cria tabelas de dados automaticamente.
Se o Log Service e o Tablestore estiverem disponíveis, a latência entre o momento em que um log entra no Log Service e o momento em que é gravado no Tablestore é de centenas de milissegundos.
Se o Tablestore estiver indisponível, o LogHub Shipper aguarda até 500 milissegundos e tenta novamente.
O LogHub Shipper registra checkpoints persistentes regularmente.
Se o LogHub Shipper ficar indisponível devido a um problema, como uma atualização, ele continuará a consumir logs a partir do último checkpoint após a recuperação.
Recomendamos garantir que logs diferentes no mesmo Logstore sejam gravados em linhas diferentes na tabela de dados. Isso garante a consistência eventual entre a tabela de dados e o Logstore, mesmo quando o LogHub Shipper repete o consumo de dados.
O LogHub Shipper grava dados nas tabelas de dados usando a operação UpdateRow do Tablestore. Portanto, vários LogHub Shippers podem gravar dados na mesma tabela de dados. Nesse caso, recomendamos garantir que os LogHub Shippers gravem dados em colunas de atributo diferentes.
Tabelas de status
O LogHub Shipper usa a tabela de status que você crie no Tablestore para fornecer informações relacionadas.
Ao usar a tabela de status, observe os seguintes itens:
Vários LogHub Shippers podem compartilhar a mesma tabela de status.
Quando não ocorrem erros, cada contêiner do LogHub Shipper adiciona um registro à tabela de status a cada 5 minutos.
Quando ocorre um erro, mas o Tablestore ainda está disponível, o contêiner do LogHub Shipper adiciona imediatamente um registro à tabela de status.
Especifique um tempo de vida (TTL) no nível de dias para a tabela de status. Dessa forma, a tabela de status retém apenas dados recentes.
A tabela de status contém as seguintes quatro colunas de chave primária:
project_logstore: tipo String. O projeto e o Logstore do Log Service separados por barras verticais (|).
shard: tipo Integer. O número do shard no Log Service.
target_table: tipo String. O nome da tabela de dados que armazena os dados de log limpos e convertidos.
timestamp: tipo Integer. O momento em que um contêiner do LogHub Shipper adiciona um registro à tabela de status. O valor é um timestamp UNIX. Unidade: milissegundos.
As seguintes colunas de atributo registram o status da importação de dados. Todas as colunas de atributo de uma linha na tabela de status são opcionais e podem não existir.
shipper_id: tipo String. O ID de um contêiner do LogHub Shipper. Este é o nome do host do contêiner.
error_code: tipo String. O código de erro definido no Tablestore. Se não ocorrer nenhum erro, esta coluna de atributo não existirá. Para obter mais informações, consulte Error codes.
error_message: tipo String. A mensagem de erro específica retornada no Tablestore. Se não ocorrer nenhum erro, esta coluna de atributo não existirá.
failed_sample: tipo String. O log para o qual um erro foi relatado. O valor é uma string json.
__time__: tipo Integer. O valor máximo do campo __time__ dos dados de log que o contêiner do LogHub Shipper grava no Tablestore após a atualize mais recente da tabela de status pelo contêiner. Para obter mais informações, consulte Terms.
row_count: tipo Integer. O número de logs que o contêiner do LogHub Shipper grava no Tablestore após a atualize mais recente da tabela de status pelo contêiner.
cu_count: tipo Integer. O número de unidades de capacidade (CUs) que o contêiner do LogHub Shipper consome após a atualize mais recente da tabela de status pelo contêiner. Para obter mais informações, consulte Read/write throughput.
skip_count: tipo Integer. O número de logs que o contêiner do LogHub Shipper limpa após a atualize mais recente da tabela de status pelo contêiner.
skip_sample: tipo String. Um dos logs que o contêiner do LogHub Shipper descarta após a atualize mais recente da tabela de status pelo contêiner. O valor é uma string json. O log do contêiner registra cada log descartado e o motivo do descarte.
Configurações
Quando você criar o LogHub Shipper, especifique as seguintes variáveis de ambiente para o contêiner:
access_key_id e access_key_secret: o AccessKey ID e o segredo do AccessKey da conta Alibaba Cloud usada pelo LogHub Shipper.
-
loghub: as configurações do Log Service necessárias para o LogHub Shipper. O valor é um objeto json que consiste nos seguintes parâmetros:
endpoint
logstore
consumer_group
-
tablestore: as configurações do Tablestore necessárias para o LogHub Shipper. O valor é um objeto json que consiste nos seguintes parâmetros:
endpoint: o endpoint da região em que a instância do Tablestore está localizada.
instance: o nome da instância do Tablestore.
target_table: o nome da tabela de dados. A tabela de dados deve estar na instância especificada.
status_table: o nome da tabela de status. A tabela de status deve estar na instância especificada.
-
exclusive_columns: a lista de bloqueios de colunas de atributo. O valor é um array json que consiste em strings json.
Se você especifique a variável de ambiente, o LogHub Shipper não gravará os campos especificados na tabela de dados como colunas de atributo. Por exemplo, a tabela de dados contém a chave primária A. defina a variável de ambiente exclusive_columns como ["B", "C"] e suponha que um log contenha três campos: A, B e D. Então, uma linha é gravada na tabela de dados. A linha contém a chave primária A e a coluna de atributo D. O campo C não existe no log. Portanto, o LogHub Shipper não grava a coluna C na tabela de dados. O campo B existe no log, mas a coluna B está especificada como uma coluna exclusiva. Portanto, o LogHub Shipper não grava a coluna B na tabela de dados.
-
transform: uma conversão simples. O valor é um objeto json. A chave na variável é o nome da coluna na tabela de dados. A coluna pode ser uma coluna de chave primária. O valor é a expressão de conversão simples que o LogHub Shipper define com base nas seguintes regras:
Um campo de log é uma expressão.
Um inteiro sem sinal é uma expressão.
Uma string entre aspas duplas é uma expressão. As strings podem conter os caracteres de escape
\"e\\\\.-
( func arg... )também é uma expressão. Podem existir zero ou vários espaços ou tabulações antes e depois dos parênteses. Deve existir pelo menos um espaço entre func e o parâmetro que o segue, e entre parâmetros diferentes. Cada parâmetro deve ser uma expressão. O sistema oferece suporte às seguintes funções:->int: converte uma string em um inteiro. Esta função requer dois parâmetros. O primeiro parâmetro é a base, que pode ser de 2 a 36. O segundo parâmetro é a string que você deseja que o LogHub Shipper converta. A letra no segundo parâmetro não diferencia maiúsculas de minúsculas e indica um número maior que um número decimal de 10 a 35.->bool: converte uma string em um valor booleano. Esta função requer um parâmetro cujo valor é uma string que você deseja que o LogHub Shipper converta."true"corresponde ao valor verdadeiro e"false"corresponde ao valor falso. Outras strings são consideradas inválidas.crc32: calcula o CRC32 para uma string e retorna o resultado como um valor Integer. Esta função requer um parâmetro cujo valor é uma string que você deseja que o LogHub Shipper calcule.
Se um log estiver ausente ou ocorrer um erro durante a conversão, a coluna correspondente à chave será considerada uma coluna ausente. Se ocorrer um erro, o log do contêiner registrará os detalhes do erro.
A limpeza de dados segue apenas a seguinte regra: se uma coluna de chave primária estiver ausente, o LogHub Shipper limpará o log correspondente.