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-system
azure-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
- Zobacz Przekształcenia danych w usłudze Container Insights , aby dodać przekształcenia do modelu DCR, które będą dalej filtrować dane na podstawie szczegółowych kryteriów.