docs(troubleshooting): move resolved nginx/gateway items to Resolved section; keep only active issues

This commit is contained in:
happybell80 2025-10-23 11:05:35 +09:00
parent 74ffcb18f0
commit f2be950723

View File

@ -2,14 +2,14 @@
**작성일**: 2025-10-21
**작성자**: codex
**상태**: 진행 중 (일부 조치/운영 반영됨)
**상태**: 진행 중 (여러 항목 해결, 잔여 과제 점검 중)
## 문서 상태
- 헬스체크 주기(30→60초) 조정과 적용 내역은 본 문서에 반영 완료되었으며, 문서 외 추가 파일 변경이나 Pull Request는 없습니다.
## 요약
- nginx와 robeing-gateway 최근 로그를 재점검한 결과, 이전에 기록된 이슈 중 다수가 아직 해결되지 않았음을 확인함.
- Slack 인터랙티브 이벤트, 잘못된 upstream 프록시 설정, 로그 로테이션 권한, 과도한 헬스체크 요청 등의 문제가 반복 발생 중.
- 최신 점검 결과, 일부 항목은 해결되었고 나머지 핵심 이슈만 남아 있음.
- 현재 집중 대상: Slack 인터랙티브 이벤트 간헐 500, 헬스체크 요청 과다, Slack 사용자 매핑 누락, SSL Handshake 오류 추적.
## 상세 진단
@ -25,32 +25,7 @@
- **추정 원인**: 백엔드 rb8001(192.168.219.52:8001) 연결 실패로 인한 프록시 오류.
- **조치 제안**: rb8001 가용성 모니터링 및 재시도/타임아웃 정책 보완, 장애 발생 시 알람 추가.
### 2. `/api`, `/admin` 라우트의 잘못된 upstream 포트
- **증상**: 외부 취약점 스캐너가 `phpunit` 경로를 탐지할 때 502 발생.
- **로그 근거**:
- `mnt/hdd/logs/nginx/error.log.1`
`connect() failed (111: Unknown error) while connecting to upstream ... "http://127.0.0.1:8000/..."`
- 현재 설정: `etc/nginx/sites-available/default:56,65``proxy_pass http://localhost:8000;`
- 실제 게이트웨이 노출 포트: `docker inspect robeing-gateway` → host 8100 → container 8000
- **조치 제안**: `/api`, `/admin` 등 gateway 측 엔드포인트를 `http://localhost:8100`으로 수정하고 nginx reload.
- **조치 현황(적용됨, 2025-10-21)**:
- `nginx-infra/server-nginx-default``/api`, `/admin``proxy_pass``http://localhost:8100`으로 변경(두 서버 블록 모두).
- 관련 커밋: nginx-infra `main` 브랜치 반영.
### 3. nginx 로그 로테이션 권한 오류
- **증상**: 로그 로테이션 시점에 nginx가 로그 파일을 열지 못해 `[emerg]` 발생.
- **로그 근거**:
- `mnt/hdd/logs/nginx/error.log.1`
`2025/10/21 00:00:10 [emerg] ... open() "/var/log/nginx/access.log" failed (13: Permission denied)`
- logrotate 설정: `etc/logrotate.d/nginx``create 0640 www-data adm`
- **조치 제안**: `create 0640 nginx adm`으로 변경하고 수동 로테이션 한 번 실행해 권한 정상화.
- **조치 현황(보류)**: 저장소 내 logrotate 설정 파일은 트래킹되지 않음(시스템 파일). 서버 측 `/etc/logrotate.d/nginx` 수정을 통해 적용 필요.
- **운영 반영(완료, 2025-10-21, 51123 서버)**:
- `/etc/logrotate.d/nginx` 값을 `create 0640 nginx adm`로 수정 (백업: `/etc/logrotate.d/nginx.backup.20251021`).
- `sudo logrotate -f /etc/logrotate.d/nginx`로 강제 로테이션 수행.
- `/mnt/hdd/logs/nginx` 내 현재 로그 소유권이 `nginx:adm`으로 정상 확인됨.
### 4. 헬스체크 요청 과다
### 2. 헬스체크 요청 과다
- **증상**: robeing-gateway 컨테이너 로그에 `/healthz` 호출이 초당 여러 번 기록.
- **로그 근거**:
- `docker logs robeing-gateway` → 짧은 간격의 `GET /healthz` 다수.
@ -67,13 +42,13 @@
- docker-compose.yml: `rb10508_micro`, `skill-slack`, `skill-news`, `skill-embedding`, `skill-email`, `robeing-monitor`, `file-graph-visualizer`, `skill-publish`
- 적용에는 서비스 재배포가 필요함(현재 리포 변경만 반영됨)
### 5. Slack 사용자 매핑 누락
### 3. Slack 사용자 매핑 누락
- **증상**: 특정 워크스페이스 사용자 이벤트 처리 실패.
- **로그 근거**:
- `docker logs robeing-gateway | grep 'User not registered'` → 2025-10-13~14 계속 발생 (`team_id=T09C98KB933`).
- **조치 제안**: Slack 사용자-UUID 동기화 런북 점검, 신규 워크스페이스 온보딩 절차 확립.
### 6. SSL Handshake 오류 지속
### 4. SSL Handshake 오류 지속
- **증상**: 외부 IP 대상으로 `SSL_do_handshake() failed (bad key share)` 다수 발생.
- **로그 근거**:
- `mnt/hdd/logs/nginx/error.log.1` → 2025-10-20~21 다양한 IP에서 반복.
@ -87,6 +62,16 @@
- 최신 nginx 오류 로그는 비어 있으며, 자정 이후 신규 `[emerg]` 또는 포트 미스매치 관련 메시지는 관찰되지 않았습니다.
- Gateway 헬스체크: 컨테이너 재시작 이후에도 `/healthz` 호출이 여러 번 기록되지만 모두 200 OK이며, Slack interactive 호출도 12:10 이후 정상(HTTP 200)으로 확인되었습니다.
## 해결됨(Resolved)
### A. `/api`, `/admin` upstream 포트 불일치
- 조치: `proxy_pass http://localhost:8100`으로 정정 완료(2025-10-21).
- 검증: `http://localhost/api/healthz`가 401(인증 필요) 응답으로 정상 프록시 동작 확인, `http://localhost:8100/healthz` 200.
### B. nginx 로그 로테이션 권한 오류
- 조치: `/etc/logrotate.d/nginx``create 0640 nginx adm` 적용 및 강제 로테이션 수행.
- 검증: 최신 오류 로그 비어 있음, 신규 `[emerg]` 재발 없음.
---
@ -98,8 +83,7 @@
- [보류] Slack 사용자 매핑 누락 및 rb8001 연결 안정화(별도 서비스 측 조치 필요).
## 다음 단계
1. [배포] 게이트웨이 이미지 재배포(필요시)로 컨테이너의 HEALTHCHECK 설정과 코드 변경을 일치시킴.
2. [모니터링] 외부 모니터(예: Slack 워크플로/써드파티 프로브)에서 `/healthz` 폴링 주기를 60s 이상으로 조정.
3. [서비스] Slack 사용자-UUID 동기화 런북 실행, 미등록 사용자 온보딩.
4. [rb8001] 연결 안정화·재시도/타임아웃 강화 및 장애 알람 설정.
5. [보안] TLS 핸드셰이크 오류 추적 및 필요 시 fail2ban 등 차단 정책 도입.
1. [모니터링] 외부 모니터(예: Slack 워크플로/써드파티 프로브)에서 `/healthz` 폴링 주기를 60s 이상으로 조정.
2. [서비스] Slack 사용자-UUID 동기화 런북 실행, 미등록 사용자 온보딩.
3. [rb8001] 연결 안정화·재시도/타임아웃 강화 및 장애 알람 설정.
4. [보안] TLS 핸드셰이크 오류 추적 및 필요 시 fail2ban 등 차단 정책 도입.