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ê aprende a hospedar o próprio daemonset do Fluentd configurável para enviar registros ao Stackdriver, em vez de selecionar a opção de geração de registros em nuvem ao criar o cluster do Kubernetes Engine, 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 Google 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.

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

    Acessar a página Gerenciar recursos

  3. Verifique se o faturamento foi ativado para o projeto.

    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 código 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 a conta de serviço do cluster

A próxima etapa é criar uma conta de serviço para a geração de registros e uma chave para essa conta, que você usará para desenvolver o cluster do GKE. A conta de serviço será o Application Default Credentials do agente do Fluentd em execução no daemonset implantado abaixo.

  1. Crie a conta de serviço:

    gcloud iam service-accounts create cluster-service-account \
        --display-name "cluster-service-account"
    

  2. Adicione o papel logging.logWriter à conta de serviço:

    gcloud projects add-iam-policy-binding ${project_id} \
        --member serviceAccount:cluster-service-account@${project_id}.iam.gserviceaccount.com \
        --role roles/logging.logWriter
    

  3. Adicione o papel monitoring.metricWriter à conta de serviço:

    gcloud projects add-iam-policy-binding ${project_id} \
       --member serviceAccount:cluster-service-account@${project_id}.iam.gserviceaccount.com \
       --role roles/monitoring.metricWriter
    

  4. Adicione o papel container.admin à conta de serviço:

    gcloud projects add-iam-policy-binding ${project_id} \
       --member serviceAccount:cluster-service-account@${project_id}.iam.gserviceaccount.com \
       --role roles/container.admin
    

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/container-engine-customize-fluentd
    

  2. Altere o diretório de trabalho para o repositório clonado:

    cd container-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 \
        --service-account=cluster-service-account@${project_id}.iam.gserviceaccount.com \
        --zone us-east1-b \
        --no-enable-cloud-logging \
        --tags=gke-cluster-with-customized-fluentd
    

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 que ele usa está disponível em gcr.io/cloud-solutions-images/test-logger, e o código-fonte está incluído em

  1. pods do 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 e selecione Cluster GKE 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

O arquivo kubernetes/fluentd-daemonset-filtered.yaml monta o ConfigMap fluentd-gcp-config-filtered, vez de fluentd-gcp-config.

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

    kubectl apply -f kubernetes/fluentd-configmap.yaml
    

  2. Implante a nova versão do daemonset:

    kubectl apply -f kubernetes/fluentd-daemonset-filtered.yaml

  3. Implante a atualização e aguarde a conclusão:

    kubectl rollout status ds/fluentd-gcp-v2.0 --namespace=kube-system
    

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

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

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

A maneira mais fácil de evitar a cobrança é excluir o projeto criado 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 todo o projeto, execute o seguinte comando para remover o cluster do GKE:

gcloud container clusters delete gke-with-custom-fluentd

Como excluir a conta de serviço

Para excluir apenas a conta de serviço, execute o seguinte comando:

gcloud projects remove-iam-policy-binding ${project_id} \
    --member serviceAccount:cluster-service-account@${project_id}.iam.gserviceaccount.com \
    --role roles/logging.logWriter

gcloud projects remove-iam-policy-binding ${project_id} \
    --member serviceAccount:cluster-service-account@${project_id}.iam.gserviceaccount.com \
    --role roles/monitoring.metricWriter

gcloud projects remove-iam-policy-binding ${project_id} \
    --member serviceAccount:cluster-service-account@${project_id}.iam.gserviceaccount.com \
    --role roles/container.admin

gcloud iam service-accounts delete \
    "cluster-service-account@${project_id}.iam.gserviceaccount.com"

Próximas etapas

  • Analise a documentação do Fluentd mais detalhadamente.
  • Analise a documentação do Google Kubernetes Engine mais detalhadamente.
  • Teste outros recursos do Google Cloud Platform. Veja nossos tutoriais.
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…