Logging und Monitoring für Anwendungen

Auf dieser Seite wird gezeigt, wie Sie einen Nutzercluster für Anthos-Cluster auf VMware (GKE On-Prem) konfigurieren, sodass benutzerdefinierte Logs und Messwerte aus Nutzeranwendungen an Cloud Logging und Cloud Monitoring gesendet werden.

Logging und Monitoring für Nutzeranwendungen aktivieren

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

  1. Öffnen Sie das Objekt stackdriver zum Bearbeiten:

    kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG --namespace kube-system edit stackdriver stackdriver
    

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

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

      apiVersion: addons.sigs.k8s.io/v1alpha1
      kind: Stackdriver
      metadata:
        name: stackdriver
        namespace: kube-system
      spec:
        projectID: ...
        clusterName: ...
        clusterLocation: ...
        proxyConfigSecretName: ...
        enableStackdriverForApplications: true
        enableVPC: ...
        optimizedMetrics: true
    
  3. Schließen Sie die bearbeitete Datei.

Arbeitslasten annotieren

Fügen Sie dem Service- oder Deployment-Manifest der Anwendung die Annotation prometheus.io/scrape: "true" hinzu, um das Erfassen benutzerdefinierter Messwerte aus einer Anwendung zu aktivieren.

Um die automatische Speicherbereinigung von Messwerten zu vermeiden, empfehlen wir, das Extraktionsintervall für Messwerte auf eine Minute festzulegen.

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 USER_CLUSTER_KUBECONFIG apply -f my-app.yaml
    

Anwendungslogs ansehen

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 ALL_RESOURCE_TYPES 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 default 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

  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 Logging-Monitoring-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 aufrufen

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 Kubernetes Pod als Ressourcentyp aus.

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

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