알람
알람 설계
알람 기능은 만들기 쉽고 운영하기 어렵습니다. 첫 주에 알람이 수백 개 오면 현장 담당자는 알림을 끄고, 그 뒤로 진짜 알람도 안 봅니다.
좋은 알람은 적게, 정확하게, 대응 가능하게 옵니다.
1. 알람 유형
| 유형 | 예시 | 판정 주기 |
|---|---|---|
| 상한/하한 | kW > 500, 압력 < 6bar | 실시간 |
| 수요 예측 | 15분 수요가 목표 초과 예상 | 1분 |
| 사용량 | 일 사용량이 평소 대비 130% | 일 마감 |
| 비가동 사용 | 휴일/야간에 사용량 발생 | 시간 |
| 통신 장애 | N분간 수신 없음 | 1분 |
| 데이터 이상 | 음수 차분, 고정값 | 수집 시 |
| 전기 품질 | 역률 미달, 전압 불평형 | 5~15분 |
| 설비 보전 | 소모품 교체 주기 도래 | 일 |
비가동 시간 사용 알람은 만들기 쉽고 절감 효과가 바로 보여서 현장 반응이 좋습니다. "주말에 컴프레서가 왜 돌고 있죠?" 같은 발견이 여기서 나옵니다.
2. 데이터 구조
alarm_rule 규칙 (무엇을, 어떤 유형으로)
├─ alarm_rule_threshold 임계값 (measure_key, lower, upper, severity)
└─ alarm_rule_recipient 수신자 (개인, 부서, 역할)
alarm_event 발생 이력 (occurred_at, current_value, 해제 여부)
└─ alarm_event_member_status 개인별 확인 상태
- 규칙 하나에 심각도별 임계값을 여러 개 둡니다 (경고 450kW, 위험 500kW)
- 대상은
target_type_id + target_id로 계기, 설비, 공장 어디든 걸 수 있게 합니다 - 수신자를 개인이 아닌 부서/역할로 지정하면 인사 이동 때 규칙을 고치지 않아도 됩니다
3. 상태 흐름
발생(OPEN) → 확인(ACKNOWLEDGED) → 해제(RESOLVED)
↘ 자동 해제(값이 정상 복귀)
- 확인: 사람이 봤다. 누가 언제 봤는지 남김
- 해제: 원인이 사라졌다. 자동 또는 수동
- 확인 없이 자동 해제된 알람도 이력에 남겨야 합니다. 반복 패턴 분석에 필요합니다
4. 오알람 줄이기
히스테리시스
경계값 근처에서 값이 오르내리면 알람이 깜빡입니다. 발생과 해제 임계를 다르게 둡니다.
발생: kW > 500
해제: kW < 480
지속 시간 조건
순간 스파이크를 무시합니다.
kW > 500 이 3분 이상 지속될 때 발생
시간대별 임계
야간 경부하 시간과 주간 생산 시간의 정상 범위는 다릅니다. 같은 임계를 쓰면 주간에는 계속 울리고 야간에는 아무것도 못 잡습니다.
중복 억제
같은 규칙의 알람이 해제되기 전에는 새 이벤트를 만들지 않고, 최대값만 갱신합니다. 알림 재발송은 N시간 간격으로 제한합니다.
통신 장애 우선
수집기가 끊기면 그 아래 계기의 모든 값 알람이 동시에 터집니다. 통신 장애 알람이 있으면 하위 값 알람은 억제하세요.
5. 판정 엔진 위치
| 위치 | 장점 | 단점 |
|---|---|---|
| 수집기 (DAQ) | 가장 빠름 | 규칙 변경 배포 부담 |
| 별도 알람 서비스 | 규칙 관리 일원화 | 구성 요소 추가 |
| DB 배치 | 구현 쉬움 | 지연 큼 |
실시간 유형(상한/하한, 통신)은 수집 경로에서, 집계 유형(일 사용량, 비가동 사용)은 배치에서 판정하는 혼합 방식이 일반적입니다. 규칙은 DB에서 주기적으로 다시 읽어 캐시합니다.
6. 알림 채널
- 웹 대시보드 배지, 알람 목록
- 이메일
- SMS, 카카오 알림톡 (위험 등급만)
- 사내 메신저 웹훅 (Slack, Teams 등)
심각도별로 채널을 다르게 둡니다. 모든 알람을 문자로 보내면 비용도 들고 피로도도 올라갑니다.
7. 운영 지표
알람 자체도 관리 대상입니다.
- 규칙별 월 발생 건수 (너무 많으면 임계 재조정)
- 평균 확인 시간
- 확인 없이 자동 해제된 비율
- 한 번도 안 울린 규칙 (의미 없는 규칙일 수 있음)
- 필자 생각: 오픈 후 한 달은 알림을 보내지 말고 이벤트만 쌓으세요. 그 데이터로 임계를 조정한 뒤 알림을 켜면 첫인상이 훨씬 좋습니다.