모니터 API 레퍼런스
필드에 사용할 수 있는 값
모니터 지역
| 값 | 설명 |
|---|---|
US_EAST_1 | 북버지니아 |
CA_CENTRAL_1 | 캐나다 (몬트리올) |
EU_CENTRAL_1 | 프랑크푸르트 |
AP_NORTHEAST_1 | 도쿄 |
모니터 알림 유형
| 값 | 설명 |
|---|---|
INCIDENT | 인시던트 알림 |
EMAIL | 이메일 알림 |
SMS | SMS 알림 |
SLACK | Slack 알림 |
DISCORD | Discord 알림 |
MICROSOFT_TEAMS | Microsoft Teams 알림 |
PHONE_CALL | 전화 알림 |
WEBHOOK | Webhook 알림 |
GOOGLE_CHAT | Google Chat 알림 |
WHATSAPP | WhatsApp 알림 |
모니터 상태
| 값 | 설명 |
|---|---|
UP | 모니터가 정상 동작 중입니다 |
DOWN | 모니터가 실패했습니다 |
DEGRADED | 모니터에 문제가 있습니다 |
UNKNOWN | 모니터 상태를 판단할 수 없습니다 |
모니터 가져오기
이 엔드포인트로 기존 모니터 전체 목록을 조회하고 탐색할 수 있습니다.
엔드포인트:
GET /:page_id/monitors
쿼리 파라미터
| 파라미터 | 유형 | 기본값 | 설명 |
|---|---|---|---|
page | number | 1 | 가져올 페이지 번호입니다. |
limit | number | 100 | 페이지당 모니터 수입니다. |
search | string | null | 결과를 필터링할 검색어입니다. |
status | enum | null | 상태 필터 ('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
쿼리 파라미터
| 파라미터 | 유형 | 기본값 | 설명 |
|---|---|---|---|
limit | number | 100 | 페이지당 항목 수입니다. 1000을 넘을 수 없습니다. |
page | number | 1 | 조회할 페이지 번호입니다. |
monitorId | string | - | 모니터의 ID입니다. |
location | string | null | 모니터의 지역입니다. |
createdAt | string | object | number | null | 생성 날짜입니다. 문자열, 숫자 또는 gte와 lte 필드를 가진 객체일 수 있습니다. |
isSuccessful | boolean | null | 체크가 성공했는지 여부입니다. |
isSSLCheck | boolean | null | 체크가 SSL 체크인지 여부입니다. |
httpStatusCode | string | null | 응답의 HTTP 상태 코드입니다. |
status | ('UP', 'DOWN', 'UNKNOWN', 'DEGRADED') | null | 모니터의 상태입니다. |
dnsTime | string | number | object | null | DNS 조회에 걸린 시간입니다. |
tcpTime | string | number | object | null | TCP 연결에 걸린 시간입니다. |
tlsTime | string | number | object | null | TLS 핸드셰이크에 걸린 시간입니다. |
firstByteTime | string | number | object | null | 첫 바이트를 받기까지 걸린 시간입니다. |
downloadTime | string | number | object | null | 다운로드에 걸린 시간입니다. |
responseTime | string | number | object | null | 전체 응답 시간입니다. |
performanceTime | string | number | object | null | 성능 측정 시간입니다. |
accessabilityScore | string | number | object | null | 접근성 점수입니다. |
seoScore | string | number | object | null | SEO 점수입니다. |
bestPracticesScore | string | number | object | null | 모범 사례 점수입니다. |
successfulAssertions | string | number | object | null | 성공한 조건의 수입니다. |
sort | string | 시간순 | 정렬 기준 필드입니다. |
요청 예시
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' | - | 모니터의 지역입니다. 지정된 값 중 하나여야 합니다. |
retry | boolean | false | 작업을 재시도할지 여부입니다. 선택 사항입니다. |
monitorLogId | string | null | 모니터 로그의 고유 식별자입니다. 선택 사항입니다. |
요청 예시
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
쿼리 파라미터
| 파라미터 | 유형 | 기본값 | 설명 |
|---|---|---|---|
limit | number | 100 | 페이지당 항목 수입니다. |
page | number | 1 | 조회할 페이지 번호입니다. |
요청 예시
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' | - | 모니터의 지역입니다. 지정된 값 중 하나여야 합니다. |
retry | boolean | false | 작업을 재시도할지 여부입니다. 선택 사항입니다. |
monitorLogId | string | null | 모니터 로그의 고유 식별자입니다. 선택 사항입니다. |
요청 예시
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 | 작업이 시작을 보고했습니다 (실행 시간 측정용) |
주기와 유예 시간
period와 grace는 모두 초 단위입니다. period는 작업이 실행되어야 하는 주기이고, grace는 모니터를 장애로 표시하기까지 추가로 허용하는 시간입니다.
Cron 모니터 가져오기
엔드포인트:
GET /:page_id/monitors/cron
쿼리 파라미터
| 파라미터 | 유형 | 기본값 | 설명 |
|---|---|---|---|
limit | number | 100 | 페이지당 cron 모니터 수입니다. 최대 100입니다. |
page | number | 1 | 페이지 번호입니다. |
search | string | null | 이름으로 결과를 필터링할 검색어입니다. |
status | enum | null | 상태 필터 ('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
쿼리 파라미터
| 파라미터 | 유형 | 기본값 | 설명 |
|---|---|---|---|
limit | number | 100 | 페이지당 로그 수입니다. 최대 127입니다. |
page | number | 1 | 페이지 번호입니다. 최대 1000입니다. |
startDate | string | 1년 전 | 로그 범위의 ISO 8601 시작일입니다. |
endDate | string | 현재 | 로그 범위의 ISO 8601 종료일입니다. |
importance | enum | null | 중요도로 로그를 필터링합니다 ('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"}