Utilisez l'API REST Synthetics pour créer et gérer le moniteur Synthétique.
Autorisations
Pour utiliser l'API REST Synthetics, vous devez disposer des autorisations liées à Synthetics et d'un .
Vous pouvez utiliser la requête NRQL pour analyser les modifications passées effectuées via l'API.
Types de moniteurs dans API
Voici les types de moniteurs et la manière dont ils sont référencés dans l'API REST Synthetics :
Type de moniteur | Nom de l'API |
|---|---|
Ping |
|
Navigateur simple |
|
Navigateur scripté |
|
Test API |
|
Utiliser l'API
Pour utiliser l'API REST monitoring Synthétique, vous devez avoir la possibilité de gérer le moniteur Synthetics et d'utiliser une clé utilisateur.
Cette API peut être utilisée pour tous les moniteurs Synthétique. (Des méthodes API supplémentaires pour le navigateur scripté et le moniteur de test API sont également disponibles pour mettre à jour le script associé à ces moniteurs.) Toutes les données monitoring Synthétique sont disponibles via l'API. Les exemples API montrent la commande cURL.
Pour les comptes basés aux États-Unis, utilisez le point de terminaison suivant :
https://synthetics.newrelic.com/synthetics/apiPour les comptes basés dans l'UE, utilisez le point de terminaison suivant :
https://synthetics.eu.newrelic.com/synthetics/apiPrudence
L'API REST de monitoring synthétique limite le taux d'interrogation d'un compte à trois requêtes par seconde. Les demandes effectuées au-delà de ce seuil renverront un code de réponse 429 .
Pour afficher une liste de tous les moniteurs de votre compte New Relic , envoyez une requête GET à $API_ENDPOINT/v3/monitors. Par exemple:
$curl -v \> -H "Api-Key:$API_KEY" $API_ENDPOINT/v3/monitorsUne demande réussie renverra une réponse 200 OK . Les données renvoyées seront un objet JSON au format suivant :
{ "monitors": [ { "id": "2a1bc369-7654-489d-918e-f6g135h7i2jk", "name": "monitor1", "type": "BROWSER", "frequency": 60, "uri": "http://example.com", "locations": ["AWS_US_WEST_1"], "status": "DISABLED", "slaThreshold": 7, "options": {}, "modifiedAt": "2016-09-26T23:12:46.981+0000", "createdAt": "2016-09-26T23:12:46.981+0000", "userId": 0, "apiVersion": "0.2.2" } ], "count": 1}Arguments de la requête :
offset: Le décalage du nombre de moniteurs. La valeur par défaut est 0. Par exemple, si vous avez 40 moniteurs et que vous utilisez une valeur de décalage de 20, le moniteur 21-40 sera renvoyé.limit:Le nombre de résultats par page, maximum 100. La valeur par défaut est 50.
Vous pouvez les inclure dans votre commande cURL comme suit :
$curl -v \> -H "Api-Key:$API_KEY" $API_ENDPOINT/v3/monitors \> -G -d 'offset=20&limit=100'Les en-têtes incluent un Link pour vous aider à appeler facilement votre moniteur. Par exemple:
<https://synthetics.newrelic.com/synthetics/api/v3/monitors/?offset=0&limit=20>; rel="first", <https://synthetics.newrelic.com/synthetics/api/v3/monitors/?offset=40&limit=20>; rel="last"Pour visualiser un seul moniteur Synthétique, envoyez une requête GET à $API_ENDPOINT/v3/monitors/$MONITOR_ID.
$curl -v \> -H "Api-Key:$API_KEY" $API_ENDPOINT/v3/monitors/$MONITOR_IDUne demande réussie renverra une réponse 200 OK . Les données renvoyées seront un objet JSON au format suivant :
{ "id": UUID, "name": string, "type": string, "frequency": integer, "uri": string, "locations": array of strings, "status": string, "slaThreshold": double, "userId": integer, "apiVersion": string}Un ID de moniteur non valide renverra 404 Not Found: The specified monitor doesn't exist.
Veuillez utiliser les API NerdGraph pour gérer vos moniteurs synthétiques à l'aide de nos derniers runtimes.
Pour ajouter un nouveau moniteur à votre compte Synthetics , envoyez une requête POST à $API_ENDPOINT/v3/monitors avec une charge JSON qui décrit le moniteur.
Tous les champs de l'exemple suivant sont obligatoires, sauf indication contraire :
{ "name": string [required], "type": string (SIMPLE, BROWSER, SCRIPT_API, SCRIPT_BROWSER) [required], "frequency": integer (minutes) [required, must be one of 1, 5, 10, 15, 30, 60, 360, 720, or 1440], "uri": string [required for SIMPLE and BROWSER type], "locations": array of strings [at least one required], "status": string (ENABLED, DISABLED) [required], "slaThreshold": double, "options": { "validationString": string [only valid for SIMPLE and BROWSER types], "verifySSL": boolean (true, false) [only valid for SIMPLE and BROWSER types], "bypassHEADRequest": boolean (true, false) [only valid for SIMPLE types], "treatRedirectAsFailure": boolean (true, false) [only valid for SIMPLE types] }}De plus, add the script for a scripted monitor via l'appel d'API REST un point de terminaison d'APIsupplémentaire pour envoyer le script pour le moniteur qui vient d'être créé. Si vous utilisez un site privé avec l'exécution script vérifiée activée, consultez les emplacementsscript avec l'exécution script vérifiée.
Remplacez l'attribut REST Synthétique monitoring API dans l'exemple suivant par vos valeurs spécifiques :
$curl -v \> -X POST -H "Api-Key:$API_KEY" \> -H 'Content-Type: application/json' $API_ENDPOINT/v3/monitors \> -d '{ "name" : "monitor1", "frequency" : 15, "uri" : "http://my-uri.com", "locations" : [ "AWS_US_WEST_1" ], "type" : "browser", "status" : "enabled", "slaThreshold" : "1.0"}'Une requête réussie renverra une réponse 201 Created , avec l'URI du moniteur nouvellement créé spécifié dans l'en-tête location . Les codes d’erreur possibles incluent :
400 Bad Request:Une ou plusieurs valeurs du moniteur ne sont pas valides, ou le format de la demande n'est pas valide. Par exemple : la fréquence est hors limites ou un ou plusieurs des emplacements spécifiés ne sont pas valides. (Voir le message d'erreur dans le corps de la réponse.)402 Payment Required:La création du moniteur augmentera vos contrôles programmés au-delà de la limite de contrôles achetés de votre compte.
Pour mettre à jour un moniteur existant dans New Relic, envoyez une requête PUT à $API_ENDPOINT/v3/monitors/$MONITOR_ID. De plus, pour le moniteur scripté, suivez les procédures pour mettre à jour le scriptcodé en BASE64.
Tous les champs sont obligatoires. Cependant, le TYPE du moniteur cannot peut être modifié.
Utilisez un ID de moniteur spécifique et remplacez l’ attribut REST Synthétique monitoring API par vos valeurs spécifiques.
$curl -v \> -X PUT -H "Api-Key:$API_KEY" \> -H 'Content-Type: application/json' $API_ENDPOINT/v3/monitors/$MONITOR_ID \> -d \ >'{ $ "name": "updated monitor name",$ "type": "monitor type",$ "frequency": 15,$ "uri": "http://my-uri.com/",$ "locations": ["AWS_US_WEST_1"],$ "status": "enabled",$ "slaThreshold": "7.0" $}'Requests PUT sont destinées à remplacer l'entité cible, donc tous les attributs requis dans la charge JSON lors de la création d'un nouveau moniteur sont également requis lors de la mise à jour d'un moniteur existant.
Une requête réussie renverra une réponse 204 No Content , avec un corps vide. Les codes d’erreur possibles incluent :
400 Bad Request:Une ou plusieurs valeurs du moniteur ne sont pas valides, ou le format de la demande n'est pas valide. Par exemple, la fréquence est hors limites ou un ou plusieurs des emplacements spécifiés ne sont pas valides. (Voir le message d'erreur dans le corps de la réponse.)404 Not Found: Le moniteur spécifié n'existe pas.
Pour corriger un moniteur existant dans New Relic, envoyez une requête PATCH à $API_ENDPOINT/v3/monitors/$MONITOR_ID.
Utilisez un ID de moniteur spécifique et remplacez l’ attribut REST Synthétique monitoring API par vos valeurs spécifiques.
$curl -v \> -X PATCH -H "Api-Key:$API_KEY" \> -H 'Content-Type: application/json' $API_ENDPOINT/v3/monitors/$MONITOR_ID \> -d '{ "name": "updated monitor name" }'Qequests PATCH sont destinées à mettre à jour les attributs individuels de votre moniteur Synthétique plutôt qu'à mettre à jour l'entité entière, vous ne pouvez donc fournir que l'attribut que vous souhaitez mettre à jour.
Une requête réussie renverra une réponse 204 No Content , avec un corps vide. Les codes d’erreur possibles incluent :
400 Bad Request:Une ou plusieurs valeurs du moniteur ne sont pas valides, ou le format de la demande n'est pas valide. Par exemple, la fréquence est hors limites ou un ou plusieurs des emplacements spécifiés ne sont pas valides. (Voir le message d'erreur dans le corps de la réponse.)404 Not Found: Le moniteur spécifié n'existe pas.
Pour supprimer un moniteur existant dans Synthétique monitoring, envoyez une requête DELETE au point de terminaison/v3/monitors/$MONITOR_ID:
$curl -v \> -H "Api-Key:$API_KEY" \> -X DELETE $API_ENDPOINT/v3/monitors/$MONITOR_IDUne requête réussie renverra une réponse 204 No Content , avec un corps vide. Une demande infructueuse renverra la réponse 404 Not Found: Le moniteur spécifié n'existe pas.
Pour récupérer la liste des emplacements valides dans votre moniteur Synthétique, utilisez la commande suivante :
$curl -v \> -X GET -H "Api-Key:$API_KEY" $API_ENDPOINT/v1/locationsAPI de script pour navigateur scripté et moniteur de test API
En plus de l'API générale, il existe plusieurs méthodes API pour le navigateur scripté (SCRIPT_BROWSER) et le navigateur de test API (SCRIPT_API). Ces exemples montrent la commande cURL.
Pour afficher le script associé à un SCRIPT_BROWSER ou SCRIPT_API spécifique dans le moniteur Synthétique de votre compte, envoyez une requête GET à $API_ENDPOINT/v3/monitors/$MONITOR_ID/script. Par exemple:
$curl -v$ -H "Api-Key:$API_KEY"$ $API_ENDPOINT/v3/monitors/$MONITOR_ID/scriptUne demande réussie renverra une réponse 200 OK . Les données renvoyées seront un objet JSON au format suivant :
{ "scriptText": BASE64 encoded string}Les codes d’erreur possibles incluent :
403 Forbidden:Le moniteur spécifié n'est pas de type SCRIPT_BROWSER ou SCRIPT_API.404 Not Found:Le moniteur spécifié n'existe pas ou le script associé au moniteur n'existe pas.
Pour ajouter un nouveau moniteur scripté à votre moniteur Synthétique avec l'API REST :
Suivez les procédures API standard pour ajouter un nouveau moniteur et identifiez le
typecommeSCRIPT_BROWSERouSCRIPT_API.Mettez à jour le nouveau moniteur avec une version codée en BASE64 du script au point de terminaison
$MONITOR_UUID/script.Pour plus d'informations, reportez-vous à l'exemple.
Si vous utilisez un site privé avec l'exécution script vérifiée activée, consultez les emplacementsscript avec l'exécution script vérifiée.
Pour mettre à jour le script associé à un moniteur SCRIPT_BROWSER ou SCRIPT_API spécifique, envoyez une requête PUT à $API_ENDPOINT/v3/monitors/$MONITOR_ID/script avec une charge JSON contenant le scriptText (obligatoire).
$scriptPayload='{"scriptText":BASE64 encoded string}'$curl -v -X PUT \> -H "Api-Key:$API_KEY" \> -H 'Content-Type: application/json' \> $API_ENDPOINT/v3/monitors/$MONITOR_UUID/script \> -d $scriptPayloadSi vous utilisez un site privé avec l'exécution script vérifiée activée, consultez les emplacementsscript avec l'exécution script vérifiée.
Une requête réussie renverra une réponse 204 No Content avec un corps vide. Les codes d’erreur possibles incluent :
400 Bad Request:Chaîne codée BASE64 non valide pourscriptTextouhmac.403 Forbidden:Le moniteur spécifié n'est pas du typeSCRIPT_BROWSERouSCRIPT_API.404 Not Found:Le moniteur spécifié n'existe pas.
Lors de la création ou de la mise à jour d'un moniteur pour un site privé sur lequel l'exécution script vérifié est activée, vous devez utiliser scriptLocations pour définir le mot de passe :
{ "scriptText": BASE64 encoded String, "scriptLocations": [ { "name": Location name, "hmac" BASE64 encoded String of SHA256 HMAC for location } ]}Le mot de passe utilisé pour générer la chaîne HMAC doit correspondre au mot de passe défini pour le site privé. Si vous avez plusieurs emplacements avec l'exécution de script vérifiée activée, le HMAC de chaque emplacement doit être calculé. Lors de la génération de la chaîne HMAC, utilisez l'algorithme SHA256 avec le script et le mot de passe.
Voici un exemple de script :
var assert = require('assert');assert.equal('1', '1');Cet exemple utilise password comme mot de passe pour scriptLocation:
$curl -v$ -X PUT -H "Api-Key:$API_KEY"$ -H 'content-type: application/json'$ $API_ENDPOINT/v3/monitors/$MONITOR_ID/script$ -d \>'{$ "scriptText": "dmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpOw0KYXNzZXJ0LmVxdWFsKCcxJywgJzEnKTs=",$ "scriptLocations": [{$ "name": "my_vse_enabled_location",$ "hmac": "MjhiNGE4MjVlMDE1N2M4NDQ4MjNjNDFkZDEyYTRjMmUzZDE3NGJlNjU0MWFmOTJlMzNiODExOGU2ZjhkZTY4ZQ=="$ }]$}'Important
Vous devez supprimer le dernier caractère de nouvelle ligne du script et de la valeur HMAC calculée avant l'encodage en BASE64.
Étapes de calcul :
- Calculez la valeur HMAC à partir du script. Une façon est d'utiliser :
cat script | openssl dgst -sha256 -hmac "password" > hmac - Supprimez le caractère de nouvelle ligne si celui-ci a été ajouté par openssl.
- Encodez le HMAC en BASE64 sans saut de ligne.
Exemple de navigateur scripté
Voici un exemple d'utilisation de l'API REST de New Relic et du script bash pour créer un moniteur de navigateur scripté.
L'exemple suivant montre la commande cURL pour créer un moniteur de navigateur scripté.
En haut du script, remplacez les variables par vos valeurs spécifiques.
Pour la variable
scriptfile, identifiez le nom de fichier du script à créer. Voici un exemple de script qui peut être enregistré soussample_synth_script.jspour être utilisé dans l'exemple :var assert = require("assert");$browser.get("http://example.com").then(function() {// Check the H1 title matches "Example Domain"return $browser.findElement($driver.By.css("h1")).then(function (element) {return element.getText().then(function (text) {assert.equal("Example Domain", text, "Page H1 title did not match");});});}).then(function() {// Check that the external link matches "http://www.iana.org/domains/example"return $browser.findElement($driver.By.css("div > p > a")).then(function (element) {return element.getAttribute("href").then(function (link) {assert.equal("http://www.iana.org/domains/example",link,"More information link did not match");});});});
Cet exemple montre le script bash qui créera le moniteur SCRIPTED_BROWSER.
Conseil
Dans certains cas, vous souhaiterez peut-être utiliser -w 0, ce qui désactivera le retour à la ligne : base64 -w 0 $scriptfile
$#!/bin/bash$
$# API key from your account settings$API_KEY=''$# Other attributes found at https://docs.newrelic.com/docs/apis/synthetics-rest-api/monitor-examples/attributes-synthetics-rest-api#api-attributes$monitorName='Test API Script'$monitorType='SCRIPT_BROWSER'$frequency=1440$locations='"AWS_US_WEST_1", "AWS_US_EAST_1"'$slaThreshold=7.0$# Location of the file with your script$scriptfile=sample_synth_script.js$
$# Test that the script file exists (does not validate content)$if [ -e "$scriptfile" ]$then$ script=$(cat "$scriptfile")$
$ payload="{ \"name\" : \"$monitorName\", \"frequency\" : $frequency, \"locations\" : [ $locations ], \"status\" : \"ENABLED\", \"type\" : \"$monitorType\", \"slaThreshold\" : $slaThreshold, \"uri\":\"\"}"$ echo "Creating monitor"$
$ # Make curl call to API and parse response headers to get monitor UUID$ shopt -s extglob # Required to trim whitespace; see below$ while IFS=':' read key value; do$ # trim whitespace in "value"$ value=${value##+([[:space:]])}; value=${value%%+([[:space:]])}$ case "$key" in$ location) LOCATION="$value"$ ;;$ HTTP*) read PROTO STATUS MSG <<< "$key{$value:+:$value}"$ ;;$ esac$ done < <(curl -sS -i -X POST -H "Api-Key:$API_KEY" -H 'Content-Type:application/json' https://synthetics.newrelic.com/synthetics/api/v3/monitors -d "$payload")$
$ # Validate monitor creation & add script unless it failed$ if [ $STATUS = 201 ]; then$ echo "Monitor created, $LOCATION "$ echo "Uploading script"$ # base64 encode script$ encoded=`echo "$script" | base64`$ scriptPayload="{\"scriptText\":\"$encoded\"}"$ curl -s -X PUT -H "Api-Key:$API_KEY" -H 'Content-Type:application/json' "$LOCATION/script" -d $scriptPayload$ echo "Script uploaded"$ else$ echo "Monitor creation failed"$ fi$
$else$ echo "script file not found, not creating monitor"$fi