합성 REST API를 사용하여 합성 모니터를만들고 관리합니다.
시작하기 전에
중요
2024년 10월 22일부로 컨테이너화된 미니언(분당 호출 수) 및 구형 신세틱스 손잡이 버전이 종료 됩니다. 2024년 8월 26일부터 더 이상 구형 신세틱스 파티션 버전을 사용하여 새 모니터를 생성할 수 없습니다. 신세틱스 REST API 실내 신세틱스 전시 버전을 사용한 모니터 생성만 지원합니다. 성능 저하를 방지하기 위해 최신 런타임을 사용하여 NerdGraph API 사용하여 신세틱스모니터를 관리하세요.
당사의 합성 REST API는 API를 통해 합성 모니터를 관리하는 한 가지 방법이지만 권장되는 방법은 NerdGraph API를사용하는 것입니다.
권한
신세틱스 REST API를 사용하려면 신세틱스 관련 권한 과 가 있어야 합니다.
NRQL 쿼리를 사용하여 API를 통해 이루어진 과거 변경 사항을 분석할 수 있습니다.
API의 모니터링 유형
다음은 모니터 유형 과 Synthetics REST 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
을 반환합니다.
중요
2024년 10월 22일부로 컨테이너화된 미니언(분당 호출 수) 및 구형 신세틱스 손잡이 버전이 종료 됩니다. 2024년 8월 26일부터 더 이상 구형 신세틱스 파티션 버전을 사용하여 새 모니터를 생성할 수 없습니다. 신세틱스 REST API 실내 신세틱스 전시 버전을 사용한 모니터 생성만 지원합니다. 성능 저하를 방지하기 위해 최신 런타임을 사용하여 NerdGraph API 사용하여 신세틱스모니터를 관리하세요.
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, 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를 통해 add the script for a scripted monitor 에 추가 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로 인코딩된 스크립트를 업데이트하십시오 .
모든 분야가 요구됩니다. 그러나 모니터 cannot 의 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