Logging und Monitoring für Anwendungen aktivieren

Auf dieser Seite wird gezeigt, wie Sie einen Cluster für Anthos-Cluster auf Bare Metal konfigurieren, sodass benutzerdefinierte Logs und Messwerte aus Nutzeranwendungen an Cloud Logging und Cloud Monitoring und an den Managed Service für Prometheus gesendet werden.

Managed Service for Prometheus aktivieren

Die Konfiguration für Managed Service for Prometheus wird in einem Stackdriver-Objekt mit dem Namen stackdriver angegeben. Weitere Informationen sowie Best Practices und Fehlerbehebungen finden Sie in der Dokumentation zu Managed Service for Prometheus.

So konfigurieren Sie das Objekt stackdriver, um Google Cloud Managed Service for Prometheus zu aktivieren:

  1. Öffnen Sie das Stackdriver-Objekt zur Bearbeitung:

    kubectl --kubeconfig=CLUSTER_KUBECONFIG \
        --namespace kube-system edit stackdriver stackdriver
    

    Ersetzen Sie CLUSTER_KUBECONFIG durch den Pfad der kubeconfig-Datei des Clusters.

  2. Legen Sie unter spec den Wert enableGMPForApplications auf true fest:

    apiVersion: addons.gke.io/v1alpha1
    kind: Stackdriver
    metadata:
      name: stackdriver
      namespace: kube-system
    spec:
      projectID: ...
      clusterName: ...
      clusterLocation: ...
      proxyConfigSecretName: ...
      enableGMPForApplications: true
      enableVPC: ...
      optimizedMetrics: true
    
  3. Speichern und schließen Sie die bearbeitete Datei.

    Die von Google verwalteten Prometheus-Komponenten werden automatisch im Cluster im Namespace gmp-system gestartet.

  4. Prüfen Sie die von Google verwalteten Prometheus-Komponenten:

    kubectl --kubeconfig=CLUSTER_KUBECONFIG --namespace gmp-system get pods
    

    Die Ausgabe dieses Befehls sieht wie folgt aus:

    NAME                              READY   STATUS    RESTARTS        AGE
    collector-abcde                   2/2     Running   1 (5d18h ago)   5d18h
    collector-fghij                   2/2     Running   1 (5d18h ago)   5d18h
    collector-klmno                   2/2     Running   1 (5d18h ago)   5d18h
    gmp-operator-68d49656fc-abcde     1/1     Running   0               5d18h
    rule-evaluator-7c686485fc-fghij   2/2     Running   1 (5d18h ago)   5d18h
    

Managed Service for Prometheus unterstützt die Regelauswertung und Benachrichtigungen. Informationen zum Einrichten der Regelauswertung finden Sie unter Regelauswertung.

Beispielanwendung ausführen

Der verwaltete Dienst stellt ein Manifest für eine Beispielanwendung prom-example bereit, die Prometheus-Messwerte am metrics-Port ausgibt. Die Anwendung verwendet drei Replikate.

So stellen Sie die Anwendung bereit:

  1. Erstellen Sie den Namespace gmp-test für Ressourcen, die Sie als Teil der Beispielanwendung erstellen:

    kubectl --kubeconfig=CLUSTER_KUBECONFIG create ns gmp-test
    
  2. Wenden Sie das Anwendungsmanifest mit dem folgenden Befehl an:

    kubectl -n gmp-test apply \
        -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.4.1/examples/example-app.yaml
    

PodMonitoring-Ressource konfigurieren

In diesem Abschnitt konfigurieren Sie eine benutzerdefinierte PodMonitoring-Ressource, um von der Beispielanwendung ausgegebene Messwertdaten zu erfassen und an Managed Service for Prometheus zu senden. Die benutzerdefinierte Ressource PodMonitoring verwendet Ziel-Scraping. In diesem Fall wenden die Collector-Agents Scraping auf den Endpunkt /metrics, an den die Beispielanwendung Daten ausgibt.

Eine benutzerdefinierte PodMonitoring-Ressource wendet Ziel-Scraping nur in dem Namespace an, in dem sie bereitgestellt wird. Wenn Sie Ziel-Scraping in mehreren Namespaces anwenden möchten, stellen Sie in jedem Namespace dieselbe benutzerdefinierte PodMonitoring-Ressource bereit. Mit dem folgenden Befehl können Sie prüfen, ob die PodMonitoring-Ressource im gewünschten Namespace installiert ist:

kubectl --kubeconfig CLUSTER_KUBECONFIG get podmonitoring -A

Eine Referenzdokumentation zu allen benutzerdefinierten Ressourcen für Managed Service for Prometheus finden Sie in der Referenz zu prometheus-engine/doc/api reference.

Das folgende Manifest definiert die PodMonitoring-Ressource prom-example im Namespace gmp-test. Die Ressource findet alle Pods im Namespace mit dem Label app mit dem Wert prom-example. Die übereinstimmenden Pods werden an einem Port mit dem Namen metrics alle 30 Sekunden über den /metrics-HTTP-Pfad extrahiert.

apiVersion: monitoring.googleapis.com/v1
kind: PodMonitoring
metadata:
  name: prom-example
spec:
  selector:
    matchLabels:
      app: prom-example
  endpoints:
  - port: metrics
    interval: 30s

Führen Sie folgenden Befehl aus, um diese Ressource anzuwenden:

kubectl --kubeconfig CLUSTER_KUBECONFIG -n gmp-test apply \
    -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.4.1/examples/pod-monitoring.yaml

Managed Service for Prometheus extrahiert jetzt übereinstimmende Pods.

Messwertdaten abfragen

Am einfachsten können Sie prüfen, ob Ihre Prometheus-Daten exportiert werden, indem Sie die PromQL-basierte Seite Managed Service for Prometheus in der Google Cloud Console verwenden.

So rufen Sie diese Seite auf:

  1. Rufen Sie in der Google Cloud Console die Seite Monitoring auf oder klicken Sie auf die folgende Schaltfläche:

    Zu Monitoring

  2. Klicken Sie im Navigationsbereich von Monitoring auf Verwaltetes Prometheus.

Auf der Seite Managed Service for Prometheus können Sie PromQL-Abfragen verwenden, um erhobene Daten abzurufen und mit dem verwalteten Dienst grafisch darzustellen. Auf dieser Seite können nur Daten abgefragt werden, die vom verwalteten Dienst für Prometheus erfasst wurden.

Der folgende Screenshot zeigt ein Diagramm mit dem Messwert up:

Verwalteter Dienst für Prometheus-Diagramm für den Prometheus-Messwert „up”.

Wenn Sie große Datenmengen erfassen, können Sie exportierte Messwerte filtern, um die Kosten niedrig zu halten.

Cloud Logging für Nutzeranwendungen aktivieren

Die Konfiguration für Cloud Logging und Cloud Monitoring wird in einem Stackdriver-Objekt namens stackdriver gespeichert.

  1. Öffnen Sie das Stackdriver-Objekt zur Bearbeitung:

    kubectl --kubeconfig=CLUSTER_KUBECONFIG \
        --namespace kube-system edit stackdriver stackdriver
    

    Ersetzen Sie CLUSTER_KUBECONFIG durch den Pfad der kubeconfig-Datei des Nutzerclusters.

  2. Legen Sie im Abschnitt spec den Wert enableCloudLoggingForApplications auf true fest:

    apiVersion: addons.gke.io/v1alpha1
      kind: Stackdriver
      metadata:
        name: stackdriver
        namespace: kube-system
      spec:
        projectID: ...
        clusterName: ...
        clusterLocation: ...
        proxyConfigSecretName: ...
        enableCloudLoggingForApplications: true
        enableVPC: ...
        optimizedMetrics: true
    
  3. Speichern und schließen Sie die bearbeitete Datei.

Beispielanwendung ausführen

In diesem Abschnitt erstellen Sie eine Anwendung, die benutzerdefinierte Logs schreibt.

  1. Speichern Sie das folgende Deployment-Manifeste in eine Datei mit dem Namen my-app.yaml.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: "monitoring-example"
      namespace: "default"
      labels:
        app: "monitoring-example"
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: "monitoring-example"
      template:
        metadata:
          labels:
            app: "monitoring-example"
        spec:
          containers:
          - image: gcr.io/google-samples/prometheus-dummy-exporter:latest
            name: prometheus-example-exporter
            imagePullPolicy: Always
            command:
            - /bin/sh
            - -c
            - ./prometheus-dummy-exporter --metric-name=example_monitoring_up --metric-value=1 --port=9090
            resources:
              requests:
                cpu: 100m
    
  2. Deployment erstellen

    kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-app.yaml
    

Anwendungslogs aufrufen.

Console

  1. Rufen Sie in der Google Cloud Console den Log-Explorer auf.

    Zum Log-Explorer

  2. Klicken Sie auf Ressource. Wählen Sie im Menü ALLE RESSOURCENTYPEN die Option Kubernetes-Container aus.

  3. Wählen Sie unter CLUSTER_NAME den Namen Ihres Nutzerclusters aus.

  4. Wählen Sie unter NAMESPACE_NAME die Option Standard aus.

  5. Klicken Sie auf Hinzufügen und dann auf Abfrage ausführen.

  6. Unter Abfrageergebnisse sehen Sie die Logeinträge des Deployment monitoring-example. Beispiel:

    {
      "textPayload": "2020/11/14 01:24:24 Starting to listen on :9090\n",
      "insertId": "1oa4vhg3qfxidt",
      "resource": {
        "type": "k8s_container",
        "labels": {
          "pod_name": "monitoring-example-7685d96496-xqfsf",
          "cluster_name": ...,
          "namespace_name": "default",
          "project_id": ...,
          "location": "us-west1",
          "container_name": "prometheus-example-exporter"
        }
      },
      "timestamp": "2020-11-14T01:24:24.358600252Z",
      "labels": {
        "k8s-pod/pod-template-hash": "7685d96496",
        "k8s-pod/app": "monitoring-example"
      },
      "logName": "projects/.../logs/stdout",
      "receiveTimestamp": "2020-11-14T01:24:39.562864735Z"
    }
    

gcloud-CLI

  1. Führen Sie folgenden Befehl aus:

    gcloud logging read 'resource.labels.project_id="PROJECT_ID" AND \
        resource.type="k8s_container" AND resource.labels.namespace_name="default"'
    

    Ersetzen Sie PROJECT_ID durch die ID Ihres Projekts.

  2. In der Ausgabe sehen Sie die Logeinträge des Deployments monitoring-example. Beispiel:

    insertId: 1oa4vhg3qfxidt
    labels:
      k8s-pod/app: monitoring-example
      k8s- pod/pod-template-hash: 7685d96496
    logName: projects/.../logs/stdout
    receiveTimestamp: '2020-11-14T01:24:39.562864735Z'
    resource:
      labels:
        cluster_name: ...
        container_name: prometheus-example-exporter
        location: us-west1
        namespace_name: default
        pod_name: monitoring-example-7685d96496-xqfsf
        project_id: ...
      type: k8s_container
    textPayload: |
      2020/11/14 01:24:24 Starting to listen on :9090
    timestamp: '2020-11-14T01:24:24.358600252Z'
    

Logging und Monitoring für Nutzeranwendungen aktivieren (Legacy)

Verwenden Sie das Feld spec.clusterOperations.enableApplication in der Cluster-Konfigurationsdatei, um Logging und Monitoring für Ihre Anwendungen zu aktivieren.

  1. Aktualisieren Sie die Cluster-Konfigurationsdatei, um enableApplication auf true festzulegen:

    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-user-basic
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: user-basic
      namespace: cluster-user-basic
    spec:
      type: user
      ...
      clusterOperations:
        projectID: project-fleet
        location: us-central1
        enableApplication: true
        ...
    
  2. Wenden Sie die Änderungen mit bmctl update an:

    bmctl update cluster -c CLUSTER_NAME --admin-kubeconfig=ADMIN_KUBECONFIG
    

    Dabei gilt:

    • CLUSTER_NAME: der Name des Clusters, der aktualisiert werden soll.
    • ADMIN_KUBECONFIG: der Pfad zur kubeconfig-Datei des Administratorclusters.

Arbeitslasten annotieren

Zum Aktivieren benutzerdefinierter Messwerte aus einer Anwendung fügen Sie dem Dienst- oder Pod-Manifest der Anwendung die Annotation prometheus.io/scrape: "true" hinzu. Alternativ können Sie die Annotation in den Abschnitt spec.template des Deployment- oder DaemonSet-Manifests einfügen, damit es an die Pods übergeben wird.

Beispielanwendung ausführen

In diesem Abschnitt erstellen Sie eine Anwendung, die benutzerdefinierte Logs schreibt und einen benutzerdefinierten Messwert bereitstellt.

  1. Speichern Sie die folgenden Dienst- und Deployment-Manifeste in einer Datei mit dem my-app.yaml-Namen. Der Dienst hat die prometheus.io/scrape: "true"-Annotation:

    kind: Service
    apiVersion: v1
    metadata:
      name: "monitoring-example"
      namespace: "default"
      annotations:
        prometheus.io/scrape: "true"
    spec:
      selector:
        app: "monitoring-example"
      ports:
        - name: http
          port: 9090
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: "monitoring-example"
      namespace: "default"
      labels:
        app: "monitoring-example"
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: "monitoring-example"
      template:
        metadata:
          labels:
            app: "monitoring-example"
        spec:
          containers:
          - image: gcr.io/google-samples/prometheus-dummy-exporter:latest
            name: prometheus-example-exporter
            imagePullPolicy: Always
            command:
            - /bin/sh
            - -c
            - ./prometheus-dummy-exporter --metric-name=example_monitoring_up --metric-value=1 --port=9090
            resources:
              requests:
                cpu: 100m
    
  2. Erstellen Sie das Deployment und den Dienst:

    kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-app.yaml
    

Anwendungslogs aufrufen.

Console

  1. Rufen Sie in der Google Cloud Console den Log-Explorer auf.

    Zum Log-Explorer

  2. Klicken Sie auf Ressource. Wählen Sie unter ALLE RESSOURCENTYPEN die Option Kubernetes-Container aus.

  3. Wählen Sie unter CLUSTER_NAME den Namen Ihres Nutzerclusters aus.

  4. Wählen Sie unter NAMESPACE_NAME die Option Standard aus.

  5. Klicken Sie auf Hinzufügen und dann auf Abfrage ausführen.

  6. Unter Abfrageergebnisse sehen Sie die Logeinträge des Deployment monitoring-example. Beispiel:

    {
      "textPayload": "2020/11/14 01:24:24 Starting to listen on :9090\n",
      "insertId": "1oa4vhg3qfxidt",
      "resource": {
        "type": "k8s_container",
        "labels": {
          "pod_name": "monitoring-example-7685d96496-xqfsf",
          "cluster_name": ...,
          "namespace_name": "default",
          "project_id": ...,
          "location": "us-west1",
          "container_name": "prometheus-example-exporter"
        }
      },
      "timestamp": "2020-11-14T01:24:24.358600252Z",
      "labels": {
        "k8s-pod/pod-template-hash": "7685d96496",
        "k8s-pod/app": "monitoring-example"
      },
      "logName": "projects/.../logs/stdout",
      "receiveTimestamp": "2020-11-14T01:24:39.562864735Z"
    }
    

gcloud-CLI

  1. Führen Sie folgenden Befehl aus:

    gcloud logging read 'resource.labels.project_id="PROJECT_ID" AND \
        resource.type="k8s_container" AND resource.labels.namespace_name="default"'
    

    Ersetzen Sie PROJECT_ID durch die ID Ihres Projekts.

  2. In der Ausgabe sehen Sie die Logeinträge des Deployments monitoring-example. Beispiel:

    insertId: 1oa4vhg3qfxidt
    labels:
      k8s-pod/app: monitoring-example
      k8s- pod/pod-template-hash: 7685d96496
    logName: projects/.../logs/stdout
    receiveTimestamp: '2020-11-14T01:24:39.562864735Z'
    resource:
      labels:
        cluster_name: ...
        container_name: prometheus-example-exporter
        location: us-west1
        namespace_name: default
        pod_name: monitoring-example-7685d96496-xqfsf
        project_id: ...
      type: k8s_container
    textPayload: |
      2020/11/14 01:24:24 Starting to listen on :9090
    timestamp: '2020-11-14T01:24:24.358600252Z'
    

Anwendungsmesswerte in der Google Cloud Console ansehen

Ihre Beispielanwendung stellt einen benutzerdefinierten Messwert namens example_monitoring_up bereit. Die Werte dieses Messwerts finden Sie in der Google Cloud Console.

  1. Rufen Sie in der Google Cloud Console den Metrics Explorer auf.

    Zum Metrics Explorer

  2. Wählen Sie als Ressourcentyp Kubernetes Pod oder Kubernetes Container aus.

  3. Wählen Sie external.googleapis.com/prometheus/example_monitoring_up als Messwert aus.

  4. Im Diagramm sehen Sie, dass example_monitoring_up einen wiederkehrenden Wert von 1 hat.