Com o recente lançamento do Operador autônomo do Couchbase (CAO) 2.2Recentemente, fornecemos Processamento e encaminhamento de registros para as implementações do Kubernetes usando a ferramenta OSS Fluent Bit. Isso também é OSS e disponível no GitHub ou como um contêiner.

Bit fluente começou como uma solução nativa de encaminhamento de logs para alvos incorporados, para que você possa reutilizar nossa solução Kubernetes para implantações no local ou mesmo aqueles que usam o Kubernetes sem o CAO também.

Esta postagem do blog o orientará sobre como fazer isso, juntamente com um pouco de conhecimento sobre os vários componentes envolvidos. Se você quiser apenas os detalhes, vá para a seção Encaminhamento de registros seção. Também há um exemplo totalmente funcional disponível neste repositório do GitHub.

O que é o Fluent Bit?

An architecture diagram of Fluent Bit being used for log processing

O Fluent Bit é uma solução OSS amplamente utilizada e de alto desempenho para lidar com o processamento e o transporte de seus logs. Se você ainda não tem uma solução de log centralizada, esta postagem demonstrará como você pode fornecê-la facilmente. Um exemplo específico é o encaminhamento de registros de auditoria para qualquer um dos metas suportadas fornecidas pelo Fluent Bit (por exemplo, S3).

O Fluent Bit é essencialmente um pipeline configurável que pode consumir vários tipos de entradaanalisar, filtrar ou transformá-los e, em seguida, enviá-los para vários destinos de saída incluindo coisas como S3, Splunk, Loki e Elasticsearch com o mínimo de esforço. Há muita documentação disponível que detalha como tudo isso funciona.

Fluent Bit being used for multiple output destinations

Ele é amplamente usado nas implantações do Kubernetes (por exemplo, o GKE e o AWS o implantam por padrão) como um conjunto de daemons o que significa apenas um aplicativo (o daemon) que você executa em todos os nós do Kubernetes que compõem o cluster. O Fluent Bit geralmente faz o tails dos vários logs de contêineres (a prática recomendada para contêineres é fazer o log no saída e o tempo de execução do contêiner envia isso para um arquivo rotacionado localmente) e oferece suporte ao encaminhamento deles do nó local para alguma ferramenta centralizada de gerenciamento de logs. Em vez de precisar implantar novos binários, tudo isso é gerenciado apenas por alterações de configuração.

O Fluent Bit transforma os registros em dados estruturados em um formato interno comum (MessagePackum formato JSON binário otimizado) para permitir que vários plug-ins trabalhem nele (por exemplo, para filtrar ou transformar algo com um plug-in genérico, você precisa que ele esteja em um formato comum) ou enviá-lo para uma saída específica no formato apropriado para esse endpoint. Para fazer isso, o Fluent Bit usa analisadores. No entanto, ele suporta apenas a leitura de toda a linha em um arquivo como um único par de valores-chave para simplificar a conversão e como uma alternativa se a análise falhar.

Solução de registro do Couchbase com Fluent Bit

Pegamos a solução OSS Fluent Bit e a estendemos para satisfazer algumas necessidades específicas do Couchbasecomo, por exemplo:

    • Oferecer suporte à alteração dinâmica da configuração sem reiniciar o Couchbase Server e acionar um rebalanceamento. Esse é um aspecto importante para o caso de uso do CAO, mas provavelmente menos importante no local.
    • Suporte à redação em voo e pré-processamento de relatórios de reequilíbrio.
    • Processar os vários arquivos de registro com uma abordagem comum.

Desses, o mais importante para implantações no local é lidar com os vários arquivos de registro.

Os arquivos de registro produzidos pelo Servidor Couchbase estão em vários formatos distintos e algumas das instruções de registro abrangem várias linhas, portanto, confiar no envio linha por linha não é o ideal. A maioria das ferramentas pode lidar com isso (por exemplo, o PromTail também pode analisar instruções de várias linhas), mas isso exigiria uma configuração específica, enquanto a nossa solução já resolve tudo isso.

Um conjunto básico de analisadores foi produzido para lidar com os vários registros e isso também foi contribuído para o projeto OSS Fluent Bit: A partir da versão 1.7.6+, os analisadores são disponível na imagem oficial e na instalação binária. Isso significa que tudo o que é apresentado aqui é totalmente OSS e pode ser usado sem nenhuma implantação específica do Couchbase.

Usando o Grafana, o Prometheus e o Loki

Grafana é uma plataforma de observabilidade de código aberto que pode lidar com várias fontes de dados para mostrar o que a sua plataforma está fazendo em tempo real, além de acionar alertas quando determinadas condições são atendidas. A mesma pilha pode incluir Prometeu para monitoramento de métricas e Loki para armazenamento e consulta de registros.

Para esta postagem do blog, estou usando essas tecnologias como um espaço reservado para uma plataforma de observabilidade centralizada equivalente que o Fluent Bit pode direcionar. É simples executá-la localmente como uma pilha de teste para fins de demonstração aqui. Separadamente, o Couchbase já fornece um Opção de monitoramento de métricas do Prometheus que também poderia ser integrado aqui da mesma forma.

As alternativas a essa pilha podem ser Splunk, Elasticsearch com Kibana ou soluções gerenciadas, como Amazon Cloudwatch ou Azure Log Analytics.

Como executar todas essas ferramentas no local

Esta seção fornecerá detalhes em estilo de tutorial sobre a execução de uma solução de encaminhamento de logs usando o Fluent Bit em uma implementação no local.

Observe que não há suporte oficial para a execução de uma solução de encaminhamento de logs com o Fluent Bit for Couchbase Server em uma implantação no local.

A recomendação é usar o Contêiner do Couchbase Fluent Bit (ou o oficial do Fluent Bit). No entanto, o Fluent Bit também pode ser instalado diretamente e a configuração fornecida pela imagem do Couchbase Fluent Bit pode ser reutilizada para obter a maioria, mas não todos, os mesmos efeitos.

Cada Plataforma suportada para o Couchbase Server 6.6.2+ pode executar contêineres. Consulte a documentação para instalar o tempo de execução do contêiner aqui. Certifique-se de habilitar o suporte para contêineres Linux em uma plataforma Windows.

Para os fins desta postagem do blog, usarei as versões em contêiner do Couchbase Server apenas para executar um cluster local e mostrarei como conectar o contêiner do Couchbase Fluent Bit aos seus registros. Um binário de servidor nativo também pode ser usado diretamente.

O contêiner do Couchbase Server é executado apenas como um exemplo para gerar os registros. Se você já tiver um servidor em execução, basta usar o diretório que ele tem para seus registros no diretório Seção Encaminhamento de logs. Da mesma forma, se você quiser usar o binário nativo do Couchbase Server, poderá fazê-lo.

Etapa 1: Implantação do servidor Couchbase

Ignore esta seção se já tiver uma instância implementada. Se for uma versão em contêiner, certifique-se de que o diretório de log esteja exposto por meio de um volume ou montagem de ligação no host (como fazemos no tutorial abaixo).

Siga as orientações para implementar um conjunto de um ou mais contêineres como um cluster do Couchbase, mas com um volume para os registros:

O principal aqui é garantir que os logs produzidos pelo Couchbase Server sejam expostos para que outro contêiner possa capturá-los; caso contrário, todos eles ficariam isolados dentro do contêiner. Para uma implantação binária nativa do Couchbase Server, ele estaria apenas gravando em um diretório no host, portanto isso não é necessário.

O servidor Couchbase A documentação detalha o local do diretório de registro.

Observe que isso usa um contêiner nomeado chamado db portanto, certifique-se de que ele ainda não exista, caso contrário, será gerado um erro devido ao conflito com docker rm db. Nosso comando acima limpa automaticamente o contêiner ao sair.

Agora, podemos verificar se os registros estão sendo criados em nosso diretório:

Para os fins desta implementação, não precisamos realmente configurar o cluster, mas é útil fazer isso para obter os registros e dados adequados. Siga as instruções na documentação oficial para configurar o cluster por meio da interface do usuário e importar alguns dados de amostra, se desejar.

Couchbase Server cluster configuration

Se quiser executar vários contêineres no mesmo nó para simular um cluster do Couchbase Server com vários nós, certifique-se de usar um diretório (ou volume) de log separado para cada contêiner. Em seguida, execute uma imagem do Couchbase Fluent Bit por contêiner do Couchbase Server montando cada diretório de acordo com a próxima seção sobre Encaminhamento de log.

Etapa 2: Encaminhamento de registros

A essência da postagem do blog está nesta seção: Como configurar os logs do Couchbase Server para serem processados e encaminhados pelo Couchbase Fluent Bit?

Depois de configurar o cluster e, opcionalmente, adicionar alguns buckets, dados de amostra etc., podemos executar o contêiner do Fluent Bit. Isso é bastante simples quando se usa a imagem do Fluent Bit do Couchbase:

Como você pode ver aqui, montamos nosso diretório local e o especificamos como uma variável de ambiente (para que você possa montá-lo em outro local no contêiner e simplesmente apontá-lo para ele). É assim que você o usa com um Couchbase Server implantado nativamente: Monte o diretório local para os logs no contêiner em vez do diretório temporário usado neste exemplo.

Consulte a documentação oficial do os detalhes específicos de onde o Couchbase Server armazena seus registros. Esse diretório base é o que precisaria ser montado na imagem do Couchbase Fluent Bit, conforme descrito acima. Esteja ciente dos problemas de permissões também.

O A documentação do repositório do Couchbase Fluent Bit especifica as várias opções de configuração e seus valores padrão. Observe que o local padrão para os logs a serem processados na versão 1.0.1 do Couchbase Fluent Bit da imagem é ligeiramente diferente daquele usado pelo Couchbase Server 6.6.2, portanto, nós o substituímos acima para usar o mesmo local em ambos. (Versões posteriores da imagem do Couchbase Fluent Bit se alinham com o local do Couchbase Server, mas introduzem outros recursos fora do escopo desta postagem).

Agora, o contêiner deve estar em execução e processando os logs do diretório que temos localmente para enviar ao seu fluxo de saída padrão por padrão. Com o Fluent Bit, podemos ver isso por meio de uma chamada para Registro de logs do docker que deve mostrar os logs sendo emitidos à medida que são atualizados:

Este é apenas um exemplo da saída que você pode ter.

Observe que cada arquivo de registro tem seu próprio fluxo usando uma tag Fluent Bit no formato: couchbase.log.. Isso permite que você execute diferentes processamentos ou roteamentos de logs individuais. Por exemplo, os logs de auditoria podem precisar ir para um endpoint específico diferente dos demais ou você pode querer filtrar as linhas de um determinado log. Você pode até mesmo combinar várias entradas ou a mesma entrada com saídas diferentes.

A execução do contêiner pode ser feita como parte de um script de inicialização com systemd ou similar, como seria o caso do Couchbase Server. O tempo de execução do contêiner também pode iniciar automaticamente os contêineres especificados todas as vezes.

Etapa 3: Visualização dos registros em tempo real no Grafana

A configuração padrão fornecida pelo contêiner é enviar todos os logs para uma saída padrão. No entanto, você pode fornecer seu próprio arquivo de configuração para fazer coisas diferentes sem nenhuma outra alteração. A capacidade de modificar o processamento e o encaminhamento de logs é apenas uma simples alteração de configuração, o que é um dos principais benefícios do Fluent Bit.

Para destacar isso, vamos executar uma versão local do Pilha Lokique é o Grafana mais o Loki para captura de registros (e o Prometheus para captura de métricas). Em seguida, configuraremos nosso contêiner para enviar logs ao Loki para que possamos visualizá-los graficamente no Grafana. A documentação do Loki e do Grafana apresenta maneiras alternativas de implantar a pilha do Loki, portanto, consulte a documentação vinculada acima para obter todos os detalhes.

A O exemplo de trabalho completo da seção abaixo é fornecido no repositório do Couchbase Fluent Bit no GitHub usando Docker Compose para executar os contêineres, todos configurados corretamente.

Certifique-se de interromper nosso contêiner de encaminhamento de logs configurado anteriormente. Você também pode executar outro; apenas certifique-se de dar a ele um nome diferente, como docker stop logger.

Agora, execute o Loki e o Grafana, certificando-se de expor as portas necessárias para cada um (3100 e 3000 respectivamente):

Você pode verificar se ambos foram iniciados corretamente com uma chamada para docker ps e ver os registros do Fluent Bit com uma chamada para Registros de docas.

Para dar suporte ao encaminhamento para o Loki, vamos obter o endereço IP do contêiner local que o está executando. Normalmente, você o implantaria em um host ou nome de serviço resolvível, mas, para a demonstração, estamos executando tudo como contêineres locais.

Se você executar docker inspeciona o loki ele produzirá uma série de informações sobre o contêiner, com uma seção para rede:

Para obter apenas o endereço IP, podemos formatar a consulta de acordo com a documentação oficial:

Na minha implantação, o endereço IP é 172.17.0.4, mas o seu pode ser diferente, portanto, substitua-o depois.

O exemplo fornecido no repositório também provisiona automaticamente o Grafana para usar o Loki, mas precisamos fazer isso manualmente aqui. Se você se conectar ao http://localhost:3000/login então você pode fazer login no Grafana como o usuário administrador usuário com o senha na variável de ambiente acima no comando de execução do contêiner do Grafana.

Agora precisamos adicionar o Loki como uma fonte de dados em: http://localhost:3000/datasources

Adding Loki as a data source with Fluent Bit

Configure a fonte de dados usando o endereço IP do contêiner do Loki e a porta 3100 conforme encaminhado quando executamos o contêiner pela primeira vez:

A data source connection for the Loki container

Etapa 4: Configuração personalizada

Agora que temos o Loki e o Grafana configurados corretamente, vamos criar uma nova configuração para que o nosso encaminhador de logs envie os logs para ele.

Como parte de nossa implantação do Couchbase Fluent Bit, dividimos várias seções da configuração em arquivos reutilizáveis para incluir, de modo que pudéssemos usar apenas um arquivo de duas linhas para isso, como este abaixo:

Esse arquivo agora inclui nossa configuração padrão existente mais um arquivo saída para Loki que não é usado por padrão, mas está incluído:

Como você pode ver, essa saída corresponde a todas as entradas e as envia para um host chamado loki. Para esta demonstração, usaremos o endereço IP específico do contêiner que está executando o Loki no arquivo de configuração:

Agora podemos executar o encaminhamento de logs novamente, mas usando essa configuração personalizada. Certifique-se de renomeá-la ou interromper a anterior:

Observe que também executamos tudo como um sistema de arquivos montado somente para leitura, de modo que não podemos modificar nada no contêiner - os logs brutos não são tocados.

Etapa 5: Visualização de nossos registros ao vivo

Agora os registros devem começar a ser enviados para o Loki e o Grafana. Você pode visualizá-los em: http://localhost:3000/explore?orgId=1&left=%5B%22now-1h%22,%22now%22,%22Loki%22,%7B%22expr%22:%22%7Bjob%3D%5C%22couchbase-fluentbit%5C%22%7D%22%7D%5D

Database logs viewed in Loki and Grafana

Agora você pode criar painéis e visualizar os registros diretamente ao vivo no Grafana.

Problemas conhecidos

Entrada fora de ordem

Você pode ver erros no registro do Fluent Bit como este ao enviar para o Loki:

Este é um conhecido problema com o Loki. Ele se baseia no recebimento de todos os fluxos em ordem, mas ao tentar multiplexar vários fluxos, e com o jitter da rede, às vezes isso não é possível. Normalmente, é melhor escolher fluxos específicos para enviar com plug-ins de saída separados do Loki e aplicar threads de trabalho para cada plug-in. Como esta postagem do blog usa o Loki apenas para demonstrar a saída de log, esse problema não será abordado aqui.

Novas versões do Couchbase Fluent Bit

Esta postagem do blog aborda a versão 1.0.1 da imagem do Couchbase Fluent Bit, que é a versão oficialmente compatível com o CAO 2.2. O Couchbase Autonomous Operator pode usar qualquer versão como um sidecar, incluindo imagens completamente diferentes, mas elas não seriam compatíveis com quaisquer problemas que surgissem.

As versões 1.0.2 e 1.0.3 da imagem incluem algumas integrações e aprimoramentos adicionais do Kubernetes, especialmente na integração com o Loki. Consulte as notas de versão para obter mais detalhes.

Infelizmente, algumas dessas alterações significam que variáveis de ambiente adicionais devem ser especificadas ao executar o contêiner (feito automaticamente como parte do CAO). Sem elas, o contêiner não será executado, indicando que estão faltando. Elas podem ser especificadas na linha de comando usando o comando -e key=value mostrada anteriormente. Isso será resolvido na próxima versão da imagem do Couchbase Fluent Bit em change K8S-2171.

Conclusão

Esperamos que isso lhe dê uma boa amostra de como você pode usar o encaminhamento de logs com o Couchbase Server e o Fluent Bit.

Já existem opções de monitoramento do Prometheus disponíveis para o Couchbase Server usando o Exportador do Couchbase Prometheus que pode ser integrado a essa mesma pilha do Grafana em um único painel de observabilidade. Os SDKs do Couchbase fornecem suporte de rastreamento com o Jaeger, que também pode ser integrado ao Grafana. Esses tópicos são objeto de postagens de blog existentes e futuras, portanto, fique atento.

 

Autor

Postado por Patrick Stephens, engenheiro de software sênior

Patrick Stephens é engenheiro de software sênior da Couchbase, com sede no Reino Unido.

Deixar uma resposta