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:
Ö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.Legen Sie unter
spec
den WertenableGMPForApplications
auftrue
fest:apiVersion: addons.gke.io/v1alpha1 kind: Stackdriver metadata: name: stackdriver namespace: kube-system spec: projectID: ... clusterName: ... clusterLocation: ... proxyConfigSecretName: ... enableGMPForApplications: true enableVPC: ... optimizedMetrics: true
Speichern und schließen Sie die bearbeitete Datei.
Die von Google verwalteten Prometheus-Komponenten werden automatisch im Cluster im Namespace
gmp-system
gestartet.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:
Erstellen Sie den Namespace
gmp-test
für Ressourcen, die Sie als Teil der Beispielanwendung erstellen:kubectl --kubeconfig=CLUSTER_KUBECONFIG create ns gmp-test
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 lässt sich prüfen, ob Ihre Prometheus-Daten exportiert werden. Verwenden Sie dazu in der Google Cloud Console PromQL-Abfragen im Metrics Explorer.
So führen Sie eine PromQL-Abfrage aus:
Rufen Sie in der Google Cloud Console die Seite Monitoring auf oder klicken Sie auf die folgende Schaltfläche:
Wählen Sie im Navigationsbereich Metrics Explorer aus.
Verwenden Sie die Prometheus Query Language (PromQL), um die Daten anzugeben, die im Diagramm angezeigt werden sollen:
Wählen Sie in der Symbolleiste des Bereichs Messwert auswählen die Option Code-Editor aus.
Wählen Sie im Menü Sprache die Ein-/Aus-Schaltfläche PromQL aus. Die Sprachauswahl befindet sich unten im Bereich Codeeditor.
Geben Sie die Abfrage in den Abfrageeditor ein. Verwenden Sie beispielsweise die folgende Abfrage, um die durchschnittliche Anzahl der Sekunden darzustellen, die CPUs in der letzten Stunde in jedem Modus verbracht haben:
avg(rate(kubernetes_io:anthos_container_cpu_usage_seconds_total {monitored_resource="k8s_node"}[1h]))
Weitere Informationen zur Verwendung von PromQL finden Sie unter PromQL in Cloud Monitoring.
Der folgende Screenshot zeigt ein Diagramm mit dem Messwert anthos_container_cpu_usage_seconds_total
:
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.
Ö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.Legen Sie im Abschnitt
spec
den WertenableCloudLoggingForApplications
auftrue
fest:apiVersion: addons.gke.io/v1alpha1 kind: Stackdriver metadata: name: stackdriver namespace: kube-system spec: projectID: ... clusterName: ... clusterLocation: ... proxyConfigSecretName: ... enableCloudLoggingForApplications: true enableVPC: ... optimizedMetrics: true
Speichern und schließen Sie die bearbeitete Datei.
Beispielanwendung ausführen
In diesem Abschnitt erstellen Sie eine Anwendung, die benutzerdefinierte Logs schreibt.
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
Deployment erstellen
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-app.yaml
Anwendungslogs aufrufen.
Console
Rufen Sie in der Google Cloud Console den Log-Explorer auf.
Klicken Sie auf Ressource. Wählen Sie im Menü ALLE RESSOURCENTYPEN die Option Kubernetes-Container aus.
Wählen Sie unter CLUSTER_NAME den Namen Ihres Nutzerclusters aus.
Wählen Sie unter NAMESPACE_NAME die Option Standard aus.
Klicken Sie auf Hinzufügen und dann auf Abfrage ausführen.
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
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.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)
Es wird dringend empfohlen, die obigen enableGMPForApplications
und enableCloudLoggingForApplications
zu verwenden, um das Monitoring und Logging für Nutzeranwendungen zu aktivieren.
Die folgenden Schritte funktionieren weiterhin, werden aber nicht empfohlen. Bitte lesen Sie diesen bekannten Fehler, bevor Sie die folgenden Schritte ausführen.
Verwenden Sie das Feld spec.clusterOperations.enableApplication
in der Cluster-Konfigurationsdatei, um Logging und Monitoring für Ihre Anwendungen zu aktivieren.
Aktualisieren Sie die Cluster-Konfigurationsdatei, um
enableApplication
auftrue
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 ...
Wenden Sie die Änderungen mit
bmctl update
an:bmctl update cluster -c CLUSTER_NAME --admin-kubeconfig=ADMIN_KUBECONFIG
Ersetzen Sie Folgendes:
CLUSTER_NAME
: der Name des Clusters, der aktualisiert werden soll.ADMIN_KUBECONFIG
: der Pfad zur kubeconfig-Datei des Administratorclusters.
Arbeitslasten annotieren
Fügen Sie dem Dienst- oder Pod-Manifest der Anwendung die Annotation prometheus.io/scrape: "true"
hinzu oder fügen Sie diese Annotation im Abschnitt spec.template
im Deployment- oder DaemonSet-Manifest hinzu, um die Erfassung von benutzerdefinierten Messwerten einer Anwendung zu aktivieren, damit sie an ihre Pods übergeben wird.
Beispielanwendung ausführen
In diesem Abschnitt erstellen Sie eine Anwendung, die benutzerdefinierte Logs schreibt und einen benutzerdefinierten Messwert bereitstellt.
Speichern Sie die folgenden Dienst- und Deployment-Manifeste in einer Datei mit dem
my-app.yaml
-Namen. Der Dienst hat dieprometheus.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
Erstellen Sie das Deployment und den Dienst:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f my-app.yaml
Anwendungslogs aufrufen.
Console
Rufen Sie in der Google Cloud Console den Log-Explorer auf.
Klicken Sie auf Ressource. Wählen Sie unter ALLE RESSOURCENTYPEN die Option Kubernetes-Container aus.
Wählen Sie unter CLUSTER_NAME den Namen Ihres Nutzerclusters aus.
Wählen Sie unter NAMESPACE_NAME die Option Standard aus.
Klicken Sie auf Hinzufügen und dann auf Abfrage ausführen.
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
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.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.
Rufen Sie in der Google Cloud Console den Metrics Explorer auf.
Wählen Sie für Ressourcentyp die Option
Kubernetes Pod
oderKubernetes Container
aus.Wählen Sie als Messwert
external.googleapis.com/prometheus/example_monitoring_up
aus.Im Diagramm sehen Sie, dass
example_monitoring_up
einen wiederkehrenden Wert von 1 hat.