Filtrado de la recopilación de registros en Container Insights

Este artículo describe las distintas opciones de filtrado disponibles en Container Insights. Los clústeres de Kubernetes generan una gran cantidad de datos que son recopilados por Container Insights. Dado que se le cobra por la ingesta y retención de estos datos, puede reducir significativamente sus costes de supervisión filtrando los datos que no necesita.

Importante

Este artículo describe diferentes opciones de filtrado que requieren que modifique la DCR o ConfigMap para un clúster supervisado. Consulte Configuración de la recopilación de registros en Container Insights para obtener más información sobre cómo realizar esta configuración.

Filtrado de registros de contenedor

Los registros de contenedores son registros stderr y stdout generados por los contenedores de su clúster de Kubernetes. Estos registros se almacenan en la tabla ContainerLogV2 de su área de trabajo de Log Analytics. De manera predeterminada se recopilan todos los registros de los contenedores, pero puede filtrar los registros de espacios de nombres específicos o deshabilitar por completo la recopilación de registros de contenedores.

Usando la Regla de recopilación de datos (DCR), puede habilitar o deshabilitar los registros stdout y stderr y filtrar espacios de nombres específicos de cada uno. La configuración de los registros de contenedores y del filtrado de espacios de nombres se incluye en los valores preestablecidos de costes configurados en Azure Portal, y puede establecer estos valores individualmente usando los otros métodos de configuración de DCR.

Usando ConfigMap, puede configurar la recopilación de registros stderr y stdout por separado para el clúster, por lo que puede optar por habilitar unos y no otros.

El siguiente ejemplo muestra la configuración de ConfigMap para recoger stdout y stderr excluyendo los espacios de nombres kube-system y gatekeeper-system.

[log_collection_settings]
    [log_collection_settings.stdout]
        enabled = true
        exclude_namespaces = ["kube-system","gatekeeper-system"]

    [log_collection_settings.stderr]
        enabled = true
        exclude_namespaces = ["kube-system","gatekeeper-system"]

    [log_collection_settings.enrich_container_logs]
        enabled = true

Filtrado de registros de la plataforma (espacios de nombres del sistema Kubernetes)

De manera predeterminada, los registros de los contenedores del espacio de nombres del sistema se excluyen de la recopilación para minimizar el costo de Log Analytics. Sin embargo, los registros de los contenedores del sistema pueden ser críticos en determinados escenarios de solución de problemas. Esta característica está restringida a los siguientes espacios de nombres del sistema: kube-system, gatekeeper-system, calico-system, azure-arc, kube-public y kube-node-lease.

Habilite los registros de la plataforma utilizando ConfigMap con la configuración collect_system_pod_logs. También debe asegurarse de que el espacio de nombres del sistema no está en la configuración exclude_namespaces.

El siguiente ejemplo muestra la configuración de ConfigMap para recoger los registros stdout y stderr del contenedor coredns en el espacio de nombres kube-system.

[log_collection_settings]
    [log_collection_settings.stdout]
        enabled = true
        exclude_namespaces = ["gatekeeper-system"]
        collect_system_pod_logs = ["kube-system:coredns"]

    [log_collection_settings.stderr]
        enabled = true
        exclude_namespaces = ["kube-system","gatekeeper-system"]
        collect_system_pod_logs = ["kube-system:coredns"]

Filtrado basado en anotaciones para cargas de trabajo

El filtrado basado en anotaciones le permite excluir la recopilación de registros para determinados pods y contenedores mediante anotaciones en el pod. Esto puede reducir significativamente el coste de ingesta de sus registros y permitirle centrarse en la información relevante sin tener que cribar entre la información superflua.

Habilite el filtrado basado en anotaciones usando ConfigMap con la siguiente configuración.

[log_collection_settings.filter_using_annotations]
   enabled = true

También debe agregar las anotaciones necesarias en la especificación de su pod de carga de trabajo. La siguiente tabla destaca los diferentes contenidos posibles de las anotaciones de los pods.

Annotation Descripción
fluentbit.io/exclude: "true" Excluye los flujos stdout y stderr en todos los contenedores del pod
fluentbit.io/exclude_stdout: "true" Excluye solo el flujo stdout en todos los contenedores del pod
fluentbit.io/exclude_stderr: "true" Excluye solo el flujo stderr en todos los contenedores del pod.
fluentbit.io/exclude_container1: "true" Excluya los flujos stdout y stderr solo para el container1 en el pod
fluentbit.io/exclude_stdout_container1: "true" Excluir solo stdout para el container1 en el pod

Nota:

Estas anotaciones están basadas en bits fluidas. Si usa su propia solución de recopilación de registros basada en fluent-bit con el filtro del complemento de Kubernetes y la exclusión basada en anotaciones, dejará de recopilar registros de Container Insights y la solución.

A continuación se muestra un ejemplo de anotación fluentbit.io/exclude: "true" en una especificación de Pod:

apiVersion: v1 
kind: Pod 
metadata: 
 name: apache-logs 
 labels: 
  app: apache-logs 
 annotations: 
  fluentbit.io/exclude: "true" 
spec: 
 containers: 
 - name: apache 
  image: edsiper/apache_logs 

Filtrado de variables de entorno

Habilite la recopilación de variables de entorno en todos los pods y nodos del clúster usando ConfigMap con la siguiente configuración.

[log_collection_settings.env_var]
    enabled = true

Si la recopilación de variables de entorno está habilitada globalmente, puede deshabilitarla para un contenedor específico al establecer la variable de entorno AZMON_COLLECT_ENV en False con un valor de Dockerfile o en el archivo de configuración para el Pod en la sección env:. Si la recopilación de variables de entorno está deshabilitada globalmente, no se puede habilitar la recopilación para un contenedor específico. La única invalidación que se puede aplicar en el nivel de contenedor es deshabilitar la recopilación cuando ya está habilitada globalmente.

Impacto en las visualizaciones y alertas

Si tiene alertas o libros de trabajo personalizados usando datos de Container Insights, modificar la configuración de recopilación de datos podría degradar esas experiencias. Si va a excluir espacios de nombres o a reducir la frecuencia de recopilación de datos, revise las alertas, los paneles y los libros existentes con estos datos.

Para buscar alertas que hagan referencia a estas tablas, ejecute la siguiente consulta de Azure Resource Graph:

resources
| where type in~ ('microsoft.insights/scheduledqueryrules') and ['kind'] !in~ ('LogToMetric')
| extend severity = strcat("Sev", properties["severity"])
| extend enabled = tobool(properties["enabled"])
| where enabled in~ ('true')
| where tolower(properties["targetResourceTypes"]) matches regex 'microsoft.operationalinsights/workspaces($|/.*)?' or tolower(properties["targetResourceType"]) matches regex 'microsoft.operationalinsights/workspaces($|/.*)?' or tolower(properties["scopes"]) matches regex 'providers/microsoft.operationalinsights/workspaces($|/.*)?'
| where properties contains "Perf" or properties  contains "InsightsMetrics" or properties  contains "ContainerInventory" or properties  contains "ContainerNodeInventory" or properties  contains "KubeNodeInventory" or properties  contains"KubePodInventory" or properties  contains "KubePVInventory" or properties  contains "KubeServices" or properties  contains "KubeEvents" 
| project id,name,type,properties,enabled,severity,subscriptionId
| order by tolower(name) asc

Pasos siguientes