Como personalizar registros do Stackdriver para o Kubernetes Engine com o Fluentd

Neste tutorial, descrevemos como personalizar a geração de registros do Fluentd em um cluster do Google Kubernetes Engine. Você aprenderá a hospedar seu próprio daemonset do Fluentd configurável para enviar registros ao Stackdriver em vez de selecionar a opção de registro na 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 Stackdriver. Supomos que você já tenha familiaridade com o Kubernetes.
  • Personalizar a geração de registros do GKE para remover dados confidenciais dos registros do Stackdriver.
  • Personalizar a geração de registros do GKE para adicionar eventos no nível do nó aos registros do Stackdriver

Custos

Neste tutorial, são usados componentes do Cloud Platform que podem ser cobrados, incluindo:

A Calculadora de preços estima o custo desse ambiente em cerca de US$ 1,14 por 8 horas.

Antes de começar

  1. Faça login na sua Conta do Google.

    Se você ainda não tiver uma, inscreva-se.

  2. Selecione ou crie um projeto do Google Cloud Platform.

    Acessar a página Gerenciar recursos

  3. Verifique se o faturamento foi ativado no projeto do Google Cloud Platform.

    Saiba como ativar o faturamento

  4. Ativar Google Kubernetes Engine, Compute Engine APIs.

    Ativar as APIs

Como inicializar variáveis comuns

É preciso definir diversas variáveis que controlam onde os elementos da infraestrutura serão implantados.

  1. Em um editor de texto, edite o script a seguir, substituindo [YOUR_PROJECT_ID] pelo o código do projeto. O script define a região como us-east-1. Se você fizer alguma alteração no script, verifique se os valores de zona referenciam a região especificada.

    region=us-east1
    zone=${region}-b
    project_id=[YOUR_PROJECT_ID]
    
  2. Acesse o Cloud Shell.

    Abrir o Cloud Shell

  3. Copie o script na janela do Cloud Shell e execute-o.

  4. 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

A menos que seja observado o contrário, você insere todos os comandos deste tutorial na linha de comando do computador ou no Cloud Shell.

  1. Clone o repositório de amostra. O repositório de amostra inclui os manifestos do Kubernetes referentes ao demonset do Fluentd e um programa de geração de registros de teste que você implantará:

    git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-customize-fluentd
    
  2. Altere o diretório de trabalho para o repositório clonado:

    cd kubernetes-engine-customize-fluentd
    
  3. Crie o cluster do GKE sem ativar a geração de registros em nuvem:

    gcloud beta container clusters create gke-with-custom-fluentd \
       --zone us-east1-b \
       --no-enable-cloud-logging \
       --tags=gke-cluster-with-customized-fluentd \
       --scopes=logging-write
    

Como implantar o aplicativo de teste que gera registros

Por padrão, o aplicativo de amostra que você implanta continuamente emite log statements aleatórios. O contêiner do Docker que ele usa está disponível em gcr.io/cloud-solutions-images/test-logger, e o código-fonte está incluído no subdiretório test-logger.

  1. Implante o aplicativo test-logger no cluster do GKE:

    kubectl apply -f kubernetes/test-logger.yaml
    
  2. Veja o status dos pods test-logger:

    kubectl get pods
    
  3. Repita esse comando até a saída ser semelhante à saída a seguir, com todos os três pods test-logger em execução:

    Saída de comando mostrando três pods em execução

Como implantar o daemonset do Fluentd no cluster

Em seguida, você configurará e implantará o daemonset do Fluentd.

  1. Implante a configuração do Fluentd:

    kubectl apply -f kubernetes/fluentd-configmap.yaml
    
  2. Implante o daemonset do Fluentd:

    kubectl apply -f kubernetes/fluentd-daemonset.yaml
    
  3. 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:

    Saída de comando mostrando três pods em execução

  4. Verifique se você está vendo registros no Stackdriver. No console, no menu à esquerda, clique em Stackdriver > Geração de registros > Registros e selecione Kubernetes Container na lista.

    Lista do Stackdriver mostrando dados não filtrados

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.

  1. Abra o arquivo kubernetes/fluentd-configmap.yaml em um editor.

  2. Remova os comentários entre as linhas e não inclua as linhas ### sample log scrubbing filters e ### end sample log scrubbing filters:

    ############################################################################################################
    #  ### sample log scrubbing filters
    #  #replace social security numbers
    # <filter reform.**>
    #   @type record_transformer
    #   enable_ruby true
    #   <record>
    #     log ${record["log"].gsub(/[0-9]{3}-*[0-9]{2}-*[0-9]{4}/,"xxx-xx-xxxx")}
    #   </record>
    # </filter>
    # # replace credit card numbers that appear in the logs
    # <filter reform.**>
    #   @type record_transformer
    #   enable_ruby true
    #   <record>
    #      log ${record["log"].gsub(/[0-9]{4} *[0-9]{4} *[0-9]{4} *[0-9]{4}/,"xxxx xxxx xxxx xxxx")}
    #   </record>
    # </filter>
    # # replace email addresses that appear in the logs
    # <filter reform.**>
    #   @type record_transformer
    #   enable_ruby true
    #   <record>
    #     log ${record["log"].gsub(/[\w+\-]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+/i,"user@email.tld")}
    #   </record>
    # </filter>
    # ### end sample log scrubbing filters
    #############################################################################################################
  3. Altere o nome do ConfigMap de fluentd-gcp-config para fluentd-gcp-config-filtered editando o campo metadata.name:

    name: fluentd-gcp-config
    namespace: kube-system
    labels:
      k8s-app: fluentd-gcp-custom
  4. Salve e feche o arquivo.

Como atualizar o daemonset do Fluentd para usar a nova configuração

Agora, altere kubernetes/fluentd-daemonset.yaml para ativar o ConfigMap fluentd-gcp-config-filtered em vez do fluentd-gcp-config.

  1. Abra o arquivo kubernetes/fluentd-daemonset.yaml em um editor.

  2. Altere o nome do ConfigMap de fluentd-gcp-config para fluentd-gcp-config-filtered editando o campo configMap.name:

    - configMap:
        defaultMode: 420
        name: fluentd-gcp-config
      name: config-volume
  3. Implante a nova versão do ConfigMap no cluster:

    kubectl apply -f kubernetes/fluentd-configmap.yaml
    
  4. Implante a nova versão do daemonset:

    kubectl apply -f kubernetes/fluentd-daemonset.yaml
  5. Implante a atualização e aguarde a conclusão:

    kubectl rollout status ds/fluentd-gcp-v3.2.0 --namespace=kube-system
    

    Saída de comando mostrando mensagens "Esperando" por 3 pods e depois êxito

  6. Quando a implantação estiver completa, atualize os registros do Stackdriver e verifique se o CPF ou o CNPJ, o número do cartão de crédito e o endereço de e-mail foram filtrados.

    Listagem do Stackdriver mostrando os mesmos dados, mas filtrados

Como registrar eventos no nível do nó

Se você quiser que os eventos que acontecem nos seus nós do GKE também sejam exibidos no Stackdriver, 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

Depois que tiver terminado o tutorial, você poderá limpar os recursos criados no GCP para não haver faturamento deles no futuro.

Como 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:

  1. No Console do GCP, acesse a página "Projetos".

    Acessar a página Projetos

  2. Na lista de projetos, selecione um e clique em Excluir projeto.
  3. Na caixa de diálogo, digite o código 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

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…