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
- Pokud chcete do DCR přidat transformace, které budou dále filtrovat data na základě podrobných kritérií, podívejte se na transformace dat v přehledech kontejnerů.