모니터 API 레퍼런스

필드에 사용할 수 있는 값

모니터 지역

설명
US_EAST_1북버지니아
CA_CENTRAL_1캐나다 (몬트리올)
EU_CENTRAL_1프랑크푸르트
AP_NORTHEAST_1도쿄

모니터 알림 유형

설명
INCIDENT인시던트 알림
EMAIL이메일 알림
SMSSMS 알림
SLACKSlack 알림
DISCORDDiscord 알림
MICROSOFT_TEAMSMicrosoft Teams 알림
PHONE_CALL전화 알림
WEBHOOKWebhook 알림
GOOGLE_CHATGoogle Chat 알림
WHATSAPPWhatsApp 알림

모니터 상태

설명
UP모니터가 정상 동작 중입니다
DOWN모니터가 실패했습니다
DEGRADED모니터에 문제가 있습니다
UNKNOWN모니터 상태를 판단할 수 없습니다

모니터 가져오기

이 엔드포인트로 기존 모니터 전체 목록을 조회하고 탐색할 수 있습니다.

엔드포인트:

GET /:page_id/monitors

쿼리 파라미터

파라미터유형기본값설명
pagenumber1가져올 페이지 번호입니다.
limitnumber100페이지당 모니터 수입니다.
searchstringnull결과를 필터링할 검색어입니다.
statusenumnull상태 필터 ('UP', 'DOWN', 'UNKNOWN', 'DEGRADED').

요청 예시

GET /1/monitors?limit=3&page=2&status=DOWN

응답 예시

{
"monitors": [{ "...": "monitor objects" }],
"total": 10,
"page": 3,
"totalPages": 5,
"limit": 2
}

모니터 만들기

엔드포인트:

POST /monitors

요청 예시

{
"pageId": "page123",
"url": "https://example.com",
"httpMethod": "GET",
"body": null,
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer token"
},
"queryParams": {
"search": "test",
"limit": "10"
},
"basicAuth": {
"username": "user",
"password": "password"
},
"type": "HTTP",
"assertions": [
{
"type": "STATUSCODE",
"comparison": "EQUALS",
"selector": null,
"target": "200"
}
],
"alerts": ["alert-id-1", "alert-id-2"],
"name": "Example Monitor",
"locations": "US_EAST_1",
"checksInterval": 300,
"createComponent": true,
"createMetric": true,
"onFail": {
"createIncident": true,
"createOutageDuration": true,
"publishIncident": true,
"notifySubscribers": true
},
"onRecover": {
"resolveIncident": true,
"resolveOutageDuration": true,
"publishIncident": true,
"notifySubscribers": true
}
}

응답 예시

{
"monitor": {
"pageId": "page123",
"url": "https://example.com",
"httpMethod": "GET",
"body": null,
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer token"
},
"queryParams": {
"search": "test",
"limit": "10"
},
"basicAuth": {
"username": "user",
"password": "password"
},
"type": "HTTP",
"assertions": [
{
"id": "assertion1",
"type": "STATUSCODE",
"comparison": "EQUALS",
"selector": null,
"target": "200"
}
],
"alerts": ["alert1", "alert2"],
"name": "Example Monitor",
"locations": "US_EAST_1",
"checksInterval": 300,
"createComponent": true,
"createMetric": true,
"onFail": {
"createIncident": true,
"createOutageDuration": true,
"publishIncident": true,
"notifySubscribers": true
},
"onRecover": {
"resolveIncident": true,
"resolveOutageDuration": true,
"publishIncident": true,
"notifySubscribers": true
},
"createdAt": "2023-08-08T12:00:00Z",
"updatedAt": "2023-08-08T12:00:00Z"
},
"message": "Monitor created successfully"
}

모니터 업데이트하기

엔드포인트:

PUT /monitors/:id

요청 예시

{
"url": "https://updated.com",
"name": "Updated Monitor Name"
}

응답 예시

{
"monitor": {
"pageId": "page123",
"url": "https://updated.com",
"httpMethod": "GET",
"body": null,
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer token"
},
"queryParams": {
"search": "test",
"limit": "10"
},
"basicAuth": {
"username": "user",
"password": "password"
},
"type": "HTTP",
"assertions": [
{
"id": "assertion1",
"type": "STATUSCODE",
"comparison": "EQUALS",
"selector": null,
"value": "200"
}
],
"alerts": ["alert1", "alert2"],
"name": "Updated Monitor Name",
"locations": "US_EAST_1",
"checksInterval": 300,
"createComponent": true,
"createMetric": true,
"onFail": {
"createIncident": true,
"createOutageDuration": true,
"publishIncident": true,
"notifySubscribers": true
},
"onRecover": {
"resolveIncident": true,
"resolveOutageDuration": true,
"publishIncident": true,
"notifySubscribers": true
},
"createdAt": "2023-08-08T12:00:00Z",
"updatedAt": "2023-08-08T12:00:00Z"
},
"message": "Monitor updated successfully"
}

모니터 삭제하기

엔드포인트:

DELETE /monitors/:id

요청 예시

DELETE /monitors/monitor-id-1

응답 예시

{
"message": "Monitor deleted successfully."
}

모니터 로그 가져오기

엔드포인트:

GET /monitors/:id/logs

쿼리 파라미터

파라미터유형기본값설명
limitnumber100페이지당 항목 수입니다. 1000을 넘을 수 없습니다.
pagenumber1조회할 페이지 번호입니다.
monitorIdstring-모니터의 ID입니다.
locationstringnull모니터의 지역입니다.
createdAtstring | object | numbernull생성 날짜입니다. 문자열, 숫자 또는 gtelte 필드를 가진 객체일 수 있습니다.
isSuccessfulbooleannull체크가 성공했는지 여부입니다.
isSSLCheckbooleannull체크가 SSL 체크인지 여부입니다.
httpStatusCodestringnull응답의 HTTP 상태 코드입니다.
status('UP', 'DOWN', 'UNKNOWN', 'DEGRADED')null모니터의 상태입니다.
dnsTimestring | number | objectnullDNS 조회에 걸린 시간입니다.
tcpTimestring | number | objectnullTCP 연결에 걸린 시간입니다.
tlsTimestring | number | objectnullTLS 핸드셰이크에 걸린 시간입니다.
firstByteTimestring | number | objectnull첫 바이트를 받기까지 걸린 시간입니다.
downloadTimestring | number | objectnull다운로드에 걸린 시간입니다.
responseTimestring | number | objectnull전체 응답 시간입니다.
performanceTimestring | number | objectnull성능 측정 시간입니다.
accessabilityScorestring | number | objectnull접근성 점수입니다.
seoScorestring | number | objectnullSEO 점수입니다.
bestPracticesScorestring | number | objectnull모범 사례 점수입니다.
successfulAssertionsstring | number | objectnull성공한 조건의 수입니다.
sortstring시간순정렬 기준 필드입니다.

요청 예시

GET /monitors/monitor-id-1/logs?limit=100&page=1

응답 예시

{
"monitorLogs": [
// {monitor log object},
// {monitor log object 2}
],
"total": 478,
"page": 1,
"totalPages": 5,
"limit": 100
}

ID로 모니터 체크 실행하기

엔드포인트:

GET /monitors/:id/run

쿼리 파라미터

파라미터유형기본값설명
location'US_EAST_1', 'EU_CENTRAL_1', 'AP_NORTHEAST_1', 'AP_SOUTHEAST_2', 'CA_CENTRAL_1'-모니터의 지역입니다. 지정된 값 중 하나여야 합니다.
retrybooleanfalse작업을 재시도할지 여부입니다. 선택 사항입니다.
monitorLogIdstringnull모니터 로그의 고유 식별자입니다. 선택 사항입니다.

요청 예시

GET /monitors/monitor-id-1/run?monitorId=abc123&location=US_EAST_1&retry=true&monitorLogId=log456

응답 예시

{
"status": "success",
"message": "Monitor check run successfully."
}

모니터 알림 만들기

엔드포인트:

POST /monitor-alerts

요청 예시

{
"type": "EMAIL",
"pageId": "page123",
"recipient": "user@example.com",
"recipientWorkspace": "workspace123",
"whenFails": true,
"whenRecovers": true,
"whenDegrades": false,
"whenSslExpires": true,
"sslExpiresInDays": 30,
"monitors": ["monitor1", "monitor2"],
"metadata": "Additional information about the alert"
}

응답 예시

{
"monitor": {
"id": "alert123",
"siteId": "site123",
"type": "EMAIL",
"recipient": "user@example.com",
"whenFails": true,
"whenRecovers": true,
"whenDegrades": false,
"whenSslExpires": true,
"sslExpiresInDays": 30,
"monitors": [{ "id": "monitor1" }, { "id": "monitor2" }],
"createdAt": "2023-08-08T12:00:00Z",
"updatedAt": "2023-08-08T12:00:00Z",
"metadata": "Additional information about the alert"
},
"message": "Monitor Alert created successfully"
}

모니터 알림 업데이트하기

엔드포인트:

PUT /monitor-alerts/:id

요청 예시

{
"type": "EMAIL",
"monitors": ["monitor-1-id", "monitor-2-id", "monitor-3-id"]
}

응답 예시

{
"monitor": {
"type": "EMAIL",
"pageId": "page123",
"recipient": "user@example.com",
"recipientWorkspace": "workspace123",
"whenFails": true,
"whenRecovers": true,
"whenDegrades": false,
"whenSslExpires": true,
"sslExpiresInDays": 30,
"monitors": ["monitor-1-id", "monitor-2-id"],
"metadata": "Additional information about the alert"
},
"message": "Monitor alert updated successfully."
}

모니터 알림 가져오기

엔드포인트:

GET /:page_id/monitor-alerts

쿼리 파라미터

파라미터유형기본값설명
limitnumber100페이지당 항목 수입니다.
pagenumber1조회할 페이지 번호입니다.

요청 예시

GET /1/monitor-alerts?limit=2&page=3

응답 예시

{
"monitorAlerts": [
{...monitor alert objects}
],
"total": 27,
"page": 3,
"totalPages": 14,
"limit": 2
}

모니터 알림 삭제하기

엔드포인트:

DELETE /monitor-alerts/:id

요청 예시

DELETE /monitor-alerts/alert-id-1

응답 예시

{
"message": "Monitor alert deleted successfully."
}

모니터 그룹 만들기

엔드포인트:

POST /monitors-groups

요청 예시

{
"pageId": "page123",
"name": "Example Name",
"childId": "child456"
}

응답 예시

{
"monitor": {
"id": "group123",
"name": "Example Name",
"siteId": "site123",
"collapsed": false,
"monitors": [{ "id": "monitor1" }, { "id": "monitor2" }],
"groupId": "parentGroup123",
"children": [
{ "id": "childGroup1", "name": "Child Group 1" },
{ "id": "childGroup2", "name": "Child Group 2" }
],
"order": 1,
"createdAt": "2023-08-08T12:00:00Z",
"updatedAt": "2023-08-08T12:00:00Z",
"parents": ["parent1", "parent2"],
"componentId": "component123"
},
"message": "Monitor group created successfully."
}

모니터 그룹 업데이트하기

엔드포인트:

PUT /monitors-groups/:id

요청 예시

{
"name": "Updated Monitor Group Name"
}

응답 예시

{
"monitor": {
"id": "group123",
"name": "Updated Monitor Group Name",
"siteId": "site123",
"collapsed": true,
"monitors": [{ "id": "monitor1" }, { "id": "monitor2" }],
"groupId": "parentGroup123",
"children": [
{ "id": "childGroup1", "name": "Child Group 1" },
{ "id": "childGroup2", "name": "Child Group 2" }
],
"order": 1,
"createdAt": "2023-08-08T12:00:00Z",
"updatedAt": "2023-08-08T12:00:00Z",
"parents": ["parent1", "parent2"],
"componentId": "component123"
},
"message": "Monitor group updated successfully."
}

모니터 그룹 삭제하기

엔드포인트:

DELETE /monitors-groups/:id

요청 예시

DELETE /monitors-groups/group-id-1

응답 예시

{
"message": "Monitor group deleted successfully."
}

그룹에 모니터 추가하기

엔드포인트:

POST /monitors-groups/:id/monitors

요청 예시

{
"monitors": ["monitor1", "monitor2", "monitor3"]
}

응답 예시

{
"message": "Monitors added to the group successfully."
}

모니터 그룹 체크 실행하기

엔드포인트:

GET /monitors-groups/:id/run

쿼리 파라미터

파라미터유형기본값설명
location'US_EAST_1', 'EU_CENTRAL_1', 'AP_NORTHEAST_1', 'AP_SOUTHEAST_2', 'CA_CENTRAL_1'-모니터의 지역입니다. 지정된 값 중 하나여야 합니다.
retrybooleanfalse작업을 재시도할지 여부입니다. 선택 사항입니다.
monitorLogIdstringnull모니터 로그의 고유 식별자입니다. 선택 사항입니다.

요청 예시

GET /monitors-groups/group-id-1/run

응답 예시

{
"result": "OK",
"monitorLogId": "monitor-log-id-1"
}

Cron 모니터

Cron 모니터는 HTTP 핑으로 예약 작업을 추적합니다. 제품 설정과 대시보드 사용법은 Cron 모니터링을 참고하세요.

필드에 사용할 수 있는 값

Cron 모니터 상태

설명
UP모니터가 정상 동작 중입니다
DOWN모니터가 실패했습니다
DEGRADED모니터에 문제가 있습니다
UNKNOWN모니터 상태를 판단할 수 없습니다

Cron 모니터 상태 값

설명
ACTIVE모니터가 활성 상태로 체크됩니다
PAUSED모니터 체크가 일시 중지되었습니다
MUTED모니터가 음소거되었습니다 (알림 없음)

Cron 모니터 로그 상태

설명
SUCCESS작업이 성공적으로 완료되었습니다
FAILURE작업이 명시적으로 실패를 보고했습니다
MISSED작업이 예상 시간 안에 핑을 보내지 않았습니다
LATE작업이 주기를 넘겼지만 유예 시간 안에 핑을 보냈습니다
STARTED작업이 시작을 보고했습니다 (실행 시간 측정용)

주기와 유예 시간

periodgrace는 모두 단위입니다. period는 작업이 실행되어야 하는 주기이고, grace는 모니터를 장애로 표시하기까지 추가로 허용하는 시간입니다.

Cron 모니터 가져오기

엔드포인트:

GET /:page_id/monitors/cron

쿼리 파라미터

파라미터유형기본값설명
limitnumber100페이지당 cron 모니터 수입니다. 최대 100입니다.
pagenumber1페이지 번호입니다.
searchstringnull이름으로 결과를 필터링할 검색어입니다.
statusenumnull상태 필터 ('UP', 'DOWN', 'UNKNOWN', 'DEGRADED').

요청 예시

GET /page123/monitors/cron?limit=10&page=1&status=DOWN

응답 예시

{
"cronMonitors": [
{
"id": "cron-abc123",
"name": "Daily backup",
"slug": "my-page-x7k2m9n4p1q8w3e5",
"period": 86400,
"grace": 3600,
"status": "UP",
"state": "ACTIVE",
"siteId": "page123",
"order": 1,
"groupId": null,
"componentId": "component-id-1",
"onFailCreateIncident": true,
"onFailCreateOutageDuration": false,
"onFailPublishIncident": true,
"onFailNotifySubscribers": true,
"onRecoverResolveIncident": true,
"onRecoverResolveOutageDuration": false,
"onRecoverPublishIncident": true,
"onRecoverNotifySubscribers": true,
"createTemplateId": null,
"resolveTemplateId": null,
"createdAt": "2024-01-15T08:00:00.000Z",
"updatedAt": "2024-01-15T08:00:00.000Z"
}
],
"total": 1,
"page": 1,
"totalPages": 1,
"limit": 10
}

Cron 모니터 만들기

엔드포인트:

POST /monitors/cron

요청 예시

{
"pageId": "page123",
"name": "Daily backup",
"period": 86400,
"grace": 3600,
"alerts": ["alert-id-1", "alert-id-2"],
"createComponent": true,
"onFail": {
"createIncident": true,
"createOutageDuration": false,
"publishIncident": true,
"notifySubscribers": true
},
"onRecover": {
"resolveIncident": true,
"resolveOutageDuration": false,
"publishIncident": true,
"notifySubscribers": true
}
}

응답 예시

{
"cronMonitor": {
"id": "cron-abc123",
"name": "Daily backup",
"slug": "my-page-x7k2m9n4p1q8w3e5",
"period": 86400,
"grace": 3600,
"status": "UP",
"state": "ACTIVE",
"siteId": "page123",
"order": 1,
"groupId": null,
"componentId": "component-id-1",
"onFailCreateIncident": true,
"onFailCreateOutageDuration": false,
"onFailPublishIncident": true,
"onFailNotifySubscribers": true,
"onRecoverResolveIncident": true,
"onRecoverResolveOutageDuration": false,
"onRecoverPublishIncident": true,
"onRecoverNotifySubscribers": true,
"createTemplateId": null,
"resolveTemplateId": null,
"createdAt": "2024-01-15T08:00:00.000Z",
"updatedAt": "2024-01-15T08:00:00.000Z"
},
"message": "Cron monitor created successfully."
}

응답에는 slug가 포함됩니다. 이 값으로 작업의 핑 URL을 만드세요. 첫 성공 핑이 백그라운드 체크 작업을 예약합니다.

Cron 모니터 업데이트하기

엔드포인트:

PUT /monitors/cron/:id

요청 예시

{
"name": "Daily backup (updated)",
"period": 43200,
"grace": 1800,
"state": "PAUSED",
"alerts": ["alert-id-1"],
"onFail": {
"notifySubscribers": false
}
}

응답 예시

{
"cronMonitor": {
"id": "cron-abc123",
"name": "Daily backup (updated)",
"slug": "my-page-x7k2m9n4p1q8w3e5",
"period": 43200,
"grace": 1800,
"status": "UP",
"state": "PAUSED",
"siteId": "page123",
"order": 1,
"groupId": null,
"componentId": "component-id-1",
"onFailCreateIncident": true,
"onFailCreateOutageDuration": false,
"onFailPublishIncident": true,
"onFailNotifySubscribers": false,
"onRecoverResolveIncident": true,
"onRecoverResolveOutageDuration": false,
"onRecoverPublishIncident": true,
"onRecoverNotifySubscribers": true,
"createTemplateId": null,
"resolveTemplateId": null,
"alerts": [
{
"id": "alert-id-1",
"type": "EMAIL",
"recipient": "ops@example.com"
}
],
"createdAt": "2024-01-15T08:00:00.000Z",
"updatedAt": "2024-01-16T10:30:00.000Z"
},
"message": "Cron monitor updated successfully."
}

Cron 모니터 삭제하기

엔드포인트:

DELETE /monitors/cron/:id

요청 예시

DELETE /monitors/cron/cron-abc123

응답 예시

{
"cronMonitor": {
"id": "cron-abc123",
"name": "Daily backup",
"slug": "my-page-x7k2m9n4p1q8w3e5",
"period": 86400,
"grace": 3600,
"status": "UP",
"state": "ACTIVE",
"siteId": "page123",
"order": 1,
"groupId": null,
"componentId": "component-id-1",
"onFailCreateIncident": true,
"onFailCreateOutageDuration": false,
"onFailPublishIncident": true,
"onFailNotifySubscribers": true,
"onRecoverResolveIncident": true,
"onRecoverResolveOutageDuration": false,
"onRecoverPublishIncident": true,
"onRecoverNotifySubscribers": true,
"createTemplateId": null,
"resolveTemplateId": null,
"createdAt": "2024-01-15T08:00:00.000Z",
"updatedAt": "2024-01-15T08:00:00.000Z"
},
"message": "Cron monitor deleted successfully."
}

Cron 모니터 로그 가져오기

엔드포인트:

GET /monitors/cron/:id/logs

쿼리 파라미터

파라미터유형기본값설명
limitnumber100페이지당 로그 수입니다. 최대 127입니다.
pagenumber1페이지 번호입니다. 최대 1000입니다.
startDatestring1년 전로그 범위의 ISO 8601 시작일입니다.
endDatestring현재로그 범위의 ISO 8601 종료일입니다.
importanceenumnull중요도로 로그를 필터링합니다 ('all', 'important').

요청 예시

GET /monitors/cron/cron-abc123/logs?limit=50&page=1&importance=important

응답 예시

{
"logs": [
{
"id": "log-xyz789",
"monitorId": "cron-abc123",
"status": "SUCCESS",
"requestType": "GET",
"agent": "curl/8.4.0",
"ipAddress": "203.0.113.10",
"createdAt": "2024-01-16T06:00:00.000Z",
"startedAt": "2024-01-16T05:59:58.000Z"
}
],
"page": 1
}

Cron 모니터 요약 가져오기

엔드포인트:

GET /monitors/cron/:id/summary

요청 예시

GET /monitors/cron/cron-abc123/summary

응답 예시

{
"summary": {
"totalLogs": 120,
"totalFailedLogs": 3,
"availability": 97.5,
"oneDayAvailability": 100,
"previousDayAvailability": 100,
"sevenDayAvailability": 98.2,
"previousSevenDayAvailability": 96.1,
"thirtyDayAvailability": 97.5,
"previousThirtyDayAvailability": 95.8,
"lastSuccess": "2024-01-16T06:00:00.000Z",
"lastFailure": "2024-01-10T06:00:00.000Z",
"lastStarted": null,
"upSince": "2024-01-10T07:00:00.000Z",
"downSince": null
}
}

핑 엔드포인트

이 엔드포인트에는 인증이 필요하지 않습니다. 모니터의 slug가 시크릿 역할을 합니다.

API 기본 URL 또는 전용 cron 호스트로 핑을 보낼 수 있습니다.

  • 성공: https://cron.instatus.com/{slug} 또는 GET / POST / HEAD /monitors/cron/{slug}
  • 실패: https://cron.instatus.com/{slug}/fail 또는 GET / POST / HEAD /monitors/cron/{slug}/fail
  • 시작: https://cron.instatus.com/{slug}/start 또는 GET / POST / HEAD /monitors/cron/{slug}/start

작업이 일정대로 완료될 때마다 성공 핑을 보내세요. 실행 시간을 기록하려면 작업 실행 전에 시작 핑을, 종료 시 성공 또는 실패 핑을 보내세요.

성공 핑 예시

curl https://cron.instatus.com/my-page-x7k2m9n4p1q8w3e5

응답 예시

{
"id": "log-xyz789",
"monitorId": "cron-abc123",
"status": "SUCCESS",
"requestType": "GET",
"agent": "curl/8.4.0",
"ipAddress": "203.0.113.10",
"createdAt": "2024-01-16T06:00:00.000Z"
}

slug가 올바르지 않으면 다음과 같이 응답합니다.

{
"message": "Monitor not found"
}