Benachrichtigungsrichtlinien mithilfe der API erstellen

Eine Benachrichtigungsrichtlinie wird in der Cloud Monitoring API durch ein Objekt des Typs AlertPolicy repräsentiert. Sie definiert eine Reihe von Bedingungen, die auf einen potenziell fehlerhaften Systemstatus hinweisen.

In diesem Dokument wird Folgendes beschrieben:

  • Darstellung von Benachrichtigungsrichtlinien durch die Monitoring API
  • Die Bedingungstypen, die die Monitoring API für Benachrichtigungsrichtlinien.
  • So erstellen Sie eine Benachrichtigungsrichtlinie mithilfe der Google Cloud CLI oder Clientbibliotheken.

Struktur einer Benachrichtigungsrichtlinie

Die Struktur AlertPolicy definiert die Komponenten einer Benachrichtigungsrichtlinie. Wenn Sie eine Richtlinie erstellen, geben Sie Werte für die folgende AlertPolicy-Felder:

Sie können das Feld severity auch angeben, wenn Sie die Cloud Monitoring API verwenden und die Google Cloud Console. In diesem Feld können Sie die Wichtigkeitsstufe Vorfälle. Wenn Sie keinen Schweregrad angeben, legt Cloud Monitoring den Schweregrad der Benachrichtigungsrichtlinie auf No Severity fest.

Je nach den von Ihnen erstellten Bedingungen können Sie weitere Felder verwenden.

Wenn eine Benachrichtigungsrichtlinie eine Bedingung enthält, wird eine Benachrichtigung gesendet, wenn ob die Bedingung erfüllt ist. Informationen zu Benachrichtigungen bei Richtlinien enthalten mehrere Bedingungen, siehe Richtlinien mit mehreren Bedingungen und Anzahl der Benachrichtigungen pro Richtlinie.

Wenn Sie die Benachrichtigungsrichtlinie erstellen oder ändern, legt Monitoring auch andere Felder fest, einschließlich des Felds name. Der Wert des Felds name ist der Ressourcenname für die Benachrichtigungsrichtlinie, die die Richtlinie identifiziert. Der Ressourcenname hat das folgende Format:

projects/PROJECT_ID/alertPolicies/POLICY_ID

Bedingungstypen in der API

Die Cloud Monitoring API unterstützt eine Vielzahl von Bedingungstypen in der Struktur Condition. Es gibt mehrere Bedingungstypen für messwertbasierte Benachrichtigungsrichtlinien und einen für logbasierte Benachrichtigungsrichtlinien. In den folgenden Abschnitten werden die verfügbaren Bedingungstypen beschrieben.

Bedingungen für messwertbasierte Benachrichtigungsrichtlinien

So erstellen Sie eine Benachrichtigungsrichtlinie, die Messwertdaten überwacht, einschließlich logbasierter Daten. können Sie die folgenden Bedingungstypen verwenden:

Filterbasierte Messwertbedingungen

Die Bedingungen MetricAbsence und MetricThreshold verwenden Monitoring-Filter, um die zu überwachenden Zeitachsendaten auszuwählen. Die anderen Felder in der Bedingungsstruktur geben an, wie gefiltert werden soll, und aggregieren die Daten. Weitere Informationen zu diesen Konzepten finden Sie unter Filtern und Aggregation: Zeitachsen bearbeiten.

Wenn Sie den Bedingungstyp MetricAbsence verwenden, können Sie eine Bedingung erstellen, die nur erfüllt ist, wenn alle Zeitreihen fehlen. Diese Bedingung verwendet den Parameter aggregations, um mehrere Zeitreihen zu einer einzigen Zeitreihe. Weitere Informationen finden Sie unter Referenz zu MetricAbsence in der API-Dokumentation

Eine Benachrichtigungsrichtlinie für fehlende Messwerte erfordert, dass einige Daten geschrieben wurden Früher war es so: finden Sie unter Benachrichtigungsrichtlinien für fehlende Messwerte erstellen

Wenn Sie basierend auf einem prognostizierten Wert benachrichtigt werden möchten, konfigurieren Sie die Benachrichtigungsrichtlinie MetricThreshold-Bedingungstyp und zum Festlegen von forecastOptions ein. Wann? nicht festgelegt ist, werden die gemessenen Daten mit einem Schwellenwert verglichen. Wenn dieses Feld jedoch festgelegt ist, werden die vorhergesagten Daten mit einem Grenzwert. Weitere Informationen finden Sie unter Benachrichtigungsrichtlinien für prognostizierte Messwerte erstellen

MQL-basierte Messwertbedingungen

Die Bedingung MonitoringQueryLanguageCondition verwendet die Monitoring Query Language (MQL), um die zu überwachenden Zeitachsendaten auszuwählen und zu bearbeiten. Sie können Benachrichtigungsrichtlinien erstellen, die Werte mit einem Schwellenwert vergleichen oder auf das Fehlen von Werten mit diesem Bedingungstyp testen. Wenn Sie eine MonitoringQueryLanguageCondition-Bedingung verwenden, muss diese die einzige Bedingung in Ihrer Benachrichtigungsrichtlinie sein. Weitere Informationen finden Sie unter Benachrichtigungsrichtlinien mit MQL.

PromQL-basierte Messwertbedingungen

Die Bedingung PrometheusQueryLanguageCondition verwendet Prometheus Query Language (PromQL) Abfragen verwenden, um zu überwachende Zeitreihendaten auszuwählen und zu bearbeiten. Ihre Bedingung kann ein Verhältnis von Metriken berechnen, Messwertvergleiche auszuwerten und vieles mehr.

Wenn Sie eine PrometheusQueryLanguageCondition-Bedingung verwenden, darf dies die einzige sein Bedingung in Ihrer Benachrichtigungsrichtlinie festlegen. Weitere Informationen finden Sie unter Benachrichtigungsrichtlinien mit PromQL

Bedingungen für Benachrichtigungen zu Verhältnissen

Sie können Benachrichtigungsrichtlinien mit Messwertschwellen erstellen, um das Verhältnis von zwei Messwerten zu überwachen. Sie können diese Richtlinien entweder mit dem Bedingungstyp MetricThreshold oder MonitoringQueryLanguageCondition erstellen. Sie können MQL auch direkt in der Google Cloud Console verwenden. Über die grafische Benutzeroberfläche zum Erstellen von Schwellenwertbedingungen können Sie keine verhältnisbasierten Bedingungen erstellen oder verwalten.

Wir empfehlen die Verwendung von MQL, um verhältnisbasierte Benachrichtigungsrichtlinien zu erstellen. Mit MQL können Sie leistungsstärkere und flexiblere Abfragen erstellen, als Sie es mit dem Bedingungstyp MetricTheshold und Monitoring-Filtern möglich ist. Mit einer MonitoringQueryLanguageCondition-Bedingung können Sie beispielsweise das Verhältnis eines absoluten Messwerts zu einem Deltamesswert berechnen. Beispiele finden Sie unter Beispiele für MQL-Benachrichtigungsrichtlinien.

Wenn Sie die Bedingung MetricThreshold verwenden, müssen Zähler und Nenner des Verhältnisses dieselbe MetricKind haben. Eine Liste der Messwerte und ihrer Eigenschaften finden Sie unter Messwertlisten.

Im Allgemeinen ist es am besten, Verhältnisse basierend auf Zeitachsen zu berechnen, die unter Einsatz von Labelwerten für einen einzelnen Messwerttyp erfasst wurden. Ein über zwei berechnetes Verhältnis verschiedenen Messwerttypen aufgrund unterschiedlicher Stichproben Anomalien und Ausrichtungsfenster.

Angenommen, Sie haben zwei verschiedene Messwerttypen, eine RPCs-Gesamtzahl und eine RPC-Fehlerzahl, und Sie möchten das Verhältnis von Fehler- zu Gesamtzahl berechnen. Die fehlgeschlagenen RPCs werden in der Zeitreihe für beide Messwerttypen. Daher besteht die Möglichkeit, dass bei der Abstimmung der Zeit -Serie ist, wird ein fehlgeschlagener RPC nicht im gleichen Ausrichtungsintervall für beiden Zeitreihen. Dies kann folgende Gründe haben:

  • Da zwei verschiedene Zeitachsen dasselbe Ereignis aufzeichnen, gibt es zwei unterliegende Zählerwerte, die die Sammlung implementieren. Diese werden nicht atomar aktualisiert.
  • Die Abtastraten können abweichen. Wenn die Zeitachsen auf einen gemeinsamen Zeitraum ausgerichtet sind, kann die Anzahl für ein einzelnes Ereignis in angrenzenden Ausrichtungsintervallen für die verschiedenen Messwerte angezeigt werden.

Die unterschiedliche Anzahl der Werte in den entsprechenden Ausrichtungsintervallen kann zu einem unsinnigen error/total-Verhältniswert führen, z. B. 1/0 oder 2/1.

Bei Verhältnissen größerer Zahlen ist die Wahrscheinlichkeit geringer, dass sie zu unsinnigen Werten führen. Sie können größere Zahlen durch Aggregation erhalten, indem Sie entweder ein Ausrichtungsfenster verwenden das entspricht länger als der Stichprobenzeitraum ist, oder indem Daten für bestimmte Labels. Diese Techniken minimieren den Effekt kleiner Unterschiede in der Anzahl der Punkte in einem gegebenen Intervall. Das heißt, ein Zwei-Punkte-Unterschied ist bei einer erwarteten Anzahl von 3 Punkten in einem Intervall signifikanter als bei einer erwarteten Anzahl von 300.

Wenn Sie integrierte Messwerttypen verwenden, haben Sie möglicherweise keine andere Wahl, als die Verhältnisse zwischen den Messwerttypen zu berechnen, um den von Ihnen benötigten Wert zu erhalten.

Wenn Sie benutzerdefinierte Messwerte entwerfen, die die gleiche Sache – wie RPCs, die den Fehlerstatus zurückgeben – in zwei verschiedenen Messwerten zählen könnten, sollten Sie stattdessen einen einzigen Messwert in Betracht ziehen, der jede Zählung nur einmal enthält. Angenommen, Sie zählen RPCs und möchten das Verhältnis von nicht erfolgreichen RPCs zu allen RPCs verfolgen. Zur Behebung dieses Problems erstellen Sie einen einzelnen Messwerttyp, um RPCs zu zählen, und verwenden ein Label, um den Status des Aufrufs einschließlich des Status „OK“ aufzuzeichnen. Dann wird jeder Statuswert bzw. jeder Fehler oder jedes „OK“ aufgezeichnet, indem für diesen Fall ein einzelner Zähler aktualisiert wird.

Bedingung für logbasierte Benachrichtigungsrichtlinien

Verwenden Sie den Bedingungstyp LogMatch, um eine logbasierte Benachrichtigungsrichtlinie zu erstellen. Sie werden dann benachrichtigt, wenn eine Nachricht, die Ihrem Filter entspricht, in Ihren Logeinträgen angezeigt wird. Wenn Sie eine LogMatch-Bedingung verwenden, muss sie die einzige Bedingung in Ihrer Benachrichtigungsrichtlinie sein.

Verwenden Sie den Bedingungstyp LogMatch nicht in Verbindung mit logbasierten metrics. Benachrichtigungsrichtlinien, die logbasierte Messwerte überwachen, sind messwertbasiert Richtlinien. Weitere Informationen zur Auswahl von Benachrichtigungsrichtlinien, die Logbasierte Messwerte oder Logeinträge überwachen, siehe Logs überwachen

Die Benachrichtigungsrichtlinien, die in den Beispielen im Das Dokument Benachrichtigungsrichtlinien nach API verwalten ist messwertbasiert. Benachrichtigung Richtlinien, wobei die Prinzipien für logbasierte Benachrichtigungsrichtlinien dieselben sind. Spezifische Informationen zu logbasierten Benachrichtigungsrichtlinien finden Sie unter Logbasierte Benachrichtigungsrichtlinie mit der Monitoring API erstellen in der Cloud Logging-Dokumentation.

Hinweise

Bevor Sie Code für die API schreiben, sollten Sie Folgendes tun:

  • Machen Sie sich mit den allgemeinen Konzepten und der Terminologie von Benachrichtigungen vertraut. Richtlinien Weitere Informationen finden Sie in der Benachrichtigungsübersicht. Informationen.
  • Achten Sie darauf, dass die Cloud Monitoring API für die Verwendung aktiviert ist. Siehe Aktivieren Sie die API, um weitere Informationen zu erhalten.
  • Wenn Sie Clientbibliotheken verwenden möchten, installieren Sie die Bibliotheken für den Sprachen, die Sie verwenden möchten, Siehe Clientbibliotheken. Momentan ist API-Unterstützung für Benachrichtigungen nur für C#, Go, Java, Node.js und Python verfügbar.
  • Wenn Sie die Google Cloud CLI verwenden möchten, installieren Sie sie. Wenn Sie jedoch Cloud Shell verwenden, ist die Google Cloud CLI bereits installiert ist.

    Sie finden hier auch Beispiele zur Verwendung der gcloud-Schnittstelle. Beachten Sie, dass bei den Beispielen zu gcloud davon ausgegangen wird, dass das aktuelle Projekt bereits mit gcloud config set project [PROJECT_ID] als Ziel festgelegt wurde. Bei Aufrufen wird daher das explizite Flag --project ausgelassen. Die ID des aktuellen Projekts in den Beispielen lautet a-gcp-project.

  • So erhalten Sie die Berechtigungen, die Sie zum Erstellen und Ändern von Benachrichtigungsrichtlinien mithilfe der Cloud Monitoring API benötigen: bitten Sie Ihren Administrator, Ihnen IAM-Rolle Bearbeiter von Monitoring-Benachrichtigungsrichtlinien (roles/monitoring.alertPolicyEditor) für Ihr Projekt. Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff verwalten.

    Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

    Ausführliche Informationen zu IAM-Rollen für Monitoring: Zugriff mit Identity and Access Management steuern

  • Entwerfen Sie Ihre Anwendung für Einzelthread-Aufrufe der Cloud Monitoring API, den Status einer Benachrichtigungsrichtlinie in einem Google Cloud-Projekt Zum Beispiel können Single-Thread-API-Aufrufe zum Erstellen, Aktualisieren, oder eine Benachrichtigungsrichtlinie löschen.

Benachrichtigungsrichtlinie erstellen

Verwenden Sie zum Erstellen einer Benachrichtigungsrichtlinie in einem Projekt die Methode alertPolicies.create-Methode. Informationen zum Aufrufen dieses sowie die zugehörigen Parameter und Antwortdaten finden Sie auf der Referenzseite. alertPolicies.create.

Erstellen Sie Richtlinien aus JSON- oder YAML-Dateien. Die Google Cloud CLI akzeptiert diese Dateien als Argumente. können Sie JSON-Dateien programmatisch lesen und in AlertPolicy konvertieren und Richtlinien daraus erstellen. mit der Methode alertPolicies.create. Wenn Sie eine Prometheus-JSON- oder YAML-Konfigurationsdatei mit einer Benachrichtigungsregel haben, können Sie die gcloud CLI zu Cloud Monitoring-Benachrichtigungen migrieren. Richtlinie mit einer PromQL-Bedingung. Weitere Informationen finden Sie unter Benachrichtigungsregeln und Empfänger von Prometheus migrieren

Jede Benachrichtigungsrichtlinie gehört zu einem Scoping-Projekt eines Messwertbereichs. Jedes Projekt kann bis zu 500 Richtlinien enthalten. Für API-Aufrufe müssen Sie eine „Projekt-ID“ angeben. Verwenden Sie die ID des Bereichs des Bereichs eines Messwerts als Wert. In diesen Beispielen lautet die ID des Scoping-Projekts eines Messwertbereichs a-gcp-project.

Die folgenden Beispiele veranschaulichen die Erstellung von Benachrichtigungsrichtlinien. beschreiben wir nicht, wie man eine JSON- oder YAML-Datei erstellt, eine Benachrichtigungsrichtlinie erstellt. Stattdessen wird in den Beispielen davon ausgegangen, dass eine Datei im JSON-Format vorhanden ist, und sie veranschaulichen, wie der API-Aufruf ausgegeben wird. Zum Beispiel JSON-Dateien, Siehe Beispielrichtlinien. Allgemeine Informationen zum Monitoringverhältnis von Messwerten finden Sie unter Verhältnis von Messwerten:

gcloud

Erstellen Sie eine Benachrichtigungsrichtlinie in einem Projekt mit dem Befehl gcloud alpha monitoring policies create. Im folgenden Beispiel wird eine Benachrichtigungsrichtlinie in a-gcp-project mit der Datei rising-cpu-usage.json erstellt:

gcloud alpha monitoring policies create --policy-from-file="rising-cpu-usage.json"

Bei Erfolg gibt dieser Befehl den Namen der neuen Richtlinie zurück. Beispiel:

Created alert policy [projects/a-gcp-project/alertPolicies/12669073143329903307].

Die Datei rising-cpu-usage.json enthält die JSON-Datei für eine Richtlinie mit den Anzeigenamen „High CPU rate of change“ (Hohe CPU-Änderungsrate). Weitere Informationen zu dieser Richtlinie finden Sie unter Änderungsratenrichtlinie.

Weitere Informationen finden Sie in der Referenz gcloud alpha monitoring policies create.

C#

Richten Sie zur Authentifizierung bei Monitoring Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

static void RestorePolicies(string projectId, string filePath)
{
    var policyClient = AlertPolicyServiceClient.Create();
    var channelClient = NotificationChannelServiceClient.Create();
    List<Exception> exceptions = new List<Exception>();
    var backup = JsonConvert.DeserializeObject<BackupRecord>(
        File.ReadAllText(filePath), new ProtoMessageConverter());
    var projectName = new ProjectName(projectId);
    bool isSameProject = projectId == backup.ProjectId;
    // When a channel is recreated, rather than updated, it will get
    // a new name.  We have to update the AlertPolicy with the new
    // name.  Track the names in this map.
    var channelNameMap = new Dictionary<string, string>();
    foreach (NotificationChannel channel in backup.Channels)
    {
    }
    foreach (AlertPolicy policy in backup.Policies)
    {
        string policyName = policy.Name;
        // These two fields cannot be set directly, so clear them.
        policy.CreationRecord = null;
        policy.MutationRecord = null;
        // Update channel names if the channel was recreated with
        // another name.
        for (int i = 0; i < policy.NotificationChannels.Count; ++i)
        {
            if (channelNameMap.ContainsKey(policy.NotificationChannels[i]))
            {
                policy.NotificationChannels[i] =
                    channelNameMap[policy.NotificationChannels[i]];
            }
        }
        try
        {
            Console.WriteLine("Updating policy.\n{0}",
                policy.DisplayName);
            bool updated = false;
            if (isSameProject)
                try
                {
                    policyClient.UpdateAlertPolicy(null, policy);
                    updated = true;
                }
                catch (Grpc.Core.RpcException e)
                when (e.Status.StatusCode == StatusCode.NotFound)
                { }
            if (!updated)
            {
                // The policy no longer exists.  Recreate it.
                policy.Name = null;
                foreach (var condition in policy.Conditions)
                {
                    condition.Name = null;
                }
                policyClient.CreateAlertPolicy(projectName, policy);
            }
            Console.WriteLine("Restored {0}.", policyName);
        }
        catch (Exception e)
        {
            // If one failed, continue trying to update the others.
            exceptions.Add(e);
        }
    }
    if (exceptions.Count > 0)
    {
        throw new AggregateException(exceptions);
    }
}

Go

Richten Sie zur Authentifizierung bei Monitoring Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


// restorePolicies updates the project with the alert policies and
// notification channels in r.
func restorePolicies(w io.Writer, projectID string, r io.Reader) error {
	b := backup{}
	if err := json.NewDecoder(r).Decode(&b); err != nil {
		return err
	}
	sameProject := projectID == b.ProjectID

	ctx := context.Background()

	alertClient, err := monitoring.NewAlertPolicyClient(ctx)
	if err != nil {
		return err
	}
	defer alertClient.Close()
	channelClient, err := monitoring.NewNotificationChannelClient(ctx)
	if err != nil {
		return err
	}
	defer channelClient.Close()

	// When a channel is recreated, rather than updated, it will get
	// a new name.  We have to update the AlertPolicy with the new
	// name.  channelNames keeps track of the new names.
	channelNames := make(map[string]string)
	for _, c := range b.Channels {
		fmt.Fprintf(w, "Updating channel %q\n", c.GetDisplayName())
		c.VerificationStatus = monitoringpb.NotificationChannel_VERIFICATION_STATUS_UNSPECIFIED
		updated := false
		if sameProject {
			req := &monitoringpb.UpdateNotificationChannelRequest{
				NotificationChannel: c.NotificationChannel,
			}
			_, err := channelClient.UpdateNotificationChannel(ctx, req)
			if err == nil {
				updated = true
			}
		}
		if !updated {
			req := &monitoringpb.CreateNotificationChannelRequest{
				Name:                "projects/" + projectID,
				NotificationChannel: c.NotificationChannel,
			}
			oldName := c.GetName()
			c.Name = ""
			newC, err := channelClient.CreateNotificationChannel(ctx, req)
			if err != nil {
				return err
			}
			channelNames[oldName] = newC.GetName()
		}
	}

	for _, policy := range b.AlertPolicies {
		fmt.Fprintf(w, "Updating alert %q\n", policy.GetDisplayName())
		policy.CreationRecord = nil
		policy.MutationRecord = nil
		for i, aChannel := range policy.GetNotificationChannels() {
			if c, ok := channelNames[aChannel]; ok {
				policy.NotificationChannels[i] = c
			}
		}
		updated := false
		if sameProject {
			req := &monitoringpb.UpdateAlertPolicyRequest{
				AlertPolicy: policy.AlertPolicy,
			}
			_, err := alertClient.UpdateAlertPolicy(ctx, req)
			if err == nil {
				updated = true
			}
		}
		if !updated {
			req := &monitoringpb.CreateAlertPolicyRequest{
				Name:        "projects/" + projectID,
				AlertPolicy: policy.AlertPolicy,
			}
			if _, err = alertClient.CreateAlertPolicy(ctx, req); err != nil {
				log.Fatal(err)
			}
		}
	}
	fmt.Fprintf(w, "Successfully restored alerts.")
	return nil
}

Java

Richten Sie zur Authentifizierung bei Monitoring Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

private static void restoreRevisedPolicies(
    String projectId, boolean isSameProject, List<AlertPolicy> policies) throws IOException {
  try (AlertPolicyServiceClient client = AlertPolicyServiceClient.create()) {
    for (AlertPolicy policy : policies) {
      if (!isSameProject) {
        policy = client.createAlertPolicy(ProjectName.of(projectId), policy);
      } else {
        try {
          client.updateAlertPolicy(null, policy);
        } catch (Exception e) {
          policy =
              client.createAlertPolicy(
                  ProjectName.of(projectId), policy.toBuilder().clearName().build());
        }
      }
      System.out.println(String.format("Restored %s", policy.getName()));
    }
  }
}

Node.js

Richten Sie zur Authentifizierung bei Monitoring Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

const fs = require('fs');

// Imports the Google Cloud client library
const monitoring = require('@google-cloud/monitoring');

// Creates a client
const client = new monitoring.AlertPolicyServiceClient();

async function restorePolicies() {
  // Note: The policies are restored one at a time due to limitations in
  // the API. Otherwise, you may receive a 'service unavailable'  error
  // while trying to create multiple alerts simultaneously.

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const projectId = 'YOUR_PROJECT_ID';

  console.log('Loading policies from ./policies_backup.json');
  const fileContent = fs.readFileSync('./policies_backup.json', 'utf-8');
  const policies = JSON.parse(fileContent);

  for (const index in policies) {
    // Restore each policy one at a time
    let policy = policies[index];
    if (await doesAlertPolicyExist(policy.name)) {
      policy = await client.updateAlertPolicy({
        alertPolicy: policy,
      });
    } else {
      // Clear away output-only fields
      delete policy.name;
      delete policy.creationRecord;
      delete policy.mutationRecord;
      policy.conditions.forEach(condition => delete condition.name);

      policy = await client.createAlertPolicy({
        name: client.projectPath(projectId),
        alertPolicy: policy,
      });
    }

    console.log(`Restored ${policy[0].name}.`);
  }
  async function doesAlertPolicyExist(name) {
    try {
      const [policy] = await client.getAlertPolicy({
        name,
      });
      return policy ? true : false;
    } catch (err) {
      if (err && err.code === 5) {
        // Error code 5 comes from the google.rpc.code.NOT_FOUND protobuf
        return false;
      }
      throw err;
    }
  }
}
restorePolicies();

PHP

Richten Sie zur Authentifizierung bei Monitoring Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

use Google\Cloud\Monitoring\V3\AlertPolicy;
use Google\Cloud\Monitoring\V3\AlertPolicy\Condition;
use Google\Cloud\Monitoring\V3\AlertPolicy\Condition\MetricThreshold;
use Google\Cloud\Monitoring\V3\AlertPolicy\ConditionCombinerType;
use Google\Cloud\Monitoring\V3\Client\AlertPolicyServiceClient;
use Google\Cloud\Monitoring\V3\ComparisonType;
use Google\Cloud\Monitoring\V3\CreateAlertPolicyRequest;
use Google\Protobuf\Duration;

/**
 * @param string $projectId Your project ID
 */
function alert_create_policy($projectId)
{
    $alertClient = new AlertPolicyServiceClient([
        'projectId' => $projectId,
    ]);
    $projectName = 'projects/' . $projectId;

    $policy = new AlertPolicy();
    $policy->setDisplayName('Test Alert Policy');
    $policy->setCombiner(ConditionCombinerType::PBOR);
    /** @see https://cloud.google.com/monitoring/api/resources for a list of resource.type */
    /** @see https://cloud.google.com/monitoring/api/metrics_gcp for a list of metric.type */
    $policy->setConditions([new Condition([
        'display_name' => 'condition-1',
        'condition_threshold' => new MetricThreshold([
            'filter' => 'resource.type = "gce_instance" AND metric.type = "compute.googleapis.com/instance/cpu/utilization"',
            'duration' => new Duration(['seconds' => '60']),
            'comparison' => ComparisonType::COMPARISON_LT,
        ])
    ])]);
    $createAlertPolicyRequest = (new CreateAlertPolicyRequest())
        ->setName($projectName)
        ->setAlertPolicy($policy);

    $policy = $alertClient->createAlertPolicy($createAlertPolicyRequest);
    printf('Created alert policy %s' . PHP_EOL, $policy->getName());
}

Python

Richten Sie zur Authentifizierung bei Monitoring Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.

def restore(project_name, backup_filename):
    """Restore alert policies in a project.

    Arguments:
        project_name (str): The Google Cloud Project to use. The project name
            must be in the format - 'projects/<PROJECT_NAME>'.
        backup_filename (str): Name of the file (along with its path) from
            which the alert policies will be restored.
    """
    print(
        "Loading alert policies and notification channels from {}.".format(
            backup_filename
        )
    )
    record = json.load(open(backup_filename, "rt"))
    is_same_project = project_name == record["project_name"]
    # Convert dicts to AlertPolicies.
    policies_json = [json.dumps(policy) for policy in record["policies"]]
    policies = [
        monitoring_v3.AlertPolicy.from_json(policy_json)
        for policy_json in policies_json
    ]
    # Convert dicts to NotificationChannels
    channels_json = [json.dumps(channel) for channel in record["channels"]]
    channels = [
        monitoring_v3.NotificationChannel.from_json(channel_json)
        for channel_json in channels_json
    ]

    # Restore the channels.
    channel_client = monitoring_v3.NotificationChannelServiceClient()
    channel_name_map = {}

    for channel in channels:
        updated = False
        print("Updating channel", channel.display_name)
        # This field is immutable and it is illegal to specify a
        # non-default value (UNVERIFIED or VERIFIED) in the
        # Create() or Update() operations.
        channel.verification_status = (
            monitoring_v3.NotificationChannel.VerificationStatus.VERIFICATION_STATUS_UNSPECIFIED
        )

        if is_same_project:
            try:
                channel_client.update_notification_channel(notification_channel=channel)
                updated = True
            except google.api_core.exceptions.NotFound:
                pass  # The channel was deleted.  Create it below.

        if not updated:
            # The channel no longer exists.  Recreate it.
            old_name = channel.name
            del channel.name
            new_channel = channel_client.create_notification_channel(
                name=project_name, notification_channel=channel
            )
            channel_name_map[old_name] = new_channel.name

    # Restore the alerts
    alert_client = monitoring_v3.AlertPolicyServiceClient()

    for policy in policies:
        print("Updating policy", policy.display_name)
        # These two fields cannot be set directly, so clear them.
        del policy.creation_record
        del policy.mutation_record

        # Update old channel names with new channel names.
        for i, channel in enumerate(policy.notification_channels):
            new_channel = channel_name_map.get(channel)
            if new_channel:
                policy.notification_channels[i] = new_channel

        updated = False

        if is_same_project:
            try:
                alert_client.update_alert_policy(alert_policy=policy)
                updated = True
            except google.api_core.exceptions.NotFound:
                pass  # The policy was deleted.  Create it below.
            except google.api_core.exceptions.InvalidArgument:
                # Annoying that API throws InvalidArgument when the policy
                # does not exist.  Seems like it should throw NotFound.
                pass  # The policy was deleted.  Create it below.

        if not updated:
            # The policy no longer exists.  Recreate it.
            old_name = policy.name
            del policy.name
            for condition in policy.conditions:
                del condition.name
            policy = alert_client.create_alert_policy(
                name=project_name, alert_policy=policy
            )
        print("Updated", policy.name)

Das erstellte AlertPolicy-Objekt enthält zusätzliche Felder. Die Richtlinie selbst hat die Felder name, creationRecord und mutationRecord. Darüber hinaus wird für jede Bedingung in der Richtlinie das Feld name angegeben. Diese Felder können nicht extern geändert werden, sodass sie beim Erstellen einer Richtlinie nicht festgelegt werden müssen. Sie sind in keinem der JSON-Beispiele zum Erstellen von Richtlinien enthalten. Wenn jedoch aus ihnen erstellte Richtlinien nach der Erstellung abgerufen werden, sind die Felder vorhanden.

Konfigurieren Sie wiederkehrende Benachrichtigungen für messwertbasierte Benachrichtigungsrichtlinien

Standardmäßig sendet eine messwertbasierte Benachrichtigungsrichtlinie eine Benachrichtigung an jede Benachrichtigung wenn ein Vorfall geöffnet wird. Sie können die Standardeinstellung und konfigurieren Sie eine Benachrichtigungsrichtlinie, um Benachrichtigungen erneut an alle oder einige der Benachrichtigungskanäle für Ihre Benachrichtigungsrichtlinie. Diese wiederholten Benachrichtigungen werden bei Vorfällen gesendet mit dem Status „Offen“ oder „Bestätigt“. Das Intervall zwischen diesen Benachrichtigungen muss mindestens 30 Minuten sein und nicht mehr als 24 Stunden, angegeben in Sekunden.

Zur Konfiguration wiederkehrender Benachrichtigungen ergänzen Sie die Konfiguration der Benachrichtigungsrichtlinie Ein AlertStrategy-Objekt, das mindestens ein Element enthält NotificationChannelStrategy-Objekt. Ein NotificationChannelStrategy-Objekt hat zwei Felder:

  • renotifyInterval: das Intervall in Sekunden zwischen wiederholten Benachrichtigungen.

    Wenn Sie den Wert des Felds renotifyInterval ändern, wenn wird ein Vorfall für die Benachrichtigungsrichtlinie geöffnet, geschieht Folgendes:

    • Die Benachrichtigungsrichtlinie sendet eine weitere Benachrichtigung über den Vorfall.
    • Die Benachrichtigungsrichtlinie startet den Intervallzeitraum neu.
  • notificationChannelNames: ein Array mit Ressourcennamen des Benachrichtigungskanals. Das sind Zeichenfolgen im Format projects/PROJECT_ID/notificationChannels/CHANNEL_ID, wobei CHANNEL_ID ist ein numerischer Wert. Informationen zum Abrufen der Kanal-ID findest du unter Benachrichtigungskanäle in einem Projekt auflisten

Das folgende JSON-Beispiel zeigt eine konfigurierte Benachrichtigungsstrategie zum Senden wiederholter Benachrichtigungen alle 1.800 Sekunden (30 Minuten) auf einen Benachrichtigungskanal:

  "alertStrategy": {
    "notificationChannelStrategy": [
      {
        "notificationChannelNames": [
          "projects/PROJECT_ID/notificationChannels/CHANNEL_ID"
        ],
        "renotifyInterval": "1800s"
      }
    ]
  }

Wenn Sie wiederholte Benachrichtigungen vorübergehend unterdrücken möchten, können Sie die Schlummerfunktion aktivieren. Bis wiederholte Benachrichtigungen verhindern, die Benachrichtigungsrichtlinie mit der API bearbeiten und Entfernen Sie das NotificationChannelStrategy-Objekt.

Nächste Schritte