Поделиться через


Фильтрация коллекции журналов в аналитике контейнеров

В этой статье описаны различные параметры фильтрации, доступные в аналитике контейнеров. Кластеры Kubernetes создают большой объем данных, собранных аналитикой контейнеров. Так как плата взимается за прием и хранение этих данных, вы можете значительно сократить затраты на мониторинг, отфильтровав данные, которые вам не нужны.

Внимание

В этой статье описаны различные параметры фильтрации, требующие изменения DCR или ConfigMap для отслеживаемого кластера. Дополнительные сведения о выполнении этой конфигурации см. в статье "Настройка коллекции журналов в аналитике контейнеров".

Фильтрация журналов контейнеров

Журналы контейнеров — это журналы stderr и stdout, созданные контейнерами в кластере Kubernetes. Эти журналы хранятся в таблице ContainerLogV2 в рабочей области Log Analytics. По умолчанию собираются все журналы контейнеров, но вы можете полностью отфильтровать журналы из определенных пространств имен или отключить коллекцию журналов контейнеров.

С помощью правила сбора данных (DCR) можно включить или отключить журналы stdout и stderr и фильтровать определенные пространства имен из каждого. Параметры для журналов контейнеров и фильтрации пространств имен включены в предустановки затрат, настроенные в портал Azure, и эти значения можно задать по отдельности с помощью других методов конфигурации DCR.

С помощью ConfigMap можно настроить коллекцию stderr и stdout журналы отдельно для кластерии, чтобы можно было включить ее, а не другую.

В следующем примере показаны параметры ConfigMap для сбора stdout и stderr, за исключением kube-system пространств имен.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

Фильтрация журналов платформы (пространства имен System Kubernetes)

По умолчанию журналы контейнеров из системного пространства имен исключаются из коллекции, чтобы свести к минимуму затраты Log Analytics. Журналы контейнеров системы могут быть критически важными, хотя в определенных сценариях устранения неполадок. Эта функция ограничена следующими системными пространствами имен: kube-system, gatekeeper-system, , calico-system, kube-publicazure-arcи kube-node-lease.

Включите журналы платформы с помощью ConfigMap с параметром collect_system_pod_logs . Кроме того, необходимо убедиться, что пространство имен системы не находится в параметре exclude_namespaces .

В следующем примере показаны параметры ConfigMap для сбора журналов coredns stdout и stderr контейнера в 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"]

Фильтрация на основе заметок для рабочих нагрузок

Фильтрация на основе заметок позволяет исключить коллекцию журналов для определенных модулей pod и контейнеров, заключив модуль pod. Это может значительно сократить затраты на прием журналов и позволит вам сосредоточиться на соответствующей информации, не просеивая через шум.

Включите фильтрацию на основе заметок с помощью ConfigMap со следующими параметрами.

[log_collection_settings.filter_using_annotations]
   enabled = true

Необходимо также добавить необходимые заметки в спецификацию pod рабочей нагрузки. В следующей таблице выделены различные возможные заметки pod.

Номер Description
fluentbit.io/exclude: "true" Исключает потоки stdout и stderr во всех контейнерах в pod
fluentbit.io/exclude_stdout: "true" Исключает только поток stdout во всех контейнерах в pod.
fluentbit.io/exclude_stderr: "true" Исключает только поток stderr во всех контейнерах в Pod.
fluentbit.io/exclude_container1: "true" Исключение потоков stdout и stderr только для контейнера1 в pod
fluentbit.io/exclude_stdout_container1: "true" Исключение только stdout только для контейнера1 в pod

Примечание.

Эти заметки основаны на простом бите. Если вы используете собственное решение для сбора журналов на основе fluent-bit с фильтром подключаемого модуля Kubernetes и исключением на основе заметок, оно перестанет собирать журналы как из Container Insights, так и для вашего решения.

Ниже приведен пример заметки в спецификации fluentbit.io/exclude: "true" 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 

Фильтрация переменных среды

Включите коллекцию переменных среды во всех модулях pod и узлах в кластере с помощью ConfigMap со следующими параметрами.

[log_collection_settings.env_var]
    enabled = true

Если коллекция переменных среды включена глобально, ее можно отключить для определенного контейнера, установив переменную AZMON_COLLECT_ENV False среды в параметре Dockerfile или в файле конфигурации pod в разделе env: . Если коллекция переменных среды глобально отключена, невозможно включить коллекцию для определенного контейнера. Единственным переопределением, которое можно применить на уровне контейнера, является отключение коллекции, когда она уже включена глобально.

Влияние на визуализации и оповещения

Если у вас есть пользовательские оповещения или книги с помощью данных аналитики контейнеров, изменение параметров сбора данных может снизить эти возможности. Если вы исключаете пространства имен или сокращаете частоту сбора данных, просмотрите существующие оповещения, панели мониторинга и книги с помощью этих данных.

Чтобы проверить наличие оповещений, ссылающихся на эти таблицы, выполните следующий запрос 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

Следующие шаги