합성 REST API를 사용하여 ping, 단순 브라우저, 스크립트 브라우저 및 API 테스트 모니터와 같은 모든 유형의 합성 모니터 를 만들고 관리합니다. 모든 합성 모니터링 데이터는 REST API를 통해 사용할 수 있습니다.
합성 REST API를 사용하려면 해당 기능을 허용하는 사용자 역할과 .
사용 가능한 모든 API에 대한 개요는 API 소개 를참조하십시오. 아직 하지 않았다면 아래에서 무료 New Relic 계정을 만들어 오늘 데이터 모니터링을 시작하십시오.
중요
이제 NerdGraph API 를 사용하여 합성 모니터(인증서 확인 모니터, 단계 모니터 및 끊어진 링크 모니터 포함)를 관리할 수 있습니다.
특징
합성 모니터링 API(v3)의 최신 버전에는 다음 기능이 추가되었습니다.
종합 모니터링 API(v3) | 특징 |
---|---|
POST 및 PUT 요청에 대한 옵션 필드 | UI에서 이러한 옵션을 사용할 수 있는 방식과 유사하게 |
패치 요청 | PUT에서 전체 모니터 엔터티를 지정하지 않고 변경하려는 모니터의 필드만 업데이트할 수 있습니다. 적절한 유형의 모니터를 사용하고 있다고 가정하면 |
400 | v3부터 합성 모니터링 API는 유효성 검사 실패가 발생했을 때 최대한 많은 정보를 반환하려고 시도합니다. 이렇게 하면 요청에 무엇이 잘못되었는지 파악하는 데 도움이 됩니다. API는 이전 API 버전에서 발생한 첫 번째 유효성 검사 오류가 아니라 모든 유효성 검사를 실행하고 실패한 유효성 검사 메시지를 반환합니다. |
쪽수 매기기 | 큰 API 응답은 적절하게 페이지가 매겨집니다. |
NRQL 쿼리를 사용하여 API를 통해 이루어진 과거 변경 사항을 분석 할 수도 있습니다.
API의 모니터링 유형
다음은 모니터 유형 과 API에서 참조되는 방법입니다.
모니터 유형 | API 이름 |
---|---|
핑 |
|
간단한 브라우저 |
|
스크립트 브라우저 |
|
API 테스트 |
|
API 사용
합성 모니터링 REST API 를 사용하려면 합성 모니터를 관리하고 사용자 키 를 사용할 수 있어야 합니다(REST API 키는 작동하지 않음).
이 API는 모든 합성 모니터에 사용할 수 있습니다. ( 스크립팅된 브라우저 및 API 테스트 모니터 에 대한 추가 API 방법을 사용하여 해당 모니터와 연결된 스크립트를 업데이트할 수도 있습니다.) 모든 합성 모니터링 데이터는 API를 통해 사용할 수 있습니다. API 예제는 cURL 명령을 보여줍니다.
미국 기반 계정의 경우 다음 엔드포인트를 사용합니다.
https://synthetics.newrelic.com/synthetics/api
EU 기반 계정 의 경우 다음 엔드포인트를 사용하십시오.
https://synthetics.eu.newrelic.com/synthetics/api
주의
종합 모니터링 REST API는 계정의 요청 속도를 초당 3개의 요청으로 제한합니다. 이 임계값을 초과하는 요청은 429
응답 코드를 반환합니다.
New Relic 계정의 모든 모니터 목록을 보려면 $API_ENDPOINT/v3/monitors
에 GET 요청을 보내십시오. 예를 들어:
curl -v \
-H 'Api-Key:$API_KEY' $API_ENDPOINT/v3/monitors
성공적인 요청은 200 OK
응답을 반환합니다. 반환된 데이터 는 다음 형식의 JSON 개체입니다.
{ "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}
쿼리 인수:
offset
: 모니터 카운트 오프셋. 기본값은 0입니다. 예를 들어, 40개의 모니터가 있고 오프셋 값 20을 사용하는 경우 모니터 21-40이 반환됩니다.limit
: 페이지당 결과 수, 최대 100. 기본값은 50입니다.
다음과 같이 cURL 명령에 이를 포함할 수 있습니다.
curl -v \
-H 'Api-Key:$API_KEY' $API_ENDPOINT/v3/monitors \
-G -d 'offset=20&limit=100'
헤더에는 모니터를 쉽게 호출 하는 데 도움이 되는 Link
이 포함되어 있습니다. 예를 들어:
<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"
단일 합성 모니터를 보려면 $API_ENDPOINT/v3/monitors/$MONITOR_ID
에 GET 요청을 보냅니다.
curl -v \
-H 'Api-Key:$API_KEY' $API_ENDPOINT/v3/monitors/$MONITOR_ID
성공적인 요청은 200 OK
응답을 반환합니다. 반환된 데이터 는 다음 형식의 JSON 개체입니다.
{ "id": UUID, "name": string, "type": string, "frequency": integer, "uri": string, "locations": array of strings, "status": string, "slaThreshold": double, "userId": integer, "apiVersion": string}
잘못된 모니터 ID는 404 Not Found: The specified monitor doesn't exist
을 반환합니다.
Synthetics 계정에 새 모니터를 추가하려면 모니터를 설명하는 JSON 페이로드와 함께 POST 요청을 $API_ENDPOINT/v3/monitors
에 보냅니다.
달리 명시되지 않는 한 다음 예의 모든 필드는 필수입니다.
{"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, MUTED, 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] }}
또한 REST API를 통해 스크립팅된 모니터에 대한 스크립트를 추가 하려면 추가 API 엔드포인트 를 호출하여 방금 생성한 모니터에 대한 스크립트를 보냅니다. 확인된 스크립트 실행 이 활성화된 비공개 위치를 사용하는 경우 확인된 스크립트 실행이 있는 스크립트 위치를 참조하십시오.
다음 예의 합성 모니터링 REST API 속성 을 특정 값으로 바꿉니다.
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"}'
성공적인 요청은 location
헤더에 지정된 새로 생성된 모니터의 URI와 함께 201 Created
응답을 반환합니다. 가능한 오류 코드는 다음과 같습니다.
400 Bad Request
: 하나 이상의 모니터 값이 유효하지 않거나 요청 형식이 유효하지 않습니다. 예: 빈도가 범위를 벗어났거나 지정된 위치 중 하나 이상이 유효하지 않습니다. (응답 본문의 오류 메시지를 참조하십시오.)402 Payment Required
: 모니터를 생성하면 예약된 수표가 계정의 구매 수표 한도를 초과하여 증가합니다.
New Relic에서 기존 모니터를 업데이트하려면 $API_ENDPOINT/v3/monitors/$MONITOR_ID
에 PUT 요청을 보냅니다. 또한 스크립팅된 모니터의 경우 절차에 따라 BASE64로 인코딩된 스크립트를 업데이트하십시오 .
모든 항목을 채워야합니다. 단, 모니터의 TYPE
은 변경할 수 없습니다 .
특정 모니터 ID를 사용하고 합성 모니터링 REST API 속성 을 특정 값으로 바꾸십시오.
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" }'
PUT 요청은 대상 엔터티를 대체하기 위한 것이므로 새 모니터를 생성 할 때 JSON 페이로드에 필요한 모든 속성은 기존 모니터를 업데이트할 때도 필요합니다.
요청이 성공하면 본문이 비어 있는 204 No Content
응답이 반환됩니다. 가능한 오류 코드는 다음과 같습니다.
400 Bad Request
: 하나 이상의 모니터 값이 유효하지 않거나 요청 형식이 유효하지 않습니다. 예를 들어 빈도가 범위를 벗어났거나 지정된 위치 중 하나 이상이 유효하지 않습니다. (응답 본문의 오류 메시지를 참조하십시오.)404 Not Found
: 지정한 모니터가 존재하지 않습니다.
New Relic의 기존 모니터를 패치하려면 $API_ENDPOINT/v3/monitors/$MONITOR_ID
에 PATCH 요청을 보냅니다.
특정 모니터 ID를 사용하고 합성 모니터링 REST API 속성 을 특정 값으로 바꾸십시오.
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" }'
PATCH 요청은 전체 엔터티를 업데이트하는 것이 아니라 합성 모니터의 개별 속성을 업데이트하기 위한 것이므로 업데이트하려는 속성만 제공할 수 있습니다.
요청이 성공하면 본문이 비어 있는 204 No Content
응답이 반환됩니다. 가능한 오류 코드는 다음과 같습니다.
400 Bad Request
: 하나 이상의 모니터 값이 유효하지 않거나 요청 형식이 유효하지 않습니다. 예를 들어 빈도가 범위를 벗어났거나 지정된 위치 중 하나 이상이 유효하지 않습니다. (응답 본문의 오류 메시지를 참조하십시오.)404 Not Found
: 지정한 모니터가 존재하지 않습니다.
종합 모니터링에서 기존 모니터를 삭제하려면 $API_ENDPOINT /v3/monitors/$MONITOR_ID
에 DELETE 요청을 보냅니다.
curl -v \
-H 'Api-Key:$API_KEY' \
-X DELETE $API_ENDPOINT/v3/monitors/$MONITOR_ID
요청이 성공하면 본문이 비어 있는 204 No Content
응답이 반환됩니다. 실패한 요청은 404 Not Found
응답을 반환합니다. 지정된 모니터가 없습니다.
합성 모니터에서 유효한 위치 목록을 검색하려면 다음 명령을 사용하십시오.
curl -v \
-X GET -H 'Api-Key:$API_KEY' $API_ENDPOINT/v1/locations
스크립팅된 브라우저 및 API 테스트 모니터용 스크립트 API
일반 API 외에도 스크립팅된 브라우저( SCRIPT_BROWSER
) 및 API 테스트 브라우저( SCRIPT_API
)를 위한 여러 API 메소드가 있습니다. 이 예는 cURL 명령을 보여줍니다.
계정의 합성 모니터에서 특정 SCRIPT_BROWSER
또는 SCRIPT_API
과 연결된 스크립트를 보려면 $API_ENDPOINT /v3/monitors/$MONITOR_ID/script
에 GET 요청을 보냅니다. 예를 들어:
curl -v
-H 'Api-Key: $API_KEY'
$API_ENDPOINT/v3/monitors/$MONITOR_ID/script
성공적인 요청은 200 OK
응답을 반환합니다. 반환된 데이터는 다음 형식의 JSON 개체입니다.
{ "scriptText": BASE64 encoded string}
가능한 오류 코드는 다음과 같습니다.
403 Forbidden:
지정된 모니터가 SCRIPT_BROWSER 또는 SCRIPT_API 유형이 아닙니다.404 Not Found:
지정된 모니터가 존재하지 않거나 모니터와 연결된 스크립트가 존재하지 않습니다.
REST API를 사용하여 합성 모니터에 새 스크립팅된 모니터를 추가하려면:
표준 API 절차에 따라 새 모니터를 추가 하고
type
을SCRIPT_BROWSER
또는SCRIPT_API
로 식별합니다.스크립트의 BASE64 인코딩 버전으로 새 모니터를
$MONITOR_UUID/script
엔드포인트로 업데이트합니다.자세한 내용은 예제 를 참조하십시오.
확인된 스크립트 실행 이 활성화된 비공개 위치를 사용하는 경우 확인된 스크립트 실행이 있는 스크립트 위치를 참조하십시오.
특정 SCRIPT_BROWSER
또는 SCRIPT_API
모니터와 연결된 스크립트를 업데이트하려면 scriptText
(필수)를 포함하는 JSON 페이로드와 함께 $API_ENDPOINT /v3/monitors/$MONITOR_ID/script
에 PUT 요청을 보냅니다.
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 $scriptPayload
확인된 스크립트 실행 이 활성화된 비공개 위치를 사용하는 경우 확인된 스크립트 실행이 있는 스크립트 위치를 참조하십시오.
요청이 성공하면 본문이 비어 있는 204 No Content
응답이 반환됩니다. 가능한 오류 코드는 다음과 같습니다.
400 Bad Request:
scriptText
또는hmac
에 대해 잘못된 BASE64 인코딩 문자열입니다.403 Forbidden:
지정된 모니터가SCRIPT_BROWSER
또는SCRIPT_API
유형이 아닙니다.404 Not Found:
지정한 모니터가 존재하지 않습니다.
확인된 스크립트 실행 이 켜져 있는 비공개 위치에 대한 모니터를 만들거나 업데이트할 때 scriptLocations
을 사용하여 비밀번호를 설정해야 합니다.
{ "scriptText": BASE64 encoded String, "scriptLocations": [ { "name": Location name, "hmac" BASE64 encoded String of SHA256 HMAC for location } ]}
HMAC 문자열을 생성하는 데 사용되는 비밀번호는 개인 위치에 대해 설정된 비밀번호와 일치해야 합니다. 확인된 스크립트 실행 이 활성화된 여러 위치가 있는 경우 각 위치에서 HMAC 를 계산해야 합니다. HMAC 문자열을 생성할 때 스크립트 및 비밀번호와 함께 SHA256 알고리즘을 사용하십시오.
다음은 스크립트의 예입니다.
var assert = require('assert');assert.equal('1', '1');
이 예에서는 { scriptLocation
의 비밀번호로 password
을 사용합니다.
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=="} ]}'
중요
BASE64로 인코딩하기 전에 스크립트와 계산된 HMAC 값 모두에서 마지막 줄 바꿈 문자를 제거해야 합니다.
계산 단계:
- 스크립트에서 HMAC 값을 계산합니다. 한 가지 방법은 다음을 사용하는 것입니다.
cat script | openssl dgst -sha256 -hmac "password" > hmac
- openssl에 의해 추가된 개행 문자를 제거하십시오.
- 줄 바꿈 없이 HMAC를 BASE64로 인코딩합니다.
스크립팅된 브라우저 예제
다음은 New Relic의 REST API와 bash 스크립트를 사용하여 스크립팅된 브라우저 모니터를 만드는 예입니다.
다음 예는 스크립팅된 브라우저 모니터를 생성하기 위한 cURL 명령을 보여줍니다.
스크립트 상단에서 변수를 특정 값으로 바꿉니다.
scriptfile
변수의 경우 생성할 스크립트의 파일 이름을 식별합니다. 다음은 예에서 사용하기 위해sample_synth_script.js
로 저장할 수 있는 샘플 스크립트입니다.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");});});});
이 예는 SCRIPTED_BROWSER
모니터를 생성할 bash 스크립트를 보여줍니다.
팁
어떤 경우에는 줄 바꿈을 비활성화하는 -w 0
를 사용할 수 있습니다. 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