Kostenkontrolle und -zuordnung

Google Cloud Managed Service for Prometheus berechnet die Anzahl der in Cloud Monitoring aufgenommenen Beispiele sowie die Leseanfragen an die Monitoring API. Die Anzahl der aufgenommenen Stichproben ist der Hauptfaktor für Ihre Kosten.

In diesem Dokument wird beschrieben, wie Sie die mit der Messwertaufnahme verbundenen Kosten steuern und Quellen für die Aufnahme großer Datenmengen identifizieren können.

Weitere Informationen zu den Preisen für Managed Service for Prometheus finden Sie unter Zusammenfassung der Preise für Managed Service for Prometheus.

Rechnung ansehen

So rufen Sie Ihre Google Cloud-Rechnung auf:

  1. Öffnen Sie in der Google Cloud Console die Seite Abrechnung.

    Zur Abrechnung

  2. Wenn Sie mehrere Rechnungskonten haben und das Rechnungskonto des aktuellen Projekts aufrufen möchten, wählen Sie Zum verknüpften Rechnungskonto aus. Wenn Sie lieber ein anderes Rechnungskonto aufrufen möchten, wählen Sie Rechnungskonten verwalten und anschließend das Konto aus, für das Sie Nutzungsberichte ansehen möchten.

  3. Wählen Sie Berichte aus.

  4. Wählen Sie im Menü Dienste die Option Stackdriver Monitoring aus.

  5. Wählen Sie im Menü SKUs die folgenden Optionen aus:

    • Aufgenommene Prometheus-Stichproben
    • Monitoring API-Anfragen

Der folgende Screenshot zeigt den Abrechnungsbericht für Managed Service for Prometheus aus einem Projekt:

Grafik: Der Abrechnungsbericht für Managed Service for Prometheus zeigt die aktuelle und voraussichtliche Nutzung.

Kosten senken

So können Sie die Kosten für die Verwendung von Managed Service for Prometheus reduzieren:

  • Reduzieren Sie die Anzahl der Zeitachsen, die Sie an den verwalteten Dienst senden, indem Sie die generierten Messwertdaten filtern.
  • Reduzieren Sie die Anzahl der Stichproben, die Sie erfassen, indem Sie das Extraktionsintervall ändern.
  • Begrenzen Sie die Anzahl der Stichproben von potenziell falsch konfigurierten Messwerten mit hoher Kardinalität.

Anzahl der Zeitachsen reduzieren

Die Open-Source-Prometheus-Dokumentation empfiehlt selten das Filtern des Messwertvolumens, was sinnvoll ist, wenn die Kosten durch Maschinenkosten begrenzt sind. Wenn Sie jedoch einen Anbieter für verwaltete Dienste auf Basis einzelner Einheiten bezahlen, kann das Senden unbegrenzter Daten zu unnötig hohen Kosten führen.

Die im Projekt kube-prometheus enthaltenen Exporter, insbesondere der Dienst kube-state-metrics, können viele Messwertdaten ausgeben. Der Dienst kube-state-metrics gibt beispielsweise Hunderte von Messwerten aus, von denen viele für Sie als Nutzer möglicherweise völlig wertlos sind. Ein neuer Cluster mit drei Knoten, der das Projekt kube-prometheus verwendet, sendet ungefähr 900 Stichproben pro Sekunde an den verwalteten Dienst für Prometheus. Das Filtern dieser zusätzlichen Messwerte kann schon ausreichen, um Ihre Rechnung auf ein akzeptables Niveau zu reduzieren.

So reduzieren Sie die Anzahl der Messwerte:

Wenn Sie den Dienst kube-state-metrics verwenden, können Sie eine Prometheus-Relabeling-Regel mit der Aktion keep hinzufügen. Bei der verwalteten Sammlung wird diese Regel in die Definition des PodMonitoring oder ClusterPodMonitoring aufgenommen. Bei der selbst bereitgestellten Sammlung wird diese Regel in die Prometheus-Extraktionskonfiguration oder die ServiceMonitor-Definition (für den Prometheus-Operator) aufgenommen.

Wenn Sie beispielsweise den folgenden Filter für einen neuen Cluster mit drei Knoten verwenden, wird das Stichprobenvolumen um etwa 125 Beispiele pro Sekunde reduziert:

  metricRelabeling:
  - action: keep
    regex: kube_(daemonset|deployment|pod|namespace|node|statefulset)_.+
    sourceLabels: [__name__]

Manchmal ist ein Exporter als unwichtig eingestuft. Das Paket kube-prometheus installiert beispielsweise standardmäßig die folgenden Dienstmonitore, von denen viele in einer verwalteten Umgebung nicht benötigt werden:

  • alertmanager
  • coredns
  • grafana
  • kube-apiserver
  • kube-controller-manager
  • kube-scheduler
  • kube-state-metrics
  • kubelet
  • node-exporter
  • prometheus
  • prometheus-adapter
  • prometheus-operator

Damit die Anzahl der zu exportierenden Messwerte reduziert wird, können Sie die nicht mehr benötigten Dienstmonitore löschen, deaktivieren oder beenden. Wenn Sie beispielsweise den Dienst-Monitoring kube-apiserver in einem neuen Cluster mit drei Knoten deaktivieren, verringert sich das Stichprobenvolumen um etwa 200 Beispiele pro Sekunde.

Anzahl der erfassten Stichproben reduzieren

Managed Service for Prometheus wird pro Stichprobe abgerechnet. Sie können die Anzahl der aufgenommenen Stichproben reduzieren, indem Sie die Länge des Stichprobenzeitraums erhöhen. Beispiel:

  • Wenn Sie einen Stichprobenzeitraum von 10 Sekunden in einen Stichprobenzeitraum von 30 Sekunden ändern, kann das Stichprobenvolumen um 66 % reduziert werden, ohne dass dadurch zu viele Informationen verloren gehen.
  • Durch das Ändern eines Stichprobenzeitraums von 10 Sekunden auf 60 Sekunden kann das Stichprobenvolumen um 83 % reduziert werden.

Informationen darüber, wie Stichproben gezählt werden und wie sich der Stichprobenzeitraum auf die Anzahl der Stichproben auswirkt, finden Sie unter Preisbeispiele basierend auf den aufgenommenen Stichproben.

Normalerweise ist das Extraktionsintervall pro Job oder Ziel festgelegt.

Für die verwaltete Sammlung legen Sie das Extraktionsintervall in der Ressource PodMonitoring mithilfe des Felds interval fest. Für die selbst bereitgestellte Sammlung legen Sie das Stichprobenintervall in Ihren Extraktionskonfigurationen fest, normalerweise durch Festlegen des Felds interval oder scrape_interval.

Lokale Aggregation konfigurieren (nur selbst bereitgestellte Sammlung)

Wenn Sie den Dienst mithilfe einer selbst bereitgestellten Sammlung konfigurieren, z. B. mit kube-prometheus, prometheus-operator, oder das Image manuell bereitstellen, können Sie die an den Managed Service for Prometheus gesendeten Stichproben reduzieren. Fassen Sie dazu Messwerte mit hoher Kardinalität lokal zusammen. Sie können Aufnahmeregeln verwenden, um Labels wie instance zusammenzufassen, und das Flag --export.match oder die Umgebungsvariable EXTRA_ARGS verwenden, um nur aggregierte Daten an Montreal zu senden.

Angenommen, Sie haben drei Messwerte: high_cardinality_metric_1, high_cardinality_metric_2 und low_cardinality_metric. Sie möchten die für high_cardinality_metric_1 gesendeten Stichproben reduzieren und alle für high_cardinality_metric_2 gesendeten Stichproben entfernen, während alle Rohdaten lokal gespeichert werden (z. B. für Benachrichtigungen). Ihre Einrichtung könnte beispielsweise so aussehen:

  • Stellen Sie das Image für Managed Service for Prometheus bereit.
  • Konfigurieren Sie die Extraktionskonfigurationen, um alle Rohdaten auf dem lokalen Server zu extrahieren (mit nur wenigen Filtern nach Bedarf).
  • Konfigurieren Sie Ihre Aufzeichnungsregeln so, dass sie lokale Zusammenfassungen über high_cardinality_metric_1 und high_cardinality_metric_2 durchführen, vielleicht durch Wegaggregieren des Labels instance oder einer beliebigen Anzahl von Messwertlabels, je nachdem, was die Anzahl nicht benötigter Zeitachsen am besten reduziert. Sie können eine Regel wie die folgende ausführen, die das Label instance löscht und die resultierenden Zeitachsen über die verbleibenden Labels summiert:

    record: job:high_cardinality_metric_1:sum
    expr: sum without (instance) (high_cardinality_metric_1)
    

    Siehe Aggregationsoperatoren in der Prometheus-Dokumentation für weitere Aggregationsoptionen.

  • Stellen Sie das Managed Service for Prometheus-Image mit dem folgenden Filter-Flag bereit. Damit wird verhindert, dass Rohdaten aus den aufgeführten Messwerten an Monarch gesendet werden:

    --export.match='{__name__!="high_cardinality_metric_1",__name__!="high_cardinality_metric_2"}'
    

    In diesem Beispiel für das Flag export.match werden durch Kommas getrennte Selektoren mit dem Operator != verwendet, um unerwünschte Rohdaten herauszufiltern. Wenn Sie zusätzliche Aufnahmeregeln hinzufügen, um andere Messwerte mit hoher Kardinalität zu aggregieren, müssen Sie dem Filter auch einen neuen Selektor vom Typ __name__ hinzufügen, damit die Rohdaten verworfen werden. Durch die Verwendung eines einzigen Flags, das mehrere Selektoren mit dem Operator != enthält, um unerwünschte Daten herauszufiltern, müssen Sie den Filter nur ändern, wenn Sie eine neue Zusammenfassung erstellen und nicht jedes Mal, wenn Sie eine Scrape-Konfiguration ändern oder hinzufügen.

    Bei bestimmten Bereitstellungsmethoden wie dem "prometheus-operator" müssen Sie möglicherweise die einfachen Anführungszeichen um die Klammern weglassen.

Dieser Workflow kann einen gewissen operativen Aufwand beim Erstellen und Verwalten von Aufnahmeregeln und Flags vom Typ export.match verursachen, aber Sie können sehr viel Volumen reduzieren, wenn Sie sich nur auf Messwerte mit außergewöhnlich hoher Kardinalität konzentrieren. Informationen dazu, welche Messwerte von der lokalen Vorabaggregation am meisten profitieren können, finden Sie unter Messwerte mit hohem Volumen identifizieren.

Implementieren Sie die Föderation nicht, wenn Sie Managed Service for Prometheus verwenden. Bei diesem Workflow sind keine Föderationsserver mehr erforderlich, da ein einzelner selbst bereitgestellter Prometheus-Server alle erforderlichen Zusammenfassungen auf Clusterebene ausführen kann. Föderation kann unerwartete Auswirkungen haben, z. B. Messwerte unbekannten Typs und ein doppeltes Aufnahmevolumen.

Stichproben aus Messwerten mit hoher Kardinalität beschränken (nur selbst bereitgestellte Sammlung)

Sie können Messwerte mit sehr hoher Kardinalität erstellen, indem Sie Labels mit einer großen Anzahl potenzieller Werte hinzufügen, z. B. eine Nutzer-ID oder IP-Adresse. Solche Messwerte können eine sehr große Anzahl von Stichproben generieren. Die Verwendung von Labels mit einer großen Anzahl von Werten ist in der Regel eine fehlerhafte Konfiguration. Sie können sich vor Messwerten mit hoher Kardinalität in Ihren selbst bereitgestellten Collectors schützen, indem Sie in Ihren Extraktionskonfigurationen einen sample_limit-Wert festlegen.

Wenn Sie dieses Limit verwenden, sollten Sie es auf einen sehr hohen Wert setzen, damit nur offensichtlich falsch konfigurierte Messwerte abgefangen werden. Alle Stichproben, die das Limit überschreiten, werden verworfen und es kann sehr schwierig sein, Probleme zu diagnostizieren, die durch das Überschreiten des Limits verursacht wurden.

Die Verwendung eines Beispiellimits ist keine gute Möglichkeit, die Beispielaufnahme zu verwalten. Dieses Limit kann Sie jedoch vor versehentlichen Fehlkonfigurationen schützen. Weitere Informationen finden Sie unter sample_limit zur Vermeidung von Überlastungen.

Kosten identifizieren und zuordnen

Mit Cloud Monitoring können Sie die Prometheus-Messwerte ermitteln, die die größte Anzahl von Stichproben schreiben. Diese Messwerte tragen am meisten zu Ihren Kosten bei. Nachdem Sie die teuersten Messwerte ermittelt haben, können Sie die Extraktionskonfigurationen ändern, um diese Messwerte entsprechend zu filtern.

In den folgenden Abschnitten wird beschrieben, wie Sie die Anzahl der Beispiele analysieren können, die Sie an Managed Service for Prometheus senden, und bestimmten Messwerten, Kubernetes-Namespaces und Google Cloud-Regionen ein hohes Volumen zuordnen.

Messwerte mit hohem Volumen identifizieren

So ermitteln Sie die Prometheus-Messwerte mit den größten Datenaufnahme-Volumes:

  1. Rufen Sie in der Google Cloud Console die Seite Monitoring auf.

    Zu Monitoring

  2. Klicken Sie im Navigationsbereich von Monitoring auf Metrics Explorer.
  3. Wählen Sie den Tab Konfiguration aus und füllen Sie die Felde mit den folgenden Informationen aus:
    1. Für dieRessource und Messwert Feld, geben sie folgendes ein oder wählen es aus: Attribution von Messwerten und Beispiele für Attributions-IDs.
    2. Wählen Sie für das Feld Gruppieren nach die Option metric_type und attribution_dimension aus.
    3. Wählen Sie für Filter die Option attribution_dimension = namespace aus. Dies muss nach der Gruppierung nach Attribution_Dimension erfolgen.
    4. Wählen Sie für das Feld Aggregator die Option Summe aus.

    Im Diagramm wird nun das Aufnahmevolumen für die einzelnen Messwerttypen angezeigt.

  4. Klicken Sie in der Diagrammlegende auf Wert, um die Messwerte mit den größten Aufnahmevolumen zu identifizieren.

Das daraus resultierende Diagramm, in dem Ihre 300 besten Messwerte nach Volumen und Mittelwert sortiert werden, sieht so aus:

Grafik: Im konfigurierten Diagramm wird das Volumen der Messwertaufnahme für jeden einzelnen Messwert angezeigt.

Namespaces mit hohem Volumen identifizieren

Sie können auch den Messwert und die Ressourcentypen aus dem vorherigen Beispiel verwenden, um das Aufnahmevolumen bestimmten Kubernetes-Namespaces zuzuordnen und dann entsprechende Maßnahmen zu ergreifen. Beispiel:

  • Um das Gesamtaufnahmevolumen mit Namespaces zu korrelieren, wählen Sie die folgenden Labels für das Feld Gruppieren nach aus und filtern Sie dann nach attribution_dimension = namespace:

    • attribution_dimension
    • attribution_id
  • Wenn Sie das Aufnahmevolumen einzelner Messwerte mit Namespaces korrelieren möchten, wählen Sie die folgenden Labels für das Feld Gruppieren nach aus und filtern dann nach attribution_dimension = namespace:

    • attribution_dimension
    • attribution_id
    • metric_type
  • So identifizieren Sie die Namespaces, die für einen bestimmten Messwert mit hohem Volumen verantwortlich sind:

    1. Ermitteln Sie den Messwerttyp für den Messwert mit hohem Volumen. Verwenden Sie dazu eines der anderen Beispiele, um die Messwerttypen mit hohem Volumen zu identifizieren. Der Messwerttyp ist der String in der Diagrammlegende, der mit prometheus.googleapis.com/ beginnt.
    2. Wenn Sie die Diagrammdaten auf einen bestimmten Messwerttyp beschränken möchten, fügen Sie im Feld Filter einen Filter für den Messwerttyp hinzu. Beispiel:

      metric_type=prometheus.googleapis.com/container_tasks_state/gauge

    3. Wählen Sie die folgenden Labels für das Feld Gruppieren nach aus und filtern Sie dann nach attribution_dimension = namespace:

      • attribution_dimension
      • attribution_id
  • Wenn Sie Aufnahme nach Google Cloud-Region sehen möchten, fügen Sie dem Feld Gruppieren nach das Label Standort hinzu.

  • Wenn Sie die Aufnahme nach Cloud-Projekt sehen möchten, fügen Sie dem Feld Gruppieren nach das Label resource_container hinzu.