Estratégia de operação em paralelo
- Risco mínimo: ao operar os dois sistemas em paralelo, você mantém acesso aos dados e dashboards existentes enquanto valida o ClickStack e familiariza seus usuários com o novo sistema.
- Expiração natural dos dados: a maior parte dos dados de observabilidade tem um período de retenção limitado (normalmente 30 dias ou menos), o que permite uma transição natural à medida que os dados expiram no Elastic.
- Migração simplificada: não há necessidade de ferramentas ou processos complexos para transferir dados históricos entre os sistemas.
Migração de dadosDemonstramos uma abordagem para migrar dados essenciais do Elasticsearch para o ClickHouse na seção “Migração de dados”. Isso não deve ser usado com datasets maiores, pois raramente tem bom desempenho — fica limitado pela capacidade do Elasticsearch de exportar com eficiência, com suporte apenas ao formato JSON.
Etapas de implementação
Configure a ingestão dupla
Configure seu pipeline de coleta de dados para enviar dados ao Elastic e ao ClickStack simultaneamente.A forma de fazer isso depende dos agentes que você usa atualmente para coleta. Consulte “Migrating Agents”.Valide e compare
- Execute consultas em ambos os sistemas para garantir a consistência dos dados
- Compare o desempenho e os resultados das consultas
- Migre dashboards e alertas para o ClickStack. Atualmente, esse processo é manual.
- Verifique se todos os dashboards e alertas críticos funcionam como esperado no ClickStack
Transição gradual
- À medida que os dados expirarem naturalmente no Elastic, você passará a depender cada vez mais do ClickStack
- Depois de estabelecer confiança no ClickStack, você poderá começar a redirecionar consultas e dashboards
Retenção de longo prazo
- Continue executando os dois sistemas em paralelo até que todos os dados tenham expirado no Elastic
- Os recursos de armazenamento em camadas do ClickStack podem ajudar a gerenciar dados de longo prazo com eficiência.
- Considere usar visões materializadas para manter dados históricos agregados ou filtrados, ao mesmo tempo em que permite que os dados brutos expirem.
Cronograma de migração
- Retenção de 30 dias: a migração pode ser concluída em até um mês.
- Retenção mais longa: mantenha a operação em paralelo até que os dados expirem no Elastic.
- Dados históricos: se for absolutamente necessário, considere usar Migração de dados para importar dados históricos específicos.
Configurações de migração
Configurações recomendadas
- ClickHouse Cloud: Usa, por padrão, uma arquitetura de shard único com várias réplicas. O armazenamento e a capacidade de processamento escalam de forma independente, o que a torna ideal para casos de uso de observabilidade com padrões de ingestão imprevisíveis e cargas de trabalho com predominância de leitura.
- ClickHouse OSS: Em implantações autogerenciadas, recomendamos:
- Começar com um único shard
- Escalar verticalmente com CPU e RAM adicionais
- Usar armazenamento em camadas para estender o disco local com armazenamento de objetos compatível com S3
- Usar
ReplicatedMergeTreese alta disponibilidade for necessária - Para tolerância a falhas, 1 réplica do seu shard normalmente é suficiente em cargas de trabalho de observabilidade.
Quando fazer sharding
- Sua taxa de ingestão exceder a capacidade de um único nó (normalmente >500 mil linhas/s)
- Você precisar de isolamento de tenant ou separação regional dos dados
- Seu conjunto total de dados for grande demais para um único servidor, mesmo com armazenamento de objetos
Retenção e TTL
- Excluir automaticamente dados expirados
- Mover dados mais antigos para armazenamento de objetos para dados frios
- Reter apenas logs recentes, consultados com frequência, em disco rápido
Migração de dados
- Pequenas tabelas de referência usadas para enriquecimento de dados (por exemplo, mapeamentos de usuários, catálogos de serviços)
- Dados de negócios armazenados no Elasticsearch que precisam ser correlacionados com dados de observabilidade; os recursos SQL do ClickHouse e as integrações de inteligência de negócios facilitam a manutenção e a consulta desses dados em comparação com as opções de consulta mais limitadas do Elasticsearch.
- Dados de configuração que precisam ser preservados durante a migração
Migrar schema
Crie uma tabela no ClickHouse para o índice que está sendo migrado do Elasticsearch. Você pode mapear os tipos do Elasticsearch para seus equivalentes no ClickHouse. Como alternativa, você pode simplesmente usar o tipo de dado JSON no ClickHouse, que criará dinamicamente colunas do tipo apropriado à medida que os dados forem inseridos.Considere o seguinte mapeamento do Elasticsearch para um índice contendo dados desyslog:Mapeamento do Elasticsearch
Mapeamento do Elasticsearch
Schema do ClickHouse
Schema do ClickHouse
- Tuplas são usadas para representar estruturas aninhadas em vez da notação por ponto
- Use os tipos apropriados do ClickHouse com base no mapeamento:
keyword→Stringdate→DateTimeboolean→UInt8long→Int64ip→Array(Variant(IPv4, IPv6)). UsamosVariant(IPv4, IPv6)aqui, pois o campo contém uma combinação deIPv4eIPv6.object→JSONpara o objeto de syslog, cuja estrutura é imprevisível.
- As colunas
host.ipehost.macsão explicitamente do tipoArray, ao contrário do Elasticsearch, em que todos os tipos são arrays. - Uma cláusula
ORDER BYé adicionada com timestamp e hostname para consultas por tempo mais eficientes MergeTree, que é ideal para dados de log, é usado como tipo de engine
- Validação de dados – impor um esquema rígido evita o risco de explosão de colunas, exceto em estruturas específicas.
- Evita o risco de explosão de colunas: embora o tipo JSON possa escalar para potencialmente milhares de colunas, em que subcolunas são armazenadas como colunas dedicadas, isso pode levar a uma explosão no número de arquivos de coluna, em que uma quantidade excessiva desses arquivos é criada, impactando o desempenho. Para mitigar isso, o tipo Dynamic subjacente usado pelo JSON oferece um parâmetro
max_dynamic_paths, que limita o número de caminhos únicos armazenados como arquivos de coluna separados. Quando esse limite é atingido, os caminhos adicionais são armazenados em um arquivo de coluna compartilhado usando um formato compacto codificado, mantendo o desempenho e a eficiência de armazenamento, ao mesmo tempo em que oferece suporte à ingestão flexível de dados. No entanto, acessar esse arquivo de coluna compartilhado não oferece o mesmo desempenho. Observe, porém, que a coluna JSON pode ser usada com indicações de tipo. As colunas “com indicação de tipo” terão o mesmo desempenho que as colunas dedicadas. - Introspecção mais simples de caminhos e tipos: embora o tipo JSON ofereça funções de introspecção para determinar os tipos e caminhos inferidos, estruturas estáticas podem ser mais fáceis de examinar, por exemplo, com
DESCRIBE.
Como alternativa, você pode simplesmente criar uma tabela com uma coluna
JSON.Fornecemos uma indicação de tipo para as colunas
host.name e timestamp na definição JSON, pois as usamos na ordenação/chave primária. Isso ajuda o ClickHouse a saber que essas colunas não serão NULL e garante que ele saiba quais subcolunas usar (pode haver várias para cada tipo, então, sem isso, ficaria ambíguo).JSON apenas para subestruturas dinâmicas quando necessário.Para mais detalhes sobre o uso do tipo JSON em schemas e como aplicá-lo de forma eficiente, recomendamos o guia “Designing your schema”.Instale o elasticdump
Recomendamos o elasticdump para exportar dados do Elasticsearch. Essa ferramenta requer node e deve ser instalada em uma máquina com conectividade de rede com o Elasticsearch e o ClickHouse. Recomendamos um servidor dedicado com pelo menos 4 núcleos e 16 GB de RAM para a maioria das exportações.elasticdump oferece várias vantagens para a migração de dados:- Interage diretamente com a API REST do Elasticsearch, garantindo a exportação correta dos dados.
- Mantém a consistência dos dados durante o processo de exportação usando a API Point-in-Time (PIT) — isso cria um snapshot consistente dos dados em um ponto específico no tempo.
- Exporta os dados diretamente no formato JSON, que pode ser transmitido em streaming para o ClickHouse client para inserção.
elastic dump na mesma zona de disponibilidade ou no mesmo data center para minimizar o tráfego de saída de rede e maximizar o throughput.Instale o cliente do ClickHouse
Certifique-se de que o ClickHouse esteja instalado no servidor em que oelasticdump está localizado. Não inicie o servidor do ClickHouse - estas etapas exigem apenas o cliente.Transferir dados por streaming
Para transferir dados por streaming entre o Elasticsearch e o ClickHouse, use o comandoelasticdump, direcionando a saída diretamente para o cliente do ClickHouse. O exemplo a seguir insere os dados em nossa tabela bem estruturada logs_system_syslog.elasticdump:type=data- limita a resposta apenas ao conteúdo do documento no Elasticsearch.input-index- nosso índice de entrada no Elasticsearch.output=$- redireciona todos os resultados para stdout.- flag
sourceOnly, que garante a omissão dos campos de metadados na resposta. - flag
searchAfterpara usar asearchAfterAPI para paginação eficiente dos resultados. pit=truepara garantir resultados consistentes entre consultas usando a point in time API.
Nossos parâmetros do cliente ClickHouse aqui (além das credenciais):
max_insert_block_size=1000- o cliente ClickHouse enviará os dados quando esse número de linhas for atingido. Aumentar esse valor melhora a vazão, à custa do tempo necessário para formar um bloco — aumentando, assim, o tempo até os dados aparecerem no ClickHouse.min_insert_block_size_bytes=0- desativa o squashing de blocos no servidor por bytes.min_insert_block_size_rows=1000- faz o squashing dos blocos dos clientes no lado do servidor. Nesse caso, definimos o mesmo valor demax_insert_block_sizepara que as linhas apareçam imediatamente. Aumente esse valor para melhorar a vazão.query="INSERT INTO logs_system_syslog FORMAT JSONAsRow"- insere os dados no formato JSONEachRow. Isso é apropriado ao enviar para um schema bem definido, comologs_system_syslog.
Você pode esperar uma vazão na ordem de milhares de linhas por segundo.
Inserindo em uma única coluna JSONAo inserir em uma única coluna JSON (veja o schema Consulte “Reading JSON as an object” para mais detalhes.
syslog_json acima), o mesmo comando de insert pode ser usado. No entanto, você deve especificar JSONAsObject como format em vez de JSONEachRow, por exemplo.Transformar dados (opcional)
Os comandos acima presumem um mapeamento 1:1 dos campos do Elasticsearch para colunas do ClickHouse. Os usuários geralmente precisam filtrar e transformar dados do Elasticsearch antes da inserção no ClickHouse.Isso pode ser feito usando a função de tabelainput, que permite executar qualquer consulta SELECT na saída padrão.Suponha que queiramos armazenar apenas os campos timestamp e hostname dos dados anteriores. O esquema do ClickHouse:elasticdump nesta tabela, podemos simplesmente usar a table function input, usando o tipo JSON para detectar dinamicamente e selecionar as colunas necessárias. Observe que esta consulta SELECT pode facilmente conter um filtro.@timestamp e usar o formato de entrada JSONAsObject.