Udostępnij za pośrednictwem


Filtrowanie zbierania dzienników w usłudze Container Insights

W tym artykule opisano różne opcje filtrowania dostępne w usłudze Container Insights. Klastry Kubernetes generują dużą ilość danych zbieranych przez usługę Container Insights. Ponieważ opłaty są naliczane za pozyskiwanie i przechowywanie tych danych, możesz znacznie zmniejszyć koszty monitorowania, filtrując dane, których nie potrzebujesz.

Ważne

W tym artykule opisano różne opcje filtrowania, które wymagają zmodyfikowania kontrolera DCR lub ConfigMap dla monitorowanego klastra. Aby uzyskać szczegółowe informacje na temat wykonywania tej konfiguracji, zobacz Konfigurowanie zbierania dzienników w usłudze Container Insights .

Filtrowanie dzienników kontenerów

Dzienniki kontenerów to dzienniki stderr i stdout generowane przez kontenery w klastrze Kubernetes. Te dzienniki są przechowywane w tabeli ContainerLogV2 w obszarze roboczym usługi Log Analytics. Domyślnie zbierane są wszystkie dzienniki kontenerów, ale można odfiltrować dzienniki z określonych przestrzeni nazw lub całkowicie wyłączyć zbieranie dzienników kontenerów.

Za pomocą reguły zbierania danych (DCR) można włączyć lub wyłączyć dzienniki stdout i stderr oraz filtrować określone przestrzenie nazw z każdego z nich. Ustawienia dzienników kontenera i filtrowania przestrzeni nazw są uwzględniane w ustawieniach wstępnych kosztów skonfigurowanych w witrynie Azure Portal i można ustawić te wartości indywidualnie przy użyciu innych metod konfiguracji dcR.

Za pomocą narzędzia ConfigMap można skonfigurować kolekcję dzienników stderr i stdout oddzielnie dla klastra, aby można było włączyć jedną, a nie drugą.

W poniższym przykładzie przedstawiono ustawienia ConfigMap służące do zbierania wartości stdout i stderr z wyłączeniem kube-system przestrzeni nazw i 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

Filtrowanie dzienników platformy (przestrzenie nazw platformy Kubernetes)

Domyślnie dzienniki kontenerów z przestrzeni nazw systemu są wykluczane z kolekcji w celu zminimalizowania kosztów usługi Log Analytics. Dzienniki kontenerów systemu mogą być krytyczne, choć w określonych scenariuszach rozwiązywania problemów. Ta funkcja jest ograniczona do następujących przestrzeni nazw systemowych: kube-system, , gatekeeper-system, calico-systemazure-arc, kube-public, i kube-node-lease.

Włącz dzienniki platformy przy użyciu narzędzia ConfigMap z ustawieniem collect_system_pod_logs . Należy również upewnić się, że przestrzeń nazw systemu nie znajduje się w ustawieniu exclude_namespaces .

W poniższym przykładzie przedstawiono ustawienia ConfigMap służące do zbierania dzienników stdout i stderr kontenera coredns kube-system w przestrzeni nazw.

[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"]

Filtrowanie oparte na adnotacjach dla obciążeń

Filtrowanie oparte na adnotacjach umożliwia wykluczanie zbierania dzienników dla niektórych zasobników i kontenerów przez dodawanie adnotacji do zasobnika. Może to znacznie zmniejszyć koszty pozyskiwania dzienników i umożliwić skupienie się na odpowiednich informacjach bez przesiewania szumu.

Włącz filtrowanie oparte na adnotacjach przy użyciu narzędzia ConfigMap z następującymi ustawieniami.

[log_collection_settings.filter_using_annotations]
   enabled = true

Należy również dodać wymagane adnotacje w specyfikacji zasobnika obciążenia. W poniższej tabeli wyróżniono różne możliwe adnotacje zasobników.

Adnotacja opis
fluentbit.io/exclude: "true" Wyklucza oba strumienie stdout i stderr we wszystkich kontenerach w zasobniku
fluentbit.io/exclude_stdout: "true" Wyklucza tylko strumień stdout we wszystkich kontenerach w zasobniku
fluentbit.io/exclude_stderr: "true" Wyklucza tylko strumień stderr we wszystkich kontenerach w zasobniku
fluentbit.io/exclude_container1: "true" Wyklucz oba strumienie stdout i stderr tylko dla kontenera1 w zasobniku
fluentbit.io/exclude_stdout_container1: "true" Wyklucz tylko stdout tylko dla kontenera1 w zasobniku

Uwaga

Te adnotacje są płynnie oparte na bitach. Jeśli używasz własnego rozwiązania do zbierania dzienników opartych na płynnym bitzie z filtrem wtyczki Kubernetes i wykluczeniem opartym na adnotacjach, przestanie zbierać dzienniki zarówno z usługi Container Insights, jak i rozwiązania.

Poniżej przedstawiono przykład adnotacji fluentbit.io/exclude: "true" w specyfikacji zasobnika:

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 

Filtrowanie zmiennych środowiskowych

Włącz zbieranie zmiennych środowiskowych we wszystkich zasobnikach i węzłach w klastrze przy użyciu narzędzia ConfigMap z następującymi ustawieniami.

[log_collection_settings.env_var]
    enabled = true

Jeśli kolekcja zmiennych środowiskowych jest włączona globalnie, można ją wyłączyć dla określonego kontenera, ustawiając zmienną AZMON_COLLECT_ENV środowiskową na False wartość z ustawieniem Dockerfile lub w pliku konfiguracji zasobnika w env: sekcji . Jeśli zbieranie zmiennych środowiskowych jest globalnie wyłączone, nie można włączyć kolekcji dla określonego kontenera. Jedynym zastąpieniem, które można zastosować na poziomie kontenera, jest wyłączenie kolekcji, gdy jest już włączona globalnie.

Wpływ na wizualizacje i alerty

Jeśli masz alerty niestandardowe lub skoroszyty korzystające z danych usługi Container Insights, modyfikowanie ustawień zbierania danych może obniżyć te środowiska. Jeśli wykluczasz przestrzenie nazw lub zmniejszasz częstotliwość zbierania danych, przejrzyj istniejące alerty, pulpity nawigacyjne i skoroszyty przy użyciu tych danych.

Aby przeprowadzić skanowanie pod kątem alertów odwołujących się do tych tabel, uruchom następujące zapytanie usługi 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

Następne kroki