O C Producer é uma biblioteca de coleta de logs que o Simple Log Service oferece para dispositivos de Internet das Coisas (IoT) e embarcados. Ele coleta logs em dispositivos com recursos de hardware limitados, mantém uma cópia do conteúdo dos logs no dispositivo para depuração e envia os dados coletados ao Simple Log Service para consulta e análise.
O C Producer é executado no dispositivo e envia os dados de log coletados ao Simple Log Service pela rede. A figura a seguir ilustra a solução de coleta de dados de log para dispositivos IoT.

Requisitos de desenvolvimento embarcado
Engenheiros de IoT ou sistemas embarcados precisam de habilidades avançadas de desenvolvimento. Ao operar uma frota massiva de dispositivos, a capacidade de gerenciar, monitorar e diagnosticar dispositivos do tipo caixa preta torna-se igualmente essencial. O desenvolvimento embarcado apresenta os seguintes requisitos principais de log:
Coleta de dados — Como coletar dados em tempo real de milhões ou dezenas de milhões de dispositivos distribuídos globalmente?
Depuração — Como utilizar uma única solução tanto para coleta de dados online quanto para depuração em tempo real durante o desenvolvimento?
Diagnóstico online — Quando um dispositivo em produção reporta um erro, como localizá-lo rapidamente e visualizar o contexto que originou a falha?
Monitoramento — Quantos dispositivos estão online neste momento? Como se distribuem seus estados operacionais e localizações geográficas? Como obter alertas em tempo real sobre dispositivos com defeito?
-
Análise de dados em tempo real — Como integrar os dados gerados pelos dispositivos a sistemas de computação em tempo real e data warehouses de big data para criar perfis de usuários?

Principais desafios no campo de IoT
A adoção de IoT cresce rapidamente, e cada vez mais dispositivos entram no cotidiano, como roteadores inteligentes, dongles para TV, Tmall Genie e aspiradores robô. Esses equipamentos trazem a conveniência da tecnologia inteligente, mas o modelo tradicional de desenvolvimento de software embarcado não se adapta bem a eles, e as soluções convencionais de logging não atendem aos seus requisitos.
Praticamente nenhum método eficaz para software tradicional funciona no cenário de IoT. Os principais desafios decorrem das seguintes características dos dispositivos IoT:
Grande volume de dispositivos — Na operação e manutenção tradicional, uma empresa que gerencia 10.000 servidores já é considerada de grande porte. Para dispositivos IoT, 100.000 unidades online representam apenas um patamar inicial.
Ampla distribuição geográfica — Após a implantação do hardware, os dispositivos frequentemente se espalham por todo um país ou até pelo mundo inteiro.
Caixa preta — É difícil acessar e depurar esses dispositivos remotamente; na maioria das vezes, seu estado permanece desconhecido.
Recursos limitados — Para controlar custos, dispositivos IoT vêm com hardware restrito, como apenas 32 MB de memória total. Técnicas que funcionam em PCs geralmente falham nesse ambiente.
C Producer
O C Producer é uma versão leve do Logtail, o cliente do Simple Log Service. Ele herda a estabilidade, o alto desempenho e o baixo consumo de recursos do Logtail, porém não oferece mecanismo de gerenciamento de configuração em tempo real.
Uma aplicação pode criar múltiplos Producers, e cada Producer pode conter vários Clients. Cada Client possui seu próprio endereço de destino, nível de log, chave de depuração local, tamanho de cache, ID personalizado e tópico.
Recursos do C Producer
O C Producer oferece os seguintes recursos para coleta de logs em dispositivos IoT e embarcados:
Multitenancy — Processe diversos tipos de log, como Metric, DebugLog e ErrorLog, com prioridades distintas. Configure também múltiplos Clients, cada um com sua própria prioridade de coleta, projeto de destino e LogStore. O C Producer envia primeiro os logs do Client com maior prioridade.
Consulta contextual — Logs provenientes do mesmo Client pertencem ao mesmo contexto, permitindo visualizar os registros anteriores e posteriores a um log específico.
Envio simultâneo e upload retomável — Defina um limite máximo para o cache. Ao atingir esse limite, novas gravações de log falham.
Gravação de alta concorrência no cliente — O pool de threads de envio é configurável e suporta a escrita de centenas de milhares de logs por segundo. Para métricas de throughput e uso de recursos em hardware de classe servidor e dispositivos restritos, consulte Testes de desempenho.
Envio direto pela rede — Os logs do Client não são gravados em disco. Após a geração, os dados seguem diretamente ao servidor via rede.
Separação entre computação e I/O — O C Producer grava logs de forma assíncrona no cliente, evitando que as escritas bloqueiem as threads de trabalho.
Baixo consumo de recursos — Em hardware de baixo desempenho, como um Raspberry Pi, a geração de 100 logs por segundo praticamente não impacta os recursos. O C Producer também fornece os seguintes recursos exclusivos para dispositivos IoT:
Depuração local — O C Producer grava o conteúdo dos logs no dispositivo local, com configurações de rotação, quantidade de logs e tamanho de rotação. Ative a depuração local para testar sua aplicação no dispositivo quando não houver conexão de rede disponível.
Controle granular de recursos — Defina limites de cache e métodos de agregação separados para cada tipo de dado ou log.
-
Cache de logs compactados — O C Producer compacta os dados cuja transmissão falhou antes de armazená-los em cache, reduzindo o uso de memória no dispositivo.

O C Producer cuida dos detalhes de implementação da coleta de logs. Não é necessário implementar lógica de coleta na sua aplicação, e a coleta de logs não afeta a operação normal do seu negócio.

Download e integração
Baixe a biblioteca C Producer no GitHub.
Para obter o método detalhado de instalação e o procedimento de integração, consulte o arquivo README no repositório.

C Producer com Simple Log Service
O C Producer e o Alibaba Cloud Simple Log Service formam uma solução de logging ponta a ponta para dispositivos IoT. O C Producer coleta logs no dispositivo e os envia ao Simple Log Service, onde ficam disponíveis para consumo, consulta, análise e visualização. A solução apresenta as seguintes características:
Grande escala — O Simple Log Service suporta gravações em tempo real de centenas de milhões de clientes, com volume de dados na ordem de PB/dia.
Coleta rápida — Os dados podem ser consumidos assim que gravados, tornando-se visíveis no servidor em segundos.
Consultas velozes — Uma consulta complexa com cinco condições processa bilhões de registros de dados em menos de um segundo.
Análise ágil — Análises complexas com agregação em cinco dimensões e GroupBy processam centenas de milhões de registros em até um segundo.
Integração abrangente — O Simple Log Service integra-se a serviços da Alibaba Cloud e funciona com sistemas de armazenamento, computação e visualização em diversos formatos open source. O Simple Log Service oferece as seguintes funções para os logs de dispositivos coletados:
LogHub — Coleta e consumo de logs em tempo real.
Search/Analytics — Consulta e análise em tempo real.
Interconexão — Suporte a Grafana e JDBC/SQL92.
-
Visualização — Funções de painel e relatórios.

Outras soluções de coleta do Simple Log Service
O Logtail, cliente do Simple Log Service, é executado em milhões de servidores X86. Para embasamento técnico, consulte os seguintes artigos sobre o Logtail: , . O Simple Log Service também disponibiliza outras soluções de coleta:
Mobile SDK — Coleta dados nas plataformas Android e iOS, atendendo atualmente dezenas de milhões de DAU por dia.
Web Tracking (JS) — Método leve de coleta que não exige assinatura. Para servidores X86, utilize o Logtail. Para aplicações Android e iOS, use o Mobile SDK. Para dispositivos IoT e embarcados, opte pelo C Producer.

Comparação com outras soluções de coleta embarcada
A tabela a seguir compara o C Producer com outras soluções de coleta para ambientes embarcados.
|
Categoria |
Item de comparação |
C Producer |
Outras soluções embarcadas |
|
Programação |
Plataforma |
Móvel e embarcada |
Principalmente móvel |
|
Programação |
Contexto |
Suportado |
Não suportado |
|
Programação |
Múltiplos tipos de log |
Suportado |
Não suportado (apenas um tipo de log) |
|
Programação |
Formato personalizado |
Suportado |
Não suportado (conjunto limitado de campos) |
|
Programação |
Prioridade |
Suportada |
Não suportada |
|
Programação |
Parâmetros de ambiente |
Configuráveis |
Configuráveis |
|
Estabilidade |
Concorrência |
Alta |
Média |
|
Estabilidade |
Algoritmo de compressão |
LZ4 (equilíbrio entre eficiência e desempenho) + GZIP |
Otimizado |
|
Estabilidade |
Baixo consumo de recursos |
Otimizado |
Médio |
|
Transmissão |
Upload retomável |
Suportado |
Não suportado por padrão, exige desenvolvimento personalizado |
|
Transmissão |
Ponto de acesso |
8 (China) + 8 (Global) |
Hangzhou |
|
Depuração |
Logs locais |
Suportado |
Suportado manualmente |
|
Depuração |
Configurações de parâmetros |
Suportadas |
Não suportadas |
|
Tempestividade |
Visibilidade no servidor |
1 segundo (99,9%), 3 segundos (máx.) |
1 a 2 horas |
|
Processamento personalizado |
Métodos de integração |
Mais de 15 métodos de integração |
Soluções personalizadas em tempo real e offline |
Testes de desempenho
O C Producer foi testado em dois ambientes. Utilize os resultados X86 como referência para hardware de classe servidor e os resultados do Raspberry Pi como referência para dispositivos com recursos restritos.
Configuração do ambiente
Cenário de alto desempenho: servidor X86 tradicional.
Cenário de baixo desempenho: Raspberry Pi em ambiente de baixa potência. A figura a seguir mostra as configurações de ambos os ambientes.

Configuração do C Producer
-
ARM (Raspberry Pi)
Cache: 10 MB
Tempo de agregação: 3 segundos (o C Producer empacota e envia os dados agregados assim que o tempo de agregação, o tamanho do pacote agregado ou a contagem de logs agregados é atingida)
Tamanho do pacote de dados agregados: 1 MB
Contagem de logs agregados: 1000
Threads de envio: 1
Tags personalizadas: 5
-
X86Amostra de log
Cache: 10 MB
Tempo de agregação: 3 segundos (o C Producer empacota e envia os dados agregados assim que o tempo de agregação, o tamanho do pacote agregado ou a contagem de logs agregados é atingida)
Tamanho do pacote de dados agregados: 3 MB
Contagem de logs agregados: 4096
Threads de envio: 4
Tags personalizadas: 5
(nove pares chave-valor, com volume de dados de aproximadamente 350 bytes)
__source__: 192.0.2.1
__tag__:1: 2
__tag__:5: 6
__tag__:a: b
__tag__:c: d
__tag__:tag_key: tag_value
__topic__: topic_test
_file_: /disk1/workspace/tools/aliyun-log-c-sdk/sample/log_producer_sample.c
_function_: log_producer_post_logs
_level_: LOG_PRODUCER_LEVEL_WARN
_line_: 248
_thread_: 40978304
Resultados dos testes
-
Resultados na plataforma X86
O C Producer atinge velocidade de envio de 90 MB/s. Faz upload de 200.000 logs por segundo, utilizando 70% da CPU e 140 MB de memória.
Com 200 logs por segundo, o envio de dados praticamente não impacta a CPU do servidor, caindo para menos de 0,01%.
Uma thread de cliente leva, em média, 1,2 microssegundos para enviar um dado, ou seja, para gravar um log.

-
Resultados na plataforma Raspberry Pi
No teste com Raspberry Pi, a frequência da CPU é de apenas 600 MHz, resultando em desempenho cerca de 1/10 do servidor. O dispositivo envia no máximo 20.000 logs por segundo.
Com 20 logs por segundo, o envio de dados praticamente não impacta a CPU do Raspberry Pi, caindo para menos de 0,01%.
Uma thread de cliente leva cerca de 12 microssegundos, em média, para enviar um dado, ou seja, para gravar um log. O Raspberry Pi conecta-se a um PC via USB e compartilha a rede desse PC.
