> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aieev.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 로그 알림

> 컨테이너 로그에 조건을 걸어 알림 받기

로그 알림은 컨테이너 로그에 특정 내용이 나오거나, 나와야 할 로그가 멈췄을 때 알려 줍니다. 규칙은 컨테이너마다 만들고, 알림은 콘솔·이메일·데스크톱으로 받으며 [외부 채널](https://docs.aieev.com/docs/ko/console/external-channels.md)(Slack·Discord·웹훅)로도 보낼 수 있습니다.

> [!NOTE]
>
> 규칙은 **저장한 뒤 들어오는 로그부터** 셉니다. 저장하기 전에 이미 나온 로그로는 알리지 않습니다.

## 규칙 만들기

1. 컨테이너의 **런타임 로그** 메뉴를 엽니다.
2. 왼쪽 패널 위의 **로그 알림** 버튼을 누르면 오른쪽에 규칙 목록이 열립니다.
3. **규칙 추가**를 누르고 패턴, 알림 조건, 알림 빈도를 정한 뒤 **만들기**를 누릅니다.

로그를 보다가 바로 만들 수도 있습니다. 로그 검색창에 검색어를 입력하고 검색창 오른쪽의 종 아이콘(**이 검색으로 알림 만들기**)을 누르면, 지금 검색어와 검색 방식이 채워진 상태로 규칙 만들기 창이 열립니다.

새로 만들거나 고친 규칙은 적용되기까지 최대 15초 정도 걸릴 수 있습니다.

## 패턴

| 방식 | 동작 |
| :- | :- |
| **문자열** | 로그 한 줄에 입력한 문자열이 들어 있으면 맞은 것으로 봅니다. |
| **정규식** | 로그 한 줄의 어느 부분이든 정규식에 맞으면 맞은 것으로 봅니다. [RE2](https://github.com/google/re2/wiki/Syntax) 문법을 쓰므로 lookahead·lookbehind·역참조는 쓸 수 없습니다. |

* **길이**: 패턴은 500자까지 입력할 수 있습니다.
* **대소문자**: **규칙 추가**로 만든 규칙은 대소문자를 구분하지 않습니다. 검색창의 종 아이콘으로 만든 규칙은 로그 검색과 같이 대소문자를 구분합니다. 정규식 앞에 `(?i)`를 붙이면 대소문자를 구분하지 않습니다.
* **세는 범위**: 컨테이너의 모든 레플리카에서 나온 로그를 함께 셉니다.
* **제외되는 줄**: 헬스체크·메트릭 요청 로그(`GET …/health`, `GET …/metrics`)는 세지 않습니다. 로그의 색상 코드(ANSI)는 지운 뒤 비교합니다.

## 알림 조건

| 조건 | 설정 범위 | 알리는 시점 |
| :- | :- | :- |
| **한 번이라도 나오면** | — | 맞는 줄이 나오는 즉시 |
| **자주 나오면** | **N분 안에 M번 이상** — 1~~60분, 2~~10,000번 | M번째 줄이 나오는 즉시. 기간이 끝날 때까지 기다리지 않습니다. |
| **안 나오면** | **N분 동안 한 줄도 없으면** — 5\~60분 | 맞는 줄 없이 N분이 지났을 때 |

### "안 나오면" 조건이 판정되는 방식

"안 나오면"은 로그가 **오지 않는 것**을 지켜보는 조건이라 몇 가지 전제가 있습니다.

* **실행 중일 때만**: 컨테이너가 실행 중이거나 장애 상태일 때만 판정합니다. 중지·배포 중에는 알리지 않습니다.
* **한 기간을 지켜본 뒤부터**: 규칙을 만들거나 고치거나 다시 켠 뒤, 또는 컨테이너가 실행되기 시작한 뒤 최소 N분을 지켜본 다음부터 알립니다. 판정은 1분마다 하므로 1\~2분 늦게 올 수 있습니다.
* **로그가 들어오고 있어야**: 판정을 시작한 뒤로 그 컨테이너의 로그가 한 줄도 수집되지 않았다면 알리지 않습니다. 수집 경로의 문제를 "로그가 멈췄다"로 잘못 알리지 않기 위해서입니다. 이때는 헬스체크·메트릭 요청 로그도 수집되고 있다는 증거로 셉니다.

> [!WARNING]
>
> 헬스체크와 메트릭 요청 로그는 패턴 판정에서 빠지므로, 요청이 없는 서버에 "안 나오면" 규칙을 걸면 서버가 정상이어도 알림이 올 수 있습니다.

## 알림 빈도

조건이 계속 맞을 때 다시 알릴 간격입니다. 같은 규칙의 알림은 정한 간격에 한 번만 옵니다.

| 선택지 | 동작 |
| :- | :- |
| **최대 30분에 한 번** (기본) | 조건이 계속 맞으면 30분마다 다시 알립니다. |
| **최대 1시간에 한 번** · **최대 4시간에 한 번** · **최대 하루에 한 번** | 같은 방식으로 정한 간격마다 다시 알립니다. |
| **딱 한 번만** | 처음 한 번만 알리고 규칙이 꺼집니다. 다시 받으려면 규칙을 다시 켜세요. |

규칙을 다시 켜거나 패턴·조건을 고치면 이전 알림 시각과 상관없이 처음부터 다시 셉니다.

## 자주 쓰는 패턴

규칙 만들기 창에서 자주 쓰는 패턴을 골라 바로 시작할 수 있습니다. 모든 패턴은 대소문자를 구분하지 않습니다.

| 패턴 | 잡아내는 로그 | 기본 조건 |
| :- | :- | :- |
| **GPU 메모리 부족** | `CUDA out of memory`, `OutOfMemoryError` | 한 번이라도 나오면 |
| **CUDA·NCCL 오류** | `CUDA error`, `NCCL error`, `device-side assert` | 한 번이라도 나오면 |
| **GPU·NPU 장치 인식 실패** | `No CUDA GPUs are available`, `Failed to initialize NVML` 등 | 한 번이라도 나오면 |
| **vLLM 엔진 중단** | `EngineDeadError`, `Engine core initialization failed` 등 | 한 번이라도 나오면 |
| **프로세스 강제 종료** | `Killed`, `was sent SIGKILL`, `died unexpectedly` 등 | 한 번이라도 나오면 |
| **세그멘테이션 오류** | `Segmentation fault`, `core dumped`, `SIGSEGV` | 한 번이라도 나오면 |
| **HTTP 5xx 응답** | 응답 코드가 5xx인 요청 로그 | 5분 안에 5번 이상 |
| **파이썬 예외** | `Traceback (most recent call last)` | 한 번이라도 나오면 |
| **ERROR 로그** | 대문자 `ERROR`·`CRITICAL`·`FATAL`, `level=error`, `[error]` 등 | 5분 안에 5번 이상 |
| **프롬프트 길이 초과** | `maximum context length` | 15분 안에 10번 이상 |
| **로그 멈춤** | 어떤 로그든 | 15분 동안 한 줄도 없으면 |

* **여러 패턴 합치기**: 기본 조건이 같은 패턴끼리는 여러 개를 골라 하나의 규칙으로 합칠 수 있습니다. 합친 패턴은 정규식이 되며, 500자를 넘으면 합칠 수 없습니다. **로그 멈춤**은 다른 패턴과 합칠 수 없습니다.
* **추천 규칙**: 규칙 목록 위에 최근 24시간 로그에 실제로 나온 패턴이 횟수와 함께 표시됩니다. **만들기**를 누르면 바로 규칙이 됩니다.

## 받는 사람

| 선택지 | 받는 사람 |
| :- | :- |
| **나** | 규칙을 만든 사람 |
| **특정 멤버** | 고른 멤버(최대 20명) |
| **조직 전체** | 조직의 활성 멤버 모두 |

* 조직 소유자와 관리자만 받는 사람을 고를 수 있습니다. 멤버가 만든 규칙은 항상 **나**에게 알립니다.
* 이메일은 받는 사람 각자의 [알림 설정](https://docs.aieev.com/docs/ko/console/notifications.md)을 따릅니다. 알림 설정의 **로그 알림 규칙** 항목에서 끌 수 있습니다.
* **외부 채널로도 보내기**에서 조직에 연결된 Slack·Discord·웹훅 채널을 규칙마다 최대 10개까지 고를 수 있습니다. 고른 채널에는 알림이 한 건씩 갑니다.

## 받는 알림

* **콘솔 알림**: "컨테이너 '{이름}'에서 로그 알림이 울렸습니다"라는 제목과 함께 규칙 이름, 조건, 맞은 로그(최대 5줄)가 표시됩니다.
* **이메일**: 컨테이너·규칙·조건과 맞은 로그를 담아 조직 지역에 따라 한국어나 영어로 발송됩니다.
* **로그 보기**: 알림의 **로그 보기**를 누르면 마지막으로 맞은 레플리카의 로그가 규칙의 패턴으로 검색된 상태로 열립니다. "안 나오면" 알림은 검색어 없이 로그 화면을 엽니다.
* **알림 내역**: 알림 페이지의 **알림 내역**에서 **로그 알림**만 걸러 볼 수 있습니다. 규칙 목록의 **알림 이력 보기**를 누르면 그 컨테이너의 로그 알림만 보여 줍니다.

## 규칙 관리

규칙 목록에서 각 규칙의 조건, 알림 빈도, 받는 사람, 연결된 외부 채널 수, 마지막 알림·마지막 매칭 시각을 확인할 수 있습니다.

* **켜기/끄기**: 스위치로 규칙을 잠시 끌 수 있습니다. 꺼진 규칙에는 **꺼짐** 표시가 붙습니다.
* **수정·삭제**: 규칙 오른쪽의 **⋯** 메뉴에서 고르거나 지웁니다. 삭제한 규칙은 되돌릴 수 없습니다.
* **권한**: 규칙을 만든 사람, 또는 조직 소유자·관리자만 규칙을 바꾸거나 지울 수 있습니다.

## 제한

| 항목 | 제한 |
| :- | :- |
| 컨테이너당 규칙 | 20개 |
| 조직당 로그 알림 | 최근 1시간에 30건. 넘으면 그 시간의 나머지 알림은 하나로 묶어 알리고, 이메일은 보내지 않습니다. |
| 패턴 / 이름 | 500자 / 100자 |
| 규칙당 받는 멤버 / 외부 채널 | 20명 / 10개 |

## 관련 문서

> [card] [모니터링](https://docs.aieev.com/docs/ko/air-container/monitoring.md)
>
> 실시간 로그와 레플리카별 로그를 확인합니다.

> [card] [외부 채널](https://docs.aieev.com/docs/ko/console/external-channels.md)
>
> 로그 알림을 Slack·Discord·웹훅으로 보냅니다.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.