알림 API

엔드포인트: /api/alerts/

알림은 하나의 에피소드마다 한 행으로 남으며, 열려 있거나 해제된 상태로 존재합니다. 콘솔이 같은 행을 어떻게 보여주는지는 알림 이력을 참고하세요. 이 API는 알림 자체에 대해서는 읽기 전용입니다. 목록 조회, 상세 조회, 확인 처리는 할 수 있지만, 알림을 만들거나 수정하거나 삭제하는 기능은 없습니다. 모든 알림은 플랫폼이 스스로 발생시키고 해제합니다.

경고 규칙 API와 달리 이 엔드포인트 자체는 Metrics 확장 기능에 좌우되지 않습니다. 오프라인 알림과 보안 알림은 확장 기능 상태와 무관하게 항상 접근할 수 있습니다. 예외는 확장 기능에 속한 규칙(기본 제공되는 코어 디스크 사용률 규칙을 제외한 나머지)이 발생시킨 메트릭 알림으로, Metrics 확장 기능이 꺼져 있는 동안에는 목록에서 빠지고 상세 조회와 acknowledge도 404를 반환합니다.

알림 목록 조회

알림 목록을 페이지네이션하여 가져옵니다. resolved를 지정하지 않으면 열려 있는 알림만 반환합니다. 해제된 이력을 보려면 resolved=true를 지정하세요.

요청

GET /api/alerts/

쿼리 파라미터

파라미터타입설명
alert_typestring알림 유형으로 필터링: metric_threshold, server_disconnected, unauthorized_access, insecure_port_open, system_error, unknown_device, device_network_moved, system_user_conflict, agent_upgrade_failed
severitystring심각도로 필터링 (critical, warning, info)
serverstring (UUID)서버로 필터링
server_namestring서버 이름으로 필터링(대소문자 구분 없는 부분 일치)
rulestring (UUID)이 알림을 발생시킨 경고 규칙으로 필터링(메트릭 알림에만 해당)
resolvedboolean해제 상태. 지정하지 않으면 열려 있는 알림만 반환합니다. true면 해제된 이력을 반환하고, false는 기본값을 명시적으로 지정하는 것과 같습니다
acknowledgedboolean내가 이 알림을 확인했는지 여부. checked와 dismissed 둘 다 확인한 것으로 셉니다
dismissedboolean내가 이 알림을 명시적으로 무시(dismiss)했는지 여부. acknowledged보다 좁은 조건입니다
added_at__gte / added_at__ltedatetime이 시각 이후 / 이전에 발생한 알림만
searchstring제목, 설명, 서버 이름을 대상으로 검색
orderingstring정렬 순서. acknowledged, added_at, updated_at, severity 중에서 지정. 기본값: acknowledged,-added_at
pageinteger페이지 번호
page_sizeinteger페이지당 결과 수 (기본값: 15, 최대: 100)

응답

{
  "count": 1,
  "current": 1,
  "next": null,
  "previous": null,
  "last": 1,
  "results": [
    {
      "id": "9a1c0b62-9f3a-4a3d-8a1e-2b0f2c6d5e41",
      "alert_type": "metric_threshold",
      "server": {
        "id": "7c5e2a41-6b90-4c33-a7d8-0e5f1b2c3d44",
        "name": "web-01",
        "os": "ubuntu",
        "platform": "linux",
        "is_connected": true,
        "is_deleted": false
      },
      "severity": "warning",
      "title": "CPU usage 92% ≥ 80% for 5 minutes",
      "description": "CPU usage has stayed at or above 80% since 12:00.",
      "dedup_key": "metric:cpu-usage:",
      "device": "",
      "rule": { "id": "4f2b18d0-5c77-4a0b-9d2e-1f7a3c9b4e05", "name": "cpu-high" },
      "condition": "threshold",
      "is_acknowledged": false,
      "action_type": null,
      "added_at": "2026-09-01T12:00:00Z",
      "updated_at": "2026-09-01T12:04:00Z",
      "resolved_at": null,
      "resolution_cause": "",
      "deliveries": [
        {
          "edge": "raised",
          "channel": "email",
          "state": "sent",
          "recipients": 3,
          "at": "2026-09-01T12:02:00Z"
        },
        {
          "edge": "raised",
          "channel": "slack_channel",
          "state": "sent",
          "recipients": null,
          "at": "2026-09-01T12:02:00Z"
        }
      ]
    }
  ]
}
필드설명
id알림 ID
alert_type위 alert_type 파라미터에 나온 값 중 하나
server알림이 발생한 서버: id, name, os, platform, is_connected, is_deleted
severitycritical, warning, info 중 하나
title / description알림의 제목과 상세 설명. 번역이 있으면 내 언어로 표시됩니다
dedup_key(서버, 알림 유형) 안에서 이 알림의 대상을 식별하는 값으로, 같은 조건이 반복되면 새로 만들지 않고 이 행을 갱신합니다. 중복 처리를 하지 않는 알림 유형은 비어 있습니다
device이 알림이 특정 디스크나 파티션, 네트워크 인터페이스로 범위가 좁혀져 있으면 그 값입니다. 서버 전체를 대상으로 하는 알림이면 비어 있습니다
rule이 알림을 발생시킨 경고 규칙으로, {id, name} 형태입니다. 규칙이 없는 알림(메트릭 알림만 규칙을 가짐)이거나 규칙이 이미 삭제됐다면 null입니다
condition이 알림이 규칙의 어느 조건에 해당하는지: threshold 또는 no_data. 규칙이 없는 알림은 비어 있습니다
is_acknowledged내가 이 알림을 확인했는지 여부. checked와 dismissed 둘 다 확인한 것으로 셉니다
action_type내가 어떤 방식으로 확인했는지: checked 또는 dismissed. 아직 확인하지 않았다면 null입니다
added_at이 알림(이 에피소드)이 처음 발생한 시각
updated_at이 행이 마지막으로 갱신된 시각입니다. 조건이 계속 유지되면 새 에피소드를 만드는 대신 같은 행을 갱신하므로, 새 알림이 발생하지 않아도 이 값은 바뀔 수 있습니다
resolved_at이 알림이 해제된 것으로 관측된 시각입니다. 아직 열려 있으면 null입니다. 해제된 행은 이 시각으로부터 30일 뒤 삭제됩니다
resolution_cause이 알림이 해제된 이유로, 해제를 처리한 앱이 정한 값을 씁니다. 메트릭 알림의 값은 알림 이력에 나온 해제 사유 목록을 참고하세요. 다른 알림 유형은 각자의 값을 씁니다. 알림이 아직 열려 있거나 이 필드가 생기기 전에 해제됐다면 비어 있습니다
deliveries이 에피소드의 발생과 해제가 실제로 무엇을 전달했는지, 엣지와 채널별로 한 항목씩 담습니다. 아래에서 그 형태를 설명합니다. 인터럽트를 전혀 보내지 않는 알림 유형은 빈 배열입니다
deliveries[].edgeraised 또는 resolved
deliveries[].channel전송된 채널: email, push, slack_channel 중 하나입니다. 채널을 지정하지 않는 항목(아무것도 보내지 않은 발생을 나타내는 항목)은 null입니다
deliveries[].statesent(전송됨), failed(해당 채널로 발송을 시도했지만 실패함, 이메일 발송 오류이거나 재시도까지 실패한 Slack 게시. 같은 엣지·채널 쌍에 sent 행이 있으면 그 행이 우선함), held(아직 보류 중), resolved_in_hold(보류가 끝나기 전에 조건이 해소되어 발생과 해제 모두 보내지 않음), suppressed(규칙 자체의 전달 설정으로 채널이 제한됨), unrecorded(발송 대상으로 넘겼지만 전달 기록이 남지 않음, 예를 들어 대상 전원 음소거, 받을 사람이 없는 경우, 설치가 사라져 건너뛴 Slack 게시) 중 하나입니다
deliveries[].recipients이 채널이 전달한, failed라면 전달하지 못한 인원 수입니다. 채널 하나를 대상으로 게시하는 Slack 채널 게시는 null이고, 아무것도 보내지 않은 항목도 null입니다
deliveries[].at이 엣지와 채널에서 가장 먼저 전송된 시각입니다. failed라면 가장 이른 시도 시각입니다(이메일은 발송 시점, Slack은 재시도까지 끝나고 포기한 시점). unrecorded는 발생이 발송 대상으로 지정된 시각인 알림의 notified_at을 씁니다. held, resolved_in_hold, suppressed는 null입니다

메일 워커 안에서 SMTP 단계를 지난 뒤에 실패한 경우는 여기서 보이지 않고 여전히 sent로 남습니다. 이 필드는 최종 수신함 도착 여부가 아니라 발송자가 확인할 수 있는 범위까지만 알려줍니다.

필요한 스코프: alert:read

예시

curl -X GET "https://your-workspace.ap1.alpacon.io/api/alerts/?resolved=true&severity=critical" \
  -H "Authorization: token=\"alpat-xxxxxxxxxxxxxxxxxx\""

오류 코드

상태오류 코드설명
400alert_already_acknowledged이미 이 알림을 확인 처리함
401UNAUTHORIZED유효하지 않거나 누락된 인증 정보
403FORBIDDEN권한 부족
404NOT_FOUND알림을 찾을 수 없거나, 확장 기능에 속한 규칙의 메트릭 알림인데 Metrics 확장 기능이 꺼져 있음
최종 수정: