Personaliza registros de Stackdriver para Kubernetes Engine con Fluentd

En este instructivo, se describe cómo personalizar los registros de Fluentd para un clúster de Google Kubernetes Engine. Aprenderás a alojar tu propio daemonset configurable de Fluentd para enviar registros a Stackdriver, en lugar de seleccionar la opción de registro en la nube cuando creas un clúster de Kubernetes Engine, que no permite la configuración del daemon de Fluentd.

Objetivos

  • Implementar tu propio daemonset de Fluentd en un clúster de Google Kubernetes Engine configurado para registrar datos en Google Stackdriver. Suponemos que ya conoces Kubernetes.
  • Personalizar el registro de GKE para quitar datos sensibles de los registros de Stackdriver

Costos

En este instructivo, se usan componentes facturables de Cloud Platform, incluidos los siguientes:

La Calculadora de precios estima que el costo de este entorno es de alrededor de $1.14 por 8 horas.

Antes de comenzar

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. Selecciona o crea un proyecto de GCP.

    Ir a la página Administrar recursos

  3. Asegúrate de tener habilitada la facturación para tu proyecto.

    Aprende a habilitar la facturación

  4. Habilita las Google Kubernetes Engine, Compute Engine API necesarias.

    Habilita las API

Inicializa variables comunes

Debes definir muchas variables que controlen dónde se implementarán los elementos de la infraestructura.

  1. Con un editor de texto, edita la secuencia de comandos siguiente y sustituye tu ID del proyecto por [YOUR_PROJECT_ID]. La secuencia de comandos establece la región en us-east-1. Si realizas cambios a la secuencia de comandos, asegúrate de que los valores de zona hagan referencia a la región que especificas.

    region=us-east1
    zone=${region}-b
    project_id=[YOUR_PROJECT_ID]
    
  2. Dirígete a Cloud Shell.

    Abrir Cloud Shell

  3. Copia la secuencia de comandos en tu ventana de Cloud Shell y ejecútala.

  4. Ejecuta los comandos siguientes para establecer la zona predeterminada y el ID del proyecto a fin de que no tengas que especificar estos valores en cada comando posterior:

    gcloud config set compute/zone ${zone}
    gcloud config set project ${project_id}
    

Crea la cuenta de servicio del clúster

El paso próximo es crear una cuenta de servicio de registro y una clave para esa cuenta de servicio que usarás a fin de crear el clúster de GKE. La cuenta de servicio será la credencial predeterminada de la aplicación para el agente de Fluentd que se ejecuta en el daemonset implementado abajo.

  1. Crea la cuenta de servicio:

    gcloud iam service-accounts create cluster-service-account \
        --display-name "cluster-service-account"
    
  2. Agrega la función logging.logWriter a la cuenta de servicio:

    gcloud projects add-iam-policy-binding ${project_id} \
        --member serviceAccount:cluster-service-account@${project_id}.iam.gserviceaccount.com \
        --role roles/logging.logWriter
    
  3. Agrega la función monitoring.metricWriter a la cuenta de servicio:

    gcloud projects add-iam-policy-binding ${project_id} \
       --member serviceAccount:cluster-service-account@${project_id}.iam.gserviceaccount.com \
       --role roles/monitoring.metricWriter
    
  4. Agrega la función container.admin a la cuenta de servicio:

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

Crea el clúster de GKE

Excepto que se especifique lo contrario, debes ingresar todos los comandos para este instructivo en la línea de comandos de tu computadora o en Cloud Shell.

  1. Clona el repositorio de muestra. El repositorio de muestra incluye los manifiestos de Kubernetes para el daemonset de Fluentd y un programa de prueba de registro que implementarás:

    git clone https://github.com/GoogleCloudPlatform/container-engine-customize-fluentd
    
  2. Cambia tu directorio de trabajo al repositorio clonado:

    cd container-engine-customize-fluentd
    
  3. Crea el clúster de GKE con el registro en la nube apagado:

    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
    

Implementa la aplicación de registro de prueba

Por configuración predeterminada, la aplicación de muestra que implementas emite instrucciones de registro aleatorias de forma continua. El contenedor de Docker que usa está disponible en gcr.io/cloud-solutions-images/test-logger y su código fuente está incluido en el subdirectorio test-logger.

  1. Implementa la aplicación test-logger en el clúster de GKE:

    kubectl apply -f kubernetes/test-logger.yaml
    
  2. Observa el estado de los pods test-logger:

    kubectl get pods
    
  3. Repite este comando hasta que el resultado se vea como el siguiente y los tres pods test-logger estén en ejecución:

    Resultado del comando que muestra tres pods en ejecución

Implementa el daemonset de Fluentd en tu clúster

A continuación, configurarás el daemonset de Fluentd y lo implementarás.

  1. Implementa la configuración de Fluentd:

    kubectl apply -f kubernetes/fluentd-configmap.yaml
    
  2. Implementa el daemonset de Fluentd:

    kubectl apply -f kubernetes/fluentd-daemonset.yaml
    
  3. Comprueba que los pods de Fluentd se iniciaron:

    kubectl get pods --namespace=kube-system
    

    Si están en ejecución, verás un resultado como el siguiente:

    Resultado del comando que muestra tres pods en ejecución

  4. Verifica que puedas ver los registros en Stackdriver: En la consola, en el menú de la izquierda, haz clic en Stackdriver > Logging (Registro) y selecciona GKE cluster (Clúster de GKE) en la lista.

    Lista de Stackdriver que muestra datos no filtrados

Filtra información en el archivo de registro

El paso siguiente es especificar a Fluentd que filtre ciertos datos para que no se registren. En este instructivo, debes filtrar los números de identificación personal, de tarjeta de crédito y las direcciones de correo electrónico. A fin de realizar esta actualización, debes cambiar el daemonset para usar un ConfigMap diferente que contenga estos filtros. Usa la característica de actualizaciones progresivas de Kubernetes y conserva la versión anterior del ConfigMap.

  1. Abre el archivo kubernetes/fluentd-configmap.yaml en un editor.

  2. Quita los comentarios de las líneas intermedias y excluye las líneas ### sample log scrubbing filters y ### 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. Edita el campo metadata.name para cambiar el nombre del ConfigMap de fluentd-gcp-config a fluentd-gcp-config-filtered:

    name: fluentd-gcp-config
    namespace: kube-system
    labels:
      k8s-app: fluentd-gcp-custom
  4. Guarda el archivo y ciérralo.

Actualiza el daemonset de Fluentd para usar la configuración nueva

El archivo kubernetes/fluentd-daemonset-filtered.yaml activa el ConfigMap fluentd-gcp-config-filtered, en lugar de fluentd-gcp-config.

- configMap:
    defaultMode: 420
    name: fluentd-gcp-config-filtered
  1. Implementa la versión nueva del ConfigMap en tu clúster:

    kubectl apply -f kubernetes/fluentd-configmap.yaml
    
  2. Implementa la versión nueva del daemonset:

    kubectl apply -f kubernetes/fluentd-daemonset-filtered.yaml
  3. Implementa la actualización y espera a que se complete:

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

    Resultado del comando que muestra mensajes de "Espera" para 3 pods, luego tiene éxito

  4. Cuando se completa la actualización, actualiza los registros de Stackdriver y asegúrate de que los números de identificación personal, de tarjeta de crédito y las direcciones de correo electrónico se filtraron.

    Lista de Stackdriver que muestra los mismos datos, pero filtrados

Limpieza

Una vez completado el instructivo, puedes limpiar los recursos creados en GCP para que no se te facture por ellos en el futuro.

Borra el proyecto

La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.

Para borrar el proyecto, haz lo siguiente:

  1. En la GCP Console, dirígete a la página Proyectos.

    Ir a la página Proyectos

  2. En la lista de proyectos, selecciona el proyecto que deseas borrar y haz clic en Borrar.
  3. En el cuadro de diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Borra el clúster de GKE

Si no quieres borrar todo el proyecto, ejecuta el comando siguiente para borrar el clúster de GKE:

gcloud container clusters delete gke-with-custom-fluentd

Borra la cuenta de servicio

Para borrar solo la cuenta de servicio, ejecuta el comando siguiente:

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"

Pasos siguientes

  • Revisa con más detenimiento la documentación de Fluentd.
  • Revisa con más detenimiento la documentación de Google Kubernetes Engine.
  • Prueba otras características de Google Cloud Platform tú mismo. Revisa nuestros instructivos.
¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…