Neste tutorial, você verá como personalizar a geração de registros do Fluentd (em inglês) em um cluster do Google Kubernetes Engine. Você aprenderá a hospedar o próprio daemonset configurável do Fluentd para enviar registros ao Cloud Logging, em vez de selecionar a opção de geração de registros em nuvem ao criar o cluster do Google Kubernetes Engine (GKE), que não permite a configuração do daemon do Fluentd.
Objetivos
- Implantar o próprio daemonset do Fluentd em um cluster do Google Kubernetes Engine configurado para registrar dados no Cloud Logging (em inglês). Supomos que você já esteja familiarizado com o Kubernetes.
- Personalizar a geração de registros do GKE para remover dados confidenciais dos registros do Cloud Logging.
- Personalizar a geração de registros do GKE para adicionar eventos no nível do nó aos registros do Cloud Logging.
Custos
Neste tutorial, há componentes faturáveis do Google Cloud, entre eles:
- um cluster do Google Kubernetes Engine com três nós.
A Calculadora de preços estima o custo desse ambiente em cerca de US$ 1,14 por 8 horas.
Antes de começar
- Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
-
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Ative as APIs Google Kubernetes Engine, Compute Engine.
-
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
Ative as APIs Google Kubernetes Engine, Compute Engine.
Como inicializar variáveis comuns
É preciso definir diversas variáveis que controlam onde os elementos da infraestrutura serão implantados.
Em um editor de texto, edite o script a seguir, substituindo
[YOUR_PROJECT_ID]
pelo código do projeto. O script define a região comous-east-1
. Se você fizer alguma alteração no script, verifique se os valores de zona referenciam a região especificada.export region=us-east1 export zone=${region}-b export project_id=[YOUR_PROJECT_ID]
Acesse o Cloud Shell.
Copie o script na janela do Cloud Shell e execute-o.
Execute os seguintes comandos para definir a zona padrão e o ID do projeto. Dessa maneira, você não precisa especificar esses valores em cada comando subsequente:
gcloud config set compute/zone ${zone} gcloud config set project ${project_id}
Como criar o cluster do GKE
No Cloud Shell, clone o repositório de amostra:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-customize-fluentd
O repositório de amostra inclui os manifestos do Kubernetes para o daemonset do Fluentd e um programa de geração de registros de teste que você implantará mais tarde neste tutorial.
Altere o diretório de trabalho para o repositório clonado:
cd kubernetes-engine-customize-fluentd
Crie o cluster do GKE somente com a geração de registros e o monitoramento do sistema:
gcloud container clusters create gke-with-custom-fluentd \ --zone us-east1-b \ --logging=SYSTEM \ --tags=gke-cluster-with-customized-fluentd \ --scopes=logging-write,storage-rw
Como implantar o aplicativo de teste que gera registros
Por padrão, o aplicativo de amostra que você implanta emite log statements aleatórios continuamente. O contêiner do Docker é criado a partir
do código-fonte no subdiretório test-logger
.
No Cloud Shell, crie a imagem do contêiner
test-logger
:docker build -t test-logger test-logger
Inclua tags no contêiner antes de enviá-lo para o registro:
docker tag test-logger gcr.io/${project_id}/test-logger
Envie a imagem do contêiner:
docker push gcr.io/${project_id}/test-logger
Atualize o arquivo de implantação:
envsubst < kubernetes/test-logger.yaml > kubernetes/test-logger-deploy.yaml
Implante o aplicativo
test-logger
no cluster do GKE:kubectl apply -f kubernetes/test-logger-deploy.yaml
Visualize o status dos pods
test-logger
:kubectl get pods
Repita esse comando até que a resposta tenha a seguinte aparência, com todos os três pods
test-logger
em execução:
Como implantar o daemonset do Fluentd no cluster
Em seguida, você fará a configuração e a implantação do daemonset do Fluentd.
No Cloud Shell, implante a configuração do Fluentd:
kubectl apply -f kubernetes/fluentd-configmap.yaml
Implante o daemonset do Fluentd:
kubectl apply -f kubernetes/fluentd-daemonset.yaml
Verifique se os pods do Fluentd foram iniciados:
kubectl get pods --namespace=kube-system
Se eles estiverem funcionando, você verá uma saída como a seguinte:
Confirme se você vê registros no Logging. No console, no lado esquerdo, selecione Logging > Explorer de registros e selecione Kubernetes Container como um tipo de recurso na lista Recurso.
Clique em Run.
No Explorador de campo de registros, selecione test-logger para CONTAINER_NAME:
Como filtrar informações do arquivo de registro
A próxima etapa é especificar que o Fluentd precisa filtrar determinados dados, de maneira que eles não sejam registrados. Para este tutorial, você filtra os CPFs ou os CNPJs, os números de cartão de crédito e os endereços de e-mail. Para fazer essa atualização, você altera o daemonset para usar um ConfigMap diferente que contém esses filtros. Você usa o recurso de atualizações contínuas do Kubernetes e preserva a versão anterior do ConfigMap.
Abra o arquivo
kubernetes/fluentd-configmap.yaml
em um editor.Remova a marca de comentário das linhas e não inclua as linhas
### sample log scrubbing filters
e### end sample log scrubbing filters
:Altere o nome do ConfigMap de
fluentd-gcp-config
parafluentd-gcp-config-filtered
editando o campometadata.name
:Salve e feche o arquivo.
Como atualizar o daemonset do Fluentd para usar a nova configuração
Altere kubernetes/fluentd-daemonset.yaml
para ativar o ConfigMap fluentd-gcp-config-filtered
, em vez de fluentd-gcp-config
.
Abra o arquivo
kubernetes/fluentd-daemonset.yaml
em um editor.Altere o nome do ConfigMap de
fluentd-gcp-config
parafluentd-gcp-config-filtered
editando o campoconfigMap.name
:Implante a nova versão do ConfigMap no cluster:
kubectl apply -f kubernetes/fluentd-configmap.yaml
Implante a nova versão do daemonset:
kubectl apply -f kubernetes/fluentd-daemonset.yaml
Implante a atualização e aguarde até ser concluída:
kubectl rollout status ds/fluentd-gcp --namespace=kube-system
Quando a implantação for concluída, atualize os registros do Logging e verifique se os dados de CPF ou CNPJ, número de cartão de crédito e endereço de e-mail foram removidos pelo filtro.
Como registrar eventos no nível do nó
Para que os eventos ocorridos nos nós do GKE também sejam mostrados no Logging, adicione as seguintes linhas ao ConfigMap e siga as instruções descritas na última seção:
<source> @type systemd filters [{ "SYSLOG_IDENTIFIER": "sshd" }] pos_file /var/log/journal/gcp-journald-ssh.pos read_from_head true tag sshd </source> <source> @type systemd filters [{ "SYSLOG_IDENTIFIER": "sudo" }] pos_file /var/log/journal/gcp-journald-sudo.pos read_from_head true tag sudo </source>
Limpeza
Após concluir este tutorial, é possível limpar os recursos que você criou no Google Cloud para que não sejam faturados no futuro.
Excluir o projeto
O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.
Para excluir o projeto:
- No Console do Google Cloud, acesse a página Gerenciar recursos.
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
- Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.
Como excluir o cluster do GKE
Se você não quiser excluir o projeto todo, execute o seguinte comando para excluir o cluster do GKE:
gcloud container clusters delete gke-with-custom-fluentd --zone us-east1-b
A seguir
- Analise a documentação do Fluentd mais detalhadamente.
- Analise a documentação do Google Kubernetes Engine mais detalhadamente.
- Confira arquiteturas de referência, diagramas e práticas recomendadas do Google Cloud. Confira o Centro de arquitetura do Cloud.