Auf dieser Seite wird gezeigt, wie Sie Messwerte von Config Sync an Prometheus senden.
Auf dieser Seite wird erläutert, wie Sie mit Prometheus Config Sync-Messwerte aufrufen. Weitere Möglichkeiten zum Exportieren von Messwerten finden Sie unter Config Sync mit Cloud Monitoring überwachen oder Config Sync mit benutzerdefiniertem Monitoring überwachen.
Config Sync erfasst automatisch Messwerte und exportiert sie nach Prometheus. Sie haben auch die Möglichkeit, Cloud Monitoring so zu konfigurieren, dass benutzerdefinierte Messwerte von Prometheus abgerufen werden. Dann können Sie benutzerdefinierte Messwerte in Prometheus und in Monitoring aufrufen. Weitere Informationen finden Sie in der GKE-Dokumentation unter Prometheus verwenden.
Messwerte abrufen
Alle Messwerte können per Scraping an Port 8675 abgerufen werden. Bevor Sie Messwerte abrufen können, müssen Sie Ihren Cluster für Prometheus konfigurieren. Entweder:
Sie können den Cluster gemäß der Prometheus-Dokumentation für Scraping konfigurieren oder
Sie verwenden den Prometheus Operator zusammen mit den folgenden Manifesten, die alle Config Sync-Messwerte alle 10 Sekunden extrahieren.
Erstellen Sie ein temporäres Verzeichnis für die Manifestdateien.
mkdir config-sync-monitor cd config-sync-monitor
Laden Sie das Prometheus Operator-Manifest aus dem CoreOS-Repository mit dem Befehl
curl
herunter:curl -o bundle.yaml https://raw.githubusercontent.com/coreos/prometheus-operator/master/bundle.yaml
Dieses Manifest ist für die Verwendung des Namespace
default
konfiguriert. Dieser wird nicht empfohlen. Im nächsten Schritt wird daher die Konfiguration so geändert, dass stattdessen ein Namespace namensmonitoring
genutzt wird. Wenn Sie einen anderen Namespace verwenden möchten, ersetzen Sie in den nachfolgenden Schrittenmonitoring
durch den gewünschten Namespace.Erstellen Sie eine Datei, um den Namespace des ClusterRoleBinding im obigen Bundle zu aktualisieren.
# patch-crb.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: prometheus-operator subjects: - kind: ServiceAccount name: prometheus-operator namespace: monitoring # we are patching from default namespace
Erstellen Sie eine Datei
kustomization.yaml
, die den Patch anwendet und den Namespace für andere Ressourcen im Manifest ändert.# kustomization.yaml resources: - bundle.yaml namespace: monitoring patchesStrategicMerge: - patch-crb.yaml
Erstellen Sie den Namespace
monitoring
, falls noch keiner vorhanden ist. Sie können dem Namespace einen anderen Namen geben, müssen dann aber auch den Wert fürnamespace
in den YAML-Manifesten aus den vorherigen Schritten ändern.kubectl create namespace monitoring
Führen Sie den folgenden Befehl aus, um das Manifest anzuwenden:
kubectl apply -k . until kubectl get customresourcedefinitions servicemonitors.monitoring.coreos.com ; \ do date; sleep 1; echo ""; done
Der zweite Befehl wird blockiert, bis die CRDs im Cluster verfügbar sind.
Erstellen Sie das Manifest für die Ressourcen, die zur Konfiguration eines Prometheus-Servers erforderlich sind, mit dem Messwerte aus Config Sync abgerufen werden.
# config-sync-monitoring.yaml apiVersion: v1 kind: ServiceAccount metadata: name: prometheus-config-sync namespace: monitoring --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: prometheus-config-sync rules: - apiGroups: [""] resources: - nodes - services - endpoints - pods verbs: ["get", "list", "watch"] - apiGroups: [""] resources: - configmaps verbs: ["get"] - nonResourceURLs: ["/metrics"] verbs: ["get"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: prometheus-config-sync roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: prometheus-config-sync subjects: - kind: ServiceAccount name: prometheus-config-sync namespace: monitoring --- apiVersion: monitoring.coreos.com/v1 kind: Prometheus metadata: name: config-sync namespace: monitoring labels: prometheus: config-sync spec: replicas: 2 serviceAccountName: prometheus-config-sync serviceMonitorSelector: matchLabels: prometheus: config-management alerting: alertmanagers: - namespace: default name: alertmanager port: web resources: requests: memory: 400Mi --- apiVersion: v1 kind: Service metadata: name: prometheus-config-sync namespace: monitoring labels: prometheus: config-sync spec: type: NodePort ports: - name: web nodePort: 31900 port: 9190 protocol: TCP targetPort: web selector: prometheus: config-sync --- ---
Führen Sie den folgenden Befehl aus, um das Manifest anzuwenden:
kubectl apply -f config-sync.yaml until kubectl rollout status statefulset/prometheus-config-sync -n monitoring; \ do sleep 1; done
Der zweite Befehl wird blockiert, bis die Pods ausgeführt werden.
Sie können die Installation prüfen, indem Sie den Webport des Prometheus-Servers an Ihren lokalen Computer weiterleiten.
kubectl -n monitoring port-forward svc/prometheus-config-sync 9190
Sie können jetzt unter
http://localhost:9190
auf die Prometheus-Web-UI zugreifen.Entfernen Sie das temporäre Verzeichnis.
cd .. rm -rf config-sync-monitor
Verfügbare Prometheus-Messwerte
Config Sync erfasst die folgenden Messwerte und stellt sie Prometheus zur Verfügung. In der Spalte Labels werden alle Labels aufgelistet, die für jeden Messwert gelten. Messwerte ohne Labels stellen eine einzelne Messung über die Zeit dar, während Messwerte mit Labels mehrere Messungen darstellen, eine für jede Kombination von Labelwerten.
Wenn diese Tabelle nicht mehr synchronisiert ist, können Sie die Messwerte in der Prometheus-Benutzeroberfläche nach Präfix filtern. Alle Messwerte beginnen mit dem Präfix config_sync_
.
Name | Typ | Labels | Beschreibung |
---|---|---|---|
config_sync_api_duration_seconds_bucket |
Histogramm | Status, Vorgang | Latenzverteilung von API-Serveraufrufen (verteilt auf Buckets nach Dauer jedes Zyklus) |
config_sync_api_duration_seconds_count |
Histogramm | Status, Vorgang | Latenzverteilung von API-Serveraufrufen (ohne Berücksichtigung der Dauer) |
config_sync_api_duration_seconds_sum |
Histogramm | Status, Vorgang | Summe der Dauer aller API-Serveraufrufe |
config_sync_apply_duration_seconds_bucket |
Histogramm | Commit, Status | Latenzverteilung der Anwendung von Ressourcen, die von der "Source of Truth" deklariert sind, auf einen Cluster (verteilt auf Buckets nach Dauer jedes Zyklus) |
config_sync_apply_duration_seconds_count |
Histogramm | Commit, Status | Latenzverteilung bei der Anwendung von Ressourcen, die von der "Source of Truth" deklariert wurden, auf einen Cluster (ohne Berücksichtigung der Dauer) |
config_sync_apply_duration_seconds_sum |
Histogramm | Commit, Status | Summe der Dauer der gesamten Latenz der Anwendung von Ressourcen, die von der "Source of Truth" auf einen Cluster deklariert wurden |
config_sync_apply_operations_total |
Zähler | Vorgang, Status, Controller | Anzahl der Vorgänge, die ausgeführt wurden, um Ressourcen von der "Source of Truth" mit einem Cluster zu synchronisieren |
config_sync_cluster_scoped_resource_count |
Gauge | resourcegroup | Die Anzahl der clusterbezogenen Ressourcen in einer ResourceGroup |
config_sync_crd_count |
Gauge | resourcegroup | Anzahl der CRDs in einer ResourceGroup |
config_sync_declared_resources |
Gauge | commit | Die Anzahl der deklarierten Ressourcen, die von Git geparst wurden |
config_sync_internal_errors_total |
Zähler | Quelle | Anzahl der internen Fehler, die von Config Sync ausgelöst wurden. Der Messwert wird möglicherweise nicht angezeigt, wenn kein interner Fehler aufgetreten ist |
config_sync_kcc_resource_count |
Gauge | resourcegroup | Anzahl der Config Connector-Ressourcen in einer ResourceGroup |
config_sync_last_apply_timestamp |
Gauge | Commit, Status | Zeitstempel des letzten Anwendungsvorgangs |
config_sync_last_sync_timestamp |
Gauge | Commit, Status | Der Zeitstempel der letzten Synchronisierung aus Git |
config_sync_parser_duration_seconds_bucket |
Histogramm | Status, Trigger, Quelle | Latenzverteilung verschiedener Phasen bei der Synchronisierung von der "Source of Truth" mit einem Cluster |
config_sync_parser_duration_seconds_count |
Histogramm | Status, Trigger, Quelle | Latenzverteilung verschiedener Phasen bei der Synchronisierung von der "Source of Truth" zu einem Cluster (ohne Berücksichtigung der Dauer) |
config_sync_parser_duration_seconds_sum |
Histogramm | Status, Trigger, Quelle | Summe der Latenzen verschiedener Phasen, die an der Synchronisierung von der "Source of Truth" mit einem Cluster beteiligt sind |
config_sync_pipeline_error_observed |
Gauge | Name, Abgleicher, Komponente | Der Status der benutzerdefinierten RootSync- und RepoSync-Ressourcen. Der Wert 1 weist auf einen Fehler hin. |
config_sync_ready_resource_count |
Gauge | resourcegroup | Die Gesamtzahl der einsatzbereiten Ressourcen in einer ResourceGroup |
config_sync_reconcile_duration_seconds_bucket |
Histogramm | Status | Latenzverteilung der vom Abgleicher verarbeiteten Abgleichereignisse (verteilt auf Buckets nach Dauer jedes Aufrufs) |
config_sync_reconcile_duration_seconds_count |
Histogramm | Status | Latenzverteilung der Abgleichereignisse, die vom Abgleicher verarbeitet werden (ohne Berücksichtigung der Dauer) |
config_sync_reconcile_duration_seconds_sum |
Histogramm | Status | Summe der Dauer aller Latenzen von Abgleichereignissen, die vom Abgleicher verarbeitet werden |
config_sync_reconciler_errors |
Gauge | Komponente, Fehlerklasse | Anzahl der Fehler beim Synchronisieren von Ressourcen aus der "Source of Truth" mit einem Cluster |
config_sync_remediate_duration_seconds_bucket |
Histogramm | Status | Latenzverteilung von Abgleich-Ereignissen (verteilt auf Buckets nach Dauer) |
config_sync_remediate_duration_seconds_count |
Histogramm | Status | Latenzverteilung von Abgleich-Ereignissen (ohne Berücksichtigung der Dauer) |
config_sync_remediate_duration_seconds_sum |
Histogramm | Status | Summe der Dauer aller Latenzen von Abgleich-Ereignissen |
config_sync_resource_count |
Gauge | resourcegroup | Anzahl der von einer ResourceGroup verfolgten Ressourcen |
config_sync_resource_conflicts_total |
Zähler | commit | Anzahl der Ressourcenkonflikte aufgrund einer Diskrepanz zwischen den im Cache gespeicherten Ressourcen und Clusterressourcen. Der Messwert wird möglicherweise nicht angezeigt, wenn kein Ressourcenkonflikt aufgetreten ist |
config_sync_resource_fights_total |
Zähler | Anzahl der Ressourcen, die zu häufig synchronisiert werden. Der Messwert wird möglicherweise nicht angezeigt, wenn kein Ressourcenkonflikt stattgefunden hat | |
config_sync_resource_group_total |
Gauge | Anzahl der ResourceGroup-CRs | |
config_sync_resource_ns_count |
Gauge | resourcegroup | Die Anzahl der Namespaces, die von Ressourcen in einer ResourceGroup verwendet werden |
config_sync_rg_reconcile_duration_seconds_bucket . |
Histogramm | stallreason | Zeitverteilung für den Abgleich einer ResourceGroup-CR (nach Dauer auf Buckets verteilt) |
config_sync_rg_reconcile_duration_seconds_count |
Histogramm | stallreason | Zeitverteilung des Abgleichs einer ResourceGroup-CR (ohne Berücksichtigung der Dauer) |
config_sync_rg_reconcile_duration_seconds_sum |
Histogramm | stallreason | Summe der gesamten Zeit für den Abgleich einer ResourceGroup-CR |
config_sync_kustomize_build_latency_bucket |
Histogramm | Latenzverteilung der Ausführungszeit kustomize build (verteilt auf Buckets nach Dauer jedes Vorgangs) |
|
config_sync_kustomize_build_latency_count |
Histogramm | Latenzverteilung der Ausführungszeit kustomize build (ohne Berücksichtigung der Dauer) |
|
config_sync_kustomize_build_latency_sum |
Histogramm | Summe aller kustomize build -Ausführungszeiten |
|
config_sync_kustomize_ordered_top_tier_metrics |
Gauge | top_tier_field | Nutzung von Ressourcen, Generators, SecretGenerator, ConfigMapGenerator, Transformern und Validators |
config_sync_kustomize_builtin_transformers |
Gauge | k8s_builtin_transformer | Nutzung integrierter Transformer im Zusammenhang mit Kubernetes-Objektmetadaten |
config_sync_kustomize_resource_count |
Gauge | Anzahl der von kustomize build ausgegebenen Ressourcen |
|
config_sync_kustomize_field_count |
Gauge | field_name | Häufigkeit, mit der ein bestimmtes Feld in den Kustomization-Dateien verwendet wird |
config_sync_kustomize_patch_count |
Gauge | patch_field | Anzahl der Patches in den Feldern patches , patchesStrategicMerge und patchesJson6902 |
config_sync_kustomize_base_count |
Gauge | base_source | Anzahl der Remote- und lokalen Basen |
kustomize_deprecating_field_count |
Gauge | deprecating_field | Verwendung von Feldern, die eventuell verworfen werden |
kustomize_simplification_adoption_count |
Gauge | simplification_field | Verwendung von Vereinfachungs-Transformer-Images, -Replikaten und -Ersetzungen |
kustomize_helm_inflator_count |
Gauge | helm_inflator | Verwendung von helm in kustomize, unabhängig davon, ob die integrierten Felder oder die benutzerdefinierte Funktion verwendet werden |
Beispiel für Debugging-Verfahren für Prometheus
Die folgenden Beispiele veranschaulichen einige Muster für die Verwendung von Prometheus-Messwerten, Objektstatusfeldern und Objektannotationen zum Erkennen und Diagnostizieren von Problemen im Zusammenhang mit Config Sync. Diese Beispiele zeigen, wie Sie mit Monitoring auf hoher Ebene beginnen, ein Problem erkennen und dann Ihre Suche schrittweise verfeinern können, um eine Aufschlüsselung durchzuführen und die Ursache des Problems zu diagnostizieren.
Konfigurationen nach Status abfragen
Der reconciler
-Prozess bietet allgemeine Messwerte, die nützliche Einblicke in die Gesamtübersicht über die Funktionsweise von Config Sync im Cluster geben. Sie können sehen, ob Fehler aufgetreten sind, und sogar Warnungen für diese einrichten.
config_sync_reconciler_errors
Messwerte nach Abgleich abfragen
Wenn Sie Config Sync RootSync und RepoSync APIs verwenden, können Sie die RootSync- und RepoSync-Objekte überwachen. Die RootSync- und RepoSync-Objekte sind mit allgemeinen Messwerten instrumentiert, die Ihnen Einblick in die Funktionsweise von Config Sync im Cluster bieten. Fast alle Messwerte sind mit dem Abgleichnamen gekennzeichnet, sodass Sie sehen können, ob Fehler aufgetreten sind, und Sie können in Prometheus Benachrichtigungen für sie einrichten.
Sehen Sie sich eine vollständige Liste der verfügbaren Messwertlabels zum Filtern an.
In Prometheus können Sie die folgenden Filter für RootSyncs oder RepoSyncs verwenden:
# Querying RootSync
config_sync_reconciler_errors{configsync_sync_name=ROOT_SYNC_NAME}
# Querying RepoSync
config_sync_reconciler_errors{configsync_sync_name=REPO_SYNC_NAME}
Import- und Synchronisierungsvorgänge nach Status abfragen
In Prometheus können Sie die folgenden Abfragen verwenden:
# Check for errors that occurred when sourcing configs.
config_sync_reconciler_errors{component="source"}
# Check for errors that occurred when syncing configs to the cluster.
config_sync_reconciler_errors{component="sync"}
Sie können auch die Messwerte für den Quell- und Synchronisierungsprozess selbst prüfen:
config_sync_parser_duration_seconds{status="error"}
config_sync_apply_duration_seconds{status="error"}
config_sync_remediate_duration_seconds{status="error"}
Ressourcen mit Google Cloud Managed Service for Prometheus überwachen
Google Cloud Managed Service for Prometheus ist die vollständig verwaltete Multi-Cloud-Lösung von Google Cloud für Prometheus-Messwerte. Er unterstützt zwei Modi für die Datenerfassung: die verwaltete Datenerfassung (der empfohlene Modus) oder die selbst bereitgestellte Datenerfassung. Führen Sie die folgenden Schritte aus, um Config Sync mit Google Cloud Managed Service for Prometheus im Modus „Verwaltete Datenerfassung“ einzurichten.
Aktivieren Sie Managed Prometheus in Ihrem Cluster. Folgen Sie dazu der Anleitung unter Verwaltete Sammlung einrichten.
Speichern Sie das folgende Beispielmanifest als
pod-monitoring-config-sync-monitoring.yaml
: Mit diesem Manifest wird eine PodMonitoring-Ressource konfiguriert, um die Config Sync-Messwerte an Port8675
des Podsotel-collector-*
unter dem Namespaceconfig-management-monitoring
zu extrahieren. Die PodMonitoring-Ressource verwendet eine Kubernetes-Labelauswahl, um den Podotel-collector-*
zu finden.apiVersion: monitoring.googleapis.com/v1 kind: PodMonitoring metadata: name: config-sync-monitoring namespace: config-management-monitoring spec: selector: matchLabels: app: opentelemetry component: otel-collector endpoints: - port: 8675 interval: 10s
Wenden Sie das Manifest auf den Cluster an:
kubectl apply -f pod-monitoring-config-sync-monitoring.yaml
Prüfen Sie, ob Ihre Prometheus-Daten in der Google Cloud Console auf der Seite "Cloud Monitoring-Messwert-Explorer" exportiert werden. Folgen Sie dazu der Anleitung unter Verwalteter Dienst für Prometheus-Daten in Cloud Monitoring.