ssuperjun 님의 블로그
[장애 이력 자동 작성 도구5] 두레이 태스크로 등록 본문
계획
- Redis 설치 - 완료
- Redis에 장애 발생시키기 - 완료
- 장애 로그를 수집하는 스크립트 작성(OOM Killed 상황부터 구현 시작) - 완료
- 두레이 태스크로 등록
- Redis 센티널 설치 -> 마스터 다운, 복제 지연 등 상황 재현 -> 로그 수집 스크립트 작성
4번부터 계속
두레이 태스크 등록을 위해 필요한 정보 정리
사용할 API - 태스크(업무) 등록
POST /project/v1/projects/{project-id}/posts
:프로젝트 내에 업무를 생성
Base URL
민간 클라우드: https://api.dooray.com
두레이 도메인: nhnent.dooray.com
인증 토큰
Authorization: dooray-api {TOKEN} 헤더
- 개인설정 > API > 개인 인증 토큰에서 발급
project-id(태스크를 등록할 프로젝트 ID): 두레이 업무 > '데이터운영팀-2026인턴' 프로젝트 접속시 나타나는 URL 뒷부분 숫자
담당자 organizationMemberId: 메일 주소 아님
GET /common/v1/members/me 를 이용해 토큰 소유자 id 자동 조회 -> 여러 사용자가 각자 토큰으로 실행함을 이용해 담당자가 바뀌어도 유동적으로 실행되도록 함
태스크 제목 형식: [발생 시점 연월일] [hostname] 장애 발생 원인
예시: [2026-02-27] [infa-testsrv-cb801] OOM Kill
본문 내용: 스크립트 output 그대로
시행착오
문제
hcon에서 스크립트를 실행했을 때
GET /project/v1/projects?member=me 로 프로젝트명 검색 -> 프로젝트 id 찾기
=> 이 부분에서 오류 발생
원인
두레이 접속 시 오류가 발생함
[ERROR] 두레이 사전 조회 실패: 두레이 API 오류 (403): {"header":{"resultMessage":"AUTH_FORBIDDEN_ACL_IP_ERROR"}}
세부 원인 파악
curl -H "Authorization: dooray-api 인증토큰" https://api.dooray.com/common/v1/members/me
실행 결과, 아래와 같이 잘 실행되는 것으로 보아 IP ACL 문제는 아님(두레이가 hcon의 IP를 차단하고 있지는 않음)
{"header":{"isSuccessful":true,"resultMessage":"","resultCode":0},"result":{"id":(생략),"nativeName":"","nickname":"","displayMemberId":null}}[
진짜 문제
curl -H "Authorization: dooray-api 인증토큰" \
"https://api.dooray.com/project/v1/projects?member=me&size=100"
실행 결과
{"header":{"resultMessage":"AUTH_FORBIDDEN_ACL_IP_ERROR"}}
=> members/me는 허용되지만, 프로젝트(데이터운영팀-2026인턴) API 자체에 IP ACL이 걸려 있어 hcon에서는 이 프로젝트 API에 접근 불가능함
해결 시도1
두레이 관리자 설정에서 API IP ACL을 변경해야 하지만, 관리자 권한은 없는 상황
어쩔 수 없지만, project-id를 코드에 하드코딩하기
프로젝트 id를 하드코딩했음에도 여전히 문제 지속
= >프로젝트 API 전체에 IP ACL이 걸려 있어 hcon이 프로젝트(데이터운영팀-2026인턴)에 접근하지 못함
해결 시도2
로컬 pc에서만 curl 명령(프로젝트 API에 접근)이 잘 이루어짐을 확인
실행 방법을 다음과 같이 수정
현재 실행 방법:
hcon에서: python3 collect_redis_incident.py irteamsu@infa-testsrv-cb801
변경 후:
로컬에서: python3 collect_redis_incident.py irteamsu@infa-testsrv-cb801 --proxy bjpark00@hcon.nhnent.com
# hcon을 경유해서 cb801 로그 수집 + 로컬에서 두레이 등록
그러나 문제 발생
로컬에서 ProxyJump로 cb801에 직접 접속하는 건 커버로스 인증 때문에 불가능함
최종 해결 방법
두레이 관리자에게 hcon IP ACL 허용 요청이 근본적인 해결책이지만
시간 관계 상 다른 방법으로 진행
1안: hcon에서 로그를 수집해 json 결과 파일을 생성하면, 로컬에서 json 파일을 받아 두레이 등록 진행
2안: SSH 터널링 - 로컬(맥북)에서 포트를 두레이 API로 포워딩해두고 hcon에서는 localhost로 요청을 보내는 방식
1안 단점: 스크립트가 2개로 분리되어 유지보수에 불리
2안 단점: 실행 때마다 터널을 열어야 함
2안으로 최종 결정
실행 구조
맥북: SSH 터널 유지 (hcon 19999 → api.dooray.com:443 포워딩)
hcon에서 localhost:19999로 요청 → 맥북 → api.dooray.com:443으로 전달
- hcon에서 스크립트 실행
- hcon에서 localhost:19999로 두레이 API 요청
- 요청이 맥북 터널 -> api.dooray.com으로 전달됨(IP ACL 우회를 위해 이런 흐름을 취함)
실행 순서1: 맥북에서 터널 열기(닫지 말고 유지)
ssh -N -R 19999:api.dooray.com:443 bjpark00@hcon.nhnent.com
실행 순서2: hcon에서 스크립트 실행
python3 collect_redis_incident.py irteamsu@infa-testsrv-cb801 --tunnel
—tunnel 옵션으로 두레이 API 요청이 맥북 터널을 통해 나가므로 hcon IP ACL을 우회할 수 있음
결과


코드 개선 여지
- 메시지 위 아래에 ===== 지우기, 장애 타임라인에 시각, 태그, 원본 로그, —— 지우기
- 태스크 제목 형식이 현재는 "[발생 시각 연월일] [hostname] 장애 발생 원인"인데, 앞에 장애이력 문구를 추가해서 "[Redis 장애이력] [발생 시각 연월일] [hostname] 장애 발생 원인"으로 바꾸기?
- 등록 시 업무 상태가 '할일’로 표시되는데, 장애 해결이 안된 상황에서 스크립트를 실행하면 두레이 태스크가 '할일’로 뜨고, 다 해결되면 '완료’로 뜨게 바꾸기
참고
업무 상태 추가 부분(진행중, 완료): POST /project/v1/projects/{project-id}/workflows
업무 상태 수정: PUT /project/v1/projects/{project-id}/workflows/{workflow-id}
업무 상태를 완료로 변경: POST /project/v1/projects/{project-id}/posts/{post-id}/set-done - cb801에서 —tunnel 옵션으로 로컬 실행 시 두레이 API 호출 실패하는 문제 해결 필요
[ERROR] 두레이 사전 조회 실패: 두레이 API 호출 실패: <urlopen error [Errno 111] Connection refused> - config파일 만들어 민감정보 따로 저장(인증토큰 등)
고도화 아이디어
- 두레이 태스크 중복 등록 방지 (같은 장애를 두 번 실행했을 때 기존 태스크 업데이트)
- —no-dooray 옵션 추가 (타임라인만 출력하고 등록은 생략)
고안하고 보니 가치가 낮아 보이는 아이디어
- 담당자가 접근 가능한 프로젝트 목록을 보고 (GET /project/v1/projects)
프로젝트 상태가 active, 접근범위가 private인 프로젝트에만 태스크 생성 (POST /project/v1/projects/{project-id}/posts) - 만약 private인 프로젝트가 없다면 프로젝트를 생성할 수 있는지 확인 (POST /project/v1/projects/is-creatable) -> 프로젝트 생성 (POST /project/v1/projects)
'인턴' 카테고리의 다른 글
| [장애 이력 자동 작성 도구7] Redis 디스크 full 장애 상황 연출 및 deprecated 이유 (0) | 2026.03.10 |
|---|---|
| [장애 이력 자동 작성 도구6] 로그 수집 & 두레이 등록 스크립트 코드 개선 (0) | 2026.03.06 |
| [장애 이력 자동 작성 도구4] 로그 수집 스크립트 작성(OOM Killed 상황) (0) | 2026.03.05 |
| [스터디3] MySQL 스터디 발표자료 최종 (0) | 2026.03.04 |
| [스터디3] MySQL 스터디 발표 질문대비 (0) | 2026.03.04 |