Logging und Monitoring verwenden

Auf dieser Seite wird erläutert, wie Sie Cloud Logging und Cloud Monitoring sowie Prometheus und Grafana zum Logging und Monitoring verwenden. Eine Zusammenfassung der verfügbaren Konfigurationsoptionen finden Sie unter Logging und Monitoring.

Cloud Logging und Cloud Monitoring verwenden

In den folgenden Abschnitten wird erläutert, wie Sie Logging und Monitoring mit Anthos GKE On-Prem-Clustern verwenden.

Überwachte Ressourcen

Mit überwachten Ressourcen stellt Google Ressourcen wie Cluster, Knoten, Pods und Container dar. Weitere Informationen finden Sie in der Dokumentation zu den Typen überwachter Ressourcen von Cloud Monitoring.

Zum Abfragen von Logs und Messwerten müssen Sie mindestens folgende Ressourcenlabels kennen:

  • project_id: Projekt-ID für das Projekt, das mit dem GKE On-Prem-Cluster verknüpft ist.

  • location: Google Cloud-Region, in der Sie Logging-Logs und Monitoring-Messwerte speichern möchten. Es empfiehlt sich, eine Region auszuwählen, die sich in der Nähe Ihres lokalen Rechenzentrums befindet. Sie haben diesen Wert während der Installation im Feld stackdriver.clusterlocation Ihrer GKE On-Prem-Konfigurationsdatei angegeben.

  • cluster_name: Clustername, den Sie beim Erstellen des Clusters ausgewählt haben.

    Sie können den Wert für cluster_name entweder für den Administrator- oder den Nutzercluster abrufen, indem Sie die benutzerdefinierte Stackdriver-Ressource untersuchen:

      kubectl -n kube-system get stackdrivers stackdriver -o yaml | grep 'clusterName:'

Auf Logdaten zugreifen

Sie können auf Logs über die Loganzeige in der Cloud Console zugreifen. So greifen Sie beispielsweise auf die Logs eines Containers zu:

  1. Öffnen Sie in der Cloud Console die Loganzeige für Ihr Projekt.
  2. So finden Sie Logs für einen Container:
    1. Klicken Sie links oben auf das Drop-down-Menü für den Logkatalog und wählen Sie Kubernetes-Container aus.
    2. Wählen Sie den Clusternamen, den Namespace und dann einen Container aus der Hierarchie aus.

Dashboards zum Monitoring der Clusterintegrität erstellen

GKE On-Prem-Cluster sind standardmäßig so konfiguriert, dass sie System- und Containermesswerte überwachen. Nachdem Sie einen Administrator- oder Nutzercluster erstellt haben, empfiehlt es sich, mit Monitoring die folgenden Dashboards zu erstellen, damit das operative GKE On-Prem-Team die Clusterintegrität überwachen kann:

In diesem Abschnitt wird beschrieben, wie Sie diese Dashboards erstellen. Weitere Informationen über das Verfahren zum Erstellen von Dashboards, das in den folgenden Abschnitten beschrieben wird, finden Sie unter Dashboards nach API verwalten.

Voraussetzungen

Ihr Google-Konto benötigt die folgenden Berechtigungen, um Dashboards zu erstellen:

  • monitoring.dashboards.create
  • monitoring.dashboards.delete
  • monitoring.dashboards.update

Sie haben diese Berechtigungen, wenn Ihr Konto eine der folgenden Rollen hat. Sie können Ihre Berechtigungen in der Cloud Console prüfen:

  • monitoring.dashboardsEditor
  • monitoring.editor
  • editor für das Projekt
  • owner für das Projekt

Dashboard für den Status der Steuerungsebene erstellen

Die GKE On-Prem-Steuerungsebene besteht aus dem API-Server, dem Planer, dem Controller-Manager und dem etcd-Speicher. Wenn Sie den Status der Steuerungsebene überwachen möchten, erstellen Sie ein Dashboard, das den Status dieser Komponenten überwacht.

  1. Laden Sie die Dashboard-Konfiguration herunter: control-plane-status.json.

  2. Erstellen Sie mithilfe des folgenden Befehls ein benutzerdefiniertes Dashboard mit der Konfigurationsdatei:

    gcloud monitoring dashboards create --config-from-file=control-plane-status.json
  3. Wählen Sie in der Google Cloud Console Monitoring aus oder klicken Sie auf die folgende Schaltfläche:

    Zu Monitoring

  4. Wählen Sie Ressourcen > Dashboards aus und rufen Sie das Dashboard Anthos GKE On-Prem Control Plane Status (preview) auf. Der Status der Steuerungsebene jedes Nutzerclusters wird aus separaten Namespaces im Administratorcluster erfasst. Das Feld namespace_name enthält den Namen des Nutzerclusters.

    In jedem Diagramm ist ein SLO-Schwellenwert (Service Level Objective) von 0,999 festgelegt.

  5. Erstellen Sie optional Benachrichtigungsrichtlinien.

Dashboard für den Pod-Status erstellen

Gehen Sie so vor, um ein Dashboard mit der Phase jedes Pods sowie der Neustartzeit und der Ressourcennutzung jedes Containers zu erstellen:

  1. Laden Sie die Dashboard-Konfiguration herunter: pod-status.json.

  2. Erstellen Sie mithilfe des folgenden Befehls ein benutzerdefiniertes Dashboard mit der Konfigurationsdatei:

    gcloud monitoring dashboards create --config-from-file=pod-status.json
  3. Wählen Sie in der Google Cloud Console Monitoring aus oder klicken Sie auf die folgende Schaltfläche:

    Zu Monitoring

  4. Wählen Sie Ressourcen > Dashboards aus und rufen Sie das Dashboard Anthos GKE On-Prem Pod Status (preview) auf.

  5. Erstellen Sie optional Benachrichtigungsrichtlinien.

Auf Messwertdaten zugreifen

Mit Metrics Explorer können Sie aus über 1.500 Messwerten auswählen. So greifen Sie auf Metrics Explorer zu:

  1. Wählen Sie in der Google Cloud Console Monitoring aus oder klicken Sie auf die folgende Schaltfläche:

    Zu Monitoring

  2. Wählen Sie Ressourcen > Metrics Explorer aus.

Auf Monitoring-Metadaten zugreifen

Metadaten werden indirekt über Messwerte verwendet. Wenn Sie in Monitoring Metrics Explorer nach Messwerten filtern, werden Optionen zum Filtern von Messwerten nach metadata.systemLabels und metadata.userLabels angezeigt. Systemlabels sind Labels wie der Knotenname und der Servicename für Pods. Nutzerlabels sind Labels, die Pods in den Kubernetes-YAML-Dateien im Bereich "metadata" der Pod-Spezifikation zugewiesen sind.

Standardmäßige Kontingentlimits in Cloud Monitoring

Für das GKE On-Prem-Monitoring gilt standardmäßig ein Limit von 6.000 API-Aufrufen pro Minute pro Projekt. Wenn Sie dieses Limit überschreiten, werden Ihre Messwerte möglicherweise nicht angezeigt. Wenn Sie ein höheres Monitoring-Limit benötigen, fordern Sie dieses über die Google Cloud Console an.

Prometheus und Grafana

In den folgenden Abschnitten wird erläutert, wie Prometheus und Grafana mit GKE On-Prem-Clustern verwendet werden.

Prometheus und Grafana aktivieren

Ab GKE On-Prem-Version 1.2 können Sie auswählen, ob Prometheus und Grafana aktiviert oder deaktiviert werden sollen. In neuen Nutzerclustern sind Prometheus und Grafana standardmäßig deaktiviert.

  1. Ihr Nutzercluster hat ein Monitoring-Objekt namens monitoring-sample. Öffnen Sie das Objekt zum Bearbeiten:

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] edit \
       monitoring monitoring-sample --namespace kube-system

    Dabei ist [USER_CLUSTER_KUBECONFIG] die kubeconfig-Datei für Ihren Nutzercluster.

  2. Um Prometheus und Grafana zu aktivieren, setzen Sie enablePrometheus auf true. Um Prometheus und Grafana zu deaktivieren, setzen Sie enablePrometheus auf false:

    apiVersion: addons.k8s.io/v1alpha1
    kind: Monitoring
    metadata:
     labels:
       k8s-app: monitoring-operator
     name: monitoring-sample
     namespace: kube-system
    spec:
     channel: stable
     ...
     enablePrometheus: true
  3. Speichern Sie Ihre Änderungen, indem Sie die Bearbeitungssitzung schließen.

Bekanntes Problem

In Nutzerclustern werden Prometheus und Grafana während des Upgrades automatisch deaktiviert. Die Konfigurations- und Messwertdaten gehen jedoch nicht verloren.

Um dieses Problem zu umgehen, öffnen Sie nach dem Upgrade monitoring-sample zur Bearbeitung und setzen Sie enablePrometheus auf true.

Über Grafana-Dashboards auf Monitoring-Messwerte zugreifen

Grafana zeigt Messwerte aus Ihren Clustern an. Um diese Messwerte zu sehen, müssen Sie auf die Dashboards von Grafana zugreifen:

  1. Rufen Sie den Namen des im kube-system-Namespace eines Nutzerclusters ausgeführten Grafana-Pods ab:

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] -n kube-system get pods

    Dabei ist [USER_CLUSTER_KUBECONFIG] die kubeconfig-Datei des Nutzerclusters.

  2. Der Container im Grafana-Pod überwacht den TCP-Port 3000. Leiten Sie einen lokalen Port zu Port 3000 im Pod weiter, damit Sie sich die Dashboards von Grafana in einem Webbrowser ansehen können.

    Nehmen wir an, der Name des Pods lautet grafana-0. Um Port 50000 zu Port 3000 im Pod weiterzuleiten, geben Sie folgenden Befehl ein:

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] -n kube-system port-forward grafana-0 50000:3000
  3. Rufen Sie in einem Webbrowser http://localhost:50000 auf. Das Grafana Home Dashboard des Nutzerclusters sollte geladen werden.

  4. Um auf andere Dashboards zuzugreifen, klicken Sie links oben auf der Seite auf das Drop-down-Menü Home.

Ein Beispiel für die Verwendung von Grafana finden Sie unter Grafana-Dashboard erstellen.

Auf Benachrichtigungen zugreifen

Prometheus Alertmanager erfasst Benachrichtigungen vom Prometheus-Server. Sie können sich diese Benachrichtigungen in einem Grafana-Dashboard ansehen. Dazu müssen Sie auf das Dashboard zugreifen:

  1. Der Container im Pod alertmanager-0 überwacht den TCP-Port 9093. Leiten Sie einen lokalen Port zu Port 9093 im Pod weiter:

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] port-forward \
       -n kube-system alertmanager-0 50001:9093
  2. Rufen Sie in einem Webbrowser http://localhost:50001 auf.

Prometheus Alertmanager-Konfiguration ändern

Sie können die Standardkonfiguration von Prometheus Alertmanager ändern, indem Sie die Datei monitoring.yaml Ihres Nutzerclusters bearbeiten. Sie sollten dies tun, wenn Sie Benachrichtigungen an ein bestimmtes Ziel leiten möchten, statt sie im Dashboard zu belassen. In der Prometheus-Dokumentation zur Konfiguration erfahren Sie, wie Sie Alertmanager konfigurieren.

So ändern Sie die Alertmanager-Konfiguration:

  1. Kopieren Sie die Manifestdatei monitoring.yaml des Nutzerclusters:

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] -n kube-system \
       get monitoring monitoring-sample -o yaml > monitoring.yaml
  2. Nehmen Sie Änderungen an den Feldern unter spec.alertmanager.yml vor, um Alertmanager zu konfigurieren. Wenn Sie fertig sind, speichern Sie das geänderte Manifest.

  3. Wenden Sie das Manifest auf Ihren Cluster an:

    kubectl apply --kubeconfig [USER_CLUSTER_KUBECONIFG] -f monitoring.yaml

Prometheus-Ressourcen skalieren

Die Standardkonfiguration für das Monitoring unterstützt bis zu fünf Knoten. Bei größeren Clustern können Sie die Prometheus-Server-Ressourcen anpassen. Der empfohlene Wert pro Clusterknoten für CPU ist "50m" und der für Arbeitsspeicher "500Mi". Achten Sie darauf, dass Ihr Cluster zwei Knoten enthält, die jeweils genügend Ressourcen für Prometheus haben. Weitere Informationen finden Sie unter Größe eines Nutzerclusters anpassen.

Führen Sie die folgenden Schritte aus, um Prometheus-Serverressourcen zu ändern:

  1. Kopieren Sie die Manifestdatei monitoring.yaml des Nutzerclusters:

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] -n kube-system get monitoring monitoring-sample -o yaml > monitoring.yaml
  2. Um Ressourcen zu überschreiben, ändern Sie die Felder unter spec.resourceOverride. Wenn Sie fertig sind, speichern Sie das geänderte Manifest. Beispiel:

    spec:
      resourceOverride:
      - component: Prometheus
        resources:
          requests:
            cpu: 300m
            memory: 3000Mi
          limits:
            cpu: 300m
            memory: 3000Mi
    
  3. Wenden Sie das Manifest auf Ihren Cluster an:

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] apply -f monitoring.yaml

Grafana-Dashboard erstellen

Sie haben eine Anwendung bereitgestellt, die einen Messwert verfügbar macht, und geprüft, ob der Messwert verfügbar ist und ob Prometheus den Messwert abruft. Jetzt können Sie den Messwert aus der Anwendungsebene einem benutzerdefinierten Grafana-Dashboard hinzufügen.

So erstellen Sie ein Grafana-Dashboard:

  1. Richten Sie falls erforderlich den Zugriff auf Grafana ein.
  2. Klicken Sie im Home Dashboard links oben auf der Seite auf das Drop-down-Menü Home.
  3. Klicken Sie im Menü auf der rechten Seite auf New dashboard.
  4. Klicken Sie im Bereich New panel auf Graph. Ein leeres Grafik-Dashboard wird angezeigt.
  5. Klicken Sie auf Panel title und anschließend auf Edit. Im unteren Bereich Graph wird der Tab Metrics geöffnet.
  6. Wählen Sie im Drop-down-Menü Data Source die Option user aus. Klicken Sie auf Add query und geben Sie foo in das Feld search ein.
  7. Klicken Sie rechts oben auf die Schaltfläche Back to dashboard. Ihr Dashboard wird angezeigt.
  8. Um das Dashboard zu speichern, klicken Sie rechts oben auf Save dashboard. Wählen Sie einen Namen für das Dashboard aus und klicken Sie auf Save.

Monitoring im Cluster deaktivieren

Wenn Sie das Monitoring innerhalb des Clusters deaktivieren möchten, machen Sie die am Objekt monitoring-sample vorgenommenen Änderungen rückgängig:

  1. Öffnen Sie das Objekt monitoring-sample zum Bearbeiten:

    kubectl --kubeconfig USER_CLUSTER_KUBECONFIG edit \
       monitoring monitoring-sample --namespace kube-system

    Ersetzen Sie USER_CLUSTER_KUBECONFIG durch die kubeconfig-Datei des Nutzerclusters.

  2. Um Prometheus und Grafana zu deaktivieren, setzen Sie enablePrometheus auf false:

       apiVersion: addons.k8s.io/v1alpha1
       kind: Monitoring
       metadata:
         labels:
           k8s-app: monitoring-operator
         name: monitoring-sample
         namespace: kube-system
       spec:
         channel: stable
         ...
         enablePrometheus: false
    
  3. Speichern Sie Ihre Änderungen, indem Sie die Bearbeitungssitzung schließen.

  4. Prüfen Sie, ob die StatefulSets prometheus-0, prometheus-1 und grafana-0 gelöscht wurden:

    kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get pods --namespace kube-system

Beispiel: Messwerte aus der Anwendungsebene zu einem Grafana-Dashboard hinzufügen

In den folgenden Abschnitten erfahren Sie, wie Sie Messwerte für eine Anwendung hinzufügen. In diesem Abschnitt führen Sie die folgenden Aufgaben aus:

  • Beispielanwendung bereitstellen, die einen Messwert namens foo verfügbar macht
  • Prüfen, ob Prometheus den Messwert verfügbar macht und abruft
  • Benutzerdefiniertes Grafana-Dashboard erstellen

Beispielanwendung bereitstellen

Die Beispielanwendung wird in einem einzigen Pod ausgeführt. Der Container des Pods macht einen Messwert foo mit dem konstanten Wert 40 verfügbar.

Erstellen Sie das folgende Pod-Manifest pro-pod.yaml:

apiVersion: v1
kind: Pod
metadata:
  name: prometheus-example
  annotations:
    prometheus.io/scrape: 'true'
    prometheus.io/port: '8080'
    prometheus.io/path: '/metrics'
spec:
  containers:
  - image: k8s.gcr.io/prometheus-dummy-exporter:v0.1.0
    name: prometheus-example
    command:
    - /bin/sh
    - -c
    - ./prometheus_dummy_exporter --metric-name=foo --metric-value=40 --port=8080

Wenden Sie dann das Pod-Manifest auf Ihren Nutzercluster an:

kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] apply -f pro-pod.yaml

Prüfen, ob der Messwert angezeigt und abgerufen wird

  1. Der Container im Pod prometheus-example überwacht den TCP-Port 8080. Leiten Sie einen lokalen Port zu Port 8080 im Pod weiter:

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] port-forward prometheus-example 50002:8080
  2. Führen Sie den folgenden Befehl aus, um zu prüfen, ob die Anwendung den Messwert verfügbar macht:

    curl localhost:50002/metrics | grep foo
    

    Der Befehl gibt die folgende Ausgabe zurück:

    # HELP foo Custom metric
    # TYPE foo gauge
    foo 40
  3. Der Container im Pod prometheus-0 überwacht den TCP-Port 9090. Leiten Sie einen lokalen Port zu Port 9090 im Pod weiter:

    kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] port-forward prometheus-0 50003:9090
  4. Um zu prüfen, ob Prometheus den Messwert abruft, rufen Sie http://localhost:50003/targets auf. Dadurch sollten Sie zum Pod prometheus-0 unter der Zielgruppe prometheus-io-pods gelangen.

  5. Rufen Sie zum Ansehen von Messwerten in Prometheus http://localhost:50003/graph auf. Geben Sie foo im Feld search ein und klicken Sie auf Execute. Auf der Seite sollte der Messwert angezeigt werden.