Sdílet prostřednictvím


Filtrování shromažďování protokolů v Přehledech kontejnerů

Tento článek popisuje různé možnosti filtrování dostupné v Přehledech kontejnerů. Clustery Kubernetes generují velké množství dat shromážděných službou Container Insights. Vzhledem k tomu, že se vám účtují poplatky za příjem a uchovávání těchto dat, můžete výrazně snížit náklady na monitorování tím, že vyfiltrujete data, která nepotřebujete.

Důležité

Tento článek popisuje různé možnosti filtrování, které vyžadují úpravu DCR nebo ConfigMap pro monitorovaný cluster. Podrobnosti o provedení této konfigurace najdete v tématu Konfigurace shromažďování protokolů v Nástroji Container Insights .

Filtrování protokolů kontejneru

Protokoly kontejnerů jsou protokoly stderr a stdout vygenerované kontejnery v clusteru Kubernetes. Tyto protokoly jsou uložené v tabulce ContainerLogV2 v pracovním prostoru služby Log Analytics. Ve výchozím nastavení se shromažďují všechny protokoly kontejneru, ale můžete vyfiltrovat protokoly z konkrétních oborů názvů nebo úplně zakázat shromažďování protokolů kontejneru.

Pomocí pravidla shromažďování dat (DCR) můžete povolit nebo zakázat protokoly stdout a stderr a filtrovat konkrétní obory názvů z každého. Nastavení pro protokoly kontejneru a filtrování oboru názvů jsou zahrnutá v předvolbách nákladů nakonfigurovaných na webu Azure Portal a tyto hodnoty můžete nastavit jednotlivě pomocí dalších metod konfigurace DCR.

Pomocí objektu ConfigMap můžete pro clustery nakonfigurovat kolekci stderr a stdout protokoly samostatně, takže se můžete rozhodnout povolit jednu, nikoli druhou.

Následující příklad ukazuje nastavení ConfigMap pro shromažďování stdout a stderr s výjimkou kube-system a gatekeeper-system oborů názvů.

[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

Filtrování protokolů platformy (obory názvů System Kubernetes)

Ve výchozím nastavení jsou protokoly kontejnerů ze systémového oboru názvů vyloučené z kolekce, aby se minimalizovaly náklady na Log Analytics. Protokoly kontejnerů systémových kontejnerů ale můžou být důležité v konkrétních scénářích řešení potíží. Tato funkce je omezena na následující systémové obory názvů: kube-system, gatekeeper-system, calico-system, azure-arc, kube-public, a kube-node-lease.

Povolte protokoly platformy pomocí objektu collect_system_pod_logs ConfigMap s nastavením. Musíte také zajistit, aby systémový obor názvů nebyl v exclude_namespaces nastavení.

Následující příklad ukazuje nastavení ConfigMap pro shromažďování protokolů coredns stdout a stderr kontejneru kube-system v oboru názvů.

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

Filtrování na základě poznámek pro úlohy

Filtrování na základě poznámek umožňuje vyloučit shromažďování protokolů pro určité pody a kontejnery přidáním poznámek k podu. To může snížit náklady na příjem protokolů výrazně a umožnit vám soustředit se na relevantní informace, aniž byste se museli zabývat šumem.

Povolte filtrování na základě poznámek pomocí objektu ConfigMap s následujícím nastavením.

[log_collection_settings.filter_using_annotations]
   enabled = true

Musíte také přidat požadované poznámky do specifikace podu úlohy. Následující tabulka uvádí různé možné poznámky podů.

Poznámka Popis
fluentbit.io/exclude: "true" Vyloučí oba streamy stdout a stderr ve všech kontejnerech v podu.
fluentbit.io/exclude_stdout: "true" Vyloučí pouze stream stdout u všech kontejnerů v podu.
fluentbit.io/exclude_stderr: "true" Vyloučí pouze stream stderr u všech kontejnerů v podu.
fluentbit.io/exclude_container1: "true" Vyloučit oba streamy stdout a stderr pouze pro kontejner1 v podu
fluentbit.io/exclude_stdout_container1: "true" Vyloučit pouze stdout pouze pro kontejner1 v podu

Poznámka:

Tyto poznámky jsou založené na fluentu. Pokud používáte vlastní řešení shromažďování protokolů s filtrem modulu plug-in Kubernetes a vyloučením na základě poznámek, přestane shromažďovat protokoly z Container Insights i z vašeho řešení.

Následuje příklad anotace ve specifikaci podu fluentbit.io/exclude: "true" :

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 

Filtrování proměnných prostředí

Povolte kolekci proměnných prostředí ve všech podech a uzlech v clusteru pomocí objektu ConfigMap s následujícím nastavením.

[log_collection_settings.env_var]
    enabled = true

Pokud je kolekce proměnných prostředí globálně povolená, můžete ji pro konkrétní kontejner zakázat nastavením proměnné AZMON_COLLECT_ENV prostředí na False nastavení Souboru Dockerfile nebo v konfiguračním souboru podu env: v části. Pokud je kolekce proměnných prostředí globálně zakázaná, nemůžete pro konkrétní kontejner povolit kolekci. Jediným přepsáním, které je možné použít na úrovni kontejneru, je zakázat kolekci, pokud už je povolená globálně.

Dopad na vizualizace a upozornění

Pokud máte nějaká vlastní upozornění nebo sešity využívající data Container Insights, může úprava nastavení shromažďování dat snížit výkon těchto prostředí. Pokud nepoužíváte obory názvů nebo snižujete frekvenci shromažďování dat, zkontrolujte stávající výstrahy, řídicí panely a sešity pomocí těchto dat.

Pokud chcete vyhledat výstrahy odkazované na tyto tabulky, spusťte následující dotaz Azure Resource Graphu:

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

Další kroky