Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описаны различные параметры фильтрации, доступные в аналитике контейнеров. Кластеры Kubernetes создают большой объем данных, собранных аналитикой контейнеров. Так как плата взимается за прием и хранение этих данных, вы можете значительно сократить затраты на мониторинг, отфильтровав данные, которые вам не нужны.
Внимание
В этой статье описаны различные параметры фильтрации, требующие изменения DCR или ConfigMap для отслеживаемого кластера. Дополнительные сведения о выполнении этой конфигурации см. в статье "Настройка коллекции журналов в аналитике контейнеров".
Фильтрация журналов контейнеров
Журналы контейнеров — это журналы stderr и stdout, созданные контейнерами в кластере Kubernetes. Эти журналы хранятся в таблице ContainerLogV2 в рабочей области Log Analytics. По умолчанию собираются все журналы контейнеров, но вы можете отфильтровать журналы из определенных пространств имен или полностью отключить сбор журналов контейнеров.
С помощью 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
Примечание.
Вы также можете настроить фильтрацию пространства имен с помощью правила сбора данных (DCR) для кластера, но это не относится к данным, отправленным в ContainerLogV2. Эти данные можно фильтровать только с помощью ConfigMap.
Фильтрация журналов платформы (пространства имен System Kubernetes)
По умолчанию журналы контейнеров из системного пространства имен исключаются из коллекции, чтобы свести к минимуму затраты Log Analytics. Журналы контейнеров системы могут быть критически важными, хотя в определенных сценариях устранения неполадок. Эта функция ограничена следующими системными пространствами имен: kube-system
, gatekeeper-system
, , calico-system
, azure-arc
kube-public
и kube-node-lease
.
Включите журналы платформы с помощью ConfigMap с параметром collect_system_pod_logs
. Кроме того, необходимо убедиться, что пространство имен системы не находится в параметре exclude_namespaces
.
В следующем примере показаны параметры ConfigMap для сбора журналов контейнера stdout и stderr в пространстве имен coredns
.
[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.
Аннотация | Описание |
---|---|
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
Фильтрация переменных среды
Включите сбор данных о переменных среды во всех подах и узлах в кластере с помощью 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
Следующие шаги
- См. Преобразования данных в Container Insights, чтобы добавить преобразования в DCR, которые будут дополнительно фильтровать данные на основе подробных критериев.