

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Logs an Amazon senden CloudWatch
<a name="container-insights-eks-otel-logs"></a>

oTEL Container Insights sammelt und sendet Container-Logs mithilfe der CloudWatch OpenTelemetry Collector-Log-Pipeline an Amazon Logs. Das Amazon CloudWatch Observability EKS-Add-on stellt einen OpenTelemetry Collector bereit DaemonSet , der den Filelog-Empfänger verwendet, um Container-Protokolldateien zu verfolgen, sie mit Kubernetes-Metadaten anzureichern und sie über den Logs-Exporter in Logs zu CloudWatch exportieren. CloudWatch 

Für die grundlegende Protokollerfassung ist keine zusätzliche Einrichtung erforderlich. Die Protokollerfassung ist standardmäßig aktiviert, wenn Sie dem folgen[Schnellstart: oTEL Container Insights auf Amazon EKS](container-insights-eks-otel-quickstart.md).

## Voraussetzungen
<a name="container-insights-eks-otel-logs-prereqs"></a>

Bevor Sie die Protokollerfassung konfigurieren, stellen Sie sicher, dass Sie die folgenden Anforderungen erfüllen.
+ oTEL Container Insights ist installiert und das `amazon-cloudwatch-observability` Add-on ist auf Ihrem Cluster aktiv
+ IAM-Berechtigungen:`logs:CreateLogGroup`,`logs:CreateLogStream`, `logs:PutLogEvents``logs:DescribeLogGroups`, und `logs:DescribeLogStreams` (in der `CloudWatchAgentServerPolicy` verwalteten Richtlinie enthalten)
+ Knotenzugriff: Der Collector benötigt Zugriff `/var/log/pods` auf jeden Knoten

## Gruppen und Quellen protokollieren
<a name="container-insights-eks-otel-logs-groups"></a>

In der folgenden Tabelle werden die Protokollgruppe beschrieben, die oTEL Container Insights erstellt, und die Quelle, aus der sie sammelt.


| Protokollgruppe | Quelle | Inhalt | 
| --- | --- | --- | 
| /aws/containerinsights/{{cluster-name}}/application | /var/log/pods/\*\*/\*.log | Alle Container-Stdout- und Stderr-Protokolle | 

**Anmerkung**  
Host- und Datenebenenprotokolle werden in einer future Version verfügbar sein.

## Wie funktioniert die OTel-Protokollpipeline
<a name="container-insights-eks-otel-logs-pipeline"></a>

Der OpenTelemetry Collector des Add-ons führt eine Log-Pipeline mit den folgenden Komponenten aus.
+ **Empfänger** — Der `filelog` Empfänger versendet Container-Protokolldateien von`/var/log/pods/`.
+ **Prozessoren** — Der `k8sattributes` Prozessor reichert Logs mit Kubernetes-Metadaten an. Der `batch` Prozessor stapelt Protokolldatensätze vor dem Export. Der `resource` Prozessor hängt Ressourcenattribute an.
+ **Exporteure** — Der `awscloudwatchlogs` Exporteur sendet Protokolldatensätze an Logs. CloudWatch 

### Anreicherung von Protokollen
<a name="container-insights-eks-otel-logs-enrichment"></a>

Die Pipeline reichert jeden Protokolldatensatz mit den folgenden Attributen an.
+ **Kubernetes-Ressourcenattribute** —`k8s.pod.name`,,`k8s.namespace.name`, und `k8s.container.name` `k8s.node.name` `k8s.deployment.name`
+ **Pod-Labels** — Alle Pod-Labels als Attribute `k8s.pod.label.*`
+ **Cloud-Attribute** — `cloud.region``cloud.account.id`, und `cloud.platform`
+ **Cluster-Attribute** — `k8s.cluster.name`

## Anpassen der Protokollerfassung
<a name="container-insights-eks-otel-logs-customize"></a>

Sie können die Protokollerfassung anpassen, indem Sie die Konfigurationswerte des Add-ons aktualisieren. In den folgenden Abschnitten werden allgemeine Anpassungsoptionen beschrieben.

### Deaktivieren Sie die Protokollerfassung
<a name="container-insights-eks-otel-logs-disable"></a>

Um die Protokollerfassung vollständig zu deaktivieren, aktualisieren Sie die Add-On-Konfiguration mit deaktivierten Container-Protokollen.

**Um die Protokollerfassung zu deaktivieren**
+ Führen Sie den folgenden Befehl aus. {{cluster-name}}Ersetzen Sie durch den Namen Ihres Amazon EKS-Clusters.

  ```
  aws eks update-addon \
    --cluster-name {{cluster-name}} \
    --addon-name amazon-cloudwatch-observability \
    --configuration-values '{"containerLogs":{"enabled":false}}' \
    --resolve-conflicts OVERWRITE
  ```

### Schließen Sie Namespaces von der Protokollsammlung aus
<a name="container-insights-eks-otel-logs-exclude-ns"></a>

Verwenden Sie die Konfigurationsoption, um bestimmte Namespaces von der Protokollerfassung auszuschließen. `excludeNamespaces`

**Um Namespaces von der Protokollsammlung auszuschließen**
+ Führen Sie den folgenden Befehl aus. {{cluster-name}}Ersetzen Sie durch den Namen Ihres Amazon EKS-Clusters. Ersetzen Sie die Namespace-Werte durch die Namespaces, die Sie ausschließen möchten.

  ```
  aws eks update-addon \
    --cluster-name {{cluster-name}} \
    --addon-name amazon-cloudwatch-observability \
    --configuration-values '{"containerLogs":{"enabled":true,"excludeNamespaces":["{{kube-system}}","{{load-testing}}","{{monitoring}}"]}}' \
    --resolve-conflicts OVERWRITE
  ```

### Schließt nur bestimmte Namespaces ein
<a name="container-insights-eks-otel-logs-include-ns"></a>

Verwenden Sie die Konfigurationsoption, um nur Protokolle von bestimmten Namespaces zu sammeln. `includeNamespaces`

**Um nur bestimmte Namespaces einzubeziehen**
+ Führen Sie den folgenden Befehl aus. {{cluster-name}}Ersetzen Sie durch den Namen Ihres Amazon EKS-Clusters. Ersetzen Sie die Namespace-Werte durch die Namespaces, die Sie einbeziehen möchten.

  ```
  aws eks update-addon \
    --cluster-name {{cluster-name}} \
    --addon-name amazon-cloudwatch-observability \
    --configuration-values '{"containerLogs":{"enabled":true,"includeNamespaces":["{{production}}","{{staging}}"]}}' \
    --resolve-conflicts OVERWRITE
  ```

### Konfigurieren Sie die mehrzeilige Protokollanalyse
<a name="container-insights-eks-otel-logs-multiline"></a>

Um mehrzeilige Protokolleinträge (wie Stack-Traces) in einem einzigen Protokolldatensatz zu kombinieren, konfigurieren Sie das mehrzeilige Parsen mit einem Muster für die erste Zeile.

**Um das mehrzeilige Log-Parsing zu konfigurieren**
+ Führen Sie den folgenden Befehl aus. {{cluster-name}}Ersetzen Sie durch den Namen Ihres Amazon EKS-Clusters. Ersetzen Sie den {{firstLinePattern}} Wert durch ein Regex-Muster, das der ersten Zeile jedes Protokolleintrags entspricht.

  ```
  aws eks update-addon \
    --cluster-name {{cluster-name}} \
    --addon-name amazon-cloudwatch-observability \
    --configuration-values '{"containerLogs":{"enabled":true,"multilineConfig":{"firstLinePattern":"{{^\\d{4}-\\d{2}-\\d{2}|^\\[\\d{4}}}","parseFormat":"auto"}}}' \
    --resolve-conflicts OVERWRITE
  ```

### Legen Sie die Protokollaufbewahrung fest
<a name="container-insights-eks-otel-logs-retention"></a>

Standardmäßig speichert CloudWatch Logs Protokolldaten auf unbestimmte Zeit. Um die Speicherkosten zu kontrollieren, können Sie eine Aufbewahrungsrichtlinie für die Protokollgruppe festlegen.

**Um die Aufbewahrung von Protokollen festzulegen**
+ Führen Sie den folgenden Befehl aus. {{cluster-name}}Ersetzen Sie durch den Namen Ihres Amazon EKS-Clusters. {{30}}Ersetzen Sie es durch die Anzahl der Tage, für die Protokolle aufbewahrt werden sollen.

  ```
  aws logs put-retention-policy \
    --log-group-name "/aws/containerinsights/{{cluster-name}}/application" \
    --retention-in-days {{30}}
  ```

## Verifizierung
<a name="container-insights-eks-otel-logs-verify"></a>

Um zu überprüfen, ob die Protokollerfassung funktioniert, überprüfen Sie, ob die erwarteten Protokollgruppen vorhanden sind und Daten enthalten.

**Um die Protokollerfassung zu überprüfen**
+ Führen Sie den folgenden Befehl aus. {{cluster-name}}Ersetzen Sie durch den Namen Ihres Amazon EKS-Clusters.

  ```
  aws logs describe-log-groups \
    --log-group-name-prefix "/aws/containerinsights/{{cluster-name}}" \
    --query "logGroups[].{Name:logGroupName,StoredBytes:storedBytes}" \
    --output table
  ```

  In der Ausgabe werden die Namen der Protokollgruppen und die Anzahl der gespeicherten Byte angezeigt. Ein Wert ungleich Null für `StoredBytes` bestätigt, dass die Pipeline Protokolle liefert.

## Fehlerbehebung
<a name="container-insights-eks-otel-logs-troubleshoot"></a>

Verwenden Sie die folgenden Anleitungen, um häufig auftretende Probleme bei der Protokollerfassung zu lösen.

### Protokollgruppen wurden nach 5 Minuten nicht erstellt
<a name="container-insights-eks-otel-logs-ts-no-loggroup"></a>

**Symptom:** Die `/aws/containerinsights/{{cluster-name}}/application` Protokollgruppe wird nach 5 Minuten nicht in den CloudWatch Protokollen angezeigt.

**Ursache:** Der Collector verfügt nicht über die erforderlichen IAM-Berechtigungen, um Protokollgruppen und Protokollstreams zu erstellen.

**Lösung:** Stellen Sie sicher, dass die dem Collector zugeordnete IAM-Rolle mit der `CloudWatchAgentServerPolicy` verwalteten Richtlinie verknüpft ist. Diese Richtlinie umfasst die `logs:CreateLogStream` Berechtigungen `logs:CreateLogGroup` und.

### Die Anwendungsprotokollgruppe ist vorhanden, aber leer
<a name="container-insights-eks-otel-logs-ts-empty"></a>

**Symptom:** Die Anwendungsprotokollgruppe ist in CloudWatch Logs vorhanden, sie enthält jedoch keine Protokollstreams oder Protokollereignisse.

**Ursache:** Dieses Problem tritt auf, wenn Container nicht auf stdout oder stderr schreiben oder der Filelog-Empfänger nicht auf den Knoten zugreifen kann. `/var/log/pods/`

**Lösung: Gehen** Sie wie folgt vor, um dieses Problem zu beheben.

1. Stellen Sie sicher, dass Ihre Anwendungscontainer Protokolle auf stdout oder stderr schreiben.

1. Vergewissern Sie sich, dass der DaemonSet Collector-Pod über ein Volume Mount für verfügt. `/var/log/pods`

   ```
   kubectl get daemonset -n amazon-cloudwatch -o yaml | grep -A 5 "var/log/pods"
   ```

1. Überprüfen Sie die Collector-Protokolle auf Fehler beim Dateizugriff.

   ```
   kubectl logs -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent --tail=50 | grep -i "error\|permission"
   ```

### Hohe CloudWatch Protokollkosten
<a name="container-insights-eks-otel-logs-ts-costs"></a>

**Symptom:** Die Kosten für die Aufnahme oder Speicherung von CloudWatch Protokollen sind höher als erwartet.

**Ursache:** High-volume Namespaces (wie Namespaces für Lasttests oder Überwachung) erzeugen große Mengen an Protokollen.

**Lösung:** Führen Sie die folgenden Schritte aus, um die Kosten zu senken.

1. Schließen Sie Namespaces mit hohem Volumen von der Protokollerfassung aus. Detaillierte Anweisungen finden Sie unter [Schließen Sie Namespaces von der Protokollsammlung aus](#container-insights-eks-otel-logs-exclude-ns).

1. Legen Sie eine Aufbewahrungsrichtlinie für die Protokollgruppe fest, um ältere Protokolle automatisch zu löschen. Detaillierte Anweisungen finden Sie unter [Legen Sie die Protokollaufbewahrung fest](#container-insights-eks-otel-logs-retention).