Фильтрация коллекции журналов в аналитике контейнеров
В этой статье описаны различные параметры фильтрации, доступные в аналитике контейнеров. Кластеры 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-public
azure-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
Следующие шаги
- См . преобразования данных в аналитике контейнеров, чтобы добавить преобразования в DCR, которые будут дополнительно фильтровать данные на основе подробных критериев.