시스템 로그 보기 (/ui/system/log/list)
게이트웨이가 부팅 / 수집 / 통신 / API 호출 중에 남긴 시스템 로그 (Cassandra pe.app_system_log) 를 검색·확인하는 화면입니다.
홈 카드 시스템 오류 (오늘) 의 빨간 숫자 클릭 → 자동 이동 (오늘 ERROR 만), 또는 직접 /ui/system/log/list.
1. 화면 구성
┌─────────┬──────────────────────────────────────────────────┐
│ 좌측 │ 우측 │
│ 검색폼 │ 로그 목록 (DataTables) │
│ │ │
│ [기간] │ ┌───────────┬───────┬──────────────────────────┐ │
│ [레벨] │ │ 시간 │ 레벨 │ 메세지 │ │
│ │ ├───────────┼───────┼──────────────────────────┤ │
│ [검색] │ │ ... │ INFO │ ... │ │
└─────────┴──────────────────────────────────────────────────┘
기본 검색 기간: 최근 30일 (00:00 ~ 23:59).
2. 좌측 검색 폼
| 필드 | 의미 | 기본 |
|---|---|---|
| 검색기간 | YYYY-MM-DD HH:mm ~ YYYY-MM-DD HH:mm 범위 | 오늘로부터 29일 전 00:00 ~ 오늘 23:59 |
| 레벨 | 전체 / INFO / WARN / ERROR | 전체 |
좌측 액션
| 버튼 | 동작 |
|---|---|
| ↻ 새로고침 (페이지 상단) | log.search() — 현재 폼 값으로 다시 조회 |
| 🔍 검색 (파란 버튼, 좌측 패널 우하단) | log.search() — 폼 값으로 /system/log/search 호출 |
좌측 폼은 검색 기간 (date range picker) + 레벨 (콤보) 두 필드만 — 다른 검색 화면 (/ui/connect/list, /ui/point) 와 동일한 pp-cell-pill 톤의 라벨 / 라운드 폼 디자인을 공유합니다.
3. 우측 — 로그 목록 (DataTables)
| # | 컬럼 | 표시 |
|---|---|---|
| 1 | 시간 | timestamp.iso (ms 까지) — 가운데 정렬, default 내림차순 (최근 위) |
| 2 | 레벨 | 라운드 캡슐 뱃지 (border-radius: 5px) — 🟦 INFO (파랑 solid) / 🟧 WARN (주황 solid) / 🟥 ERROR (빨강 solid). /ui/connect/list 등 다른 페이지의 pp-cell-pill 과 동일 톤 |
| 3 | 메세지 | 로그 본문 (긴 메시지 자동 줄바꿈, 클릭하면 펼침) |
페이지 크기: 10 / 20 / 50 / 100 / 1000 선택 가능 (기본 100).
우측 액션
| 버튼 | 동작 |
|---|---|
| ↻ 새로고침 | log.list() |
| 🗑 모두 삭제 | log.truncate() — 확인 다이얼로그 → 전체 삭제 (pe.app_system_log truncate). 돌이킬 수 없음 |
4. 자주 보는 패턴
| 메시지 / 레벨 | 의미 / 다음 조치 |
|---|---|
ERROR [PLCDriverConnector] connection failed ... | PLC 연결 실패. IP/포트/방화벽 점검 |
ERROR [PLCValueReader] read failed at TAG_* | 그 태그 주소 / 데이터 타입(format) 검토 |
WARN [SchedulerStartListener] startup race detected | 매우 드문 시작 race — restart.sh 한 번 더 |
INFO [TAG_WRITE] OK opc_id=... tag_id=... value=... user_agent=... remote_ip=... | 정상 쓰기 기록 — audit 용. remote_ip 는 기본 RemoteAddr, reverse proxy opt-in 시 X-Forwarded-For 첫 IP |
INFO [API_ACCESS] method=GET path=/api/v1/... status=200 ... | REST API 호출 1라인 audit (ApiAccessLogFilter) — 모든 /api/* 호출이 들어옴. apikey 는 prefix 4자 + 길이로 마스킹 |
WARN [API_ACCESS] ... status=401 auth=none | 인증 실패 호출 — 키 누락 |
WARN [API_ACCESS] ... status=401 auth=deprecated_query | 지원 중단된 ?api_key= 쿼리 인증 시도 — 헤더/Bearer 로 전환 필요 |
ERROR [Cassandra*] timeout / coordinator overload | DB 부하 / 디스크 / heap 점검. node-info.sh |
INFO [SparkPlugSession] NBIRTH publish complete seq=0 | Sparkplug 정상 재시작 |
INFO [SparkPlugSession] DBIRTH publish complete devices=N | Sparkplug 디바이스 출생 — N 개 OPC 가 birth 발행됨 |
5. 데이터 출처 / 호출 API
| 동작 | API |
|---|---|
| 검색 | GET /system/log/search (Query: s_date_range, level, ...) |
| 모두 삭제 | POST /system/log/truncate |
내부 저장: Cassandra pe.app_system_log 테이블. TTL 별도 설정 가능 (app.properties 의 system.log.ttl.days).
6. 자주 빠지는 함정
| 증상 | 원인 / 해결 |
|---|---|
| 검색 결과 비어있음 | 기본 30일 범위 밖 / 레벨 필터로 누락. 기간 을 1년으로, 레벨 을 전체 로 |
| 너무 많은 로그로 화면이 무거움 | 페이지 크기 100 → 20 으로, 또는 레벨 을 ERROR 로 좁힘 |
| ERROR 갯수가 시스템 오류 (오늘) 카드 숫자와 다름 | 카드는 오늘 00:00 이후 / 이 화면 검색은 사용자가 정한 기간 |
| 모두 삭제 후 통계 0 | 정상 — 새 ERROR 가 들어올 때까지 빈 상태 |
| 로그 보존이 너무 길어 디스크 부담 | system.log.ttl.days 단축 / clean.sh 와 node-cleanup.sh 조합 |
7. 더 알아보기
- 시스템 로그 자체 출처/저장 위치: 모니터링 (운영자/REST)
- 로그 파일 (catalina.out, cassandra/system.log) 통합 tail: 진단 / 점검
- 환경 설정 변경 추적: 환경 설정