docs: rb8001 Slack 메시지 처리 실패 트러블슈팅 추가
- rb8001이 Slack 이벤트는 수신하지만 실제 처리하지 못하는 문제 분석 - asyncio.create_task() 비동기 처리 실패 원인 규명 - rb10508_micro를 대체 솔루션으로 권장 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
725ad0876c
commit
bf9c3aff3a
172
troubleshooting/250817_claude_rb8001_slack_메시지처리실패.md
Normal file
172
troubleshooting/250817_claude_rb8001_slack_메시지처리실패.md
Normal file
@ -0,0 +1,172 @@
|
||||
# rb8001 Slack 메시지 처리 실패 문제
|
||||
|
||||
**작성일**: 2025-08-17
|
||||
**작성자**: Claude (51124 서버)
|
||||
**관련 서비스**: rb8001, rb10508_micro
|
||||
**문제 유형**: Slack 봇 응답 실패
|
||||
|
||||
## 문제 상황
|
||||
|
||||
### 오후 11시 30분: 초기 증상
|
||||
- 사용자가 Slack에서 로빙과 대화 중
|
||||
- rb8001이 응답하지 않는다고 판단
|
||||
- 로그 파일이 8월 3일 이후 업데이트되지 않음
|
||||
|
||||
### 오후 11시 45분: 상세 조사
|
||||
```bash
|
||||
# 컨테이너 상태 확인
|
||||
docker ps -a | grep rb8001
|
||||
# 결과: Up 3 hours (healthy)
|
||||
|
||||
# 로그 확인
|
||||
docker logs rb8001 --tail 100
|
||||
# 결과: health check만 반복, 실제 메시지 처리 없음
|
||||
```
|
||||
|
||||
### 오후 11시 50분: 테스트 진행
|
||||
```bash
|
||||
# Slack 이벤트 수동 테스트
|
||||
curl -X POST http://localhost:8001/api/slack/events \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"type": "event_callback",
|
||||
"event": {
|
||||
"type": "message",
|
||||
"text": "안녕 로빙",
|
||||
"user": "U0925SXQFDK",
|
||||
"channel": "C094DBLHPJQ",
|
||||
"ts": "1234567890.123456"
|
||||
}
|
||||
}'
|
||||
```
|
||||
|
||||
## 발견된 문제점
|
||||
|
||||
### 1. 이벤트는 받지만 처리하지 못함
|
||||
```
|
||||
INFO:app.router.slack_handler:Event: message from U0925SXQFDK: 안녕 로빙
|
||||
INFO: 127.0.0.1:52014 - "POST /api/slack/events HTTP/1.1" 200 OK
|
||||
```
|
||||
- 이벤트 수신 로그는 남음
|
||||
- 200 OK 응답 반환
|
||||
- 하지만 실제 메시지 처리 안 됨
|
||||
|
||||
### 2. 비동기 처리 함수 실행 안 됨
|
||||
```python
|
||||
# slack_handler.py 코드 분석
|
||||
async def process_slack_message_async(text: str, user_id: str, context: dict):
|
||||
# 이 함수가 호출되지 않음
|
||||
result = await router.route_message(text, user_id, channel, thread_ts)
|
||||
slack_client.chat_postMessage(...) # 실행 안 됨
|
||||
```
|
||||
|
||||
### 3. 로그 레벨 문제
|
||||
- "Processing message" 로그 없음
|
||||
- "Router result" 로그 없음
|
||||
- "Final response sent" 로그 없음
|
||||
|
||||
### 4. 파일 로그 생성 실패
|
||||
```bash
|
||||
# 호스트
|
||||
ls -la /home/admin/ivada_project/rb8001/logs/
|
||||
# -rw-r--r-- 1 999 docker 18917 8월 3 19:55 rb8001_app.log
|
||||
|
||||
# 컨테이너 내부
|
||||
docker exec rb8001 ls -la /code/logs/
|
||||
# drwxrwxr-x 2 1002 1000 4096 Aug 11 07:25 .
|
||||
```
|
||||
- 권한 불일치 (999 vs 1002)
|
||||
- 8월 3일 이후 로그 쓰기 실패
|
||||
|
||||
## 근본 원인
|
||||
|
||||
### 1. 비동기 태스크 생성 실패
|
||||
```python
|
||||
# 예상 코드 (실행되지 않는 부분)
|
||||
if event_type == "message":
|
||||
asyncio.create_task(process_slack_message_async(...))
|
||||
return JSONResponse({"status": "ok"}) # 즉시 반환
|
||||
```
|
||||
- `create_task`가 실행되지 않거나
|
||||
- 태스크가 생성되어도 실행 안 됨
|
||||
- 이벤트 루프 문제 가능성
|
||||
|
||||
### 2. 외부 서비스 의존성
|
||||
```
|
||||
http://localhost:8507 → State 서비스 (실패)
|
||||
http://172.17.0.1:8501 → Email 서비스 (성공)
|
||||
```
|
||||
- State 서비스 연결 실패로 인한 초기화 문제?
|
||||
|
||||
## 해결 시도
|
||||
|
||||
### 1. 컨테이너 재시작 (미시행)
|
||||
```bash
|
||||
docker restart rb8001
|
||||
```
|
||||
|
||||
### 2. 로그 파일 권한 수정 (미시행)
|
||||
```bash
|
||||
sudo chown -R 999:999 /home/admin/ivada_project/rb8001/logs
|
||||
docker exec rb8001 touch /code/logs/rb8001_app.log
|
||||
```
|
||||
|
||||
### 3. 대안: rb10508_micro 사용
|
||||
```bash
|
||||
# rb10508_micro는 정상 작동 확인
|
||||
docker logs rb10508_micro --tail 20
|
||||
# 15:56 Slack 메시지 정상 처리 확인
|
||||
```
|
||||
|
||||
## 최종 상태
|
||||
|
||||
### rb8001
|
||||
- 상태: 실행 중이지만 기능 마비
|
||||
- 이벤트: 수신만 가능
|
||||
- 응답: 불가능
|
||||
- 로그: 기록 안 됨
|
||||
|
||||
### rb10508_micro
|
||||
- 상태: 정상 작동
|
||||
- 이벤트: 수신 및 처리
|
||||
- 응답: 정상
|
||||
- 문제: 사용자 식별 문제 (모두 default)
|
||||
|
||||
## 권장 사항
|
||||
|
||||
1. **즉시 조치**
|
||||
- rb10508_micro를 메인 Slack 봇으로 사용
|
||||
- rb8001 서비스 중단 검토
|
||||
|
||||
2. **중기 개선**
|
||||
- rb8001 코드를 rb10508_micro 구조로 마이그레이션
|
||||
- 함수형 프로그래밍 방식 채택
|
||||
- 외부 서비스 의존성 제거
|
||||
|
||||
3. **장기 전략**
|
||||
- 단일 서비스로 통합
|
||||
- 로그 시스템 개선
|
||||
- 모니터링 강화
|
||||
|
||||
## 교훈
|
||||
|
||||
1. **비동기 처리의 함정**
|
||||
- `asyncio.create_task()` 사용 시 태스크 실행 보장 필요
|
||||
- 백그라운드 태스크는 명시적 관리 필요
|
||||
|
||||
2. **로그의 중요성**
|
||||
- 파일 로그와 Docker 로그 모두 필요
|
||||
- 권한 문제는 사전에 해결
|
||||
|
||||
3. **단순함의 가치**
|
||||
- rb10508_micro의 함수형 접근이 더 안정적
|
||||
- 복잡한 의존성은 장애 지점 증가
|
||||
|
||||
4. **테스트의 필요성**
|
||||
- 단순히 "200 OK"는 정상 작동을 의미하지 않음
|
||||
- 엔드투엔드 테스트 필요
|
||||
|
||||
## 참고 자료
|
||||
- rb8001 코드: `/home/admin/ivada_project/rb8001/app/router/slack_handler.py`
|
||||
- rb10508_micro 코드: `/home/admin/ivada_project/rb10508_micro/app/services/slack_service.py`
|
||||
- 이전 트러블슈팅: `250813_claude_rb8001_종합_트러블슈팅.md`
|
||||
Loading…
x
Reference in New Issue
Block a user