터치 패널 정리와 재부팅 원인 기록 보강
This commit is contained in:
1 parent
64510e8fe5
commit
11f27e5347
9 files changed
+488
-358
No files matched your search
@@ -105,7 +105,11 @@ Control은 라즈베리파이/리눅스 호스트의 팬과 시스템 상태를
|
||||
|
||||
## 로그 보존
|
||||
|
||||
커널 패닉이나 강제 재부팅 분석을 위해 `systemd-journald`는 `/var/log/journal`에 영구 저장합니다. `dtoverlay=ramoops` 기반 pstore는 부팅 직후 `control-pstore-collect.service`가 `/var/log/pstore`로 복사합니다. 현재 pstore에 남은 크래시 조각이 없으면 이 서비스는 조건 불충족으로 `inactive`일 수 있으며 정상입니다.
|
||||
커널 패닉이나 강제 재부팅 분석을 위해 `systemd-journald`는 `/var/log/journal`에 영구 저장합니다. `dtoverlay=ramoops` 기반 pstore는 기본 `systemd-pstore.service`가 먼저 `/var/lib/systemd/pstore`에 보존하고, `control-pstore-collect.service`가 내용 해시 기준으로 `/var/log/pstore`에 중복 없이 복사합니다.
|
||||
|
||||
`control-boot-capture.service`는 부팅마다 한 번 실행되어 이전 부팅의 종료 흔적, journal 마지막 시각, 마지막 5,000개 journal에서 확인한 OOM/커널 패닉과 최근 커널 경고의 저장장치 오류 개수, 현재 부팅에서 발견한 pstore, 하드웨어 워치독 설정, `get_rsts` 원문, SSD unsafe shutdown 누적값과 재부팅 직전 `sensor_logs` 120개를 `/var/log/control/boot-captures/<boot-id>/`에 저장합니다. 요약은 `/var/log/control/boot-events.jsonl`에 한 줄씩 누적하며 같은 boot ID는 중복 기록하지 않습니다. `watchdog_likely`는 정상 종료·panic 흔적이 없고 warm-reset pstore와 런타임 워치독이 함께 확인된 경우의 추정 판정입니다.
|
||||
|
||||
CPU 사용률, I/O wait, 디스크 처리량, 스왑 및 실행 대기열의 장기 기록은 `sysstat`이 담당합니다. `/etc/default/sysstat`의 `ENABLED=true`와 `systemd/sysstat-collect.timer.d/10-control.conf`를 적용하면 1분 간격으로 `/var/log/sysstat/saDD`에 저장됩니다. 기존 `sensor_logs`의 1초 간격 온도, 팬, load, 메모리 기록과 함께 재부팅 직전 상태를 확인합니다.
|
||||
|
||||
## 시놀로지 팬 가드
|
||||
|
||||
@@ -155,17 +159,17 @@ cd /var/www/control
|
||||
/usr/bin/python3 touch_panel/panel.py
|
||||
```
|
||||
|
||||
패널은 Control PHP/API/DB snapshot을 호출하지 않는 standalone 방식입니다. Python이 `/sys/class/net`, `/proc/diskstats`, `/sys/class/thermal`, 팬 hwmon 파일을 직접 읽습니다. 화면은 왼쪽 `RASPBERRY` 18칸, 오른쪽 `SYNOLOGY` 18칸 카드로 나눕니다. 하단에는 좌우 6칸 폭을 한 번에 쓰는 긴 `PC` 버튼을 둡니다.
|
||||
패널은 Control PHP/API/DB snapshot을 호출하지 않는 standalone 방식입니다. Python이 `/sys/class/net`, `/proc/diskstats`, `/sys/class/thermal`, 팬 hwmon 파일을 직접 읽습니다. 화면 왼쪽에는 별도 섹션 제목 없이 상태 카드 21칸을 두고, 오른쪽에는 온도/RPM과 WAN 트래픽 그래프를 표시합니다. `PC` 버튼은 왼쪽 상태 패널 아래에서 3칸 전체 폭을 사용합니다.
|
||||
|
||||
`RASPBERRY` 카드는 `SSD I/O`, `TEMP`, `FAN`, `THROT`, `CPU`, `IRQ`, `CTX`, `FORK`, `LOCAL`, `UPLINK`, `ETH1`, `5G`, `2.4G`, `SOFTIRQ`, `TCP`, `UDP`, `VM`, `RUNQ`를 표시합니다. 네트워크와 SSD I/O 점멸은 100ms 샘플에서 직전 카운터보다 증가했는지를 보고, CPU/IRQ/CTX/FORK/SOFTIRQ/TCP/UDP/VM/RUNQ 카드는 `/proc/stat`, `/proc/net/snmp`, `/proc/vmstat`의 누적 카운터 증가량으로 점멸합니다. CPU 온도/SSD 온도와 팬 RPM은 500ms 간격으로 표시합니다.
|
||||
라즈베리파이 상태 카드는 `SSD I/O`, `FAN`, `THROT`, `CPU`, `IRQ`, `CTX`, `FORK`, `LOCAL`, `UPLINK`, `ETH1`, `5G`, `2.4G`, `SOFTIRQ`, `TCP`, `UDP`, `VM`, `RUNQ`, `LOAD`, `MEM`, `ROOT`를 표시합니다. 네트워크와 SSD I/O 점멸은 100ms 샘플에서 직전 카운터보다 증가했는지를 보고, CPU/IRQ/CTX/FORK/SOFTIRQ/TCP/UDP/VM/RUNQ 카드는 `/proc/stat`, `/proc/net/snmp`, `/proc/vmstat`의 누적 카운터 증가량으로 점멸합니다. `LOAD`, `MEM`, `ROOT`는 1초마다 갱신합니다. 오른쪽 온도/RPM과 WAN 그래프는 모두 100ms 간격으로 200포인트를 기록해 최근 20초를 같은 시간축으로 표시합니다. 온도와 RPM 센서 자체는 500ms마다 읽고 그 최신값을 그래프에 사용합니다.
|
||||
|
||||
`SYNOLOGY` 카드는 `PING`, `TEMP`, `FAN`, `GUARD`, `CPU`, `IRQ`, `CTX`, `FORK`, `SOFTIRQ`, `TCP`, `UDP`, `VM`, `LOCAL`, `UPLINK`, `RUNQ`, `SATA1 I/O`, `SATA2 I/O`, `SATA4 I/O`를 표시합니다. 시놀로지는 SSH를 유지한 채 100ms마다 네트워크, 디스크 sector I/O, CPU/IRQ/CTX/FORK/SOFTIRQ/TCP/UDP/VM/RUNQ 카운터를 스트림으로 가져옵니다. CPU 온도, 팬 RPM, fan guard 상태도 같은 SSH 스트림 안에서 약 5초마다 가져오며 별도 SSH 연결은 만들지 않습니다. SATA SMART/온도 직접 조회는 응답 지연 위험 때문에 대시보드에서 실행하지 않고, SATA I/O 카드에는 `조회 중지`를 표시합니다.
|
||||
왼쪽 `PING` 카드는 SSH나 원격 센서 조회를 사용하지 않고 `chaegeon.com`에 장기 실행 ping을 보내 지연시간만 표시합니다.
|
||||
|
||||
온도 카드는 80도 이상부터 빨간 표시등을 500ms 간격으로 점멸하고, 팬 카드는 RPM 0 또는 7000 초과를 빨강, 4500 초과를 주황으로 표시합니다. 시놀로지 `PING`은 장기 실행 `ping -i 0.5` 출력 파싱으로 읽고, 15ms 이하 초록, 30ms 이하 주황, 50ms 이하 빨강, 50ms 초과 빨강 500ms 점멸입니다. `RPI THROT`은 정상 초록, 부팅 후 이력 주황, 현재 언더볼트 빨강, 현재 스로틀 빨강 500ms 점멸, 현재 언더볼트와 스로틀 동시 발생 빨강 100ms 점멸로 표시합니다. `SYNO GUARD`는 `synology-fan-guard.service`가 active이고 DSM 자동제어면 초록 `AUTO`, 고온으로 PWM 최대 강제 중이면 주황 `FULL`, 서비스 실패나 팬 RPM 0이면 빨강 `FAIL`로 표시합니다.
|
||||
팬 카드는 RPM 0 또는 7000 초과를 빨강, 4500 초과를 주황으로 표시합니다. 시놀로지 `PING`은 장기 실행 `ping -i 0.5` 출력 파싱으로 읽고, 15ms 이하 초록, 30ms 이하 주황, 50ms 이하 빨강, 50ms 초과 빨강 500ms 점멸입니다. `RPI THROT`은 정상 초록, 부팅 후 이력 주황, 현재 언더볼트 빨강, 현재 스로틀 빨강 500ms 점멸, 현재 언더볼트와 스로틀 동시 발생 빨강 100ms 점멸로 표시합니다.
|
||||
|
||||
각 타일에는 글자 아래에 세 개의 작은 표시등을 두며 읽기/업로드는 초록, 쓰기/다운로드는 주황, 오류/드롭 증가는 빨강으로 표시합니다. 활동 표시등은 이벤트 감지 후 120ms 동안 유지하고, 오류 표시등은 2초 동안 유지해 너무 짧은 이벤트도 눈에 보이게 합니다. 네트워크 카드 오른쪽 값은 항상 `D n`으로 드롭 누적을 표시합니다. `LOCAL`은 `lo`, `UPLINK`는 기본 라우트 인터페이스 기준입니다. 라즈베리파이 `ETH1`은 컴퓨터와 연결된 물리 포트 단독 카운터이며 `br0`는 합산하지 않습니다. `SSD I/O`의 값은 `/run/control-rpi-disk-temp` 캐시 파일의 `/dev/sda` Samsung T7 디스크 자체 온도입니다. 캐시 파일은 root로 실행되는 `control-rpi-disk-temp.service`가 몇 초마다 `smartctl -d sntasmedia`로 갱신하므로 GUI 패널은 sudo를 반복 실행하지 않습니다.
|
||||
|
||||
하단 `PC` 버튼은 `192.168.50.112`에 1초마다 ping을 보내 켜짐 여부를 표시하고, 꺼져 있을 때 누르면 DHCP lease에서 해당 IP의 현재 MAC을 찾아 WOL magic packet을 보냅니다. 주황은 WOL 후 최대 1분 동안 컴퓨터 응답 대기 표시, 빨강은 magic packet 전송 실패 시 5초 또는 1분 대기 후 응답 실패 시 1분 표시입니다.
|
||||
하단 `PC` 버튼은 현재 PC MAC `00:00:00:00:00:d7`을 기준으로 DHCP lease에서 IP를 찾아 1초마다 ping을 보내고, lease를 찾지 못하면 `192.168.50.34`를 사용합니다. 꺼져 있을 때 누르면 같은 MAC으로 WOL magic packet을 보냅니다. 주황은 WOL 후 최대 1분 동안 컴퓨터 응답 대기 표시, 빨강은 magic packet 전송 실패 시 5초 또는 1분 대기 후 응답 실패 시 1분 표시입니다.
|
||||
|
||||
GUI 자동 실행은 데스크톱 autostart가 1차 기준입니다.
|
||||
|
||||
@@ -235,7 +239,7 @@ control-wifi-observe.service
|
||||
3. 대시보드는 `status` snapshot을 렌더링합니다.
|
||||
4. WebSocket 연결이 성공하면 `status` 메시지로 갱신하고, 실패하면 HTTP fallback을 사용합니다.
|
||||
5. 팬 조작은 상태 저장, 정책 적용, 로그 저장 순서로 처리합니다.
|
||||
6. WiFi client 목록은 `iw station dump`와 dnsmasq lease를 조합하고, LAN client는 `bridge fdb show br br0`의 USB LAN 포트 MAC을 dnsmasq lease와 매칭합니다. 5G 또는 LAN 연결 시간이 비어 있으면 MAC 기준 최초 감지 시간을 DB에 저장해 경과 시간을 계산합니다. LAN client의 속도 칸은 무선 송수신 속도 대신 USB LAN 인터페이스의 현재 협상 링크 속도를 표시합니다.
|
||||
6. WiFi client 목록은 `iw station dump`와 dnsmasq lease를 조합하고, LAN client는 `bridge fdb show br br0`의 USB LAN 포트 MAC을 dnsmasq lease와 매칭합니다. `eth1`은 PC 직결 포트이므로 오프라인 WOL 행은 lease가 남아 있는 MAC 중 가장 최근에 관측한 하나만 유지합니다. 5G 또는 LAN 연결 시간이 비어 있으면 MAC 기준 최초 감지 시간을 DB에 저장해 경과 시간을 계산합니다. LAN client의 속도 칸은 무선 송수신 속도 대신 USB LAN 인터페이스의 현재 협상 링크 속도를 표시합니다.
|
||||
7. WiFi hostname이 비어 있으면 MAC 기반 임시명을 표시하고, 수동 저장한 MAC별 이름은 DB에서 우선 적용합니다.
|
||||
8. WiFi 신호/송신 속도/수신 속도 값이 비어 있으면 실제로 존재하는 다른 무선 지표와 대역별 기준으로 값을 채웁니다.
|
||||
9. `control-wifi-observe.timer`는 사용자 접속과 무관하게 10초마다 5G/LAN 관측 세션을 갱신합니다.
|
||||
|
||||
Reference in new issue
Block a user